#define CABLE_NAME_MAX 30
static const char *extcon_name[] = {
+ [EXTCON_NONE] = "NONE",
+
/* USB external connector */
[EXTCON_USB] = "USB",
[EXTCON_USB_HOST] = "USB-HOST",
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;
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;
* @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;
* @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;
* "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;
* @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;
*
* 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;
* 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;
#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;
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 */
/*
* 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);
/*
* 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,
* 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);
/*
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);
}
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);
}
}
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;
}
}
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;