Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934799AbbEOP56 (ORCPT ); Fri, 15 May 2015 11:57:58 -0400 Received: from mga14.intel.com ([192.55.52.115]:25209 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753478AbbEOP5y convert rfc822-to-8bit (ORCPT ); Fri, 15 May 2015 11:57:54 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,434,1427785200"; d="scan'208";a="695430521" From: "Pallala, Ramakrishna" To: Chanwoo Choi , "linux-kernel@vger.kernel.org" CC: "myungjoo.ham@samsung.com" , "k.kozlowski@samsung.com" , "ckeepax@opensource.wolfsonmicro.com" , "gg@slimlogic.co.uk" , "kishon@ti.com" , "jaewon02.kim@samsung.com" , "rogerq@ti.com" , "george.cherian@ti.com" , "balbi@ti.com" , "aaro.koskinen@iki.fi" Subject: RE: [PATCH 1/2] extcon: Use the unique id for external connector instead of string Thread-Topic: [PATCH 1/2] extcon: Use the unique id for external connector instead of string Thread-Index: AQHQjxvTQBYFx0FgiUO8miYrUnCkqZ19MJkQ Date: Fri, 15 May 2015 15:57:46 +0000 Message-ID: References: <1431700278-30465-1-git-send-email-cw00.choi@samsung.com> <1431700278-30465-2-git-send-email-cw00.choi@samsung.com> In-Reply-To: <1431700278-30465-2-git-send-email-cw00.choi@samsung.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.223.10.10] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 54976 Lines: 1699 > 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, /* NONE */ > > /* USB external connector */ > EXTCON_USB = 0x1, /* USB */ > EXTCON_USB_HOST = 0x2, /* USB-HOST */ > > /* Charger external connector */ > EXTCON_TA = 0x10, /* TA */ > EXTCON_FAST_CHARGER = 0x11, /* FAST-CHARGER */ > EXTCON_SLOW_CHARGER = 0x12, /* SLOW-CHARGER */ > EXTCON_CHARGE_DOWNSTREAM= 0x13, /* CHARGE- > DOWNSTREAM */ > > /* Audio and video external connector */ > EXTCON_LINE_IN = 0x20, /* LINE-IN */ > EXTCON_LINE_OUT = 0x21, /* LINE-OUT */ > EXTCON_MICROPHONE = 0x22, /* MICROPHONE */ > EXTCON_HEADPHONE = 0x23, /* HEADPHONE */ > > EXTCON_HDMI = 0x30, /* HDMI */ > EXTCON_MHL = 0x31, /* MHL */ > EXTCON_DVI = 0x32, /* DVI */ > EXTCON_VGA = 0x33, /* VGA */ > EXTCON_SPDIF_IN = 0x34, /* SPDIF-IN */ > EXTCON_SPDIF_OUT = 0x35, /* SPDIF-OUT */ > EXTCON_VIDEO_IN = 0x36, /* VIDEO-IN */ > EXTCON_VIDEO_OUT = 0x37, /* VIDEO-OUT */ > > /* Miscellaneous external connector */ > EXTCON_DOCK = 0x50, /* DOCK */ > EXTCON_JIG = 0x51, /* JIG */ > EXTCON_MECHANICAL = 0x52, /* MECHANICAL */ > > __EXTCON_END, > }; > > For exmaple in extcon-arizoan.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) > > Signed-off-by: Chanwoo Choi > Cc: MyungJoo Ham > Cc: Krzysztof Kozlowski > Cc: Charles Keepax > Cc: Graeme Gregory > Cc: Kishon Vijay Abraham I > Cc: Jaewon Kim > Cc: Roger Quadros > Cc: Ramakrishna Pallala For drivers/extcon/extcon-axp288.c Acked-by: Ramakrishna Pallala Thanks, Ram > --- > drivers/extcon/extcon-arizona.c | 38 +++----- > drivers/extcon/extcon-axp288.c | 24 ++--- > drivers/extcon/extcon-max14577.c | 45 ++++----- > drivers/extcon/extcon-max77693.c | 95 +++++++++---------- > drivers/extcon/extcon-max77843.c | 56 +++++------ > drivers/extcon/extcon-max8997.c | 59 +++++------- > drivers/extcon/extcon-palmas.c | 22 +++-- > drivers/extcon/extcon-rt8973a.c | 40 +++----- > drivers/extcon/extcon-sm5502.c | 32 ++----- > drivers/extcon/extcon-usb-gpio.c | 32 ++----- > drivers/extcon/extcon.c | 166 ++++++++++++++++++++------------- > include/linux/extcon.h | 92 +++++++++--------- > include/linux/extcon/extcon-adc-jack.h | 5 +- > 13 files changed, 326 insertions(+), 380 deletions(-) > > diff --git a/drivers/extcon/extcon-arizona.c b/drivers/extcon/extcon-arizona.c > index 1ec06b4..9262b45 100644 > --- a/drivers/extcon/extcon-arizona.c > +++ b/drivers/extcon/extcon-arizona.c > @@ -118,17 +118,12 @@ static const int arizona_micd_levels[] = { > 1257, > }; > > -#define ARIZONA_CABLE_MECHANICAL 0 > -#define ARIZONA_CABLE_MICROPHONE 1 > -#define ARIZONA_CABLE_HEADPHONE 2 > -#define ARIZONA_CABLE_LINEOUT 3 > - > -static const char *arizona_cable[] = { > - "Mechanical", > - "Microphone", > - "Headphone", > - "Line-out", > - NULL, > +static const enum extcon arizona_cable[] = { > + EXTCON_MECHANICAL, > + EXTCON_MICROPHONE, > + EXTCON_HEADPHONE, > + EXTCON_LINE_OUT, > + EXTCON_NONE, > }; > > static void arizona_start_hpdet_acc_id(struct arizona_extcon_info *info); > @@ -557,7 +552,7 @@ static irqreturn_t arizona_hpdet_irq(int irq, void *data) > struct arizona_extcon_info *info = data; > struct arizona *arizona = info->arizona; > int id_gpio = arizona->pdata.hpdet_id_gpio; > - int report = ARIZONA_CABLE_HEADPHONE; > + enum extcon report = EXTCON_HEADPHONE; > int ret, reading; > bool mic = false; > > @@ -571,7 +566,7 @@ static irqreturn_t arizona_hpdet_irq(int irq, void *data) > } > > /* If the cable was removed while measuring ignore the result */ > - ret = extcon_get_cable_state_(info->edev, > ARIZONA_CABLE_MECHANICAL); > + ret = extcon_get_cable_state_(info->edev, EXTCON_MECHANICAL); > if (ret < 0) { > dev_err(arizona->dev, "Failed to check cable state: %d\n", > ret); > @@ -602,9 +597,9 @@ static irqreturn_t arizona_hpdet_irq(int irq, void *data) > > /* Report high impedence cables as line outputs */ > if (reading >= 5000) > - report = ARIZONA_CABLE_LINEOUT; > + report = EXTCON_LINE_OUT; > else > - report = ARIZONA_CABLE_HEADPHONE; > + report = EXTCON_HEADPHONE; > > ret = extcon_set_cable_state_(info->edev, report, true); > if (ret != 0) > @@ -689,8 +684,7 @@ err: > ARIZONA_ACCDET_MODE_MASK, > ARIZONA_ACCDET_MODE_MIC); > > /* Just report headphone */ > - ret = extcon_set_cable_state_(info->edev, > - ARIZONA_CABLE_HEADPHONE, true); > + ret = extcon_set_cable_state_(info->edev, EXTCON_HEADPHONE, true); > if (ret != 0) > dev_err(arizona->dev, "Failed to report headphone: %d\n", ret); > > @@ -747,8 +741,7 @@ err: > ARIZONA_ACCDET_MODE_MASK, > ARIZONA_ACCDET_MODE_MIC); > > /* Just report headphone */ > - ret = extcon_set_cable_state_(info->edev, > - ARIZONA_CABLE_HEADPHONE, true); > + ret = extcon_set_cable_state_(info->edev, EXTCON_HEADPHONE, true); > if (ret != 0) > dev_err(arizona->dev, "Failed to report headphone: %d\n", ret); > > @@ -787,7 +780,7 @@ static void arizona_micd_detect(struct work_struct > *work) > mutex_lock(&info->lock); > > /* If the cable was removed while measuring ignore the result */ > - ret = extcon_get_cable_state_(info->edev, > ARIZONA_CABLE_MECHANICAL); > + ret = extcon_get_cable_state_(info->edev, EXTCON_MECHANICAL); > if (ret < 0) { > dev_err(arizona->dev, "Failed to check cable state: %d\n", > ret); > @@ -836,8 +829,7 @@ static void arizona_micd_detect(struct work_struct > *work) > arizona_identify_headphone(info); > > ret = extcon_set_cable_state_(info->edev, > - ARIZONA_CABLE_MICROPHONE, > true); > - > + EXTCON_MICROPHONE, true); > if (ret != 0) > dev_err(arizona->dev, "Headset report failed: %d\n", > ret); > @@ -1028,7 +1020,7 @@ static irqreturn_t arizona_jackdet(int irq, void *data) > if (info->last_jackdet == present) { > dev_dbg(arizona->dev, "Detected jack\n"); > ret = extcon_set_cable_state_(info->edev, > - ARIZONA_CABLE_MECHANICAL, > true); > + EXTCON_MECHANICAL, true); > > if (ret != 0) > dev_err(arizona->dev, "Mechanical report failed: > %d\n", > diff --git a/drivers/extcon/extcon-axp288.c b/drivers/extcon/extcon-axp288.c > index 8299adb..3605aa96 100644 > --- a/drivers/extcon/extcon-axp288.c > +++ b/drivers/extcon/extcon-axp288.c > @@ -77,10 +77,6 @@ > /* IRQ enable-6 register */ > #define BC12_IRQ_CFG_MASK BIT(1) > > -#define AXP288_EXTCON_SLOW_CHARGER "SLOW-CHARGER" > -#define AXP288_EXTCON_DOWNSTREAM_CHARGER "CHARGE- > DOWNSTREAM" > -#define AXP288_EXTCON_FAST_CHARGER "FAST-CHARGER" > - > enum axp288_extcon_reg { > AXP288_PS_STAT_REG = 0x00, > AXP288_PS_BOOT_REASON_REG = 0x02, > @@ -105,11 +101,11 @@ enum axp288_extcon_irq { > EXTCON_IRQ_END, > }; > > -static const char *axp288_extcon_cables[] = { > - AXP288_EXTCON_SLOW_CHARGER, > - AXP288_EXTCON_DOWNSTREAM_CHARGER, > - AXP288_EXTCON_FAST_CHARGER, > - NULL, > +static const enum extcon axp288_extcon_cables[] = { > + EXTCON_SLOW_CHARGER, > + EXTCON_CHARGE_DOWNSTREAM, > + EXTCON_FAST_CHARGER, > + EXTCON_NONE, > }; > > struct axp288_extcon_info { > @@ -161,7 +157,7 @@ static void axp288_extcon_log_rsi(struct > axp288_extcon_info *info) > static int axp288_handle_chrg_det_event(struct axp288_extcon_info *info) > { > static bool notify_otg, notify_charger; > - static char *cable; > + static enum extcon cable; > int ret, stat, cfg, pwr_stat; > u8 chrg_type; > bool vbus_attach = false; > @@ -196,18 +192,18 @@ static int axp288_handle_chrg_det_event(struct > axp288_extcon_info *info) > dev_dbg(info->dev, "sdp cable is connecetd\n"); > notify_otg = true; > notify_charger = true; > - cable = AXP288_EXTCON_SLOW_CHARGER; > + cable = EXTCON_SLOW_CHARGER; > break; > case DET_STAT_CDP: > dev_dbg(info->dev, "cdp cable is connecetd\n"); > notify_otg = true; > notify_charger = true; > - cable = AXP288_EXTCON_DOWNSTREAM_CHARGER; > + cable = EXTCON_CHARGE_DOWNSTREAM; > break; > case DET_STAT_DCP: > dev_dbg(info->dev, "dcp cable is connecetd\n"); > notify_charger = true; > - cable = AXP288_EXTCON_FAST_CHARGER; > + cable = EXTCON_FAST_CHARGER; > break; > default: > dev_warn(info->dev, > @@ -230,7 +226,7 @@ notify_otg: > } > > if (notify_charger) > - extcon_set_cable_state(info->edev, cable, vbus_attach); > + extcon_set_cable_state_(info->edev, cable, vbus_attach); > > /* Clear the flags on disconnect event */ > if (!vbus_attach) > diff --git a/drivers/extcon/extcon-max14577.c b/drivers/extcon/extcon- > max14577.c > index ad8f8dd..e7c3edb 100644 > --- a/drivers/extcon/extcon-max14577.c > +++ b/drivers/extcon/extcon-max14577.c > @@ -148,27 +148,14 @@ enum max14577_muic_acc_type { > MAX14577_MUIC_ADC_OPEN, > }; > > -/* max14577 MUIC device support below list of accessories(external > connector) */ > -enum { > - EXTCON_CABLE_USB = 0, > - EXTCON_CABLE_TA, > - EXTCON_CABLE_FAST_CHARGER, > - EXTCON_CABLE_SLOW_CHARGER, > - EXTCON_CABLE_CHARGE_DOWNSTREAM, > - EXTCON_CABLE_JIG, > - > - _EXTCON_CABLE_NUM, > -}; > - > -static const char *max14577_extcon_cable[] = { > - [EXTCON_CABLE_USB] = "USB", > - [EXTCON_CABLE_TA] = "TA", > - [EXTCON_CABLE_FAST_CHARGER] = "Fast-charger", > - [EXTCON_CABLE_SLOW_CHARGER] = "Slow-charger", > - [EXTCON_CABLE_CHARGE_DOWNSTREAM] = "Charge- > downstream", > - [EXTCON_CABLE_JIG] = "JIG", > - > - NULL, > +static const enum extcon max14577_extcon_cable[] = { > + EXTCON_USB, > + EXTCON_TA, > + EXTCON_FAST_CHARGER, > + EXTCON_SLOW_CHARGER, > + EXTCON_CHARGE_DOWNSTREAM, > + EXTCON_JIG, > + EXTCON_NONE, > }; > > /* > @@ -369,7 +356,7 @@ static int max14577_muic_jig_handler(struct > max14577_muic_info *info, > if (ret < 0) > return ret; > > - extcon_set_cable_state(info->edev, "JIG", attached); > + extcon_set_cable_state_(info->edev, EXTCON_JIG, attached); > > return 0; > } > @@ -466,20 +453,22 @@ static int max14577_muic_chg_handler(struct > max14577_muic_info *info) > if (ret < 0) > return ret; > > - extcon_set_cable_state(info->edev, "USB", attached); > + extcon_set_cable_state_(info->edev, EXTCON_USB, attached); > break; > case MAX14577_CHARGER_TYPE_DEDICATED_CHG: > - extcon_set_cable_state(info->edev, "TA", attached); > + extcon_set_cable_state_(info->edev, EXTCON_TA, attached); > break; > case MAX14577_CHARGER_TYPE_DOWNSTREAM_PORT: > - extcon_set_cable_state(info->edev, > - "Charge-downstream", attached); > + extcon_set_cable_state_(info->edev, > EXTCON_CHARGE_DOWNSTREAM, > + attached); > break; > case MAX14577_CHARGER_TYPE_SPECIAL_500MA: > - extcon_set_cable_state(info->edev, "Slow-charger", attached); > + extcon_set_cable_state_(info->edev, > EXTCON_SLOW_CHARGER, > + attached); > break; > case MAX14577_CHARGER_TYPE_SPECIAL_1A: > - extcon_set_cable_state(info->edev, "Fast-charger", attached); > + extcon_set_cable_state_(info->edev, EXTCON_FAST_CHARGER, > + attached); > break; > case MAX14577_CHARGER_TYPE_NONE: > case MAX14577_CHARGER_TYPE_DEAD_BATTERY: > diff --git a/drivers/extcon/extcon-max77693.c b/drivers/extcon/extcon- > max77693.c > index c274249..20e796e 100644 > --- a/drivers/extcon/extcon-max77693.c > +++ b/drivers/extcon/extcon-max77693.c > @@ -200,32 +200,17 @@ enum max77693_muic_acc_type { > /* > * MAX77693 MUIC device support below list of accessories(external connector) > */ > -enum { > - EXTCON_CABLE_USB = 0, > - EXTCON_CABLE_USB_HOST, > - EXTCON_CABLE_TA, > - EXTCON_CABLE_FAST_CHARGER, > - EXTCON_CABLE_SLOW_CHARGER, > - EXTCON_CABLE_CHARGE_DOWNSTREAM, > - EXTCON_CABLE_MHL, > - EXTCON_CABLE_JIG, > - EXTCON_CABLE_DOCK, > - > - _EXTCON_CABLE_NUM, > -}; > - > -static const char *max77693_extcon_cable[] = { > - [EXTCON_CABLE_USB] = "USB", > - [EXTCON_CABLE_USB_HOST] = "USB-Host", > - [EXTCON_CABLE_TA] = "TA", > - [EXTCON_CABLE_FAST_CHARGER] = "Fast-charger", > - [EXTCON_CABLE_SLOW_CHARGER] = "Slow-charger", > - [EXTCON_CABLE_CHARGE_DOWNSTREAM] = "Charge- > downstream", > - [EXTCON_CABLE_MHL] = "MHL", > - [EXTCON_CABLE_JIG] = "JIG", > - [EXTCON_CABLE_DOCK] = "DOCK", > - > - NULL, > +static const enum extcon max77693_extcon_cable[] = { > + EXTCON_USB, > + EXTCON_USB_HOST, > + EXTCON_TA, > + EXTCON_FAST_CHARGER, > + EXTCON_SLOW_CHARGER, > + EXTCON_CHARGE_DOWNSTREAM, > + EXTCON_MHL, > + EXTCON_JIG, > + EXTCON_DOCK, > + EXTCON_NONE, > }; > > /* > @@ -472,7 +457,7 @@ static int max77693_muic_dock_handler(struct > max77693_muic_info *info, > int ret = 0; > int vbvolt; > bool cable_attached; > - char dock_name[CABLE_NAME_MAX]; > + enum extcon dock_id; > > dev_info(info->dev, > "external connector is %s (adc:0x%02x)\n", > @@ -517,16 +502,16 @@ static int max77693_muic_dock_handler(struct > max77693_muic_info *info, > if (ret < 0) > return ret; > > - extcon_set_cable_state(info->edev, "DOCK", attached); > - extcon_set_cable_state(info->edev, "MHL", attached); > + extcon_set_cable_state_(info->edev, EXTCON_DOCK, > attached); > + extcon_set_cable_state_(info->edev, EXTCON_MHL, attached); > goto out; > case MAX77693_MUIC_ADC_AUDIO_MODE_REMOTE: /* Dock-Desk > */ > - strcpy(dock_name, "DOCK"); > + dock_id = EXTCON_DOCK; > break; > case MAX77693_MUIC_ADC_AV_CABLE_NOLOAD: /* > Dock-Audio */ > - strcpy(dock_name, "DOCK"); > + dock_id = EXTCON_DOCK; > if (!attached) > - extcon_set_cable_state(info->edev, "USB", false); > + extcon_set_cable_state_(info->edev, EXTCON_USB, > false); > break; > default: > dev_err(info->dev, "failed to detect %s dock device\n", > @@ -538,7 +523,7 @@ static int max77693_muic_dock_handler(struct > max77693_muic_info *info, > ret = max77693_muic_set_path(info, CONTROL1_SW_AUDIO, > attached); > if (ret < 0) > return ret; > - extcon_set_cable_state(info->edev, dock_name, attached); > + extcon_set_cable_state_(info->edev, dock_id, attached); > > out: > return 0; > @@ -603,20 +588,19 @@ static int > max77693_muic_adc_ground_handler(struct max77693_muic_info *info) > ret = max77693_muic_set_path(info, CONTROL1_SW_USB, > attached); > if (ret < 0) > return ret; > - extcon_set_cable_state(info->edev, "USB-Host", attached); > + extcon_set_cable_state_(info->edev, EXTCON_USB_HOST, > attached); > break; > case MAX77693_MUIC_GND_AV_CABLE_LOAD: > /* Audio Video Cable with load, PATH:AUDIO */ > ret = max77693_muic_set_path(info, CONTROL1_SW_AUDIO, > attached); > if (ret < 0) > return ret; > - extcon_set_cable_state(info->edev, > - "Audio-video-load", attached); > + extcon_set_cable_state_(info->edev, EXTCON_USB, attached); > break; > case MAX77693_MUIC_GND_MHL: > case MAX77693_MUIC_GND_MHL_VB: > /* MHL or MHL with USB/TA cable */ > - extcon_set_cable_state(info->edev, "MHL", attached); > + extcon_set_cable_state_(info->edev, EXTCON_MHL, attached); > break; > default: > dev_err(info->dev, "failed to detect %s cable of gnd type\n", > @@ -658,7 +642,7 @@ static int max77693_muic_jig_handler(struct > max77693_muic_info *info, > if (ret < 0) > return ret; > > - extcon_set_cable_state(info->edev, "JIG", attached); > + extcon_set_cable_state_(info->edev, EXTCON_JIG, attached); > > return 0; > } > @@ -812,10 +796,10 @@ static int max77693_muic_chg_handler(struct > max77693_muic_info *info) > * - Support charging through micro-usb port without > * data connection > */ > - extcon_set_cable_state(info->edev, "TA", attached); > + extcon_set_cable_state_(info->edev, EXTCON_TA, > attached); > if (!cable_attached) > - extcon_set_cable_state(info->edev, > - "MHL", cable_attached); > + extcon_set_cable_state_(info->edev, > EXTCON_MHL, > + cable_attached); > break; > } > > @@ -838,11 +822,12 @@ static int max77693_muic_chg_handler(struct > max77693_muic_info *info) > * - Support charging through micro-usb port without > * data connection. > */ > - extcon_set_cable_state(info->edev, "USB", attached); > + extcon_set_cable_state_(info->edev, EXTCON_USB, > + attached); > > if (!cable_attached) > - extcon_set_cable_state(info->edev, "DOCK", > - cable_attached); > + extcon_set_cable_state_(info->edev, > EXTCON_DOCK, > + cable_attached); > break; > case MAX77693_MUIC_ADC_RESERVED_ACC_3: /* > Dock-Smart */ > /* > @@ -870,9 +855,10 @@ static int max77693_muic_chg_handler(struct > max77693_muic_info *info) > if (ret < 0) > return ret; > > - extcon_set_cable_state(info->edev, "DOCK", attached); > - extcon_set_cable_state(info->edev, "MHL", attached); > - > + extcon_set_cable_state_(info->edev, EXTCON_DOCK, > + attached); > + extcon_set_cable_state_(info->edev, EXTCON_MHL, > + attached); > break; > } > > @@ -905,23 +891,26 @@ static int max77693_muic_chg_handler(struct > max77693_muic_info *info) > if (ret < 0) > return ret; > > - extcon_set_cable_state(info->edev, "USB", attached); > + extcon_set_cable_state_(info->edev, EXTCON_USB, > + attached); > break; > case MAX77693_CHARGER_TYPE_DEDICATED_CHG: > /* Only TA cable */ > - extcon_set_cable_state(info->edev, "TA", attached); > + extcon_set_cable_state_(info->edev, EXTCON_TA, > attached); > break; > } > break; > case MAX77693_CHARGER_TYPE_DOWNSTREAM_PORT: > - extcon_set_cable_state(info->edev, > - "Charge-downstream", attached); > + extcon_set_cable_state_(info->edev, > EXTCON_CHARGE_DOWNSTREAM, > + attached); > break; > case MAX77693_CHARGER_TYPE_APPLE_500MA: > - extcon_set_cable_state(info->edev, "Slow-charger", attached); > + extcon_set_cable_state_(info->edev, > EXTCON_SLOW_CHARGER, > + attached); > break; > case MAX77693_CHARGER_TYPE_APPLE_1A_2A: > - extcon_set_cable_state(info->edev, "Fast-charger", attached); > + extcon_set_cable_state_(info->edev, EXTCON_FAST_CHARGER, > + attached); > break; > case MAX77693_CHARGER_TYPE_DEAD_BATTERY: > break; > diff --git a/drivers/extcon/extcon-max77843.c b/drivers/extcon/extcon- > max77843.c > index 5746d7b..d78a64d 100644 > --- a/drivers/extcon/extcon-max77843.c > +++ b/drivers/extcon/extcon-max77843.c > @@ -118,28 +118,16 @@ enum max77843_muic_charger_type { > MAX77843_MUIC_CHG_GND, > }; > > -enum { > - MAX77843_CABLE_USB = 0, > - MAX77843_CABLE_USB_HOST, > - MAX77843_CABLE_TA, > - MAX77843_CABLE_CHARGE_DOWNSTREAM, > - MAX77843_CABLE_FAST_CHARGER, > - MAX77843_CABLE_SLOW_CHARGER, > - MAX77843_CABLE_MHL, > - MAX77843_CABLE_JIG, > - > - MAX77843_CABLE_NUM, > -}; > - > -static const char *max77843_extcon_cable[] = { > - [MAX77843_CABLE_USB] = "USB", > - [MAX77843_CABLE_USB_HOST] = "USB-HOST", > - [MAX77843_CABLE_TA] = "TA", > - [MAX77843_CABLE_CHARGE_DOWNSTREAM] = "CHARGER- > DOWNSTREAM", > - [MAX77843_CABLE_FAST_CHARGER] = "FAST-CHARGER", > - [MAX77843_CABLE_SLOW_CHARGER] = "SLOW-CHARGER", > - [MAX77843_CABLE_MHL] = "MHL", > - [MAX77843_CABLE_JIG] = "JIG", > +static const enum extcon max77843_extcon_cable[] = { > + EXTCON_USB, > + EXTCON_USB_HOST, > + EXTCON_TA, > + EXTCON_CHARGE_DOWNSTREAM, > + EXTCON_FAST_CHARGER, > + EXTCON_SLOW_CHARGER, > + EXTCON_MHL, > + EXTCON_JIG, > + EXTCON_NONE, > }; > > struct max77843_muic_irq { > @@ -354,7 +342,7 @@ static int max77843_muic_adc_gnd_handler(struct > max77843_muic_info *info) > if (ret < 0) > return ret; > > - extcon_set_cable_state(info->edev, "USB-HOST", attached); > + extcon_set_cable_state_(info->edev, EXTCON_USB_HOST, > attached); > break; > case MAX77843_MUIC_GND_MHL_VB: > case MAX77843_MUIC_GND_MHL: > @@ -362,7 +350,7 @@ static int max77843_muic_adc_gnd_handler(struct > max77843_muic_info *info) > if (ret < 0) > return ret; > > - extcon_set_cable_state(info->edev, "MHL", attached); > + extcon_set_cable_state_(info->edev, EXTCON_MHL, attached); > break; > default: > dev_err(info->dev, "failed to detect %s accessory(gnd:0x%x)\n", > @@ -398,7 +386,7 @@ static int max77843_muic_jig_handler(struct > max77843_muic_info *info, > if (ret < 0) > return ret; > > - extcon_set_cable_state(info->edev, "JIG", attached); > + extcon_set_cable_state_(info->edev, EXTCON_JIG, attached); > > return 0; > } > @@ -490,36 +478,38 @@ static int max77843_muic_chg_handler(struct > max77843_muic_info *info) > if (ret < 0) > return ret; > > - extcon_set_cable_state(info->edev, "USB", attached); > + extcon_set_cable_state_(info->edev, EXTCON_USB, attached); > break; > case MAX77843_MUIC_CHG_DOWNSTREAM: > ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, > attached); > if (ret < 0) > return ret; > > - extcon_set_cable_state(info->edev, > - "CHARGER-DOWNSTREAM", attached); > + extcon_set_cable_state_(info->edev, > EXTCON_CHARGE_DOWNSTREAM, > + attached); > break; > case MAX77843_MUIC_CHG_DEDICATED: > ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, > attached); > if (ret < 0) > return ret; > > - extcon_set_cable_state(info->edev, "TA", attached); > + extcon_set_cable_state_(info->edev, EXTCON_TA, attached); > break; > case MAX77843_MUIC_CHG_SPECIAL_500MA: > ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, > attached); > if (ret < 0) > return ret; > > - extcon_set_cable_state(info->edev, "SLOW-CHAREGER", > attached); > + extcon_set_cable_state_(info->edev, > EXTCON_SLOW_CHARGER, > + attached); > break; > case MAX77843_MUIC_CHG_SPECIAL_1A: > ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, > attached); > if (ret < 0) > return ret; > > - extcon_set_cable_state(info->edev, "FAST-CHARGER", > attached); > + extcon_set_cable_state_(info->edev, EXTCON_FAST_CHARGER, > + attached); > break; > case MAX77843_MUIC_CHG_GND: > gnd_type = max77843_muic_get_cable_type(info, > @@ -527,9 +517,9 @@ static int max77843_muic_chg_handler(struct > max77843_muic_info *info) > > /* Charger cable on MHL accessory is attach or detach */ > if (gnd_type == MAX77843_MUIC_GND_MHL_VB) > - extcon_set_cable_state(info->edev, "TA", true); > + extcon_set_cable_state_(info->edev, EXTCON_TA, > true); > else if (gnd_type == MAX77843_MUIC_GND_MHL) > - extcon_set_cable_state(info->edev, "TA", false); > + extcon_set_cable_state_(info->edev, EXTCON_TA, > false); > break; > case MAX77843_MUIC_CHG_NONE: > break; > diff --git a/drivers/extcon/extcon-max8997.c b/drivers/extcon/extcon- > max8997.c > index 33613c4..4d10949 100644 > --- a/drivers/extcon/extcon-max8997.c > +++ b/drivers/extcon/extcon-max8997.c > @@ -145,32 +145,17 @@ struct max8997_muic_info { > int path_uart; > }; > > -enum { > - EXTCON_CABLE_USB = 0, > - EXTCON_CABLE_USB_HOST, > - EXTCON_CABLE_TA, > - EXTCON_CABLE_FAST_CHARGER, > - EXTCON_CABLE_SLOW_CHARGER, > - EXTCON_CABLE_CHARGE_DOWNSTREAM, > - EXTCON_CABLE_MHL, > - EXTCON_CABLE_DOCK, > - EXTCON_CABLE_JIG, > - > - _EXTCON_CABLE_NUM, > -}; > - > -static const char *max8997_extcon_cable[] = { > - [EXTCON_CABLE_USB] = "USB", > - [EXTCON_CABLE_USB_HOST] = "USB-Host", > - [EXTCON_CABLE_TA] = "TA", > - [EXTCON_CABLE_FAST_CHARGER] = "Fast-charger", > - [EXTCON_CABLE_SLOW_CHARGER] = "Slow-charger", > - [EXTCON_CABLE_CHARGE_DOWNSTREAM] = "Charge- > downstream", > - [EXTCON_CABLE_MHL] = "MHL", > - [EXTCON_CABLE_DOCK] = "DOCK", > - [EXTCON_CABLE_JIG] = "JIG", > - > - NULL, > +static const enum extcon max8997_extcon_cable[] = { > + EXTCON_USB, > + EXTCON_USB_HOST, > + EXTCON_TA, > + EXTCON_FAST_CHARGER, > + EXTCON_SLOW_CHARGER, > + EXTCON_CHARGE_DOWNSTREAM, > + EXTCON_MHL, > + EXTCON_DOCK, > + EXTCON_JIG, > + EXTCON_NONE, > }; > > /* > @@ -345,10 +330,10 @@ static int max8997_muic_handle_usb(struct > max8997_muic_info *info, > > switch (usb_type) { > case MAX8997_USB_HOST: > - extcon_set_cable_state(info->edev, "USB-Host", attached); > + extcon_set_cable_state_(info->edev, EXTCON_USB_HOST, > attached); > break; > case MAX8997_USB_DEVICE: > - extcon_set_cable_state(info->edev, "USB", attached); > + extcon_set_cable_state_(info->edev, EXTCON_USB, attached); > break; > default: > dev_err(info->dev, "failed to detect %s usb cable\n", > @@ -373,7 +358,7 @@ static int max8997_muic_handle_dock(struct > max8997_muic_info *info, > switch (cable_type) { > case MAX8997_MUIC_ADC_AV_CABLE_NOLOAD: > case MAX8997_MUIC_ADC_FACTORY_MODE_UART_ON: > - extcon_set_cable_state(info->edev, "DOCK", attached); > + extcon_set_cable_state_(info->edev, EXTCON_DOCK, > attached); > break; > default: > dev_err(info->dev, "failed to detect %s dock device\n", > @@ -396,7 +381,7 @@ static int max8997_muic_handle_jig_uart(struct > max8997_muic_info *info, > return ret; > } > > - extcon_set_cable_state(info->edev, "JIG", attached); > + extcon_set_cable_state_(info->edev, EXTCON_JIG, attached); > > return 0; > } > @@ -418,7 +403,7 @@ static int max8997_muic_adc_handler(struct > max8997_muic_info *info) > return ret; > break; > case MAX8997_MUIC_ADC_MHL: > - extcon_set_cable_state(info->edev, "MHL", attached); > + extcon_set_cable_state_(info->edev, EXTCON_MHL, attached); > break; > case MAX8997_MUIC_ADC_FACTORY_MODE_USB_OFF: > case MAX8997_MUIC_ADC_FACTORY_MODE_USB_ON: > @@ -501,17 +486,19 @@ static int max8997_muic_chg_handler(struct > max8997_muic_info *info) > } > break; > case MAX8997_CHARGER_TYPE_DOWNSTREAM_PORT: > - extcon_set_cable_state(info->edev, > - "Charge-downstream", attached); > + extcon_set_cable_state_(info->edev, > EXTCON_CHARGE_DOWNSTREAM, > + attached); > break; > case MAX8997_CHARGER_TYPE_DEDICATED_CHG: > - extcon_set_cable_state(info->edev, "TA", attached); > + extcon_set_cable_state_(info->edev, EXTCON_TA, attached); > break; > case MAX8997_CHARGER_TYPE_500MA: > - extcon_set_cable_state(info->edev, "Slow-charger", attached); > + extcon_set_cable_state_(info->edev, > EXTCON_SLOW_CHARGER, > + attached); > break; > case MAX8997_CHARGER_TYPE_1A: > - extcon_set_cable_state(info->edev, "Fast-charger", attached); > + extcon_set_cable_state_(info->edev, EXTCON_FAST_CHARGER, > + attached); > break; > default: > dev_err(info->dev, > diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c > index 9c8943d..d689540 100644 > --- a/drivers/extcon/extcon-palmas.c > +++ b/drivers/extcon/extcon-palmas.c > @@ -29,10 +29,10 @@ > #include > #include > > -static const char *palmas_extcon_cable[] = { > - [0] = "USB", > - [1] = "USB-HOST", > - NULL, > +static const enum extcon palmas_extcon_cable[] = { > + EXTCON_USB, > + EXTCON_USB_HOST, > + EXTCON_NONE, > }; > > static const int mutually_exclusive[] = {0x3, 0x0}; > @@ -49,6 +49,7 @@ static void palmas_usb_wakeup(struct palmas *palmas, int > enable) > static irqreturn_t palmas_vbus_irq_handler(int irq, void *_palmas_usb) > { > struct palmas_usb *palmas_usb = _palmas_usb; > + struct extcon_dev *edev = palmas_usb->edev; > unsigned int vbus_line_state; > > palmas_read(palmas_usb->palmas, PALMAS_INTERRUPT_BASE, > @@ -57,7 +58,7 @@ static irqreturn_t palmas_vbus_irq_handler(int irq, void > *_palmas_usb) > if (vbus_line_state & PALMAS_INT3_LINE_STATE_VBUS) { > if (palmas_usb->linkstat != PALMAS_USB_STATE_VBUS) { > palmas_usb->linkstat = PALMAS_USB_STATE_VBUS; > - extcon_set_cable_state(palmas_usb->edev, "USB", > true); > + extcon_set_cable_state_(edev, EXTCON_USB, true); > dev_info(palmas_usb->dev, "USB cable is attached\n"); > } else { > dev_dbg(palmas_usb->dev, > @@ -66,7 +67,7 @@ static irqreturn_t palmas_vbus_irq_handler(int irq, void > *_palmas_usb) > } else if (!(vbus_line_state & PALMAS_INT3_LINE_STATE_VBUS)) { > if (palmas_usb->linkstat == PALMAS_USB_STATE_VBUS) { > palmas_usb->linkstat = > PALMAS_USB_STATE_DISCONNECT; > - extcon_set_cable_state(palmas_usb->edev, "USB", > false); > + extcon_set_cable_state_(edev, EXTCON_USB, false); > dev_info(palmas_usb->dev, "USB cable is detached\n"); > } else { > dev_dbg(palmas_usb->dev, > @@ -81,6 +82,7 @@ static irqreturn_t palmas_id_irq_handler(int irq, void > *_palmas_usb) > { > unsigned int set, id_src; > struct palmas_usb *palmas_usb = _palmas_usb; > + struct extcon_dev *edev = palmas_usb->edev; > > palmas_read(palmas_usb->palmas, PALMAS_USB_OTG_BASE, > PALMAS_USB_ID_INT_LATCH_SET, &set); > @@ -93,7 +95,7 @@ static irqreturn_t palmas_id_irq_handler(int irq, void > *_palmas_usb) > PALMAS_USB_ID_INT_LATCH_CLR, > PALMAS_USB_ID_INT_EN_HI_CLR_ID_GND); > palmas_usb->linkstat = PALMAS_USB_STATE_ID; > - extcon_set_cable_state(palmas_usb->edev, "USB-HOST", true); > + extcon_set_cable_state_(edev, EXTCON_USB_HOST, true); > dev_info(palmas_usb->dev, "USB-HOST cable is attached\n"); > } else if ((set & PALMAS_USB_ID_INT_SRC_ID_FLOAT) && > (id_src & > PALMAS_USB_ID_INT_SRC_ID_FLOAT)) { > @@ -101,17 +103,17 @@ static irqreturn_t palmas_id_irq_handler(int irq, void > *_palmas_usb) > PALMAS_USB_ID_INT_LATCH_CLR, > PALMAS_USB_ID_INT_EN_HI_CLR_ID_FLOAT); > palmas_usb->linkstat = PALMAS_USB_STATE_DISCONNECT; > - extcon_set_cable_state(palmas_usb->edev, "USB-HOST", > false); > + extcon_set_cable_state_(edev, EXTCON_USB_HOST, false); > dev_info(palmas_usb->dev, "USB-HOST cable is detached\n"); > } else if ((palmas_usb->linkstat == PALMAS_USB_STATE_ID) && > (!(set & PALMAS_USB_ID_INT_SRC_ID_GND))) { > palmas_usb->linkstat = PALMAS_USB_STATE_DISCONNECT; > - extcon_set_cable_state(palmas_usb->edev, "USB-HOST", > false); > + extcon_set_cable_state_(edev, EXTCON_USB_HOST, false); > dev_info(palmas_usb->dev, "USB-HOST cable is detached\n"); > } else if ((palmas_usb->linkstat == PALMAS_USB_STATE_DISCONNECT) > && > (id_src & PALMAS_USB_ID_INT_SRC_ID_GND)) > { > palmas_usb->linkstat = PALMAS_USB_STATE_ID; > - extcon_set_cable_state(palmas_usb->edev, "USB-HOST", true); > + extcon_set_cable_state_(edev, EXTCON_USB_HOST, true); > dev_info(palmas_usb->dev, " USB-HOST cable is attached\n"); > } > > diff --git a/drivers/extcon/extcon-rt8973a.c b/drivers/extcon/extcon-rt8973a.c > index 04447f3..f2a8672 100644 > --- a/drivers/extcon/extcon-rt8973a.c > +++ b/drivers/extcon/extcon-rt8973a.c > @@ -90,21 +90,12 @@ static struct reg_data rt8973a_reg_data[] = { > }; > > /* List of detectable cables */ > -enum { > - EXTCON_CABLE_USB = 0, > - EXTCON_CABLE_USB_HOST, > - EXTCON_CABLE_TA, > - EXTCON_CABLE_JIG, > - > - EXTCON_CABLE_END, > -}; > - > -static const char *rt8973a_extcon_cable[] = { > - [EXTCON_CABLE_USB] = "USB", > - [EXTCON_CABLE_USB_HOST] = "USB-Host", > - [EXTCON_CABLE_TA] = "TA", > - [EXTCON_CABLE_JIG] = "JIG", > - NULL, > +static const enum extcon rt8973a_extcon_cable[] = { > + EXTCON_USB, > + EXTCON_USB_HOST, > + EXTCON_TA, > + EXTCON_JIG, > + EXTCON_NONE, > }; > > /* Define OVP (Over Voltage Protection), OTP (Over Temperature Protection) */ > @@ -307,14 +298,11 @@ static int rt8973a_muic_cable_handler(struct > rt8973a_muic_info *info, > enum rt8973a_event_type event) > { > static unsigned int prev_cable_type; > - const char **cable_names = info->edev->supported_cable; > unsigned int con_sw = DM_DP_SWITCH_UART; > - int ret, idx = 0, cable_type; > + int ret, cable_type; > + enum extcon id; > bool attached = false; > > - if (!cable_names) > - return 0; > - > switch (event) { > case RT8973A_EVENT_ATTACH: > cable_type = rt8973a_muic_get_cable_type(info); > @@ -341,25 +329,25 @@ static int rt8973a_muic_cable_handler(struct > rt8973a_muic_info *info, > > switch (cable_type) { > case RT8973A_MUIC_ADC_OTG: > - idx = EXTCON_CABLE_USB_HOST; > + id = EXTCON_USB_HOST; > con_sw = DM_DP_SWITCH_USB; > break; > case RT8973A_MUIC_ADC_TA: > - idx = EXTCON_CABLE_TA; > + id = EXTCON_TA; > con_sw = DM_DP_SWITCH_OPEN; > break; > case RT8973A_MUIC_ADC_FACTORY_MODE_BOOT_OFF_USB: > case RT8973A_MUIC_ADC_FACTORY_MODE_BOOT_ON_USB: > - idx = EXTCON_CABLE_JIG; > + id = EXTCON_JIG; > con_sw = DM_DP_SWITCH_USB; > break; > case RT8973A_MUIC_ADC_FACTORY_MODE_BOOT_OFF_UART: > case RT8973A_MUIC_ADC_FACTORY_MODE_BOOT_ON_UART: > - idx = EXTCON_CABLE_JIG; > + id = EXTCON_JIG; > con_sw = DM_DP_SWITCH_UART; > break; > case RT8973A_MUIC_ADC_USB: > - idx = EXTCON_CABLE_USB; > + id = EXTCON_USB; > con_sw = DM_DP_SWITCH_USB; > break; > case RT8973A_MUIC_ADC_OPEN: > @@ -409,7 +397,7 @@ static int rt8973a_muic_cable_handler(struct > rt8973a_muic_info *info, > return ret; > > /* Change the state of external accessory */ > - extcon_set_cable_state(info->edev, cable_names[idx], attached); > + extcon_set_cable_state_(info->edev, id, attached); > > return 0; > } > diff --git a/drivers/extcon/extcon-sm5502.c b/drivers/extcon/extcon-sm5502.c > index 6f1d11f..520693d 100644 > --- a/drivers/extcon/extcon-sm5502.c > +++ b/drivers/extcon/extcon-sm5502.c > @@ -92,19 +92,11 @@ static struct reg_data sm5502_reg_data[] = { > }; > > /* List of detectable cables */ > -enum { > - EXTCON_CABLE_USB = 0, > - EXTCON_CABLE_USB_HOST, > - EXTCON_CABLE_TA, > - > - EXTCON_CABLE_END, > -}; > - > -static const char *sm5502_extcon_cable[] = { > - [EXTCON_CABLE_USB] = "USB", > - [EXTCON_CABLE_USB_HOST] = "USB-Host", > - [EXTCON_CABLE_TA] = "TA", > - NULL, > +static const enum extcon sm5502_extcon_cable[] = { > + EXTCON_USB, > + EXTCON_USB_HOST, > + EXTCON_TA, > + EXTCON_NONE, > }; > > /* Define supported accessory type */ > @@ -377,16 +369,12 @@ static int sm5502_muic_cable_handler(struct > sm5502_muic_info *info, > bool attached) > { > static unsigned int prev_cable_type = SM5502_MUIC_ADC_GROUND; > - const char **cable_names = info->edev->supported_cable; > unsigned int cable_type = SM5502_MUIC_ADC_GROUND; > unsigned int con_sw = DM_DP_SWITCH_OPEN; > unsigned int vbus_sw = VBUSIN_SWITCH_OPEN; > - unsigned int idx = 0; > + enum extcon id; > int ret; > > - if (!cable_names) > - return 0; > - > /* Get the type of attached or detached cable */ > if (attached) > cable_type = sm5502_muic_get_cable_type(info); > @@ -396,17 +384,17 @@ static int sm5502_muic_cable_handler(struct > sm5502_muic_info *info, > > switch (cable_type) { > case SM5502_MUIC_ADC_OPEN_USB: > - idx = EXTCON_CABLE_USB; > + id = EXTCON_USB; > con_sw = DM_DP_SWITCH_USB; > vbus_sw = VBUSIN_SWITCH_VBUSOUT_WITH_USB; > break; > case SM5502_MUIC_ADC_OPEN_TA: > - idx = EXTCON_CABLE_TA; > + id = EXTCON_TA; > con_sw = DM_DP_SWITCH_OPEN; > vbus_sw = VBUSIN_SWITCH_VBUSOUT; > break; > case SM5502_MUIC_ADC_OPEN_USB_OTG: > - idx = EXTCON_CABLE_USB_HOST; > + id = EXTCON_USB_HOST; > con_sw = DM_DP_SWITCH_USB; > vbus_sw = VBUSIN_SWITCH_OPEN; > break; > @@ -422,7 +410,7 @@ static int sm5502_muic_cable_handler(struct > sm5502_muic_info *info, > return ret; > > /* Change the state of external accessory */ > - extcon_set_cable_state(info->edev, cable_names[idx], attached); > + extcon_set_cable_state_(info->edev, id, attached); > > return 0; > } > diff --git a/drivers/extcon/extcon-usb-gpio.c b/drivers/extcon/extcon-usb- > gpio.c > index 160ec12..4cf4f19 100644 > --- a/drivers/extcon/extcon-usb-gpio.c > +++ b/drivers/extcon/extcon-usb-gpio.c > @@ -39,18 +39,10 @@ struct usb_extcon_info { > struct delayed_work wq_detcable; > }; > > -/* List of detectable cables */ > -enum { > - EXTCON_CABLE_USB = 0, > - EXTCON_CABLE_USB_HOST, > - > - EXTCON_CABLE_END, > -}; > - > -static const char *usb_extcon_cable[] = { > - [EXTCON_CABLE_USB] = "USB", > - [EXTCON_CABLE_USB_HOST] = "USB-HOST", > - NULL, > +static const enum extcon usb_extcon_cable[] = { > + EXTCON_USB, > + EXTCON_USB_HOST, > + EXTCON_NONE, > }; > > static void usb_extcon_detect_cable(struct work_struct *work) > @@ -68,24 +60,16 @@ static void usb_extcon_detect_cable(struct work_struct > *work) > * As we don't have event for USB peripheral cable attached, > * we simulate USB peripheral attach here. > */ > - extcon_set_cable_state(info->edev, > - > usb_extcon_cable[EXTCON_CABLE_USB_HOST], > - false); > - extcon_set_cable_state(info->edev, > - usb_extcon_cable[EXTCON_CABLE_USB], > - true); > + extcon_set_cable_state_(info->edev, EXTCON_USB_HOST, > false); > + extcon_set_cable_state_(info->edev, EXTCON_USB, true); > } else { > /* > * ID = 0 means USB HOST cable attached. > * As we don't have event for USB peripheral cable detached, > * we simulate USB peripheral detach here. > */ > - extcon_set_cable_state(info->edev, > - usb_extcon_cable[EXTCON_CABLE_USB], > - false); > - extcon_set_cable_state(info->edev, > - > usb_extcon_cable[EXTCON_CABLE_USB_HOST], > - true); > + extcon_set_cable_state_(info->edev, EXTCON_USB, false); > + extcon_set_cable_state_(info->edev, EXTCON_USB_HOST, > true); > } > } > > diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c > index 2fb5f75..4aeb585 100644 > --- a/drivers/extcon/extcon.c > +++ b/drivers/extcon/extcon.c > @@ -3,6 +3,9 @@ > * > * External connector (extcon) class driver > * > + * Copyright (C) 2015 Samsung Electronics > + * Author: Chanwoo Choi > + * > * Copyright (C) 2012 Samsung Electronics > * Author: Donggeun Kim > * Author: MyungJoo Ham > @@ -32,36 +35,43 @@ > #include > #include > > -/* > - * extcon_cable_name suggests the standard cable names for commonly used > - * cable types. > - * > - * However, please do not use extcon_cable_name directly for extcon_dev > - * struct's supported_cable pointer unless your device really supports > - * every single port-type of the following cable names. Please choose cable > - * names that are actually used in your extcon device. > - */ > -const char extcon_cable_name[][CABLE_NAME_MAX + 1] = { > +#define SUPPORTED_CABLE_MAX 32 > +#define CABLE_NAME_MAX 30 > + > +static const char *extcon_name[] = { > + [EXTCON_NONE] = "NONE", > + > + /* USB external connector */ > [EXTCON_USB] = "USB", > - [EXTCON_USB_HOST] = "USB-Host", > + [EXTCON_USB_HOST] = "USB-HOST", > + > + /* Charger external connector */ > [EXTCON_TA] = "TA", > - [EXTCON_FAST_CHARGER] = "Fast-charger", > - [EXTCON_SLOW_CHARGER] = "Slow-charger", > - [EXTCON_CHARGE_DOWNSTREAM] = "Charge-downstream", > + [EXTCON_FAST_CHARGER] = "FAST-CHARGER", > + [EXTCON_SLOW_CHARGER] = "SLOW-CHARGER", > + [EXTCON_CHARGE_DOWNSTREAM] = "CHARGE-DOWNSTREAM", > + > + /* Audio/Video external connector */ > + [EXTCON_LINE_IN] = "LINE-IN", > + [EXTCON_LINE_OUT] = "LINE-OUT", > + [EXTCON_MICROPHONE] = "MICROPHONE", > + [EXTCON_HEADPHONE] = "HEADPHONE", > + > [EXTCON_HDMI] = "HDMI", > [EXTCON_MHL] = "MHL", > [EXTCON_DVI] = "DVI", > [EXTCON_VGA] = "VGA", > - [EXTCON_DOCK] = "Dock", > - [EXTCON_LINE_IN] = "Line-in", > - [EXTCON_LINE_OUT] = "Line-out", > - [EXTCON_MIC_IN] = "Microphone", > - [EXTCON_HEADPHONE_OUT] = "Headphone", > - [EXTCON_SPDIF_IN] = "SPDIF-in", > - [EXTCON_SPDIF_OUT] = "SPDIF-out", > - [EXTCON_VIDEO_IN] = "Video-in", > - [EXTCON_VIDEO_OUT] = "Video-out", > - [EXTCON_MECHANICAL] = "Mechanical", > + [EXTCON_SPDIF_IN] = "SPDIF-IN", > + [EXTCON_SPDIF_OUT] = "SPDIF-OUT", > + [EXTCON_VIDEO_IN] = "VIDEO-IN", > + [EXTCON_VIDEO_OUT] = "VIDEO-OUT", > + > + /* Etc external connector */ > + [EXTCON_DOCK] = "DOCK", > + [EXTCON_JIG] = "JIG", > + [EXTCON_MECHANICAL] = "MECHANICAL", > + > + NULL, > }; > > static struct class *extcon_class; > @@ -118,11 +128,9 @@ static ssize_t state_show(struct device *dev, struct > device_attribute *attr, > if (edev->max_supported == 0) > return sprintf(buf, "%u\n", edev->state); > > - for (i = 0; i < SUPPORTED_CABLE_MAX; i++) { > - if (!edev->supported_cable[i]) > - break; > + for (i = 0; i < edev->max_supported; i++) { > count += sprintf(buf + count, "%s=%d\n", > - edev->supported_cable[i], > + extcon_name[edev->supported_cable[i]], > !!(edev->state & (1 << i))); > } > > @@ -171,9 +179,10 @@ static ssize_t cable_name_show(struct device *dev, > { > struct extcon_cable *cable = container_of(attr, struct extcon_cable, > attr_name); > + int i = cable->cable_index; > > return sprintf(buf, "%s\n", > - cable->edev->supported_cable[cable->cable_index]); > + extcon_name[cable->edev->supported_cable[i]]); > } > > static ssize_t cable_state_show(struct device *dev, > @@ -282,39 +291,57 @@ int extcon_set_state(struct extcon_dev *edev, u32 > state) > } > EXPORT_SYMBOL_GPL(extcon_set_state); > > -/** > - * extcon_find_cable_index() - Get the cable index based on the cable name. > - * @edev: the extcon device that has the cable. > - * @cable_name: cable name to be searched. > - * > - * Note that accessing a cable state based on cable_index is faster than > - * cable_name because using cable_name induces a loop with strncmp(). > - * Thus, when get/set_cable_state is repeatedly used, using cable_index > - * is recommended. > - */ > -int extcon_find_cable_index(struct extcon_dev *edev, const char *cable_name) > +static int extcon_find_cable_index(struct extcon_dev *edev, > + const char *cable_name) > { > + enum extcon id = EXTCON_NONE; > int i; > > - if (edev->supported_cable) { > - for (i = 0; edev->supported_cable[i]; i++) { > - if (!strncmp(edev->supported_cable[i], > - cable_name, CABLE_NAME_MAX)) > - return i; > + if (edev->max_supported == 0) > + return -EINVAL; > + > + /* Find the the number of extcon cable */ > + for (i = 0; i < __EXTCON_END; i++) { > + if (!extcon_name[i]) > + continue; > + if (!strncmp(extcon_name[i], cable_name, CABLE_NAME_MAX)) > { > + id = i; > + break; > } > } > > + if (id == EXTCON_NONE) > + return -EINVAL; > + > + /* Find the the index of extcon cable in edev->supported_cable */ > + for (i = 0; i < edev->max_supported; i++) { > + if (edev->supported_cable[i] == id) > + return i; > + } > + > return -EINVAL; > } > -EXPORT_SYMBOL_GPL(extcon_find_cable_index); > > /** > * extcon_get_cable_state_() - Get the status of a specific cable. > * @edev: the extcon device that has the cable. > - * @index: cable index that can be retrieved by extcon_find_cable_index(). > + * @id: the unique id of each external connector in extcon > enumeration. > */ > -int extcon_get_cable_state_(struct extcon_dev *edev, int index) > +int extcon_get_cable_state_(struct extcon_dev *edev, const enum extcon id) > { > + int i, index = -EINVAL; > + > + /* Find the the index of extcon cable in edev->supported_cable */ > + for (i = 0; edev->max_supported < i; i++) { > + if (edev->supported_cable[i] == id) { > + index = i; > + break; > + } > + } > + > + if (i == edev->max_supported) > + return -EINVAL; > + > if (index < 0 || (edev->max_supported && edev->max_supported <= > index)) > return -EINVAL; > > @@ -339,15 +366,27 @@ EXPORT_SYMBOL_GPL(extcon_get_cable_state); > /** > * extcon_set_cable_state_() - Set the status of a specific cable. > * @edev: the extcon device that has the cable. > - * @index: cable index that can be retrieved by > - * extcon_find_cable_index(). > - * @cable_state: the new cable status. The default semantics is > + * @id: the unique id of each external connector > + * in extcon enumeration. > + * @state: the new cable status. The default semantics is > * true: attached / false: detached. > */ > -int extcon_set_cable_state_(struct extcon_dev *edev, > - int index, bool cable_state) > +int extcon_set_cable_state_(struct extcon_dev *edev, enum extcon id, > + bool cable_state) > { > u32 state; > + int i, index = -EINVAL; > + > + /* Find the the index of extcon cable in edev->supported_cable */ > + for (i = 0; i < edev->max_supported; i++) { > + if (edev->supported_cable[i] == id) { > + index = i; > + break; > + } > + } > + > + if (i == edev->max_supported) > + return -EINVAL; > > if (index < 0 || (edev->max_supported && edev->max_supported <= > index)) > return -EINVAL; > @@ -605,7 +644,7 @@ static void dummy_sysfs_dev_release(struct device > *dev) > * > * Return the pointer of extcon device if success or ERR_PTR(err) if fail > */ > -struct extcon_dev *extcon_dev_allocate(const char **supported_cable) > +struct extcon_dev *extcon_dev_allocate(const enum extcon > *supported_cable) > { > struct extcon_dev *edev; > > @@ -659,7 +698,7 @@ static void devm_extcon_dev_release(struct device > *dev, void *res) > * or ERR_PTR(err) if fail > */ > struct extcon_dev *devm_extcon_dev_allocate(struct device *dev, > - const char **supported_cable) > + const enum extcon *supported_cable) > { > struct extcon_dev **ptr, *edev; > > @@ -709,17 +748,15 @@ int extcon_dev_register(struct extcon_dev *edev) > return ret; > } > > - if (edev->supported_cable) { > - /* Get size of array */ > - for (index = 0; edev->supported_cable[index]; index++) > - ; > - edev->max_supported = index; > - } else { > - edev->max_supported = 0; > - } > + if (!edev->supported_cable) > + return -EINVAL; > > + for (; edev->supported_cable[index] != EXTCON_NONE; index++); > + > + edev->max_supported = index; > if (index > SUPPORTED_CABLE_MAX) { > - dev_err(&edev->dev, "extcon: maximum number of supported > cables exceeded.\n"); > + dev_err(&edev->dev, > + "exceed the maximum number of supported cables\n"); > return -EINVAL; > } > > @@ -1070,6 +1107,7 @@ static void __exit extcon_class_exit(void) > } > module_exit(extcon_class_exit); > > +MODULE_AUTHOR("Chanwoo Choi "); > MODULE_AUTHOR("Mike Lockwood "); > MODULE_AUTHOR("Donggeun Kim "); > MODULE_AUTHOR("MyungJoo Ham "); > diff --git a/include/linux/extcon.h b/include/linux/extcon.h > index 799474d9d..de158a1 100644 > --- a/include/linux/extcon.h > +++ b/include/linux/extcon.h > @@ -1,6 +1,9 @@ > /* > * External connector (extcon) class driver > * > + * Copyright (C) 2015 Samsung Electronics > + * Author: Chanwoo Choi > + * > * Copyright (C) 2012 Samsung Electronics > * Author: Donggeun Kim > * Author: MyungJoo Ham > @@ -27,8 +30,41 @@ > #include > #include > > -#define SUPPORTED_CABLE_MAX 32 > -#define CABLE_NAME_MAX 30 > +enum extcon { > + EXTCON_NONE = 0x0, /* NONE */ > + > + /* USB external connector */ > + EXTCON_USB = 0x1, /* USB */ > + EXTCON_USB_HOST = 0x2, /* USB-HOST */ > + > + /* Charger external connector */ > + EXTCON_TA = 0x10, /* TA */ > + EXTCON_FAST_CHARGER = 0x11, /* FAST-CHARGER */ > + EXTCON_SLOW_CHARGER = 0x12, /* SLOW-CHARGER */ > + EXTCON_CHARGE_DOWNSTREAM= 0x13, /* CHARGE- > DOWNSTREAM */ > + > + /* Audio/Video external connector */ > + EXTCON_LINE_IN = 0x20, /* LINE-IN */ > + EXTCON_LINE_OUT = 0x21, /* LINE-OUT */ > + EXTCON_MICROPHONE = 0x22, /* MICROPHONE */ > + EXTCON_HEADPHONE = 0x23, /* HEADPHONE */ > + > + EXTCON_HDMI = 0x30, /* HDMI */ > + EXTCON_MHL = 0x31, /* MHL */ > + EXTCON_DVI = 0x32, /* DVI */ > + EXTCON_VGA = 0x33, /* VGA */ > + EXTCON_SPDIF_IN = 0x34, /* SPDIF-IN */ > + EXTCON_SPDIF_OUT = 0x35, /* SPDIF-OUT */ > + EXTCON_VIDEO_IN = 0x36, /* VIDEO-IN */ > + EXTCON_VIDEO_OUT = 0x37, /* VIDEO-OUT */ > + > + /* Etc external connector */ > + EXTCON_DOCK = 0x50, /* DOCK */ > + EXTCON_JIG = 0x51, /* JIG */ > + EXTCON_MECHANICAL = 0x52, /* MECHANICAL */ > + > + __EXTCON_END, > +}; > > /* > * The standard cable name is to help support general notifier > @@ -48,29 +84,6 @@ > * you don't need such convention. This convention is helpful when > * notifier can distinguish but notifiee cannot. > */ > -enum extcon_cable_name { > - EXTCON_USB = 0, > - EXTCON_USB_HOST, > - EXTCON_TA, /* Travel Adaptor */ > - EXTCON_FAST_CHARGER, > - EXTCON_SLOW_CHARGER, > - EXTCON_CHARGE_DOWNSTREAM, /* Charging an external device > */ > - EXTCON_HDMI, > - EXTCON_MHL, > - EXTCON_DVI, > - EXTCON_VGA, > - EXTCON_DOCK, > - EXTCON_LINE_IN, > - EXTCON_LINE_OUT, > - EXTCON_MIC_IN, > - EXTCON_HEADPHONE_OUT, > - EXTCON_SPDIF_IN, > - EXTCON_SPDIF_OUT, > - EXTCON_VIDEO_IN, > - EXTCON_VIDEO_OUT, > - EXTCON_MECHANICAL, > -}; > -extern const char extcon_cable_name[][CABLE_NAME_MAX + 1]; > > struct extcon_cable; > > @@ -113,7 +126,7 @@ struct extcon_cable; > struct extcon_dev { > /* Optional user initializing data */ > const char *name; > - const char **supported_cable; > + const enum extcon *supported_cable; > const u32 *mutually_exclusive; > > /* Optional callbacks to override class functions */ > @@ -194,10 +207,10 @@ extern struct extcon_dev > *extcon_get_extcon_dev(const char *extcon_name); > /* > * Following APIs control the memory of extcon device. > */ > -extern struct extcon_dev *extcon_dev_allocate(const char **cables); > +extern struct extcon_dev *extcon_dev_allocate(const enum extcon *cable); > extern void extcon_dev_free(struct extcon_dev *edev); > extern struct extcon_dev *devm_extcon_dev_allocate(struct device *dev, > - const char **cables); > + const enum extcon *cable); > extern void devm_extcon_dev_free(struct device *dev, struct extcon_dev > *edev); > > /* > @@ -216,13 +229,10 @@ extern int extcon_update_state(struct extcon_dev > *edev, u32 mask, u32 state); > > /* > * get/set_cable_state access each bit of the 32b encoded state value. > - * They are used to access the status of each cable based on the cable_name > - * or cable_index, which is retrieved by extcon_find_cable_index > + * They are used to access the status of each cable based on the cable_name. > */ > -extern int extcon_find_cable_index(struct extcon_dev *sdev, > - const char *cable_name); > -extern int extcon_get_cable_state_(struct extcon_dev *edev, int cable_index); > -extern int extcon_set_cable_state_(struct extcon_dev *edev, int cable_index, > +extern int extcon_get_cable_state_(struct extcon_dev *edev, enum extcon id); > +extern int extcon_set_cable_state_(struct extcon_dev *edev, enum extcon id, > bool cable_state); > > extern int extcon_get_cable_state(struct extcon_dev *edev, > @@ -281,7 +291,7 @@ static inline int devm_extcon_dev_register(struct device > *dev, > static inline void devm_extcon_dev_unregister(struct device *dev, > struct extcon_dev *edev) { } > > -static inline struct extcon_dev *extcon_dev_allocate(const char **cables) > +static inline struct extcon_dev *extcon_dev_allocate(const enum extcon > *cable) > { > return ERR_PTR(-ENOSYS); > } > @@ -289,7 +299,7 @@ static inline struct extcon_dev > *extcon_dev_allocate(const char **cables) > static inline void extcon_dev_free(struct extcon_dev *edev) { } > > static inline struct extcon_dev *devm_extcon_dev_allocate(struct device *dev, > - const char **cables) > + const enum extcon *cable) > { > return ERR_PTR(-ENOSYS); > } > @@ -312,20 +322,14 @@ static inline int extcon_update_state(struct > extcon_dev *edev, u32 mask, > return 0; > } > > -static inline int extcon_find_cable_index(struct extcon_dev *edev, > - const char *cable_name) > -{ > - return 0; > -} > - > static inline int extcon_get_cable_state_(struct extcon_dev *edev, > - int cable_index) > + enum extcon id) > { > return 0; > } > > static inline int extcon_set_cable_state_(struct extcon_dev *edev, > - int cable_index, bool cable_state) > + enum extcon id, bool cable_state) > { > return 0; > } > diff --git a/include/linux/extcon/extcon-adc-jack.h > b/include/linux/extcon/extcon-adc-jack.h > index 9ca958c..53c6080 100644 > --- a/include/linux/extcon/extcon-adc-jack.h > +++ b/include/linux/extcon/extcon-adc-jack.h > @@ -44,7 +44,7 @@ struct adc_jack_cond { > * @consumer_channel: Unique name to identify the channel on the > consumer > * side. This typically describes the channels used within > * the consumer. E.g. 'battery_voltage' > - * @cable_names: array of cable names ending with null. > + * @cable_names: array of extcon id for supported cables. > * @adc_contitions: array of struct adc_jack_cond conditions ending > * with .state = 0 entry. This describes how to decode > * adc values into extcon state. > @@ -58,8 +58,7 @@ struct adc_jack_pdata { > const char *name; > const char *consumer_channel; > > - /* The last entry should be NULL */ > - const char **cable_names; > + const enum extcon *cable_names; > > /* The last entry's state should be 0 */ > struct adc_jack_cond *adc_conditions; > -- > 1.8.5.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/