[PATCH] extcon: Redefine the unique id of supported external connectors without 'enum extcon' type

From: Chanwoo Choi
Date: Thu Jun 11 2015 - 22:10:22 EST


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-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/