.. | .. |
---|
13 | 13 | #include <linux/fb.h> |
---|
14 | 14 | #include <linux/mutex.h> |
---|
15 | 15 | #include <linux/notifier.h> |
---|
16 | | -#include <linux/thermal.h> |
---|
17 | 16 | |
---|
18 | | -/* Notes on locking: |
---|
| 17 | +/** |
---|
| 18 | + * enum backlight_update_reason - what method was used to update backlight |
---|
19 | 19 | * |
---|
20 | | - * backlight_device->ops_lock is an internal backlight lock protecting the |
---|
21 | | - * ops pointer and no code outside the core should need to touch it. |
---|
22 | | - * |
---|
23 | | - * Access to update_status() is serialised by the update_lock mutex since |
---|
24 | | - * most drivers seem to need this and historically get it wrong. |
---|
25 | | - * |
---|
26 | | - * Most drivers don't need locking on their get_brightness() method. |
---|
27 | | - * If yours does, you need to implement it in the driver. You can use the |
---|
28 | | - * update_lock mutex if appropriate. |
---|
29 | | - * |
---|
30 | | - * Any other use of the locks below is probably wrong. |
---|
| 20 | + * A driver indicates the method (reason) used for updating the backlight |
---|
| 21 | + * when calling backlight_force_update(). |
---|
31 | 22 | */ |
---|
32 | | - |
---|
33 | 23 | enum backlight_update_reason { |
---|
| 24 | + /** |
---|
| 25 | + * @BACKLIGHT_UPDATE_HOTKEY: The backlight was updated using a hot-key. |
---|
| 26 | + */ |
---|
34 | 27 | BACKLIGHT_UPDATE_HOTKEY, |
---|
| 28 | + |
---|
| 29 | + /** |
---|
| 30 | + * @BACKLIGHT_UPDATE_SYSFS: The backlight was updated using sysfs. |
---|
| 31 | + */ |
---|
35 | 32 | BACKLIGHT_UPDATE_SYSFS, |
---|
36 | 33 | }; |
---|
37 | 34 | |
---|
| 35 | +/** |
---|
| 36 | + * enum backlight_type - the type of backlight control |
---|
| 37 | + * |
---|
| 38 | + * The type of interface used to control the backlight. |
---|
| 39 | + */ |
---|
38 | 40 | enum backlight_type { |
---|
| 41 | + /** |
---|
| 42 | + * @BACKLIGHT_RAW: |
---|
| 43 | + * |
---|
| 44 | + * The backlight is controlled using hardware registers. |
---|
| 45 | + */ |
---|
39 | 46 | BACKLIGHT_RAW = 1, |
---|
| 47 | + |
---|
| 48 | + /** |
---|
| 49 | + * @BACKLIGHT_PLATFORM: |
---|
| 50 | + * |
---|
| 51 | + * The backlight is controlled using a platform-specific interface. |
---|
| 52 | + */ |
---|
40 | 53 | BACKLIGHT_PLATFORM, |
---|
| 54 | + |
---|
| 55 | + /** |
---|
| 56 | + * @BACKLIGHT_FIRMWARE: |
---|
| 57 | + * |
---|
| 58 | + * The backlight is controlled using a standard firmware interface. |
---|
| 59 | + */ |
---|
41 | 60 | BACKLIGHT_FIRMWARE, |
---|
| 61 | + |
---|
| 62 | + /** |
---|
| 63 | + * @BACKLIGHT_TYPE_MAX: Number of entries. |
---|
| 64 | + */ |
---|
42 | 65 | BACKLIGHT_TYPE_MAX, |
---|
43 | 66 | }; |
---|
44 | 67 | |
---|
| 68 | +/** |
---|
| 69 | + * enum backlight_notification - the type of notification |
---|
| 70 | + * |
---|
| 71 | + * The notifications that is used for notification sent to the receiver |
---|
| 72 | + * that registered notifications using backlight_register_notifier(). |
---|
| 73 | + */ |
---|
45 | 74 | enum backlight_notification { |
---|
| 75 | + /** |
---|
| 76 | + * @BACKLIGHT_REGISTERED: The backlight device is registered. |
---|
| 77 | + */ |
---|
46 | 78 | BACKLIGHT_REGISTERED, |
---|
| 79 | + |
---|
| 80 | + /** |
---|
| 81 | + * @BACKLIGHT_UNREGISTERED: The backlight revice is unregistered. |
---|
| 82 | + */ |
---|
47 | 83 | BACKLIGHT_UNREGISTERED, |
---|
| 84 | +}; |
---|
| 85 | + |
---|
| 86 | +/** enum backlight_scale - the type of scale used for brightness values |
---|
| 87 | + * |
---|
| 88 | + * The type of scale used for brightness values. |
---|
| 89 | + */ |
---|
| 90 | +enum backlight_scale { |
---|
| 91 | + /** |
---|
| 92 | + * @BACKLIGHT_SCALE_UNKNOWN: The scale is unknown. |
---|
| 93 | + */ |
---|
| 94 | + BACKLIGHT_SCALE_UNKNOWN = 0, |
---|
| 95 | + |
---|
| 96 | + /** |
---|
| 97 | + * @BACKLIGHT_SCALE_LINEAR: The scale is linear. |
---|
| 98 | + * |
---|
| 99 | + * The linear scale will increase brightness the same for each step. |
---|
| 100 | + */ |
---|
| 101 | + BACKLIGHT_SCALE_LINEAR, |
---|
| 102 | + |
---|
| 103 | + /** |
---|
| 104 | + * @BACKLIGHT_SCALE_NON_LINEAR: The scale is not linear. |
---|
| 105 | + * |
---|
| 106 | + * This is often used when the brightness values tries to adjust to |
---|
| 107 | + * the relative perception of the eye demanding a non-linear scale. |
---|
| 108 | + */ |
---|
| 109 | + BACKLIGHT_SCALE_NON_LINEAR, |
---|
48 | 110 | }; |
---|
49 | 111 | |
---|
50 | 112 | struct backlight_device; |
---|
51 | 113 | struct fb_info; |
---|
52 | 114 | |
---|
| 115 | +/** |
---|
| 116 | + * struct backlight_ops - backlight operations |
---|
| 117 | + * |
---|
| 118 | + * The backlight operations are specified when the backlight device is registered. |
---|
| 119 | + */ |
---|
53 | 120 | struct backlight_ops { |
---|
| 121 | + /** |
---|
| 122 | + * @options: Configure how operations are called from the core. |
---|
| 123 | + * |
---|
| 124 | + * The options parameter is used to adjust the behaviour of the core. |
---|
| 125 | + * Set BL_CORE_SUSPENDRESUME to get the update_status() operation called |
---|
| 126 | + * upon suspend and resume. |
---|
| 127 | + */ |
---|
54 | 128 | unsigned int options; |
---|
55 | 129 | |
---|
56 | 130 | #define BL_CORE_SUSPENDRESUME (1 << 0) |
---|
57 | 131 | |
---|
58 | | - /* Notify the backlight driver some property has changed */ |
---|
| 132 | + /** |
---|
| 133 | + * @update_status: Operation called when properties have changed. |
---|
| 134 | + * |
---|
| 135 | + * Notify the backlight driver some property has changed. |
---|
| 136 | + * The update_status operation is protected by the update_lock. |
---|
| 137 | + * |
---|
| 138 | + * The backlight driver is expected to use backlight_is_blank() |
---|
| 139 | + * to check if the display is blanked and set brightness accordingly. |
---|
| 140 | + * update_status() is called when any of the properties has changed. |
---|
| 141 | + * |
---|
| 142 | + * RETURNS: |
---|
| 143 | + * |
---|
| 144 | + * 0 on success, negative error code if any failure occurred. |
---|
| 145 | + */ |
---|
59 | 146 | int (*update_status)(struct backlight_device *); |
---|
60 | | - /* Return the current backlight brightness (accounting for power, |
---|
61 | | - fb_blank etc.) */ |
---|
| 147 | + |
---|
| 148 | + /** |
---|
| 149 | + * @get_brightness: Return the current backlight brightness. |
---|
| 150 | + * |
---|
| 151 | + * The driver may implement this as a readback from the HW. |
---|
| 152 | + * This operation is optional and if not present then the current |
---|
| 153 | + * brightness property value is used. |
---|
| 154 | + * |
---|
| 155 | + * RETURNS: |
---|
| 156 | + * |
---|
| 157 | + * A brightness value which is 0 or a positive number. |
---|
| 158 | + * On failure a negative error code is returned. |
---|
| 159 | + */ |
---|
62 | 160 | int (*get_brightness)(struct backlight_device *); |
---|
63 | | - /* Check if given framebuffer device is the one bound to this backlight; |
---|
64 | | - return 0 if not, !=0 if it is. If NULL, backlight always matches the fb. */ |
---|
65 | | - int (*check_fb)(struct backlight_device *, struct fb_info *); |
---|
| 161 | + |
---|
| 162 | + /** |
---|
| 163 | + * @check_fb: Check the framebuffer device. |
---|
| 164 | + * |
---|
| 165 | + * Check if given framebuffer device is the one bound to this backlight. |
---|
| 166 | + * This operation is optional and if not implemented it is assumed that the |
---|
| 167 | + * fbdev is always the one bound to the backlight. |
---|
| 168 | + * |
---|
| 169 | + * RETURNS: |
---|
| 170 | + * |
---|
| 171 | + * If info is NULL or the info matches the fbdev bound to the backlight return true. |
---|
| 172 | + * If info does not match the fbdev bound to the backlight return false. |
---|
| 173 | + */ |
---|
| 174 | + int (*check_fb)(struct backlight_device *bd, struct fb_info *info); |
---|
66 | 175 | }; |
---|
67 | 176 | |
---|
68 | | -/* This structure defines all the properties of a backlight */ |
---|
| 177 | +/** |
---|
| 178 | + * struct backlight_properties - backlight properties |
---|
| 179 | + * |
---|
| 180 | + * This structure defines all the properties of a backlight. |
---|
| 181 | + */ |
---|
69 | 182 | struct backlight_properties { |
---|
70 | | - /* Current User requested brightness (0 - max_brightness) */ |
---|
| 183 | + /** |
---|
| 184 | + * @brightness: The current brightness requested by the user. |
---|
| 185 | + * |
---|
| 186 | + * The backlight core makes sure the range is (0 to max_brightness) |
---|
| 187 | + * when the brightness is set via the sysfs attribute: |
---|
| 188 | + * /sys/class/backlight/<backlight>/brightness. |
---|
| 189 | + * |
---|
| 190 | + * This value can be set in the backlight_properties passed |
---|
| 191 | + * to devm_backlight_device_register() to set a default brightness |
---|
| 192 | + * value. |
---|
| 193 | + */ |
---|
71 | 194 | int brightness; |
---|
72 | | - /* Maximal value for brightness (read-only) */ |
---|
| 195 | + |
---|
| 196 | + /** |
---|
| 197 | + * @max_brightness: The maximum brightness value. |
---|
| 198 | + * |
---|
| 199 | + * This value must be set in the backlight_properties passed to |
---|
| 200 | + * devm_backlight_device_register() and shall not be modified by the |
---|
| 201 | + * driver after registration. |
---|
| 202 | + */ |
---|
73 | 203 | int max_brightness; |
---|
74 | | - /* Current FB Power mode (0: full on, 1..3: power saving |
---|
75 | | - modes; 4: full off), see FB_BLANK_XXX */ |
---|
| 204 | + |
---|
| 205 | + /** |
---|
| 206 | + * @power: The current power mode. |
---|
| 207 | + * |
---|
| 208 | + * User space can configure the power mode using the sysfs |
---|
| 209 | + * attribute: /sys/class/backlight/<backlight>/bl_power |
---|
| 210 | + * When the power property is updated update_status() is called. |
---|
| 211 | + * |
---|
| 212 | + * The possible values are: (0: full on, 1 to 3: power saving |
---|
| 213 | + * modes; 4: full off), see FB_BLANK_XXX. |
---|
| 214 | + * |
---|
| 215 | + * When the backlight device is enabled @power is set |
---|
| 216 | + * to FB_BLANK_UNBLANK. When the backlight device is disabled |
---|
| 217 | + * @power is set to FB_BLANK_POWERDOWN. |
---|
| 218 | + */ |
---|
76 | 219 | int power; |
---|
77 | | - /* FB Blanking active? (values as for power) */ |
---|
78 | | - /* Due to be removed, please use (state & BL_CORE_FBBLANK) */ |
---|
| 220 | + |
---|
| 221 | + /** |
---|
| 222 | + * @fb_blank: The power state from the FBIOBLANK ioctl. |
---|
| 223 | + * |
---|
| 224 | + * When the FBIOBLANK ioctl is called @fb_blank is set to the |
---|
| 225 | + * blank parameter and the update_status() operation is called. |
---|
| 226 | + * |
---|
| 227 | + * When the backlight device is enabled @fb_blank is set |
---|
| 228 | + * to FB_BLANK_UNBLANK. When the backlight device is disabled |
---|
| 229 | + * @fb_blank is set to FB_BLANK_POWERDOWN. |
---|
| 230 | + * |
---|
| 231 | + * Backlight drivers should avoid using this property. It has been |
---|
| 232 | + * replaced by state & BL_CORE_FBLANK (although most drivers should |
---|
| 233 | + * use backlight_is_blank() as the preferred means to get the blank |
---|
| 234 | + * state). |
---|
| 235 | + * |
---|
| 236 | + * fb_blank is deprecated and will be removed. |
---|
| 237 | + */ |
---|
79 | 238 | int fb_blank; |
---|
80 | | - /* Backlight type */ |
---|
| 239 | + |
---|
| 240 | + /** |
---|
| 241 | + * @type: The type of backlight supported. |
---|
| 242 | + * |
---|
| 243 | + * The backlight type allows userspace to make appropriate |
---|
| 244 | + * policy decisions based on the backlight type. |
---|
| 245 | + * |
---|
| 246 | + * This value must be set in the backlight_properties |
---|
| 247 | + * passed to devm_backlight_device_register(). |
---|
| 248 | + */ |
---|
81 | 249 | enum backlight_type type; |
---|
82 | | - /* Flags used to signal drivers of state changes */ |
---|
| 250 | + |
---|
| 251 | + /** |
---|
| 252 | + * @state: The state of the backlight core. |
---|
| 253 | + * |
---|
| 254 | + * The state is a bitmask. BL_CORE_FBBLANK is set when the display |
---|
| 255 | + * is expected to be blank. BL_CORE_SUSPENDED is set when the |
---|
| 256 | + * driver is suspended. |
---|
| 257 | + * |
---|
| 258 | + * backlight drivers are expected to use backlight_is_blank() |
---|
| 259 | + * in their update_status() operation rather than reading the |
---|
| 260 | + * state property. |
---|
| 261 | + * |
---|
| 262 | + * The state is maintained by the core and drivers may not modify it. |
---|
| 263 | + */ |
---|
83 | 264 | unsigned int state; |
---|
84 | 265 | |
---|
85 | 266 | #define BL_CORE_SUSPENDED (1 << 0) /* backlight is suspended */ |
---|
86 | 267 | #define BL_CORE_FBBLANK (1 << 1) /* backlight is under an fb blank event */ |
---|
87 | 268 | |
---|
| 269 | + /** |
---|
| 270 | + * @scale: The type of the brightness scale. |
---|
| 271 | + */ |
---|
| 272 | + enum backlight_scale scale; |
---|
88 | 273 | }; |
---|
89 | 274 | |
---|
| 275 | +/** |
---|
| 276 | + * struct backlight_device - backlight device data |
---|
| 277 | + * |
---|
| 278 | + * This structure holds all data required by a backlight device. |
---|
| 279 | + */ |
---|
90 | 280 | struct backlight_device { |
---|
91 | | - /* Backlight properties */ |
---|
| 281 | + /** |
---|
| 282 | + * @props: Backlight properties |
---|
| 283 | + */ |
---|
92 | 284 | struct backlight_properties props; |
---|
93 | 285 | |
---|
94 | | - /* Serialise access to update_status method */ |
---|
| 286 | + /** |
---|
| 287 | + * @update_lock: The lock used when calling the update_status() operation. |
---|
| 288 | + * |
---|
| 289 | + * update_lock is an internal backlight lock that serialise access |
---|
| 290 | + * to the update_status() operation. The backlight core holds the update_lock |
---|
| 291 | + * when calling the update_status() operation. The update_lock shall not |
---|
| 292 | + * be used by backlight drivers. |
---|
| 293 | + */ |
---|
95 | 294 | struct mutex update_lock; |
---|
96 | 295 | |
---|
97 | | - /* This protects the 'ops' field. If 'ops' is NULL, the driver that |
---|
98 | | - registered this device has been unloaded, and if class_get_devdata() |
---|
99 | | - points to something in the body of that driver, it is also invalid. */ |
---|
| 296 | + /** |
---|
| 297 | + * @ops_lock: The lock used around everything related to backlight_ops. |
---|
| 298 | + * |
---|
| 299 | + * ops_lock is an internal backlight lock that protects the ops pointer |
---|
| 300 | + * and is used around all accesses to ops and when the operations are |
---|
| 301 | + * invoked. The ops_lock shall not be used by backlight drivers. |
---|
| 302 | + */ |
---|
100 | 303 | struct mutex ops_lock; |
---|
| 304 | + |
---|
| 305 | + /** |
---|
| 306 | + * @ops: Pointer to the backlight operations. |
---|
| 307 | + * |
---|
| 308 | + * If ops is NULL, the driver that registered this device has been unloaded, |
---|
| 309 | + * and if class_get_devdata() points to something in the body of that driver, |
---|
| 310 | + * it is also invalid. |
---|
| 311 | + */ |
---|
101 | 312 | const struct backlight_ops *ops; |
---|
102 | 313 | |
---|
103 | | - /* The framebuffer notifier block */ |
---|
| 314 | + /** |
---|
| 315 | + * @fb_notif: The framebuffer notifier block |
---|
| 316 | + */ |
---|
104 | 317 | struct notifier_block fb_notif; |
---|
105 | 318 | |
---|
106 | | - /* list entry of all registered backlight devices */ |
---|
| 319 | + /** |
---|
| 320 | + * @entry: List entry of all registered backlight devices |
---|
| 321 | + */ |
---|
107 | 322 | struct list_head entry; |
---|
108 | 323 | |
---|
| 324 | + /** |
---|
| 325 | + * @dev: Parent device. |
---|
| 326 | + */ |
---|
109 | 327 | struct device dev; |
---|
110 | | - /* Backlight cooling device */ |
---|
111 | | - struct thermal_cooling_device *cdev; |
---|
112 | | - /* Thermally limited max brightness */ |
---|
113 | | - int thermal_brightness_limit; |
---|
114 | | - /* User brightness request */ |
---|
115 | | - int usr_brightness_req; |
---|
116 | 328 | |
---|
117 | | - /* Multiple framebuffers may share one backlight device */ |
---|
| 329 | + /** |
---|
| 330 | + * @fb_bl_on: The state of individual fbdev's. |
---|
| 331 | + * |
---|
| 332 | + * Multiple fbdev's may share one backlight device. The fb_bl_on |
---|
| 333 | + * records the state of the individual fbdev. |
---|
| 334 | + */ |
---|
118 | 335 | bool fb_bl_on[FB_MAX]; |
---|
119 | 336 | |
---|
| 337 | + /** |
---|
| 338 | + * @use_count: The number of uses of fb_bl_on. |
---|
| 339 | + */ |
---|
120 | 340 | int use_count; |
---|
121 | 341 | }; |
---|
122 | 342 | |
---|
| 343 | +/** |
---|
| 344 | + * backlight_update_status - force an update of the backlight device status |
---|
| 345 | + * @bd: the backlight device |
---|
| 346 | + */ |
---|
123 | 347 | static inline int backlight_update_status(struct backlight_device *bd) |
---|
124 | 348 | { |
---|
125 | 349 | int ret = -ENOENT; |
---|
.. | .. |
---|
165 | 389 | } |
---|
166 | 390 | |
---|
167 | 391 | /** |
---|
168 | | - * backlight_put - Drop backlight reference |
---|
169 | | - * @bd: the backlight device to put |
---|
| 392 | + * backlight_is_blank - Return true if display is expected to be blank |
---|
| 393 | + * @bd: the backlight device |
---|
| 394 | + * |
---|
| 395 | + * Display is expected to be blank if any of these is true:: |
---|
| 396 | + * |
---|
| 397 | + * 1) if power in not UNBLANK |
---|
| 398 | + * 2) if fb_blank is not UNBLANK |
---|
| 399 | + * 3) if state indicate BLANK or SUSPENDED |
---|
| 400 | + * |
---|
| 401 | + * Returns true if display is expected to be blank, false otherwise. |
---|
170 | 402 | */ |
---|
171 | | -static inline void backlight_put(struct backlight_device *bd) |
---|
| 403 | +static inline bool backlight_is_blank(const struct backlight_device *bd) |
---|
172 | 404 | { |
---|
173 | | - if (bd) |
---|
174 | | - put_device(&bd->dev); |
---|
| 405 | + return bd->props.power != FB_BLANK_UNBLANK || |
---|
| 406 | + bd->props.fb_blank != FB_BLANK_UNBLANK || |
---|
| 407 | + bd->props.state & (BL_CORE_SUSPENDED | BL_CORE_FBBLANK); |
---|
175 | 408 | } |
---|
176 | 409 | |
---|
177 | | -extern struct backlight_device *backlight_device_register(const char *name, |
---|
178 | | - struct device *dev, void *devdata, const struct backlight_ops *ops, |
---|
179 | | - const struct backlight_properties *props); |
---|
180 | | -extern struct backlight_device *devm_backlight_device_register( |
---|
181 | | - struct device *dev, const char *name, struct device *parent, |
---|
182 | | - void *devdata, const struct backlight_ops *ops, |
---|
183 | | - const struct backlight_properties *props); |
---|
184 | | -extern void backlight_device_unregister(struct backlight_device *bd); |
---|
185 | | -extern void devm_backlight_device_unregister(struct device *dev, |
---|
186 | | - struct backlight_device *bd); |
---|
187 | | -extern void backlight_force_update(struct backlight_device *bd, |
---|
188 | | - enum backlight_update_reason reason); |
---|
189 | | -extern int backlight_register_notifier(struct notifier_block *nb); |
---|
190 | | -extern int backlight_unregister_notifier(struct notifier_block *nb); |
---|
191 | | -extern struct backlight_device *backlight_device_get_by_type(enum backlight_type type); |
---|
192 | | -extern int backlight_device_set_brightness(struct backlight_device *bd, unsigned long brightness); |
---|
| 410 | +/** |
---|
| 411 | + * backlight_get_brightness - Returns the current brightness value |
---|
| 412 | + * @bd: the backlight device |
---|
| 413 | + * |
---|
| 414 | + * Returns the current brightness value, taking in consideration the current |
---|
| 415 | + * state. If backlight_is_blank() returns true then return 0 as brightness |
---|
| 416 | + * otherwise return the current brightness property value. |
---|
| 417 | + * |
---|
| 418 | + * Backlight drivers are expected to use this function in their update_status() |
---|
| 419 | + * operation to get the brightness value. |
---|
| 420 | + */ |
---|
| 421 | +static inline int backlight_get_brightness(const struct backlight_device *bd) |
---|
| 422 | +{ |
---|
| 423 | + if (backlight_is_blank(bd)) |
---|
| 424 | + return 0; |
---|
| 425 | + else |
---|
| 426 | + return bd->props.brightness; |
---|
| 427 | +} |
---|
| 428 | + |
---|
| 429 | +struct backlight_device * |
---|
| 430 | +backlight_device_register(const char *name, struct device *dev, void *devdata, |
---|
| 431 | + const struct backlight_ops *ops, |
---|
| 432 | + const struct backlight_properties *props); |
---|
| 433 | +struct backlight_device * |
---|
| 434 | +devm_backlight_device_register(struct device *dev, const char *name, |
---|
| 435 | + struct device *parent, void *devdata, |
---|
| 436 | + const struct backlight_ops *ops, |
---|
| 437 | + const struct backlight_properties *props); |
---|
| 438 | +void backlight_device_unregister(struct backlight_device *bd); |
---|
| 439 | +void devm_backlight_device_unregister(struct device *dev, |
---|
| 440 | + struct backlight_device *bd); |
---|
| 441 | +void backlight_force_update(struct backlight_device *bd, |
---|
| 442 | + enum backlight_update_reason reason); |
---|
| 443 | +int backlight_register_notifier(struct notifier_block *nb); |
---|
| 444 | +int backlight_unregister_notifier(struct notifier_block *nb); |
---|
| 445 | +struct backlight_device *backlight_device_get_by_name(const char *name); |
---|
| 446 | +struct backlight_device *backlight_device_get_by_type(enum backlight_type type); |
---|
| 447 | +int backlight_device_set_brightness(struct backlight_device *bd, |
---|
| 448 | + unsigned long brightness); |
---|
193 | 449 | |
---|
194 | 450 | #define to_backlight_device(obj) container_of(obj, struct backlight_device, dev) |
---|
195 | 451 | |
---|
| 452 | +/** |
---|
| 453 | + * bl_get_data - access devdata |
---|
| 454 | + * @bl_dev: pointer to backlight device |
---|
| 455 | + * |
---|
| 456 | + * When a backlight device is registered the driver has the possibility |
---|
| 457 | + * to supply a void * devdata. bl_get_data() return a pointer to the |
---|
| 458 | + * devdata. |
---|
| 459 | + * |
---|
| 460 | + * RETURNS: |
---|
| 461 | + * |
---|
| 462 | + * pointer to devdata stored while registering the backlight device. |
---|
| 463 | + */ |
---|
196 | 464 | static inline void * bl_get_data(struct backlight_device *bl_dev) |
---|
197 | 465 | { |
---|
198 | 466 | return dev_get_drvdata(&bl_dev->dev); |
---|
199 | 467 | } |
---|
200 | | - |
---|
201 | | -struct generic_bl_info { |
---|
202 | | - const char *name; |
---|
203 | | - int max_intensity; |
---|
204 | | - int default_intensity; |
---|
205 | | - int limit_mask; |
---|
206 | | - void (*set_bl_intensity)(int intensity); |
---|
207 | | - void (*kick_battery)(void); |
---|
208 | | -}; |
---|
209 | 468 | |
---|
210 | 469 | #ifdef CONFIG_OF |
---|
211 | 470 | struct backlight_device *of_find_backlight_by_node(struct device_node *node); |
---|
.. | .. |
---|
218 | 477 | #endif |
---|
219 | 478 | |
---|
220 | 479 | #if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) |
---|
221 | | -struct backlight_device *of_find_backlight(struct device *dev); |
---|
222 | 480 | struct backlight_device *devm_of_find_backlight(struct device *dev); |
---|
223 | 481 | #else |
---|
224 | | -static inline struct backlight_device *of_find_backlight(struct device *dev) |
---|
225 | | -{ |
---|
226 | | - return NULL; |
---|
227 | | -} |
---|
228 | | - |
---|
229 | 482 | static inline struct backlight_device * |
---|
230 | 483 | devm_of_find_backlight(struct device *dev) |
---|
231 | 484 | { |
---|