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/fb.h>
13#include <linux/mutex.h>
14#include <linux/notifier.h>
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31enum backlight_update_reason {
32 BACKLIGHT_UPDATE_HOTKEY,
33 BACKLIGHT_UPDATE_SYSFS,
34};
35
36enum backlight_type {
37 BACKLIGHT_RAW = 1,
38 BACKLIGHT_PLATFORM,
39 BACKLIGHT_FIRMWARE,
40 BACKLIGHT_TYPE_MAX,
41};
42
43enum backlight_notification {
44 BACKLIGHT_REGISTERED,
45 BACKLIGHT_UNREGISTERED,
46};
47
48struct backlight_device;
49struct fb_info;
50
51struct backlight_ops {
52 unsigned int options;
53
54#define BL_CORE_SUSPENDRESUME (1 << 0)
55
56
57 int (*update_status)(struct backlight_device *);
58
59
60 int (*get_brightness)(struct backlight_device *);
61
62
63 int (*check_fb)(struct backlight_device *, struct fb_info *);
64};
65
66
67struct backlight_properties {
68
69 int brightness;
70
71 int max_brightness;
72
73
74 int power;
75
76
77 int fb_blank;
78
79 enum backlight_type type;
80
81
82 unsigned int state;
83
84#define BL_CORE_SUSPENDED (1 << 0)
85#define BL_CORE_FBBLANK (1 << 1)
86#define BL_CORE_DRIVER4 (1 << 28)
87#define BL_CORE_DRIVER3 (1 << 29)
88#define BL_CORE_DRIVER2 (1 << 30)
89#define BL_CORE_DRIVER1 (1 << 31)
90
91};
92
93struct backlight_device {
94
95 struct backlight_properties props;
96
97
98 struct mutex update_lock;
99
100
101
102
103 struct mutex ops_lock;
104 const struct backlight_ops *ops;
105
106
107 struct notifier_block fb_notif;
108
109
110 struct list_head entry;
111
112 struct device dev;
113
114
115 bool fb_bl_on[FB_MAX];
116
117 int use_count;
118};
119
120static inline int backlight_update_status(struct backlight_device *bd)
121{
122 int ret = -ENOENT;
123
124 mutex_lock(&bd->update_lock);
125 if (bd->ops && bd->ops->update_status)
126 ret = bd->ops->update_status(bd);
127 mutex_unlock(&bd->update_lock);
128
129 return ret;
130}
131
132extern struct backlight_device *backlight_device_register(const char *name,
133 struct device *dev, void *devdata, const struct backlight_ops *ops,
134 const struct backlight_properties *props);
135extern struct backlight_device *devm_backlight_device_register(
136 struct device *dev, const char *name, struct device *parent,
137 void *devdata, const struct backlight_ops *ops,
138 const struct backlight_properties *props);
139extern void backlight_device_unregister(struct backlight_device *bd);
140extern void devm_backlight_device_unregister(struct device *dev,
141 struct backlight_device *bd);
142extern void backlight_force_update(struct backlight_device *bd,
143 enum backlight_update_reason reason);
144extern bool backlight_device_registered(enum backlight_type type);
145extern int backlight_register_notifier(struct notifier_block *nb);
146extern int backlight_unregister_notifier(struct notifier_block *nb);
147
148#define to_backlight_device(obj) container_of(obj, struct backlight_device, dev)
149
150static inline void * bl_get_data(struct backlight_device *bl_dev)
151{
152 return dev_get_drvdata(&bl_dev->dev);
153}
154
155struct generic_bl_info {
156 const char *name;
157 int max_intensity;
158 int default_intensity;
159 int limit_mask;
160 void (*set_bl_intensity)(int intensity);
161 void (*kick_battery)(void);
162};
163
164#ifdef CONFIG_OF
165struct backlight_device *of_find_backlight_by_node(struct device_node *node);
166#else
167static inline struct backlight_device *
168of_find_backlight_by_node(struct device_node *node)
169{
170 return NULL;
171}
172#endif
173
174#endif
175