1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds * Backlight Lowlevel Control Abstraction
41da177e4SLinus Torvalds *
51da177e4SLinus Torvalds * Copyright (C) 2003,2004 Hewlett-Packard Company
61da177e4SLinus Torvalds *
71da177e4SLinus Torvalds */
81da177e4SLinus Torvalds
91da177e4SLinus Torvalds #ifndef _LINUX_BACKLIGHT_H
101da177e4SLinus Torvalds #define _LINUX_BACKLIGHT_H
111da177e4SLinus Torvalds
121da177e4SLinus Torvalds #include <linux/device.h>
13a55944caSLiu Ying #include <linux/fb.h>
1428ee086dSRichard Purdie #include <linux/mutex.h>
151da177e4SLinus Torvalds #include <linux/notifier.h>
160a4be726SThomas Zimmermann #include <linux/types.h>
171da177e4SLinus Torvalds
182d15bb47SSam Ravnborg /**
192d15bb47SSam Ravnborg * enum backlight_update_reason - what method was used to update backlight
202d15bb47SSam Ravnborg *
212d15bb47SSam Ravnborg * A driver indicates the method (reason) used for updating the backlight
222d15bb47SSam Ravnborg * when calling backlight_force_update().
232d15bb47SSam Ravnborg */
24325253a6SMatthew Garrett enum backlight_update_reason {
252d15bb47SSam Ravnborg /**
262d15bb47SSam Ravnborg * @BACKLIGHT_UPDATE_HOTKEY: The backlight was updated using a hot-key.
272d15bb47SSam Ravnborg */
28325253a6SMatthew Garrett BACKLIGHT_UPDATE_HOTKEY,
292d15bb47SSam Ravnborg
302d15bb47SSam Ravnborg /**
312d15bb47SSam Ravnborg * @BACKLIGHT_UPDATE_SYSFS: The backlight was updated using sysfs.
322d15bb47SSam Ravnborg */
33325253a6SMatthew Garrett BACKLIGHT_UPDATE_SYSFS,
34325253a6SMatthew Garrett };
35325253a6SMatthew Garrett
362d15bb47SSam Ravnborg /**
372d15bb47SSam Ravnborg * enum backlight_type - the type of backlight control
382d15bb47SSam Ravnborg *
392d15bb47SSam Ravnborg * The type of interface used to control the backlight.
402d15bb47SSam Ravnborg */
41bb7ca747SMatthew Garrett enum backlight_type {
422d15bb47SSam Ravnborg /**
432d15bb47SSam Ravnborg * @BACKLIGHT_RAW:
442d15bb47SSam Ravnborg *
452d15bb47SSam Ravnborg * The backlight is controlled using hardware registers.
462d15bb47SSam Ravnborg */
47bb7ca747SMatthew Garrett BACKLIGHT_RAW = 1,
482d15bb47SSam Ravnborg
492d15bb47SSam Ravnborg /**
502d15bb47SSam Ravnborg * @BACKLIGHT_PLATFORM:
512d15bb47SSam Ravnborg *
522d15bb47SSam Ravnborg * The backlight is controlled using a platform-specific interface.
532d15bb47SSam Ravnborg */
54bb7ca747SMatthew Garrett BACKLIGHT_PLATFORM,
552d15bb47SSam Ravnborg
562d15bb47SSam Ravnborg /**
572d15bb47SSam Ravnborg * @BACKLIGHT_FIRMWARE:
582d15bb47SSam Ravnborg *
592d15bb47SSam Ravnborg * The backlight is controlled using a standard firmware interface.
602d15bb47SSam Ravnborg */
61bb7ca747SMatthew Garrett BACKLIGHT_FIRMWARE,
622d15bb47SSam Ravnborg
632d15bb47SSam Ravnborg /**
642d15bb47SSam Ravnborg * @BACKLIGHT_TYPE_MAX: Number of entries.
652d15bb47SSam Ravnborg */
66bb7ca747SMatthew Garrett BACKLIGHT_TYPE_MAX,
67bb7ca747SMatthew Garrett };
68bb7ca747SMatthew Garrett
692d15bb47SSam Ravnborg /** enum backlight_scale - the type of scale used for brightness values
702d15bb47SSam Ravnborg *
712d15bb47SSam Ravnborg * The type of scale used for brightness values.
722d15bb47SSam Ravnborg */
73d55c028fSMatthias Kaehlcke enum backlight_scale {
742d15bb47SSam Ravnborg /**
752d15bb47SSam Ravnborg * @BACKLIGHT_SCALE_UNKNOWN: The scale is unknown.
762d15bb47SSam Ravnborg */
77d55c028fSMatthias Kaehlcke BACKLIGHT_SCALE_UNKNOWN = 0,
782d15bb47SSam Ravnborg
792d15bb47SSam Ravnborg /**
802d15bb47SSam Ravnborg * @BACKLIGHT_SCALE_LINEAR: The scale is linear.
812d15bb47SSam Ravnborg *
822d15bb47SSam Ravnborg * The linear scale will increase brightness the same for each step.
832d15bb47SSam Ravnborg */
84d55c028fSMatthias Kaehlcke BACKLIGHT_SCALE_LINEAR,
852d15bb47SSam Ravnborg
862d15bb47SSam Ravnborg /**
872d15bb47SSam Ravnborg * @BACKLIGHT_SCALE_NON_LINEAR: The scale is not linear.
882d15bb47SSam Ravnborg *
892d15bb47SSam Ravnborg * This is often used when the brightness values tries to adjust to
902d15bb47SSam Ravnborg * the relative perception of the eye demanding a non-linear scale.
912d15bb47SSam Ravnborg */
92d55c028fSMatthias Kaehlcke BACKLIGHT_SCALE_NON_LINEAR,
93d55c028fSMatthias Kaehlcke };
94d55c028fSMatthias Kaehlcke
951da177e4SLinus Torvalds struct backlight_device;
961da177e4SLinus Torvalds
97ca7c20b2SSam Ravnborg /**
98ca7c20b2SSam Ravnborg * struct backlight_ops - backlight operations
99ca7c20b2SSam Ravnborg *
100ca7c20b2SSam Ravnborg * The backlight operations are specified when the backlight device is registered.
101ca7c20b2SSam Ravnborg */
102599a52d1SRichard Purdie struct backlight_ops {
103ca7c20b2SSam Ravnborg /**
104ca7c20b2SSam Ravnborg * @options: Configure how operations are called from the core.
105ca7c20b2SSam Ravnborg *
106ca7c20b2SSam Ravnborg * The options parameter is used to adjust the behaviour of the core.
107ca7c20b2SSam Ravnborg * Set BL_CORE_SUSPENDRESUME to get the update_status() operation called
108ca7c20b2SSam Ravnborg * upon suspend and resume.
109ca7c20b2SSam Ravnborg */
110b4144e4fSRichard Purdie unsigned int options;
111c835ee7fSRichard Purdie
112c835ee7fSRichard Purdie #define BL_CORE_SUSPENDRESUME (1 << 0)
113c835ee7fSRichard Purdie
114ca7c20b2SSam Ravnborg /**
115ca7c20b2SSam Ravnborg * @update_status: Operation called when properties have changed.
116ca7c20b2SSam Ravnborg *
117ca7c20b2SSam Ravnborg * Notify the backlight driver some property has changed.
118ca7c20b2SSam Ravnborg * The update_status operation is protected by the update_lock.
119ca7c20b2SSam Ravnborg *
120ca7c20b2SSam Ravnborg * The backlight driver is expected to use backlight_is_blank()
121ca7c20b2SSam Ravnborg * to check if the display is blanked and set brightness accordingly.
122ca7c20b2SSam Ravnborg * update_status() is called when any of the properties has changed.
123ca7c20b2SSam Ravnborg *
124ca7c20b2SSam Ravnborg * RETURNS:
125ca7c20b2SSam Ravnborg *
126ca7c20b2SSam Ravnborg * 0 on success, negative error code if any failure occurred.
127ca7c20b2SSam Ravnborg */
128b4144e4fSRichard Purdie int (*update_status)(struct backlight_device *);
129ca7c20b2SSam Ravnborg
130ca7c20b2SSam Ravnborg /**
131ca7c20b2SSam Ravnborg * @get_brightness: Return the current backlight brightness.
132ca7c20b2SSam Ravnborg *
133ca7c20b2SSam Ravnborg * The driver may implement this as a readback from the HW.
134ca7c20b2SSam Ravnborg * This operation is optional and if not present then the current
135ca7c20b2SSam Ravnborg * brightness property value is used.
136ca7c20b2SSam Ravnborg *
137ca7c20b2SSam Ravnborg * RETURNS:
138ca7c20b2SSam Ravnborg *
139ca7c20b2SSam Ravnborg * A brightness value which is 0 or a positive number.
140ca7c20b2SSam Ravnborg * On failure a negative error code is returned.
141ca7c20b2SSam Ravnborg */
142b4144e4fSRichard Purdie int (*get_brightness)(struct backlight_device *);
143ca7c20b2SSam Ravnborg
144ca7c20b2SSam Ravnborg /**
1450a4be726SThomas Zimmermann * @controls_device: Check against the display device
146ca7c20b2SSam Ravnborg *
1470a4be726SThomas Zimmermann * Check if the backlight controls the given display device. This
1480a4be726SThomas Zimmermann * operation is optional and if not implemented it is assumed that
1490a4be726SThomas Zimmermann * the display is always the one controlled by the backlight.
150ca7c20b2SSam Ravnborg *
151ca7c20b2SSam Ravnborg * RETURNS:
152ca7c20b2SSam Ravnborg *
1530a4be726SThomas Zimmermann * If display_dev is NULL or display_dev matches the device controlled by
1540a4be726SThomas Zimmermann * the backlight, return true. Otherwise return false.
155ca7c20b2SSam Ravnborg */
1560a4be726SThomas Zimmermann bool (*controls_device)(struct backlight_device *bd, struct device *display_dev);
157599a52d1SRichard Purdie };
1586ca01765SRichard Purdie
159cabf1613SSam Ravnborg /**
160cabf1613SSam Ravnborg * struct backlight_properties - backlight properties
161cabf1613SSam Ravnborg *
162cabf1613SSam Ravnborg * This structure defines all the properties of a backlight.
163cabf1613SSam Ravnborg */
164599a52d1SRichard Purdie struct backlight_properties {
165cabf1613SSam Ravnborg /**
166cabf1613SSam Ravnborg * @brightness: The current brightness requested by the user.
167cabf1613SSam Ravnborg *
168cabf1613SSam Ravnborg * The backlight core makes sure the range is (0 to max_brightness)
169cabf1613SSam Ravnborg * when the brightness is set via the sysfs attribute:
170cabf1613SSam Ravnborg * /sys/class/backlight/<backlight>/brightness.
171cabf1613SSam Ravnborg *
172cabf1613SSam Ravnborg * This value can be set in the backlight_properties passed
173cabf1613SSam Ravnborg * to devm_backlight_device_register() to set a default brightness
174cabf1613SSam Ravnborg * value.
175cabf1613SSam Ravnborg */
1766ca01765SRichard Purdie int brightness;
177cabf1613SSam Ravnborg
178cabf1613SSam Ravnborg /**
179cabf1613SSam Ravnborg * @max_brightness: The maximum brightness value.
180cabf1613SSam Ravnborg *
181cabf1613SSam Ravnborg * This value must be set in the backlight_properties passed to
182cabf1613SSam Ravnborg * devm_backlight_device_register() and shall not be modified by the
183cabf1613SSam Ravnborg * driver after registration.
184cabf1613SSam Ravnborg */
1856ca01765SRichard Purdie int max_brightness;
186cabf1613SSam Ravnborg
187cabf1613SSam Ravnborg /**
188cabf1613SSam Ravnborg * @power: The current power mode.
189cabf1613SSam Ravnborg *
190cabf1613SSam Ravnborg * User space can configure the power mode using the sysfs
191cabf1613SSam Ravnborg * attribute: /sys/class/backlight/<backlight>/bl_power
192cabf1613SSam Ravnborg * When the power property is updated update_status() is called.
193cabf1613SSam Ravnborg *
194*a1cacb8aSThomas Zimmermann * The possible values are: (0: full on, 4: full off), see
195*a1cacb8aSThomas Zimmermann * BACKLIGHT_POWER constants.
196cabf1613SSam Ravnborg *
197*a1cacb8aSThomas Zimmermann * When the backlight device is enabled, @power is set to
198*a1cacb8aSThomas Zimmermann * BACKLIGHT_POWER_ON. When the backlight device is disabled,
199*a1cacb8aSThomas Zimmermann * @power is set to BACKLIGHT_POWER_OFF.
200cabf1613SSam Ravnborg */
2016ca01765SRichard Purdie int power;
202cabf1613SSam Ravnborg
203*a1cacb8aSThomas Zimmermann #define BACKLIGHT_POWER_ON (0)
204*a1cacb8aSThomas Zimmermann #define BACKLIGHT_POWER_OFF (4)
205*a1cacb8aSThomas Zimmermann #define BACKLIGHT_POWER_REDUCED (1) // deprecated; don't use in new code
206*a1cacb8aSThomas Zimmermann
207cabf1613SSam Ravnborg /**
208cabf1613SSam Ravnborg * @type: The type of backlight supported.
209cabf1613SSam Ravnborg *
210cabf1613SSam Ravnborg * The backlight type allows userspace to make appropriate
211cabf1613SSam Ravnborg * policy decisions based on the backlight type.
212cabf1613SSam Ravnborg *
213cabf1613SSam Ravnborg * This value must be set in the backlight_properties
214cabf1613SSam Ravnborg * passed to devm_backlight_device_register().
215cabf1613SSam Ravnborg */
216bb7ca747SMatthew Garrett enum backlight_type type;
217cabf1613SSam Ravnborg
218cabf1613SSam Ravnborg /**
219cabf1613SSam Ravnborg * @state: The state of the backlight core.
220cabf1613SSam Ravnborg *
221cabf1613SSam Ravnborg * The state is a bitmask. BL_CORE_FBBLANK is set when the display
222cabf1613SSam Ravnborg * is expected to be blank. BL_CORE_SUSPENDED is set when the
223cabf1613SSam Ravnborg * driver is suspended.
224cabf1613SSam Ravnborg *
225cabf1613SSam Ravnborg * backlight drivers are expected to use backlight_is_blank()
226cabf1613SSam Ravnborg * in their update_status() operation rather than reading the
227cabf1613SSam Ravnborg * state property.
228cabf1613SSam Ravnborg *
229cabf1613SSam Ravnborg * The state is maintained by the core and drivers may not modify it.
230cabf1613SSam Ravnborg */
231c835ee7fSRichard Purdie unsigned int state;
232c835ee7fSRichard Purdie
233c835ee7fSRichard Purdie #define BL_CORE_SUSPENDED (1 << 0) /* backlight is suspended */
234c835ee7fSRichard Purdie #define BL_CORE_FBBLANK (1 << 1) /* backlight is under an fb blank event */
235c835ee7fSRichard Purdie
236cabf1613SSam Ravnborg /**
237cabf1613SSam Ravnborg * @scale: The type of the brightness scale.
238cabf1613SSam Ravnborg */
239cabf1613SSam Ravnborg enum backlight_scale scale;
2401da177e4SLinus Torvalds };
2411da177e4SLinus Torvalds
2426f10cd12SSam Ravnborg /**
2436f10cd12SSam Ravnborg * struct backlight_device - backlight device data
2446f10cd12SSam Ravnborg *
2456f10cd12SSam Ravnborg * This structure holds all data required by a backlight device.
2466f10cd12SSam Ravnborg */
2471da177e4SLinus Torvalds struct backlight_device {
2486f10cd12SSam Ravnborg /**
2496f10cd12SSam Ravnborg * @props: Backlight properties
2506f10cd12SSam Ravnborg */
251599a52d1SRichard Purdie struct backlight_properties props;
252599a52d1SRichard Purdie
2536f10cd12SSam Ravnborg /**
2546f10cd12SSam Ravnborg * @update_lock: The lock used when calling the update_status() operation.
2556f10cd12SSam Ravnborg *
2566f10cd12SSam Ravnborg * update_lock is an internal backlight lock that serialise access
2576f10cd12SSam Ravnborg * to the update_status() operation. The backlight core holds the update_lock
2586f10cd12SSam Ravnborg * when calling the update_status() operation. The update_lock shall not
2596f10cd12SSam Ravnborg * be used by backlight drivers.
2606f10cd12SSam Ravnborg */
26128ee086dSRichard Purdie struct mutex update_lock;
262599a52d1SRichard Purdie
2636f10cd12SSam Ravnborg /**
2646f10cd12SSam Ravnborg * @ops_lock: The lock used around everything related to backlight_ops.
2656f10cd12SSam Ravnborg *
2666f10cd12SSam Ravnborg * ops_lock is an internal backlight lock that protects the ops pointer
2676f10cd12SSam Ravnborg * and is used around all accesses to ops and when the operations are
2686f10cd12SSam Ravnborg * invoked. The ops_lock shall not be used by backlight drivers.
2696f10cd12SSam Ravnborg */
270599a52d1SRichard Purdie struct mutex ops_lock;
2716f10cd12SSam Ravnborg
2726f10cd12SSam Ravnborg /**
2736f10cd12SSam Ravnborg * @ops: Pointer to the backlight operations.
2746f10cd12SSam Ravnborg *
2756f10cd12SSam Ravnborg * If ops is NULL, the driver that registered this device has been unloaded,
2766f10cd12SSam Ravnborg * and if class_get_devdata() points to something in the body of that driver,
2776f10cd12SSam Ravnborg * it is also invalid.
2786f10cd12SSam Ravnborg */
2799905a43bSEmese Revfy const struct backlight_ops *ops;
280599a52d1SRichard Purdie
2816f10cd12SSam Ravnborg /**
2826f10cd12SSam Ravnborg * @fb_notif: The framebuffer notifier block
2836f10cd12SSam Ravnborg */
2841da177e4SLinus Torvalds struct notifier_block fb_notif;
285655bfd7aSRichard Purdie
2866f10cd12SSam Ravnborg /**
2876f10cd12SSam Ravnborg * @entry: List entry of all registered backlight devices
2886f10cd12SSam Ravnborg */
2895915a3dbSAaron Lu struct list_head entry;
2905915a3dbSAaron Lu
2916f10cd12SSam Ravnborg /**
2926f10cd12SSam Ravnborg * @dev: Parent device.
2936f10cd12SSam Ravnborg */
294655bfd7aSRichard Purdie struct device dev;
295a55944caSLiu Ying
2966f10cd12SSam Ravnborg /**
2976f10cd12SSam Ravnborg * @fb_bl_on: The state of individual fbdev's.
2986f10cd12SSam Ravnborg *
2996f10cd12SSam Ravnborg * Multiple fbdev's may share one backlight device. The fb_bl_on
3006f10cd12SSam Ravnborg * records the state of the individual fbdev.
3016f10cd12SSam Ravnborg */
302a55944caSLiu Ying bool fb_bl_on[FB_MAX];
303a55944caSLiu Ying
3046f10cd12SSam Ravnborg /**
3056f10cd12SSam Ravnborg * @use_count: The number of uses of fb_bl_on.
3066f10cd12SSam Ravnborg */
307a55944caSLiu Ying int use_count;
3081da177e4SLinus Torvalds };
3091da177e4SLinus Torvalds
310d160fd4eSSam Ravnborg /**
311d160fd4eSSam Ravnborg * backlight_update_status - force an update of the backlight device status
312d160fd4eSSam Ravnborg * @bd: the backlight device
313d160fd4eSSam Ravnborg */
backlight_update_status(struct backlight_device * bd)314cca0ba2dSHyungwon Hwang static inline int backlight_update_status(struct backlight_device *bd)
31528ee086dSRichard Purdie {
316cca0ba2dSHyungwon Hwang int ret = -ENOENT;
317cca0ba2dSHyungwon Hwang
31828ee086dSRichard Purdie mutex_lock(&bd->update_lock);
319599a52d1SRichard Purdie if (bd->ops && bd->ops->update_status)
320cca0ba2dSHyungwon Hwang ret = bd->ops->update_status(bd);
32128ee086dSRichard Purdie mutex_unlock(&bd->update_lock);
322cca0ba2dSHyungwon Hwang
323cca0ba2dSHyungwon Hwang return ret;
32428ee086dSRichard Purdie }
32528ee086dSRichard Purdie
3265b698be0SMeghana Madhyastha /**
3275b698be0SMeghana Madhyastha * backlight_enable - Enable backlight
3285b698be0SMeghana Madhyastha * @bd: the backlight device to enable
3295b698be0SMeghana Madhyastha */
backlight_enable(struct backlight_device * bd)3305b698be0SMeghana Madhyastha static inline int backlight_enable(struct backlight_device *bd)
3315b698be0SMeghana Madhyastha {
3325b698be0SMeghana Madhyastha if (!bd)
3335b698be0SMeghana Madhyastha return 0;
3345b698be0SMeghana Madhyastha
335*a1cacb8aSThomas Zimmermann bd->props.power = BACKLIGHT_POWER_ON;
3365b698be0SMeghana Madhyastha bd->props.state &= ~BL_CORE_FBBLANK;
3375b698be0SMeghana Madhyastha
3385b698be0SMeghana Madhyastha return backlight_update_status(bd);
3395b698be0SMeghana Madhyastha }
3405b698be0SMeghana Madhyastha
3415b698be0SMeghana Madhyastha /**
3425b698be0SMeghana Madhyastha * backlight_disable - Disable backlight
3435b698be0SMeghana Madhyastha * @bd: the backlight device to disable
3445b698be0SMeghana Madhyastha */
backlight_disable(struct backlight_device * bd)3455b698be0SMeghana Madhyastha static inline int backlight_disable(struct backlight_device *bd)
3465b698be0SMeghana Madhyastha {
3475b698be0SMeghana Madhyastha if (!bd)
3485b698be0SMeghana Madhyastha return 0;
3495b698be0SMeghana Madhyastha
350*a1cacb8aSThomas Zimmermann bd->props.power = BACKLIGHT_POWER_OFF;
3515b698be0SMeghana Madhyastha bd->props.state |= BL_CORE_FBBLANK;
3525b698be0SMeghana Madhyastha
3535b698be0SMeghana Madhyastha return backlight_update_status(bd);
3545b698be0SMeghana Madhyastha }
3555b698be0SMeghana Madhyastha
356c2adda27SMeghana Madhyastha /**
3571c91b465SSam Ravnborg * backlight_is_blank - Return true if display is expected to be blank
3581c91b465SSam Ravnborg * @bd: the backlight device
3591c91b465SSam Ravnborg *
3601c91b465SSam Ravnborg * Display is expected to be blank if any of these is true::
3611c91b465SSam Ravnborg *
3621c91b465SSam Ravnborg * 1) if power in not UNBLANK
3634551978bSThomas Zimmermann * 2) if state indicate BLANK or SUSPENDED
3641c91b465SSam Ravnborg *
3651c91b465SSam Ravnborg * Returns true if display is expected to be blank, false otherwise.
3661c91b465SSam Ravnborg */
backlight_is_blank(const struct backlight_device * bd)3671c91b465SSam Ravnborg static inline bool backlight_is_blank(const struct backlight_device *bd)
3681c91b465SSam Ravnborg {
369*a1cacb8aSThomas Zimmermann return bd->props.power != BACKLIGHT_POWER_ON ||
3701c91b465SSam Ravnborg bd->props.state & (BL_CORE_SUSPENDED | BL_CORE_FBBLANK);
3711c91b465SSam Ravnborg }
3721c91b465SSam Ravnborg
3732144d00eSSam Ravnborg /**
3742144d00eSSam Ravnborg * backlight_get_brightness - Returns the current brightness value
3752144d00eSSam Ravnborg * @bd: the backlight device
3762144d00eSSam Ravnborg *
3772144d00eSSam Ravnborg * Returns the current brightness value, taking in consideration the current
3782144d00eSSam Ravnborg * state. If backlight_is_blank() returns true then return 0 as brightness
3792144d00eSSam Ravnborg * otherwise return the current brightness property value.
3802144d00eSSam Ravnborg *
3812144d00eSSam Ravnborg * Backlight drivers are expected to use this function in their update_status()
3822144d00eSSam Ravnborg * operation to get the brightness value.
3832144d00eSSam Ravnborg */
backlight_get_brightness(const struct backlight_device * bd)3842144d00eSSam Ravnborg static inline int backlight_get_brightness(const struct backlight_device *bd)
3852144d00eSSam Ravnborg {
3862144d00eSSam Ravnborg if (backlight_is_blank(bd))
3872144d00eSSam Ravnborg return 0;
3882144d00eSSam Ravnborg else
3892144d00eSSam Ravnborg return bd->props.brightness;
3902144d00eSSam Ravnborg }
3912144d00eSSam Ravnborg
3929c4aa311SSam Ravnborg struct backlight_device *
3939c4aa311SSam Ravnborg backlight_device_register(const char *name, struct device *dev, void *devdata,
3949c4aa311SSam Ravnborg const struct backlight_ops *ops,
395a19a6ee6SMatthew Garrett const struct backlight_properties *props);
3969c4aa311SSam Ravnborg struct backlight_device *
3979c4aa311SSam Ravnborg devm_backlight_device_register(struct device *dev, const char *name,
3989c4aa311SSam Ravnborg struct device *parent, void *devdata,
3999c4aa311SSam Ravnborg const struct backlight_ops *ops,
4008318fde4SJingoo Han const struct backlight_properties *props);
4019c4aa311SSam Ravnborg void backlight_device_unregister(struct backlight_device *bd);
4029c4aa311SSam Ravnborg void devm_backlight_device_unregister(struct device *dev,
4038318fde4SJingoo Han struct backlight_device *bd);
4049c4aa311SSam Ravnborg void backlight_force_update(struct backlight_device *bd,
405325253a6SMatthew Garrett enum backlight_update_reason reason);
406479da1f5SNoralf Trønnes struct backlight_device *backlight_device_get_by_name(const char *name);
4079c4aa311SSam Ravnborg struct backlight_device *backlight_device_get_by_type(enum backlight_type type);
4089c4aa311SSam Ravnborg int backlight_device_set_brightness(struct backlight_device *bd,
4099c4aa311SSam Ravnborg unsigned long brightness);
4101da177e4SLinus Torvalds
411655bfd7aSRichard Purdie #define to_backlight_device(obj) container_of(obj, struct backlight_device, dev)
412655bfd7aSRichard Purdie
413d160fd4eSSam Ravnborg /**
414d160fd4eSSam Ravnborg * bl_get_data - access devdata
415d160fd4eSSam Ravnborg * @bl_dev: pointer to backlight device
416d160fd4eSSam Ravnborg *
417d160fd4eSSam Ravnborg * When a backlight device is registered the driver has the possibility
418d160fd4eSSam Ravnborg * to supply a void * devdata. bl_get_data() return a pointer to the
419d160fd4eSSam Ravnborg * devdata.
420d160fd4eSSam Ravnborg *
421d160fd4eSSam Ravnborg * RETURNS:
422d160fd4eSSam Ravnborg *
423d160fd4eSSam Ravnborg * pointer to devdata stored while registering the backlight device.
424d160fd4eSSam Ravnborg */
bl_get_data(struct backlight_device * bl_dev)425655bfd7aSRichard Purdie static inline void * bl_get_data(struct backlight_device *bl_dev)
426655bfd7aSRichard Purdie {
427655bfd7aSRichard Purdie return dev_get_drvdata(&bl_dev->dev);
428655bfd7aSRichard Purdie }
4291da177e4SLinus Torvalds
430762a936fSThierry Reding #ifdef CONFIG_OF
431762a936fSThierry Reding struct backlight_device *of_find_backlight_by_node(struct device_node *node);
432762a936fSThierry Reding #else
433762a936fSThierry Reding static inline struct backlight_device *
of_find_backlight_by_node(struct device_node * node)434762a936fSThierry Reding of_find_backlight_by_node(struct device_node *node)
435762a936fSThierry Reding {
436762a936fSThierry Reding return NULL;
437762a936fSThierry Reding }
438762a936fSThierry Reding #endif
439762a936fSThierry Reding
440c2adda27SMeghana Madhyastha #if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE)
4412e4ef334SMeghana Madhyastha struct backlight_device *devm_of_find_backlight(struct device *dev);
442c2adda27SMeghana Madhyastha #else
4432e4ef334SMeghana Madhyastha static inline struct backlight_device *
devm_of_find_backlight(struct device * dev)4442e4ef334SMeghana Madhyastha devm_of_find_backlight(struct device *dev)
4452e4ef334SMeghana Madhyastha {
4462e4ef334SMeghana Madhyastha return NULL;
4472e4ef334SMeghana Madhyastha }
448c2adda27SMeghana Madhyastha #endif
449c2adda27SMeghana Madhyastha
4501da177e4SLinus Torvalds #endif
451