aboutsummaryrefslogtreecommitdiff
path: root/include/linux/usb/cable_detect.h
blob: 51264f4f91c3ed378ecaf6f547d641bb6792a224 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#ifndef _CABLE_DETECT_H_
#define _CABLE_DETECT_H_
#include <linux/usb/board.h>

#define DOCK_STATE_UNDEFINED				-1
#define DOCK_STATE_UNDOCKED				0
#define DOCK_STATE_DESK					(1 << 0)
#define DOCK_STATE_CAR						(1 << 1)
#define DOCK_STATE_USB_HEADSET			(1 << 2)
#define DOCK_STATE_MHL						(1 << 3)
#define DOCK_STATE_USB_HOST				(1 << 4)
#define DOCK_STATE_DMB						(1 << 5)
#define DOCK_STATE_AUDIO_DOCK				(1 << 6)
#define DOCK_STATE_THREE_POGO_DOCK		(1 << 7)

#define DOCK_DET_DELAY		HZ/4
#ifdef CONFIG_MACH_TC2
__maybe_unused static int htc_cable_detect_retry_times = 5;
#define ADC_RETRY htc_cable_detect_retry_times
#else
__maybe_unused static int htc_cable_detect_retry_times = 3;
#define ADC_RETRY htc_cable_detect_retry_times
#endif
#define ADC_DELAY HZ/8

#define PM8058ADC_15BIT(adc) ((adc * 2200) / 32767) /* vref=2.2v, 15-bits resolution */

#define CABLE_ERR(fmt, args...) \
	printk(KERN_ERR "[CABLE:ERR] " fmt, ## args)
#define CABLE_WARNING(fmt, args...) \
	printk(KERN_WARNING "[CABLE] " fmt, ## args)
/*++ 2014/04/18, USB Team, now uart log doesn't output INFO level log PCN00003 ++*/
#define CABLE_INFO(fmt, args...) \
	printk(KERN_WARNING "[CABLE] " fmt, ## args)
/*-- 2014/04/18, USB Team,  PCN00003 --*/
#define CABLE_DEBUG(fmt, args...) \
	printk(KERN_DEBUG "[CABLE] " fmt, ## args)

enum accessory_type {
	CABLE_TYPE_UNKOWN = 0,
	CABLE_TYPE_ID_PIN,
	CABLE_TYPE_PMIC_ADC,
};

enum usb_id_pin_type {
	CABLE_TYPE_APP_GPIO = 0,
	CABLE_TYPE_PMIC_GPIO,
};

enum dpdn_path_type {
	PATH_USB = 0,
	PATH_MHL,
	PATH_USB_AUD,
	PATH_UART,
};

#if 0
static struct switch_dev dock_switch = {
	.name = "dock",
};
#endif

struct usb_id_mpp_config_data {
	u32 usbid_mpp;
	u32 usbid_amux;
};

struct cable_detect_platform_data {
	int vbus_mpp_gpio;
	int vbus_mpp_irq;
	void (*vbus_mpp_config)(void);
	/* 1 : uart, 0 : usb */
	void (*usb_uart_switch)(int);
	void (*usb_dpdn_switch)(int);

	int ad_en_active_state;
	int ad_en_gpio;
	int ad_en_irq;
	/* for accessory detection */
	u8 accessory_type;
	u8 mfg_usb_carkit_enable;
	int usb_id_pin_type;
/*++ 2014/06/05, USB Team, PCN00018 ++*/
	int (*usb_id_pin_gpio)(void);
/*-- 2014/06/05, USB Team, PCN00018 --*/
	__u8 detect_type;

#ifdef CONFIG_HTC_MHL_DETECTION
	void (*switch_to_d3)(void);
	void (*mhl_disable_irq)(void);
	void (*mhl_wakeup)(void);
	int (*mhl_detect_register_notifier)(struct t_mhl_status_notifier *notifier);
#endif
	u8 mhl_reset_gpio;
	bool mhl_version_ctrl_flag;
	struct usb_id_mpp_config_data mpp_data;
	void (*config_usb_id_gpios)(bool enable);
	void (*mhl_1v2_power)(bool enable);
	int (*is_wireless_charger)(void);
	int64_t (*get_adc_cb)(void);

	int ac_9v_gpio;
	void (*configure_ac_9v_gpio) (int);
	u8 mhl_internal_3v3;

#ifdef CONFIG_CABLE_DETECT_GPIO_DOCK
	bool dock_detect;
	int dock_pin_gpio;
#endif
	int idpin_irq;
	int carkit_only;
	int (*detect_three_pogo_dock)(void);
	int enable_vbus_usb_switch;
	int (*is_pwr_src_plugged_in)(void);
	int vbus_debounce_retry;
};

/* -----------------------------------------------------------------------------
»       »       »       External routine declaration
-----------------------------------------------------------------------------*/
#ifdef CONFIG_FB_MSM_MDSS_HDMI_MHL_SII9234
extern void sii9234_mhl_device_wakeup(void);
#endif
extern int cable_get_connect_type(void);
extern void set_mfg_usb_carkit_enable(int enable);
extern int cable_get_accessory_type(void);
extern int cable_get_usb_id_level(void);
extern void cable_set_uart_switch(int);
extern irqreturn_t cable_detection_vbus_irq_handler(void);
extern int check_three_pogo_dock(void);
#endif