1
2
3
4
5
6
7
8#ifndef _LINUX_BACKLIGHT_H
9#define _LINUX_BACKLIGHT_H
10
11#include <linux/device.h>
12#include <linux/mutex.h>
13#include <linux/notifier.h>
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30enum backlight_update_reason {
31 BACKLIGHT_UPDATE_HOTKEY,
32 BACKLIGHT_UPDATE_SYSFS,
33};
34
35struct backlight_device;
36struct fb_info;
37
38struct backlight_ops {
39 unsigned int options;
40
41#define BL_CORE_SUSPENDRESUME (1 << 0)
42
43
44 int (*update_status)(struct backlight_device *);
45
46
47 int (*get_brightness)(struct backlight_device *);
48
49
50 int (*check_fb)(struct backlight_device *, struct fb_info *);
51};
52
53
54struct backlight_properties {
55
56 int brightness;
57
58 int max_brightness;
59
60
61 int power;
62
63
64 int fb_blank;
65
66
67 unsigned int state;
68
69#define BL_CORE_SUSPENDED (1 << 0)
70#define BL_CORE_FBBLANK (1 << 1)
71#define BL_CORE_DRIVER4 (1 << 28)
72#define BL_CORE_DRIVER3 (1 << 29)
73#define BL_CORE_DRIVER2 (1 << 30)
74#define BL_CORE_DRIVER1 (1 << 31)
75
76};
77
78struct backlight_device {
79
80 struct backlight_properties props;
81
82
83 struct mutex update_lock;
84
85
86
87
88 struct mutex ops_lock;
89 const struct backlight_ops *ops;
90
91
92 struct notifier_block fb_notif;
93
94 struct device dev;
95};
96
97static inline void backlight_update_status(struct backlight_device *bd)
98{
99 mutex_lock(&bd->update_lock);
100 if (bd->ops && bd->ops->update_status)
101 bd->ops->update_status(bd);
102 mutex_unlock(&bd->update_lock);
103}
104
105extern struct backlight_device *backlight_device_register(const char *name,
106 struct device *dev, void *devdata, const struct backlight_ops *ops,
107 const struct backlight_properties *props);
108extern void backlight_device_unregister(struct backlight_device *bd);
109extern void backlight_force_update(struct backlight_device *bd,
110 enum backlight_update_reason reason);
111
112#define to_backlight_device(obj) container_of(obj, struct backlight_device, dev)
113
114static inline void * bl_get_data(struct backlight_device *bl_dev)
115{
116 return dev_get_drvdata(&bl_dev->dev);
117}
118
119struct generic_bl_info {
120 const char *name;
121 int max_intensity;
122 int default_intensity;
123 int limit_mask;
124 void (*set_bl_intensity)(int intensity);
125 void (*kick_battery)(void);
126};
127
128#endif
129