| .. | .. |
|---|
| 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 | { |
|---|