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 void backlight_update_status(struct backlight_device *bd)
121{
122 mutex_lock(&bd->update_lock);
123 if (bd->ops && bd->ops->update_status)
124 bd->ops->update_status(bd);
125 mutex_unlock(&bd->update_lock);
126}
127
128extern struct backlight_device *backlight_device_register(const char *name,
129 struct device *dev, void *devdata, const struct backlight_ops *ops,
130 const struct backlight_properties *props);
131extern struct backlight_device *devm_backlight_device_register(
132 struct device *dev, const char *name, struct device *parent,
133 void *devdata, const struct backlight_ops *ops,
134 const struct backlight_properties *props);
135extern void backlight_device_unregister(struct backlight_device *bd);
136extern void devm_backlight_device_unregister(struct device *dev,
137 struct backlight_device *bd);
138extern void backlight_force_update(struct backlight_device *bd,
139 enum backlight_update_reason reason);
140extern bool backlight_device_registered(enum backlight_type type);
141extern int backlight_register_notifier(struct notifier_block *nb);
142extern int backlight_unregister_notifier(struct notifier_block *nb);
143
144#define to_backlight_device(obj) container_of(obj, struct backlight_device, dev)
145
146static inline void * bl_get_data(struct backlight_device *bl_dev)
147{
148 return dev_get_drvdata(&bl_dev->dev);
149}
150
151struct generic_bl_info {
152 const char *name;
153 int max_intensity;
154 int default_intensity;
155 int limit_mask;
156 void (*set_bl_intensity)(int intensity);
157 void (*kick_battery)(void);
158};
159
160#ifdef CONFIG_OF
161struct backlight_device *of_find_backlight_by_node(struct device_node *node);
162#else
163static inline struct backlight_device *
164of_find_backlight_by_node(struct device_node *node)
165{
166 return NULL;
167}
168#endif
169
170#endif
171