diff options
Diffstat (limited to 'include/linux/extcon.h')
-rw-r--r-- | include/linux/extcon.h | 67 |
1 files changed, 35 insertions, 32 deletions
diff --git a/include/linux/extcon.h b/include/linux/extcon.h index fcb51c88319f..c2b652dde72c 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. Do not provide at register-time. |
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 { |