diff options
Diffstat (limited to 'include/linux/extcon.h')
| -rw-r--r-- | include/linux/extcon.h | 72 |
1 files changed, 37 insertions, 35 deletions
diff --git a/include/linux/extcon.h b/include/linux/extcon.h index fcb51c88319f..21c59af1150b 100644 --- a/include/linux/extcon.h +++ b/include/linux/extcon.h | |||
| @@ -51,10 +51,10 @@ | |||
| 51 | enum extcon_cable_name { | 51 | enum extcon_cable_name { |
| 52 | EXTCON_USB = 0, | 52 | EXTCON_USB = 0, |
| 53 | EXTCON_USB_HOST, | 53 | EXTCON_USB_HOST, |
| 54 | EXTCON_TA, /* Travel Adaptor */ | 54 | EXTCON_TA, /* Travel Adaptor */ |
| 55 | EXTCON_FAST_CHARGER, | 55 | EXTCON_FAST_CHARGER, |
| 56 | EXTCON_SLOW_CHARGER, | 56 | EXTCON_SLOW_CHARGER, |
| 57 | EXTCON_CHARGE_DOWNSTREAM, /* Charging an external device */ | 57 | EXTCON_CHARGE_DOWNSTREAM, /* Charging an external device */ |
| 58 | EXTCON_HDMI, | 58 | EXTCON_HDMI, |
| 59 | EXTCON_MHL, | 59 | EXTCON_MHL, |
| 60 | EXTCON_DVI, | 60 | EXTCON_DVI, |
| @@ -76,8 +76,8 @@ struct extcon_cable; | |||
| 76 | 76 | ||
| 77 | /** | 77 | /** |
| 78 | * struct extcon_dev - An extcon device represents one external connector. | 78 | * struct extcon_dev - An extcon device represents one external connector. |
| 79 | * @name: The name of this extcon device. Parent device name is used | 79 | * @name: The name of this extcon device. Parent device name is |
| 80 | * if NULL. | 80 | * used if NULL. |
| 81 | * @supported_cable: Array of supported cable names ending with NULL. | 81 | * @supported_cable: Array of supported cable names ending with NULL. |
| 82 | * If supported_cable is NULL, cable name related APIs | 82 | * If supported_cable is NULL, cable name related APIs |
| 83 | * are disabled. | 83 | * are disabled. |
| @@ -89,21 +89,21 @@ struct extcon_cable; | |||
| 89 | * be attached simulataneously. {0x7, 0} is equivalent to | 89 | * be attached simulataneously. {0x7, 0} is equivalent to |
| 90 | * {0x3, 0x6, 0x5, 0}. If it is {0xFFFFFFFF, 0}, there | 90 | * {0x3, 0x6, 0x5, 0}. If it is {0xFFFFFFFF, 0}, there |
| 91 | * can be no simultaneous connections. | 91 | * can be no simultaneous connections. |
| 92 | * @print_name: An optional callback to override the method to print the | 92 | * @print_name: An optional callback to override the method to print the |
| 93 | * name of the extcon device. | 93 | * name of the extcon device. |
| 94 | * @print_state: An optional callback to override the method to print the | 94 | * @print_state: An optional callback to override the method to print the |
| 95 | * status of the extcon device. | 95 | * status of the extcon device. |
| 96 | * @dev: Device of this extcon. Do not provide at register-time. | 96 | * @dev: Device of this extcon. |
| 97 | * @state: Attach/detach state of this extcon. Do not provide at | 97 | * @state: Attach/detach state of this extcon. Do not provide at |
| 98 | * register-time | 98 | * register-time. |
| 99 | * @nh: Notifier for the state change events from this extcon | 99 | * @nh: Notifier for the state change events from this extcon |
| 100 | * @entry: To support list of extcon devices so that users can search | 100 | * @entry: To support list of extcon devices so that users can search |
| 101 | * for extcon devices based on the extcon name. | 101 | * for extcon devices based on the extcon name. |
| 102 | * @lock: | 102 | * @lock: |
| 103 | * @max_supported: Internal value to store the number of cables. | 103 | * @max_supported: Internal value to store the number of cables. |
| 104 | * @extcon_dev_type: Device_type struct to provide attribute_groups | 104 | * @extcon_dev_type: Device_type struct to provide attribute_groups |
| 105 | * customized for each extcon device. | 105 | * customized for each extcon device. |
| 106 | * @cables: Sysfs subdirectories. Each represents one cable. | 106 | * @cables: Sysfs subdirectories. Each represents one cable. |
| 107 | * | 107 | * |
| 108 | * In most cases, users only need to provide "User initializing data" of | 108 | * In most cases, users only need to provide "User initializing data" of |
| 109 | * this struct when registering an extcon. In some exceptional cases, | 109 | * this struct when registering an extcon. In some exceptional cases, |
| @@ -111,26 +111,27 @@ struct extcon_cable; | |||
| 111 | * are overwritten by register function. | 111 | * are overwritten by register function. |
| 112 | */ | 112 | */ |
| 113 | struct extcon_dev { | 113 | struct extcon_dev { |
| 114 | /* --- Optional user initializing data --- */ | 114 | /* Optional user initializing data */ |
| 115 | const char *name; | 115 | const char *name; |
| 116 | const char **supported_cable; | 116 | const char **supported_cable; |
| 117 | const u32 *mutually_exclusive; | 117 | const u32 *mutually_exclusive; |
| 118 | 118 | ||
| 119 | /* --- Optional callbacks to override class functions --- */ | 119 | /* Optional callbacks to override class functions */ |
| 120 | ssize_t (*print_name)(struct extcon_dev *edev, char *buf); | 120 | ssize_t (*print_name)(struct extcon_dev *edev, char *buf); |
| 121 | ssize_t (*print_state)(struct extcon_dev *edev, char *buf); | 121 | ssize_t (*print_state)(struct extcon_dev *edev, char *buf); |
| 122 | 122 | ||
| 123 | /* --- Internal data. Please do not set. --- */ | 123 | /* Internal data. Please do not set. */ |
| 124 | struct device *dev; | 124 | struct device dev; |
| 125 | u32 state; | ||
| 126 | struct raw_notifier_head nh; | 125 | struct raw_notifier_head nh; |
| 127 | struct list_head entry; | 126 | struct list_head entry; |
| 128 | spinlock_t lock; /* could be called by irq handler */ | ||
| 129 | int max_supported; | 127 | int max_supported; |
| 128 | spinlock_t lock; /* could be called by irq handler */ | ||
| 129 | u32 state; | ||
| 130 | 130 | ||
| 131 | /* /sys/class/extcon/.../cable.n/... */ | 131 | /* /sys/class/extcon/.../cable.n/... */ |
| 132 | struct device_type extcon_dev_type; | 132 | struct device_type extcon_dev_type; |
| 133 | struct extcon_cable *cables; | 133 | struct extcon_cable *cables; |
| 134 | |||
| 134 | /* /sys/class/extcon/.../mutually_exclusive/... */ | 135 | /* /sys/class/extcon/.../mutually_exclusive/... */ |
| 135 | struct attribute_group attr_g_muex; | 136 | struct attribute_group attr_g_muex; |
| 136 | struct attribute **attrs_muex; | 137 | struct attribute **attrs_muex; |
| @@ -138,13 +139,13 @@ struct extcon_dev { | |||
| 138 | }; | 139 | }; |
| 139 | 140 | ||
| 140 | /** | 141 | /** |
| 141 | * struct extcon_cable - An internal data for each cable of extcon device. | 142 | * struct extcon_cable - An internal data for each cable of extcon device. |
| 142 | * @edev: The extcon device | 143 | * @edev: The extcon device |
| 143 | * @cable_index: Index of this cable in the edev | 144 | * @cable_index: Index of this cable in the edev |
| 144 | * @attr_g: Attribute group for the cable | 145 | * @attr_g: Attribute group for the cable |
| 145 | * @attr_name: "name" sysfs entry | 146 | * @attr_name: "name" sysfs entry |
| 146 | * @attr_state: "state" sysfs entry | 147 | * @attr_state: "state" sysfs entry |
| 147 | * @attrs: Array pointing to attr_name and attr_state for attr_g | 148 | * @attrs: Array pointing to attr_name and attr_state for attr_g |
| 148 | */ | 149 | */ |
| 149 | struct extcon_cable { | 150 | struct extcon_cable { |
| 150 | struct extcon_dev *edev; | 151 | struct extcon_dev *edev; |
| @@ -159,11 +160,13 @@ struct extcon_cable { | |||
| 159 | 160 | ||
| 160 | /** | 161 | /** |
| 161 | * struct extcon_specific_cable_nb - An internal data for | 162 | * struct extcon_specific_cable_nb - An internal data for |
| 162 | * extcon_register_interest(). | 163 | * extcon_register_interest(). |
| 163 | * @internal_nb: a notifier block bridging extcon notifier and cable notifier. | 164 | * @internal_nb: A notifier block bridging extcon notifier |
| 164 | * @user_nb: user provided notifier block for events from a specific cable. | 165 | * and cable notifier. |
| 166 | * @user_nb: user provided notifier block for events from | ||
| 167 | * a specific cable. | ||
| 165 | * @cable_index: the target cable. | 168 | * @cable_index: the target cable. |
| 166 | * @edev: the target extcon device. | 169 | * @edev: the target extcon device. |
| 167 | * @previous_value: the saved previous event value. | 170 | * @previous_value: the saved previous event value. |
| 168 | */ | 171 | */ |
| 169 | struct extcon_specific_cable_nb { | 172 | struct extcon_specific_cable_nb { |
| @@ -180,7 +183,7 @@ struct extcon_specific_cable_nb { | |||
| 180 | * Following APIs are for notifiers or configurations. | 183 | * Following APIs are for notifiers or configurations. |
| 181 | * Notifiers are the external port and connection devices. | 184 | * Notifiers are the external port and connection devices. |
| 182 | */ | 185 | */ |
| 183 | extern int extcon_dev_register(struct extcon_dev *edev, struct device *dev); | 186 | extern int extcon_dev_register(struct extcon_dev *edev); |
| 184 | extern void extcon_dev_unregister(struct extcon_dev *edev); | 187 | extern void extcon_dev_unregister(struct extcon_dev *edev); |
| 185 | extern struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name); | 188 | extern struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name); |
| 186 | 189 | ||
| @@ -238,8 +241,7 @@ extern int extcon_register_notifier(struct extcon_dev *edev, | |||
| 238 | extern int extcon_unregister_notifier(struct extcon_dev *edev, | 241 | extern int extcon_unregister_notifier(struct extcon_dev *edev, |
| 239 | struct notifier_block *nb); | 242 | struct notifier_block *nb); |
| 240 | #else /* CONFIG_EXTCON */ | 243 | #else /* CONFIG_EXTCON */ |
| 241 | static inline int extcon_dev_register(struct extcon_dev *edev, | 244 | static inline int extcon_dev_register(struct extcon_dev *edev) |
| 242 | struct device *dev) | ||
| 243 | { | 245 | { |
| 244 | return 0; | 246 | return 0; |
| 245 | } | 247 | } |
