This patch just redefine the unique id of supported external connectors without 'enum extcon' type. Because unique id would be used on devictree file(*.dts) to indicate the specific external connectors like key number of input framework. So, I have the plan to move this definitions to following header file which includes the unique id of supported external connectors. - include/dt-bindings/extcon/extcon.h Fixes: 2a9de9c0f08d ("extcon: Use the unique id for external connector instead of string") Signed-off-by: Chanwoo Choi <cw00.choi@xxxxxxxxxxx> --- Dear Greg, I sent pull-request[1] of extcon for 4.2. This patch[2] in the pull-request[2] includes the one issue about 'enum extcon'. The 'enum extcon' type is ambiguous and not clear. So, if you possible, I hope you to pick this patch on char-misc git repository. [1] http://www.spinics.net/lists/kernel/msg2005098.html - [GIT PULL] extcon next for 4.2 [2] commit-id: 2a9de9c0f08d61fbe3764a21d22d0b72df97d6ae - extcon: Use the unique id for external connector instead of string drivers/extcon/extcon-adc-jack.c | 2 +- drivers/extcon/extcon-arizona.c | 4 +- drivers/extcon/extcon-axp288.c | 4 +- drivers/extcon/extcon-max14577.c | 2 +- drivers/extcon/extcon-max77693.c | 4 +- drivers/extcon/extcon-max77843.c | 2 +- drivers/extcon/extcon-max8997.c | 2 +- drivers/extcon/extcon-palmas.c | 2 +- drivers/extcon/extcon-rt8973a.c | 4 +- drivers/extcon/extcon-sm5502.c | 4 +- drivers/extcon/extcon-usb-gpio.c | 2 +- drivers/extcon/extcon.c | 24 +++++------ drivers/usb/phy/phy-tahvo.c | 2 +- include/linux/extcon.h | 90 +++++++++++++++++++--------------------- 14 files changed, 71 insertions(+), 77 deletions(-) diff --git a/drivers/extcon/extcon-adc-jack.c b/drivers/extcon/extcon-adc-jack.c index 5bf08ec1cacf..7fc0ae1912f8 100644 --- a/drivers/extcon/extcon-adc-jack.c +++ b/drivers/extcon/extcon-adc-jack.c @@ -40,7 +40,7 @@ struct adc_jack_data { struct extcon_dev *edev; - const char **cable_names; + const unsigned int **cable_names; struct adc_jack_cond *adc_conditions; int num_conditions; diff --git a/drivers/extcon/extcon-arizona.c b/drivers/extcon/extcon-arizona.c index 9262b45a4484..ad87f263056f 100644 --- a/drivers/extcon/extcon-arizona.c +++ b/drivers/extcon/extcon-arizona.c @@ -118,7 +118,7 @@ static const int arizona_micd_levels[] = { 1257, }; -static const enum extcon arizona_cable[] = { +static const unsigned int arizona_cable[] = { EXTCON_MECHANICAL, EXTCON_MICROPHONE, EXTCON_HEADPHONE, @@ -552,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; - enum extcon report = EXTCON_HEADPHONE; + unsigned int report = EXTCON_HEADPHONE; int ret, reading; bool mic = false; diff --git a/drivers/extcon/extcon-axp288.c b/drivers/extcon/extcon-axp288.c index 3605aa96c25a..ea962bc547b8 100644 --- a/drivers/extcon/extcon-axp288.c +++ b/drivers/extcon/extcon-axp288.c @@ -101,7 +101,7 @@ enum axp288_extcon_irq { EXTCON_IRQ_END, }; -static const enum extcon axp288_extcon_cables[] = { +static const unsigned int axp288_extcon_cables[] = { EXTCON_SLOW_CHARGER, EXTCON_CHARGE_DOWNSTREAM, EXTCON_FAST_CHARGER, @@ -157,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 enum extcon cable; + static unsigned int cable; int ret, stat, cfg, pwr_stat; u8 chrg_type; bool vbus_attach = false; diff --git a/drivers/extcon/extcon-max14577.c b/drivers/extcon/extcon-max14577.c index e7c3edb5bd4b..df0659d98e5a 100644 --- a/drivers/extcon/extcon-max14577.c +++ b/drivers/extcon/extcon-max14577.c @@ -148,7 +148,7 @@ enum max14577_muic_acc_type { MAX14577_MUIC_ADC_OPEN, }; -static const enum extcon max14577_extcon_cable[] = { +static const unsigned int max14577_extcon_cable[] = { EXTCON_USB, EXTCON_TA, EXTCON_FAST_CHARGER, diff --git a/drivers/extcon/extcon-max77693.c b/drivers/extcon/extcon-max77693.c index 20e796e10e57..f4f3b3d53928 100644 --- a/drivers/extcon/extcon-max77693.c +++ b/drivers/extcon/extcon-max77693.c @@ -200,7 +200,7 @@ enum max77693_muic_acc_type { /* * MAX77693 MUIC device support below list of accessories(external connector) */ -static const enum extcon max77693_extcon_cable[] = { +static const unsigned int max77693_extcon_cable[] = { EXTCON_USB, EXTCON_USB_HOST, EXTCON_TA, @@ -457,7 +457,7 @@ static int max77693_muic_dock_handler(struct max77693_muic_info *info, int ret = 0; int vbvolt; bool cable_attached; - enum extcon dock_id; + unsigned int dock_id; dev_info(info->dev, "external connector is %s (adc:0x%02x)\n", diff --git a/drivers/extcon/extcon-max77843.c b/drivers/extcon/extcon-max77843.c index 11e09d1db5ec..cc5e7bca38c8 100644 --- a/drivers/extcon/extcon-max77843.c +++ b/drivers/extcon/extcon-max77843.c @@ -118,7 +118,7 @@ enum max77843_muic_charger_type { MAX77843_MUIC_CHG_GND, }; -static const enum extcon max77843_extcon_cable[] = { +static const unsigned int max77843_extcon_cable[] = { EXTCON_USB, EXTCON_USB_HOST, EXTCON_TA, diff --git a/drivers/extcon/extcon-max8997.c b/drivers/extcon/extcon-max8997.c index 4d10949c6eb2..7b1ef200b121 100644 --- a/drivers/extcon/extcon-max8997.c +++ b/drivers/extcon/extcon-max8997.c @@ -145,7 +145,7 @@ struct max8997_muic_info { int path_uart; }; -static const enum extcon max8997_extcon_cable[] = { +static const unsigned int max8997_extcon_cable[] = { EXTCON_USB, EXTCON_USB_HOST, EXTCON_TA, diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c index d68954045a33..080d5cc27055 100644 --- a/drivers/extcon/extcon-palmas.c +++ b/drivers/extcon/extcon-palmas.c @@ -29,7 +29,7 @@ #include <linux/of.h> #include <linux/of_platform.h> -static const enum extcon palmas_extcon_cable[] = { +static const unsigned int palmas_extcon_cable[] = { EXTCON_USB, EXTCON_USB_HOST, EXTCON_NONE, diff --git a/drivers/extcon/extcon-rt8973a.c b/drivers/extcon/extcon-rt8973a.c index f2a8672cbf82..92c939221a41 100644 --- a/drivers/extcon/extcon-rt8973a.c +++ b/drivers/extcon/extcon-rt8973a.c @@ -90,7 +90,7 @@ static struct reg_data rt8973a_reg_data[] = { }; /* List of detectable cables */ -static const enum extcon rt8973a_extcon_cable[] = { +static const unsigned int rt8973a_extcon_cable[] = { EXTCON_USB, EXTCON_USB_HOST, EXTCON_TA, @@ -300,7 +300,7 @@ static int rt8973a_muic_cable_handler(struct rt8973a_muic_info *info, static unsigned int prev_cable_type; unsigned int con_sw = DM_DP_SWITCH_UART; int ret, cable_type; - enum extcon id; + unsigned int id; bool attached = false; switch (event) { diff --git a/drivers/extcon/extcon-sm5502.c b/drivers/extcon/extcon-sm5502.c index 520693d6fa8a..817dece23b4c 100644 --- a/drivers/extcon/extcon-sm5502.c +++ b/drivers/extcon/extcon-sm5502.c @@ -92,7 +92,7 @@ static struct reg_data sm5502_reg_data[] = { }; /* List of detectable cables */ -static const enum extcon sm5502_extcon_cable[] = { +static const unsigned int sm5502_extcon_cable[] = { EXTCON_USB, EXTCON_USB_HOST, EXTCON_TA, @@ -372,7 +372,7 @@ static int sm5502_muic_cable_handler(struct sm5502_muic_info *info, unsigned int cable_type = SM5502_MUIC_ADC_GROUND; unsigned int con_sw = DM_DP_SWITCH_OPEN; unsigned int vbus_sw = VBUSIN_SWITCH_OPEN; - enum extcon id; + unsigned int id; int ret; /* Get the type of attached or detached cable */ diff --git a/drivers/extcon/extcon-usb-gpio.c b/drivers/extcon/extcon-usb-gpio.c index 14da94cb57fa..a2a44536a608 100644 --- a/drivers/extcon/extcon-usb-gpio.c +++ b/drivers/extcon/extcon-usb-gpio.c @@ -39,7 +39,7 @@ struct usb_extcon_info { struct delayed_work wq_detcable; }; -static const enum extcon usb_extcon_cable[] = { +static const unsigned int usb_extcon_cable[] = { EXTCON_USB, EXTCON_USB_HOST, EXTCON_NONE, diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c index fafd428cae7f..76157ab9faf3 100644 --- a/drivers/extcon/extcon.c +++ b/drivers/extcon/extcon.c @@ -39,6 +39,8 @@ #define CABLE_NAME_MAX 30 static const char *extcon_name[] = { + [EXTCON_NONE] = "NONE", + /* USB external connector */ [EXTCON_USB] = "USB", [EXTCON_USB_HOST] = "USB-HOST", @@ -109,7 +111,7 @@ static int check_mutually_exclusive(struct extcon_dev *edev, u32 new_state) return 0; } -static int find_cable_index_by_id(struct extcon_dev *edev, const enum extcon id) +static int find_cable_index_by_id(struct extcon_dev *edev, const unsigned int id) { int i; @@ -124,16 +126,14 @@ static int find_cable_index_by_id(struct extcon_dev *edev, const enum extcon id) static int find_cable_index_by_name(struct extcon_dev *edev, const char *name) { - enum extcon id = EXTCON_NONE; - int i; + unsigned int id = EXTCON_NONE; + int i = 0; 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; + while (extcon_name[i]) { if (!strncmp(extcon_name[i], name, CABLE_NAME_MAX)) { id = i; break; @@ -337,7 +337,7 @@ EXPORT_SYMBOL_GPL(extcon_set_state); * @edev: the extcon device that has the cable. * @id: the unique id of each external connector in extcon enumeration. */ -int extcon_get_cable_state_(struct extcon_dev *edev, const enum extcon id) +int extcon_get_cable_state_(struct extcon_dev *edev, const unsigned int id) { int index; @@ -374,7 +374,7 @@ EXPORT_SYMBOL_GPL(extcon_get_cable_state); * @state: the new cable status. The default semantics is * true: attached / false: detached. */ -int extcon_set_cable_state_(struct extcon_dev *edev, enum extcon id, +int extcon_set_cable_state_(struct extcon_dev *edev, unsigned int id, bool cable_state) { u32 state; @@ -539,7 +539,7 @@ EXPORT_SYMBOL_GPL(extcon_unregister_interest); * "old_state", not the current state. The current state can be retrieved * by looking at the third pameter (edev pointer)'s state value. */ -int extcon_register_notifier(struct extcon_dev *edev, enum extcon id, +int extcon_register_notifier(struct extcon_dev *edev, unsigned int id, struct notifier_block *nb) { unsigned long flags; @@ -561,7 +561,7 @@ EXPORT_SYMBOL_GPL(extcon_register_notifier); * @id: the unique id of each external connector in extcon enumeration. * @nb: a notifier block to be registered. */ -int extcon_unregister_notifier(struct extcon_dev *edev, enum extcon id, +int extcon_unregister_notifier(struct extcon_dev *edev, unsigned int id, struct notifier_block *nb) { unsigned long flags; @@ -623,7 +623,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 enum extcon *supported_cable) +struct extcon_dev *extcon_dev_allocate(const unsigned int *supported_cable) { struct extcon_dev *edev; @@ -677,7 +677,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 enum extcon *supported_cable) + const unsigned int *supported_cable) { struct extcon_dev **ptr, *edev; diff --git a/drivers/usb/phy/phy-tahvo.c b/drivers/usb/phy/phy-tahvo.c index 1d1bb9ad8ccf..2f777d22184d 100644 --- a/drivers/usb/phy/phy-tahvo.c +++ b/drivers/usb/phy/phy-tahvo.c @@ -60,7 +60,7 @@ struct tahvo_usb { struct extcon_dev extcon; }; -static const enum extcon tahvo_cable[] = { +static const unsigned int tahvo_cable[] = { EXTCON_USB, EXTCON_USB_HOST, diff --git a/include/linux/extcon.h b/include/linux/extcon.h index a7b224b20ecc..b16d929fa75f 100644 --- a/include/linux/extcon.h +++ b/include/linux/extcon.h @@ -30,41 +30,35 @@ #include <linux/notifier.h> #include <linux/sysfs.h> -enum extcon { - EXTCON_NONE = 0x0, - - /* USB external connector */ - EXTCON_USB = 0x1, - EXTCON_USB_HOST = 0x2, - - /* Charger external connector */ - EXTCON_TA = 0x10, - EXTCON_FAST_CHARGER = 0x11, - EXTCON_SLOW_CHARGER = 0x12, - EXTCON_CHARGE_DOWNSTREAM = 0x13, - - /* Audio/Video external connector */ - EXTCON_LINE_IN = 0x20, - EXTCON_LINE_OUT = 0x21, - EXTCON_MICROPHONE = 0x22, - EXTCON_HEADPHONE = 0x23, - - EXTCON_HDMI = 0x30, - EXTCON_MHL = 0x31, - EXTCON_DVI = 0x32, - EXTCON_VGA = 0x33, - EXTCON_SPDIF_IN = 0x34, - EXTCON_SPDIF_OUT = 0x35, - EXTCON_VIDEO_IN = 0x36, - EXTCON_VIDEO_OUT = 0x37, - - /* Etc external connector */ - EXTCON_DOCK = 0x50, - EXTCON_JIG = 0x51, - EXTCON_MECHANICAL = 0x52, - - EXTCON_END, -}; +/* + * Define the unique id of supported external connectors + */ +#define EXTCON_NONE 0 + +#define EXTCON_USB 1 /* USB connector */ +#define EXTCON_USB_HOST 2 + +#define EXTCON_TA 3 /* Charger connector */ +#define EXTCON_FAST_CHARGER 4 +#define EXTCON_SLOW_CHARGER 5 +#define EXTCON_CHARGE_DOWNSTREAM 6 + +#define EXTCON_LINE_IN 7 /* Audio/Video connector */ +#define EXTCON_LINE_OUT 8 +#define EXTCON_MICROPHONE 9 +#define EXTCON_HEADPHONE 10 +#define EXTCON_HDMI 11 +#define EXTCON_MHL 12 +#define EXTCON_DVI 13 +#define EXTCON_VGA 14 +#define EXTCON_SPDIF_IN 15 +#define EXTCON_SPDIF_OUT 16 +#define EXTCON_VIDEO_IN 17 +#define EXTCON_VIDEO_OUT 18 + +#define EXTCON_DOCK 19 /* Misc connector */ +#define EXTCON_JIG 20 +#define EXTCON_MECHANICAL 21 struct extcon_cable; @@ -105,7 +99,7 @@ struct extcon_cable; struct extcon_dev { /* Optional user initializing data */ const char *name; - const enum extcon *supported_cable; + const unsigned int *supported_cable; const u32 *mutually_exclusive; /* Optional callbacks to override class functions */ @@ -182,10 +176,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 enum extcon *cable); +extern struct extcon_dev *extcon_dev_allocate(const unsigned int *cable); extern void extcon_dev_free(struct extcon_dev *edev); extern struct extcon_dev *devm_extcon_dev_allocate(struct device *dev, - const enum extcon *cable); + const unsigned int *cable); extern void devm_extcon_dev_free(struct device *dev, struct extcon_dev *edev); /* @@ -206,8 +200,8 @@ 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. */ -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, +extern int extcon_get_cable_state_(struct extcon_dev *edev, unsigned int id); +extern int extcon_set_cable_state_(struct extcon_dev *edev, unsigned int id, bool cable_state); extern int extcon_get_cable_state(struct extcon_dev *edev, @@ -234,9 +228,9 @@ extern int extcon_unregister_interest(struct extcon_specific_cable_nb *nb); * we do not recommend to use this for normal 'notifiee' device drivers who * want to be notified by a specific external port of the notifier. */ -extern int extcon_register_notifier(struct extcon_dev *edev, enum extcon id, +extern int extcon_register_notifier(struct extcon_dev *edev, unsigned int id, struct notifier_block *nb); -extern int extcon_unregister_notifier(struct extcon_dev *edev, enum extcon id, +extern int extcon_unregister_notifier(struct extcon_dev *edev, unsigned int id, struct notifier_block *nb); /* @@ -266,7 +260,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 enum extcon *cable) +static inline struct extcon_dev *extcon_dev_allocate(const unsigned int *cable) { return ERR_PTR(-ENOSYS); } @@ -274,7 +268,7 @@ static inline struct extcon_dev *extcon_dev_allocate(const enum extcon *cable) static inline void extcon_dev_free(struct extcon_dev *edev) { } static inline struct extcon_dev *devm_extcon_dev_allocate(struct device *dev, - const enum extcon *cable) + const unsigned int *cable) { return ERR_PTR(-ENOSYS); } @@ -298,13 +292,13 @@ static inline int extcon_update_state(struct extcon_dev *edev, u32 mask, } static inline int extcon_get_cable_state_(struct extcon_dev *edev, - enum extcon id) + unsigned int id) { return 0; } static inline int extcon_set_cable_state_(struct extcon_dev *edev, - enum extcon id, bool cable_state) + unsigned int id, bool cable_state) { return 0; } @@ -327,14 +321,14 @@ static inline struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name) } static inline int extcon_register_notifier(struct extcon_dev *edev, - enum extcon id, + unsigned int id, struct notifier_block *nb) { return 0; } static inline int extcon_unregister_notifier(struct extcon_dev *edev, - enum extcon id, + unsigned int id, struct notifier_block *nb) { return 0; -- 1.8.5.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html