1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#ifndef __LINUX_EXTCON_H__
19#define __LINUX_EXTCON_H__
20
21#include <linux/device.h>
22
23
24
25
26#define EXTCON_TYPE_USB BIT(0)
27#define EXTCON_TYPE_CHG BIT(1)
28#define EXTCON_TYPE_JACK BIT(2)
29#define EXTCON_TYPE_DISP BIT(3)
30#define EXTCON_TYPE_MISC BIT(4)
31
32
33
34
35#define EXTCON_NONE 0
36
37
38#define EXTCON_USB 1
39#define EXTCON_USB_HOST 2
40
41
42
43
44
45
46
47
48
49
50
51
52
53#define EXTCON_CHG_USB_SDP 5
54#define EXTCON_CHG_USB_DCP 6
55#define EXTCON_CHG_USB_CDP 7
56#define EXTCON_CHG_USB_ACA 8
57#define EXTCON_CHG_USB_FAST 9
58#define EXTCON_CHG_USB_SLOW 10
59#define EXTCON_CHG_WPT 11
60#define EXTCON_CHG_USB_PD 12
61
62
63#define EXTCON_JACK_MICROPHONE 20
64#define EXTCON_JACK_HEADPHONE 21
65#define EXTCON_JACK_LINE_IN 22
66#define EXTCON_JACK_LINE_OUT 23
67#define EXTCON_JACK_VIDEO_IN 24
68#define EXTCON_JACK_VIDEO_OUT 25
69#define EXTCON_JACK_SPDIF_IN 26
70#define EXTCON_JACK_SPDIF_OUT 27
71
72
73#define EXTCON_DISP_HDMI 40
74#define EXTCON_DISP_MHL 41
75#define EXTCON_DISP_DVI 42
76#define EXTCON_DISP_VGA 43
77#define EXTCON_DISP_DP 44
78#define EXTCON_DISP_HMD 45
79
80
81#define EXTCON_DOCK 60
82#define EXTCON_JIG 61
83#define EXTCON_MECHANICAL 62
84
85#define EXTCON_NUM 63
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#define EXTCON_PROP_USB_VBUS 0
123#define EXTCON_PROP_USB_TYPEC_POLARITY 1
124#define EXTCON_PROP_USB_SS 2
125
126#define EXTCON_PROP_USB_MIN 0
127#define EXTCON_PROP_USB_MAX 2
128#define EXTCON_PROP_USB_CNT (EXTCON_PROP_USB_MAX - EXTCON_PROP_USB_MIN + 1)
129
130
131#define EXTCON_PROP_CHG_MIN 50
132#define EXTCON_PROP_CHG_MAX 50
133#define EXTCON_PROP_CHG_CNT (EXTCON_PROP_CHG_MAX - EXTCON_PROP_CHG_MIN + 1)
134
135
136#define EXTCON_PROP_JACK_MIN 100
137#define EXTCON_PROP_JACK_MAX 100
138#define EXTCON_PROP_JACK_CNT (EXTCON_PROP_JACK_MAX - EXTCON_PROP_JACK_MIN + 1)
139
140
141
142
143
144
145
146
147
148
149#define EXTCON_PROP_DISP_HPD 150
150
151
152#define EXTCON_PROP_DISP_MIN 150
153#define EXTCON_PROP_DISP_MAX 151
154#define EXTCON_PROP_DISP_CNT (EXTCON_PROP_DISP_MAX - EXTCON_PROP_DISP_MIN + 1)
155
156
157
158
159
160
161
162union extcon_property_value {
163 int intval;
164};
165
166struct extcon_dev;
167
168#if IS_ENABLED(CONFIG_EXTCON)
169
170
171
172
173extern int extcon_get_state(struct extcon_dev *edev, unsigned int id);
174
175
176
177
178
179
180
181
182
183
184extern int extcon_get_property(struct extcon_dev *edev, unsigned int id,
185 unsigned int prop,
186 union extcon_property_value *prop_val);
187extern int extcon_get_property_capability(struct extcon_dev *edev,
188 unsigned int id, unsigned int prop);
189
190
191
192
193
194
195
196
197
198
199extern int extcon_register_notifier(struct extcon_dev *edev, unsigned int id,
200 struct notifier_block *nb);
201extern int extcon_unregister_notifier(struct extcon_dev *edev, unsigned int id,
202 struct notifier_block *nb);
203extern int devm_extcon_register_notifier(struct device *dev,
204 struct extcon_dev *edev, unsigned int id,
205 struct notifier_block *nb);
206extern void devm_extcon_unregister_notifier(struct device *dev,
207 struct extcon_dev *edev, unsigned int id,
208 struct notifier_block *nb);
209
210extern int extcon_register_notifier_all(struct extcon_dev *edev,
211 struct notifier_block *nb);
212extern int extcon_unregister_notifier_all(struct extcon_dev *edev,
213 struct notifier_block *nb);
214extern int devm_extcon_register_notifier_all(struct device *dev,
215 struct extcon_dev *edev,
216 struct notifier_block *nb);
217extern void devm_extcon_unregister_notifier_all(struct device *dev,
218 struct extcon_dev *edev,
219 struct notifier_block *nb);
220
221
222
223
224extern struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name);
225extern struct extcon_dev *extcon_find_edev_by_node(struct device_node *node);
226extern struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev,
227 int index);
228
229
230extern const char *extcon_get_edev_name(struct extcon_dev *edev);
231
232#else
233static inline int extcon_get_state(struct extcon_dev *edev, unsigned int id)
234{
235 return 0;
236}
237
238static inline int extcon_get_property(struct extcon_dev *edev, unsigned int id,
239 unsigned int prop,
240 union extcon_property_value *prop_val)
241{
242 return 0;
243}
244
245static inline int extcon_get_property_capability(struct extcon_dev *edev,
246 unsigned int id, unsigned int prop)
247{
248 return 0;
249}
250
251static inline int extcon_register_notifier(struct extcon_dev *edev,
252 unsigned int id, struct notifier_block *nb)
253{
254 return 0;
255}
256
257static inline int extcon_unregister_notifier(struct extcon_dev *edev,
258 unsigned int id, struct notifier_block *nb)
259{
260 return 0;
261}
262
263static inline int devm_extcon_register_notifier(struct device *dev,
264 struct extcon_dev *edev, unsigned int id,
265 struct notifier_block *nb)
266{
267 return -ENOSYS;
268}
269
270static inline void devm_extcon_unregister_notifier(struct device *dev,
271 struct extcon_dev *edev, unsigned int id,
272 struct notifier_block *nb) { }
273
274static inline struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name)
275{
276 return ERR_PTR(-ENODEV);
277}
278
279static inline struct extcon_dev *extcon_find_edev_by_node(struct device_node *node)
280{
281 return ERR_PTR(-ENODEV);
282}
283
284static inline struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev,
285 int index)
286{
287 return ERR_PTR(-ENODEV);
288}
289#endif
290
291
292
293
294
295struct extcon_specific_cable_nb {
296 struct notifier_block *user_nb;
297 int cable_index;
298 struct extcon_dev *edev;
299 unsigned long previous_value;
300};
301
302static inline int extcon_register_interest(struct extcon_specific_cable_nb *obj,
303 const char *extcon_name, const char *cable_name,
304 struct notifier_block *nb)
305{
306 return -EINVAL;
307}
308
309static inline int extcon_unregister_interest(struct extcon_specific_cable_nb *obj)
310{
311 return -EINVAL;
312}
313#endif
314