17f4dd379Sjsg /* Public domain. */
27f4dd379Sjsg
37f4dd379Sjsg #ifndef _LINUX_BACKLIGHT_H
47f4dd379Sjsg #define _LINUX_BACKLIGHT_H
57f4dd379Sjsg
67f4dd379Sjsg #include <sys/task.h>
71bb76ff1Sjsg #include <linux/fb.h>
87f4dd379Sjsg
97f4dd379Sjsg struct backlight_device;
1049261a46Sjsg struct device;
117f4dd379Sjsg
127f4dd379Sjsg struct backlight_properties {
137f4dd379Sjsg int type;
14*9342ba5eSkettenis #define BACKLIGHT_RAW 0
15*9342ba5eSkettenis #define BACKLIGHT_FIRMWARE 1
16*9342ba5eSkettenis #define BACKLIGHT_PLATFORM 2
177f4dd379Sjsg int max_brightness;
187f4dd379Sjsg int brightness;
197f4dd379Sjsg int power;
20*9342ba5eSkettenis int scale;
21*9342ba5eSkettenis #define BACKLIGHT_SCALE_LINEAR 0
22*9342ba5eSkettenis int state;
23*9342ba5eSkettenis #define BL_CORE_SUSPENDED 0x00000001
247f4dd379Sjsg };
257f4dd379Sjsg
267f4dd379Sjsg struct backlight_ops {
27a3a610b1Sjsg int options;
28*9342ba5eSkettenis #define BL_CORE_SUSPENDRESUME 0x00000001
297f4dd379Sjsg int (*update_status)(struct backlight_device *);
307f4dd379Sjsg int (*get_brightness)(struct backlight_device *);
317f4dd379Sjsg };
327f4dd379Sjsg
337f4dd379Sjsg struct backlight_device {
347f4dd379Sjsg const struct backlight_ops *ops;
357f4dd379Sjsg struct backlight_properties props;
367f4dd379Sjsg struct task task;
377f4dd379Sjsg void *data;
38*9342ba5eSkettenis SLIST_ENTRY(backlight_device) next;
39*9342ba5eSkettenis const char *name;
407f4dd379Sjsg };
417f4dd379Sjsg
4249261a46Sjsg static inline void *
bl_get_data(struct backlight_device * bd)4349261a46Sjsg bl_get_data(struct backlight_device *bd)
4449261a46Sjsg {
4549261a46Sjsg return bd->data;
4649261a46Sjsg }
477f4dd379Sjsg
48*9342ba5eSkettenis static inline int
backlight_get_brightness(struct backlight_device * bd)49*9342ba5eSkettenis backlight_get_brightness(struct backlight_device *bd)
50*9342ba5eSkettenis {
51*9342ba5eSkettenis return bd->props.brightness;
52*9342ba5eSkettenis }
537f4dd379Sjsg
546a77e6adSkettenis #define BACKLIGHT_UPDATE_HOTKEY 0
556a77e6adSkettenis
567f4dd379Sjsg struct backlight_device *backlight_device_register(const char *, void *,
57*9342ba5eSkettenis void *, const struct backlight_ops *, const struct backlight_properties *);
587f4dd379Sjsg void backlight_device_unregister(struct backlight_device *);
595ca02815Sjsg
60*9342ba5eSkettenis static inline struct backlight_device *
devm_backlight_device_register(void * dev,const char * name,void * parent,void * data,const struct backlight_ops * bo,const struct backlight_properties * bp)61*9342ba5eSkettenis devm_backlight_device_register(void *dev, const char *name, void *parent,
62*9342ba5eSkettenis void *data, const struct backlight_ops *bo,
63*9342ba5eSkettenis const struct backlight_properties *bp)
64*9342ba5eSkettenis {
65*9342ba5eSkettenis return backlight_device_register(name, dev, data, bo, bp);
66*9342ba5eSkettenis }
677f4dd379Sjsg
687f4dd379Sjsg static inline void
backlight_update_status(struct backlight_device * bd)697f4dd379Sjsg backlight_update_status(struct backlight_device *bd)
707f4dd379Sjsg {
717f4dd379Sjsg bd->ops->update_status(bd);
727f4dd379Sjsg }
737f4dd379Sjsg
746a77e6adSkettenis static inline void
backlight_force_update(struct backlight_device * bd,int reason)756a77e6adSkettenis backlight_force_update(struct backlight_device *bd, int reason)
766a77e6adSkettenis {
776a77e6adSkettenis bd->props.brightness = bd->ops->get_brightness(bd);
786a77e6adSkettenis }
796a77e6adSkettenis
80ad8b1aafSjsg static inline void
backlight_device_set_brightness(struct backlight_device * bd,int level)81ad8b1aafSjsg backlight_device_set_brightness(struct backlight_device *bd, int level)
82ad8b1aafSjsg {
83ad8b1aafSjsg if (level > bd->props.max_brightness)
84ad8b1aafSjsg return;
85ad8b1aafSjsg bd->props.brightness = level;
86ad8b1aafSjsg bd->ops->update_status(bd);
87ad8b1aafSjsg }
88ad8b1aafSjsg
897f4dd379Sjsg void backlight_schedule_update_status(struct backlight_device *);
907f4dd379Sjsg
91c349dbc7Sjsg int backlight_enable(struct backlight_device *);
92c349dbc7Sjsg int backlight_disable(struct backlight_device *);
93c349dbc7Sjsg
9449261a46Sjsg static inline struct backlight_device *
devm_of_find_backlight(struct device * dev)9549261a46Sjsg devm_of_find_backlight(struct device *dev)
9649261a46Sjsg {
9749261a46Sjsg return NULL;
9849261a46Sjsg }
99c349dbc7Sjsg
100*9342ba5eSkettenis struct backlight_device *backlight_device_get_by_name(const char *);
101cc7f7160Sjsg
1027f4dd379Sjsg #endif
103