Root/
1 | /* |
2 | * Backlight Lowlevel Control Abstraction |
3 | * |
4 | * Copyright (C) 2003,2004 Hewlett-Packard Company |
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 | /* Notes on locking: |
16 | * |
17 | * backlight_device->ops_lock is an internal backlight lock protecting the |
18 | * ops pointer and no code outside the core should need to touch it. |
19 | * |
20 | * Access to update_status() is serialised by the update_lock mutex since |
21 | * most drivers seem to need this and historically get it wrong. |
22 | * |
23 | * Most drivers don't need locking on their get_brightness() method. |
24 | * If yours does, you need to implement it in the driver. You can use the |
25 | * update_lock mutex if appropriate. |
26 | * |
27 | * Any other use of the locks below is probably wrong. |
28 | */ |
29 | |
30 | enum backlight_update_reason { |
31 | BACKLIGHT_UPDATE_HOTKEY, |
32 | BACKLIGHT_UPDATE_SYSFS, |
33 | }; |
34 | |
35 | struct backlight_device; |
36 | struct fb_info; |
37 | |
38 | struct backlight_ops { |
39 | unsigned int options; |
40 | |
41 | #define BL_CORE_SUSPENDRESUME (1 << 0) |
42 | |
43 | /* Notify the backlight driver some property has changed */ |
44 | int (*update_status)(struct backlight_device *); |
45 | /* Return the current backlight brightness (accounting for power, |
46 | fb_blank etc.) */ |
47 | int (*get_brightness)(struct backlight_device *); |
48 | /* Check if given framebuffer device is the one bound to this backlight; |
49 | return 0 if not, !=0 if it is. If NULL, backlight always matches the fb. */ |
50 | int (*check_fb)(struct fb_info *); |
51 | }; |
52 | |
53 | /* This structure defines all the properties of a backlight */ |
54 | struct backlight_properties { |
55 | /* Current User requested brightness (0 - max_brightness) */ |
56 | int brightness; |
57 | /* Maximal value for brightness (read-only) */ |
58 | int max_brightness; |
59 | /* Current FB Power mode (0: full on, 1..3: power saving |
60 | modes; 4: full off), see FB_BLANK_XXX */ |
61 | int power; |
62 | /* FB Blanking active? (values as for power) */ |
63 | /* Due to be removed, please use (state & BL_CORE_FBBLANK) */ |
64 | int fb_blank; |
65 | /* Flags used to signal drivers of state changes */ |
66 | /* Upper 4 bits are reserved for driver internal use */ |
67 | unsigned int state; |
68 | |
69 | #define BL_CORE_SUSPENDED (1 << 0) /* backlight is suspended */ |
70 | #define BL_CORE_FBBLANK (1 << 1) /* backlight is under an fb blank event */ |
71 | #define BL_CORE_DRIVER4 (1 << 28) /* reserved for driver specific use */ |
72 | #define BL_CORE_DRIVER3 (1 << 29) /* reserved for driver specific use */ |
73 | #define BL_CORE_DRIVER2 (1 << 30) /* reserved for driver specific use */ |
74 | #define BL_CORE_DRIVER1 (1 << 31) /* reserved for driver specific use */ |
75 | |
76 | }; |
77 | |
78 | struct backlight_device { |
79 | /* Backlight properties */ |
80 | struct backlight_properties props; |
81 | |
82 | /* Serialise access to update_status method */ |
83 | struct mutex update_lock; |
84 | |
85 | /* This protects the 'ops' field. If 'ops' is NULL, the driver that |
86 | registered this device has been unloaded, and if class_get_devdata() |
87 | points to something in the body of that driver, it is also invalid. */ |
88 | struct mutex ops_lock; |
89 | struct backlight_ops *ops; |
90 | |
91 | /* The framebuffer notifier block */ |
92 | struct notifier_block fb_notif; |
93 | |
94 | struct device dev; |
95 | }; |
96 | |
97 | static 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 | |
105 | extern struct backlight_device *backlight_device_register(const char *name, |
106 | struct device *dev, void *devdata, struct backlight_ops *ops); |
107 | extern void backlight_device_unregister(struct backlight_device *bd); |
108 | extern void backlight_force_update(struct backlight_device *bd, |
109 | enum backlight_update_reason reason); |
110 | |
111 | #define to_backlight_device(obj) container_of(obj, struct backlight_device, dev) |
112 | |
113 | static inline void * bl_get_data(struct backlight_device *bl_dev) |
114 | { |
115 | return dev_get_drvdata(&bl_dev->dev); |
116 | } |
117 | |
118 | struct generic_bl_info { |
119 | const char *name; |
120 | int max_intensity; |
121 | int default_intensity; |
122 | int limit_mask; |
123 | void (*set_bl_intensity)(int intensity); |
124 | void (*kick_battery)(void); |
125 | }; |
126 | |
127 | #endif |
128 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9