aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/extcon/extcon-axp288.c
diff options
context:
space:
mode:
authorChanwoo Choi <cw00.choi@samsung.com>2015-04-24 06:16:05 -0400
committerChanwoo Choi <cw00.choi@samsung.com>2015-05-22 05:58:44 -0400
commit2a9de9c0f08d61fbe3764a21d22d0b72df97d6ae (patch)
treeabad4db6fcab2a64850e6874856b1d81608bd4bc /drivers/extcon/extcon-axp288.c
parent35eed7a0768886e2f66db3cdbf3faf6435275e6b (diff)
extcon: Use the unique id for external connector instead of string
This patch uses the unique id to identify the type of external connector instead of string name. The string name have the many potential issues. So, this patch defines the 'extcon' enumeration which includes all supported external connector on EXTCON subsystem. If new external connector is necessary, the unique id of new connector have to be added in 'extcon' enumeration. There are current supported external connector in 'enum extcon' as following: enum extcon { EXTCON_NONE = 0x0, /* USB external connector */ EXTCON_USB = 0x1, EXTCON_USB_HOST = 0x2, /* Charger external connector */ EXTCON_TA = 0x10, EXTCON_FAST_CHARGER = 0x11, EXTCON_SLOW_CHARGER = 0x12, EXTCON_CHARGE_DOWNSTREAM = 0x13, /* Audio and video external connector */ EXTCON_LINE_IN = 0x20, EXTCON_LINE_OUT = 0x21, EXTCON_MICROPHONE = 0x22, EXTCON_HEADPHONE = 0x23, EXTCON_HDMI = 0x30, EXTCON_MHL = 0x31, EXTCON_DVI = 0x32, EXTCON_VGA = 0x33, EXTCON_SPDIF_IN = 0x34, EXTCON_SPDIF_OUT = 0x35, EXTCON_VIDEO_IN = 0x36, EXTCON_VIDEO_OUT = 0x37, /* Miscellaneous external connector */ EXTCON_DOCK = 0x50, EXTCON_JIG = 0x51, EXTCON_MECHANICAL = 0x52, EXTCON_END, }; For example in extcon-arizona.c: To use unique id removes the potential issue about handling the inconsistent name of external connector with string. - Previously, use the string to register the type of arizona jack connector static const char *arizona_cable[] = { "Mechanical", "Microphone", "Headphone", "Line-out", }; - Newly, use the unique id to register the type of arizona jack connector static const enum extcon arizona_cable[] = { EXTCON_MECHANICAL, EXTCON_MICROPHONE, EXTCON_HEADPHONE, EXTCON_LINE_OUT, EXTCON_NONE, }; And this patch modify the prototype of extcon_{get|set}_cable_state_() which uses the 'enum extcon id' instead of 'cable_index'. Because although one more extcon drivers support USB cable, each extcon driver might has the differnt 'cable_index' for USB cable. All extcon drivers can use the unique id number for same external connector with modified extcon_{get|set}_cable_state_(). - Previously, use 'cable_index' on these functions: extcon_get_cable_state_(struct extcon_dev*, int cable_index) extcon_set_cable_state_(struct extcon_dev*, int cable_index, bool state) -Newly, use 'enum extcon id' on these functions: extcon_get_cable_state_(struct extcon_dev*, enum extcon id) extcon_set_cable_state_(struct extcon_dev*, enum extcon id, bool state) Cc: Arnd Bergmann <arnd@arndb.de> Cc: Felipe Balbi <balbi@ti.com> Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com> Acked-by: Roger Quadros <rogerq@ti.com> Acked-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Acked-by: Ramakrishna Pallala <ramakrishna.pallala@intel.com> Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> [arnd: Report the build break about drivers/usb/phy/phy-tahvo.c after using the unique id for external connector insteadf of string] Reported-by: Arnd Bergmann <arnd@arndb.de> [dan.carpenter: Report the build warning of extcon_{set|get}_cable_state_()] Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Diffstat (limited to 'drivers/extcon/extcon-axp288.c')
-rw-r--r--drivers/extcon/extcon-axp288.c24
1 files changed, 10 insertions, 14 deletions
diff --git a/drivers/extcon/extcon-axp288.c b/drivers/extcon/extcon-axp288.c
index 8299adb9b676..3605aa96c25a 100644
--- a/drivers/extcon/extcon-axp288.c
+++ b/drivers/extcon/extcon-axp288.c
@@ -77,10 +77,6 @@
77/* IRQ enable-6 register */ 77/* IRQ enable-6 register */
78#define BC12_IRQ_CFG_MASK BIT(1) 78#define BC12_IRQ_CFG_MASK BIT(1)
79 79
80#define AXP288_EXTCON_SLOW_CHARGER "SLOW-CHARGER"
81#define AXP288_EXTCON_DOWNSTREAM_CHARGER "CHARGE-DOWNSTREAM"
82#define AXP288_EXTCON_FAST_CHARGER "FAST-CHARGER"
83
84enum axp288_extcon_reg { 80enum axp288_extcon_reg {
85 AXP288_PS_STAT_REG = 0x00, 81 AXP288_PS_STAT_REG = 0x00,
86 AXP288_PS_BOOT_REASON_REG = 0x02, 82 AXP288_PS_BOOT_REASON_REG = 0x02,
@@ -105,11 +101,11 @@ enum axp288_extcon_irq {
105 EXTCON_IRQ_END, 101 EXTCON_IRQ_END,
106}; 102};
107 103
108static const char *axp288_extcon_cables[] = { 104static const enum extcon axp288_extcon_cables[] = {
109 AXP288_EXTCON_SLOW_CHARGER, 105 EXTCON_SLOW_CHARGER,
110 AXP288_EXTCON_DOWNSTREAM_CHARGER, 106 EXTCON_CHARGE_DOWNSTREAM,
111 AXP288_EXTCON_FAST_CHARGER, 107 EXTCON_FAST_CHARGER,
112 NULL, 108 EXTCON_NONE,
113}; 109};
114 110
115struct axp288_extcon_info { 111struct axp288_extcon_info {
@@ -161,7 +157,7 @@ static void axp288_extcon_log_rsi(struct axp288_extcon_info *info)
161static int axp288_handle_chrg_det_event(struct axp288_extcon_info *info) 157static int axp288_handle_chrg_det_event(struct axp288_extcon_info *info)
162{ 158{
163 static bool notify_otg, notify_charger; 159 static bool notify_otg, notify_charger;
164 static char *cable; 160 static enum extcon cable;
165 int ret, stat, cfg, pwr_stat; 161 int ret, stat, cfg, pwr_stat;
166 u8 chrg_type; 162 u8 chrg_type;
167 bool vbus_attach = false; 163 bool vbus_attach = false;
@@ -196,18 +192,18 @@ static int axp288_handle_chrg_det_event(struct axp288_extcon_info *info)
196 dev_dbg(info->dev, "sdp cable is connecetd\n"); 192 dev_dbg(info->dev, "sdp cable is connecetd\n");
197 notify_otg = true; 193 notify_otg = true;
198 notify_charger = true; 194 notify_charger = true;
199 cable = AXP288_EXTCON_SLOW_CHARGER; 195 cable = EXTCON_SLOW_CHARGER;
200 break; 196 break;
201 case DET_STAT_CDP: 197 case DET_STAT_CDP:
202 dev_dbg(info->dev, "cdp cable is connecetd\n"); 198 dev_dbg(info->dev, "cdp cable is connecetd\n");
203 notify_otg = true; 199 notify_otg = true;
204 notify_charger = true; 200 notify_charger = true;
205 cable = AXP288_EXTCON_DOWNSTREAM_CHARGER; 201 cable = EXTCON_CHARGE_DOWNSTREAM;
206 break; 202 break;
207 case DET_STAT_DCP: 203 case DET_STAT_DCP:
208 dev_dbg(info->dev, "dcp cable is connecetd\n"); 204 dev_dbg(info->dev, "dcp cable is connecetd\n");
209 notify_charger = true; 205 notify_charger = true;
210 cable = AXP288_EXTCON_FAST_CHARGER; 206 cable = EXTCON_FAST_CHARGER;
211 break; 207 break;
212 default: 208 default:
213 dev_warn(info->dev, 209 dev_warn(info->dev,
@@ -230,7 +226,7 @@ notify_otg:
230 } 226 }
231 227
232 if (notify_charger) 228 if (notify_charger)
233 extcon_set_cable_state(info->edev, cable, vbus_attach); 229 extcon_set_cable_state_(info->edev, cable, vbus_attach);
234 230
235 /* Clear the flags on disconnect event */ 231 /* Clear the flags on disconnect event */
236 if (!vbus_attach) 232 if (!vbus_attach)