xref: /openbsd-src/sys/dev/pci/drm/include/linux/backlight.h (revision 9342ba5ef4c4b12756101b82e6ca8eeee7d77133)
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