lkml.org 
[lkml]   [2015]   [May]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRE: [PATCH 1/2] extcon: Use the unique id for external connector instead of string
    Date
    > 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 <cw00.choi@samsung.com>
    > Cc: MyungJoo Ham <myungjoo.ham@samsung.com>
    > Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
    > Cc: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
    > Cc: Graeme Gregory <gg@slimlogic.co.uk>
    > Cc: Kishon Vijay Abraham I <kishon@ti.com>
    > Cc: Jaewon Kim <jaewon02.kim@samsung.com>
    > Cc: Roger Quadros <rogerq@ti.com>
    > Cc: Ramakrishna Pallala <ramakrishna.pallala@intel.com>

    For drivers/extcon/extcon-axp288.c
    Acked-by: Ramakrishna Pallala <ramakrishna.pallala@intel.com>

    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 <linux/of.h>
    > #include <linux/of_platform.h>
    >
    > -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 <cw00.choi@samsung.com>
    > + *
    > * Copyright (C) 2012 Samsung Electronics
    > * Author: Donggeun Kim <dg77.kim@samsung.com>
    > * Author: MyungJoo Ham <myungjoo.ham@samsung.com>
    > @@ -32,36 +35,43 @@
    > #include <linux/slab.h>
    > #include <linux/sysfs.h>
    >
    > -/*
    > - * 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 <cw00.choi@samsung.com>");
    > MODULE_AUTHOR("Mike Lockwood <lockwood@android.com>");
    > MODULE_AUTHOR("Donggeun Kim <dg77.kim@samsung.com>");
    > MODULE_AUTHOR("MyungJoo Ham <myungjoo.ham@samsung.com>");
    > 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 <cw00.choi@samsung.com>
    > + *
    > * Copyright (C) 2012 Samsung Electronics
    > * Author: Donggeun Kim <dg77.kim@samsung.com>
    > * Author: MyungJoo Ham <myungjoo.ham@samsung.com>
    > @@ -27,8 +30,41 @@
    > #include <linux/notifier.h>
    > #include <linux/sysfs.h>
    >
    > -#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



    \
     
     \ /
      Last update: 2015-05-15 19:01    [W:5.952 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site