aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/extcon
diff options
context:
space:
mode:
authorChanwoo Choi <cw00.choi@samsung.com>2016-07-11 03:34:52 -0400
committerChanwoo Choi <cw00.choi@samsung.com>2016-08-07 22:17:20 -0400
commit55e4e2f129c6664c14166a30f4e0e933ebb61d9b (patch)
treeeb55520c120255375921cf39749520442e651d51 /drivers/extcon
parent2c8116a1110a93f298b10339d773fb055a0c04d7 (diff)
extcon: Add the extcon_type to gather each connector into five category
This patch adds the new extcon type to group the each connecotr into following five category. This type would be used to handle the connectors as a group unit instead of a connector unit. - EXTCON_TYPE_USB : USB connector - EXTCON_TYPE_CHG : Charger connector - EXTCON_TYPE_JACK : Jack connector - EXTCON_TYPE_DISP : Display connector - EXTCON_TYPE_MISC : Miscellaneous connector Also, each external connector is possible to belong to one more extcon type. In caes of EXTCON_CHG_USB_SDP, it have the EXTCON_TYPE_CHG and EXTCON_TYPE_USB. Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com> Tested-by: Chris Zhong <zyw@rock-chips.com> Tested-by: Guenter Roeck <groeck@chromium.org> Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com> Reviewed-by: Guenter Roeck <groeck@chromium.org>
Diffstat (limited to 'drivers/extcon')
-rw-r--r--drivers/extcon/extcon.c159
1 files changed, 130 insertions, 29 deletions
diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c
index 9a266e5c7e10..f209a6959fed 100644
--- a/drivers/extcon/extcon.c
+++ b/drivers/extcon/extcon.c
@@ -38,43 +38,144 @@
38#define SUPPORTED_CABLE_MAX 32 38#define SUPPORTED_CABLE_MAX 32
39#define CABLE_NAME_MAX 30 39#define CABLE_NAME_MAX 30
40 40
41static const char *extcon_name[] = { 41struct __extcon_info {
42 [EXTCON_NONE] = "NONE", 42 unsigned int type;
43 unsigned int id;
44 const char *name;
45
46} extcon_info[] = {
47 [EXTCON_NONE] = {
48 .type = EXTCON_TYPE_MISC,
49 .id = EXTCON_NONE,
50 .name = "NONE",
51 },
43 52
44 /* USB external connector */ 53 /* USB external connector */
45 [EXTCON_USB] = "USB", 54 [EXTCON_USB] = {
46 [EXTCON_USB_HOST] = "USB-HOST", 55 .type = EXTCON_TYPE_USB,
56 .id = EXTCON_USB,
57 .name = "USB",
58 },
59 [EXTCON_USB_HOST] = {
60 .type = EXTCON_TYPE_USB,
61 .id = EXTCON_USB_HOST,
62 .name = "USB_HOST",
63 },
47 64
48 /* Charging external connector */ 65 /* Charging external connector */
49 [EXTCON_CHG_USB_SDP] = "SDP", 66 [EXTCON_CHG_USB_SDP] = {
50 [EXTCON_CHG_USB_DCP] = "DCP", 67 .type = EXTCON_TYPE_CHG | EXTCON_TYPE_USB,
51 [EXTCON_CHG_USB_CDP] = "CDP", 68 .id = EXTCON_CHG_USB_SDP,
52 [EXTCON_CHG_USB_ACA] = "ACA", 69 .name = "SDP",
53 [EXTCON_CHG_USB_FAST] = "FAST-CHARGER", 70 },
54 [EXTCON_CHG_USB_SLOW] = "SLOW-CHARGER", 71 [EXTCON_CHG_USB_DCP] = {
72 .type = EXTCON_TYPE_CHG | EXTCON_TYPE_USB,
73 .id = EXTCON_CHG_USB_DCP,
74 .name = "DCP",
75 },
76 [EXTCON_CHG_USB_CDP] = {
77 .type = EXTCON_TYPE_CHG | EXTCON_TYPE_USB,
78 .id = EXTCON_CHG_USB_CDP,
79 .name = "CDP",
80 },
81 [EXTCON_CHG_USB_ACA] = {
82 .type = EXTCON_TYPE_CHG | EXTCON_TYPE_USB,
83 .id = EXTCON_CHG_USB_ACA,
84 .name = "ACA",
85 },
86 [EXTCON_CHG_USB_FAST] = {
87 .type = EXTCON_TYPE_CHG | EXTCON_TYPE_USB,
88 .id = EXTCON_CHG_USB_FAST,
89 .name = "FAST-CHARGER",
90 },
91 [EXTCON_CHG_USB_SLOW] = {
92 .type = EXTCON_TYPE_CHG | EXTCON_TYPE_USB,
93 .id = EXTCON_CHG_USB_SLOW,
94 .name = "SLOW-CHARGER",
95 },
55 96
56 /* Jack external connector */ 97 /* Jack external connector */
57 [EXTCON_JACK_MICROPHONE] = "MICROPHONE", 98 [EXTCON_JACK_MICROPHONE] = {
58 [EXTCON_JACK_HEADPHONE] = "HEADPHONE", 99 .type = EXTCON_TYPE_JACK,
59 [EXTCON_JACK_LINE_IN] = "LINE-IN", 100 .id = EXTCON_JACK_MICROPHONE,
60 [EXTCON_JACK_LINE_OUT] = "LINE-OUT", 101 .name = "MICROPHONE",
61 [EXTCON_JACK_VIDEO_IN] = "VIDEO-IN", 102 },
62 [EXTCON_JACK_VIDEO_OUT] = "VIDEO-OUT", 103 [EXTCON_JACK_HEADPHONE] = {
63 [EXTCON_JACK_SPDIF_IN] = "SPDIF-IN", 104 .type = EXTCON_TYPE_JACK,
64 [EXTCON_JACK_SPDIF_OUT] = "SPDIF-OUT", 105 .id = EXTCON_JACK_HEADPHONE,
106 .name = "HEADPHONE",
107 },
108 [EXTCON_JACK_LINE_IN] = {
109 .type = EXTCON_TYPE_JACK,
110 .id = EXTCON_JACK_LINE_IN,
111 .name = "LINE-IN",
112 },
113 [EXTCON_JACK_LINE_OUT] = {
114 .type = EXTCON_TYPE_JACK,
115 .id = EXTCON_JACK_LINE_OUT,
116 .name = "LINE-OUT",
117 },
118 [EXTCON_JACK_VIDEO_IN] = {
119 .type = EXTCON_TYPE_JACK,
120 .id = EXTCON_JACK_VIDEO_IN,
121 .name = "VIDEO-IN",
122 },
123 [EXTCON_JACK_VIDEO_OUT] = {
124 .type = EXTCON_TYPE_JACK,
125 .id = EXTCON_JACK_VIDEO_OUT,
126 .name = "VIDEO-OUT",
127 },
128 [EXTCON_JACK_SPDIF_IN] = {
129 .type = EXTCON_TYPE_JACK,
130 .id = EXTCON_JACK_SPDIF_IN,
131 .name = "SPDIF-IN",
132 },
133 [EXTCON_JACK_SPDIF_OUT] = {
134 .type = EXTCON_TYPE_JACK,
135 .id = EXTCON_JACK_SPDIF_OUT,
136 .name = "SPDIF-OUT",
137 },
65 138
66 /* Display external connector */ 139 /* Display external connector */
67 [EXTCON_DISP_HDMI] = "HDMI", 140 [EXTCON_DISP_HDMI] = {
68 [EXTCON_DISP_MHL] = "MHL", 141 .type = EXTCON_TYPE_DISP,
69 [EXTCON_DISP_DVI] = "DVI", 142 .id = EXTCON_DISP_HDMI,
70 [EXTCON_DISP_VGA] = "VGA", 143 .name = "HDMI",
144 },
145 [EXTCON_DISP_MHL] = {
146 .type = EXTCON_TYPE_DISP,
147 .id = EXTCON_DISP_MHL,
148 .name = "MHL",
149 },
150 [EXTCON_DISP_DVI] = {
151 .type = EXTCON_TYPE_DISP,
152 .id = EXTCON_DISP_DVI,
153 .name = "DVI",
154 },
155 [EXTCON_DISP_VGA] = {
156 .type = EXTCON_TYPE_DISP,
157 .id = EXTCON_DISP_VGA,
158 .name = "VGA",
159 },
71 160
72 /* Miscellaneous external connector */ 161 /* Miscellaneous external connector */
73 [EXTCON_DOCK] = "DOCK", 162 [EXTCON_DOCK] = {
74 [EXTCON_JIG] = "JIG", 163 .type = EXTCON_TYPE_MISC,
75 [EXTCON_MECHANICAL] = "MECHANICAL", 164 .id = EXTCON_DOCK,
76 165 .name = "DOCK",
77 NULL, 166 },
167 [EXTCON_JIG] = {
168 .type = EXTCON_TYPE_MISC,
169 .id = EXTCON_JIG,
170 .name = "JIG",
171 },
172 [EXTCON_MECHANICAL] = {
173 .type = EXTCON_TYPE_MISC,
174 .id = EXTCON_MECHANICAL,
175 .name = "MECHANICAL",
176 },
177
178 { /* sentinel */ }
78}; 179};
79 180
80/** 181/**
@@ -168,7 +269,7 @@ static ssize_t state_show(struct device *dev, struct device_attribute *attr,
168 269
169 for (i = 0; i < edev->max_supported; i++) { 270 for (i = 0; i < edev->max_supported; i++) {
170 count += sprintf(buf + count, "%s=%d\n", 271 count += sprintf(buf + count, "%s=%d\n",
171 extcon_name[edev->supported_cable[i]], 272 extcon_info[edev->supported_cable[i]].name,
172 !!(edev->state & (1 << i))); 273 !!(edev->state & (1 << i)));
173 } 274 }
174 275
@@ -193,7 +294,7 @@ static ssize_t cable_name_show(struct device *dev,
193 int i = cable->cable_index; 294 int i = cable->cable_index;
194 295
195 return sprintf(buf, "%s\n", 296 return sprintf(buf, "%s\n",
196 extcon_name[cable->edev->supported_cable[i]]); 297 extcon_info[cable->edev->supported_cable[i]].name);
197} 298}
198 299
199static ssize_t cable_state_show(struct device *dev, 300static ssize_t cable_state_show(struct device *dev,