aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@rpsys.net>2007-02-10 18:07:48 -0500
committerRichard Purdie <rpurdie@rpsys.net>2007-02-20 04:26:53 -0500
commit599a52d12629394236d785615808845823875868 (patch)
tree4e2dfa3a25ce761be0ecc0490acabac553f77a67 /include/linux
parent321709c5994f952b78d567fd7083dbebbdc381b7 (diff)
backlight: Separate backlight properties from backlight ops pointers
Per device data such as brightness belongs to the indivdual device and should therefore be separate from the the backlight operation function pointers. This patch splits the two types of data and allows simplifcation of some code. Signed-off-by: Richard Purdie <rpurdie@rpsys.net>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/backlight.h33
-rw-r--r--include/linux/lcd.h23
2 files changed, 32 insertions, 24 deletions
diff --git a/include/linux/backlight.h b/include/linux/backlight.h
index 43c6d55644b5..1023ba0d6e55 100644
--- a/include/linux/backlight.h
+++ b/include/linux/backlight.h
@@ -14,8 +14,8 @@
14 14
15/* Notes on locking: 15/* Notes on locking:
16 * 16 *
17 * backlight_device->props_lock is an internal backlight lock protecting the 17 * backlight_device->ops_lock is an internal backlight lock protecting the
18 * props field and no code outside the core should need to touch it. 18 * ops pointer and no code outside the core should need to touch it.
19 * 19 *
20 * Access to update_status() is serialised by the update_lock mutex since 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. 21 * most drivers seem to need this and historically get it wrong.
@@ -30,9 +30,7 @@
30struct backlight_device; 30struct backlight_device;
31struct fb_info; 31struct fb_info;
32 32
33/* This structure defines all the properties of a backlight 33struct backlight_ops {
34 (usually attached to a LCD). */
35struct backlight_properties {
36 /* Notify the backlight driver some property has changed */ 34 /* Notify the backlight driver some property has changed */
37 int (*update_status)(struct backlight_device *); 35 int (*update_status)(struct backlight_device *);
38 /* Return the current backlight brightness (accounting for power, 36 /* Return the current backlight brightness (accounting for power,
@@ -41,7 +39,10 @@ struct backlight_properties {
41 /* Check if given framebuffer device is the one bound to this backlight; 39 /* Check if given framebuffer device is the one bound to this backlight;
42 return 0 if not, !=0 if it is. If NULL, backlight always matches the fb. */ 40 return 0 if not, !=0 if it is. If NULL, backlight always matches the fb. */
43 int (*check_fb)(struct fb_info *); 41 int (*check_fb)(struct fb_info *);
42};
44 43
44/* This structure defines all the properties of a backlight */
45struct backlight_properties {
45 /* Current User requested brightness (0 - max_brightness) */ 46 /* Current User requested brightness (0 - max_brightness) */
46 int brightness; 47 int brightness;
47 /* Maximal value for brightness (read-only) */ 48 /* Maximal value for brightness (read-only) */
@@ -54,14 +55,18 @@ struct backlight_properties {
54}; 55};
55 56
56struct backlight_device { 57struct backlight_device {
57 /* This protects the 'props' field. If 'props' is NULL, the driver that 58 /* Backlight properties */
58 registered this device has been unloaded, and if class_get_devdata() 59 struct backlight_properties props;
59 points to something in the body of that driver, it is also invalid. */ 60
60 struct mutex props_lock;
61 /* If this is NULL, the backing module is unloaded */
62 struct backlight_properties *props;
63 /* Serialise access to update_status method */ 61 /* Serialise access to update_status method */
64 struct mutex update_lock; 62 struct mutex update_lock;
63
64 /* This protects the 'ops' field. If 'ops' is NULL, the driver that
65 registered this device has been unloaded, and if class_get_devdata()
66 points to something in the body of that driver, it is also invalid. */
67 struct mutex ops_lock;
68 struct backlight_ops *ops;
69
65 /* The framebuffer notifier block */ 70 /* The framebuffer notifier block */
66 struct notifier_block fb_notif; 71 struct notifier_block fb_notif;
67 /* The class device structure */ 72 /* The class device structure */
@@ -71,13 +76,13 @@ struct backlight_device {
71static inline void backlight_update_status(struct backlight_device *bd) 76static inline void backlight_update_status(struct backlight_device *bd)
72{ 77{
73 mutex_lock(&bd->update_lock); 78 mutex_lock(&bd->update_lock);
74 if (bd->props && bd->props->update_status) 79 if (bd->ops && bd->ops->update_status)
75 bd->props->update_status(bd); 80 bd->ops->update_status(bd);
76 mutex_unlock(&bd->update_lock); 81 mutex_unlock(&bd->update_lock);
77} 82}
78 83
79extern struct backlight_device *backlight_device_register(const char *name, 84extern struct backlight_device *backlight_device_register(const char *name,
80 struct device *dev,void *devdata,struct backlight_properties *bp); 85 struct device *dev, void *devdata, struct backlight_ops *ops);
81extern void backlight_device_unregister(struct backlight_device *bd); 86extern void backlight_device_unregister(struct backlight_device *bd);
82 87
83#define to_backlight_device(obj) container_of(obj, struct backlight_device, class_dev) 88#define to_backlight_device(obj) container_of(obj, struct backlight_device, class_dev)
diff --git a/include/linux/lcd.h b/include/linux/lcd.h
index 46970af2ca89..598793c0745b 100644
--- a/include/linux/lcd.h
+++ b/include/linux/lcd.h
@@ -14,7 +14,7 @@
14 14
15/* Notes on locking: 15/* Notes on locking:
16 * 16 *
17 * lcd_device->props_lock is an internal backlight lock protecting the props 17 * lcd_device->ops_lock is an internal backlight lock protecting the ops
18 * field and no code outside the core should need to touch it. 18 * field and no code outside the core should need to touch it.
19 * 19 *
20 * Access to set_power() is serialised by the update_lock mutex since 20 * Access to set_power() is serialised by the update_lock mutex since
@@ -30,15 +30,17 @@
30struct lcd_device; 30struct lcd_device;
31struct fb_info; 31struct fb_info;
32 32
33/* This structure defines all the properties of a LCD flat panel. */
34struct lcd_properties { 33struct lcd_properties {
34 /* The maximum value for contrast (read-only) */
35 int max_contrast;
36};
37
38struct lcd_ops {
35 /* Get the LCD panel power status (0: full on, 1..3: controller 39 /* Get the LCD panel power status (0: full on, 1..3: controller
36 power on, flat panel power off, 4: full off), see FB_BLANK_XXX */ 40 power on, flat panel power off, 4: full off), see FB_BLANK_XXX */
37 int (*get_power)(struct lcd_device *); 41 int (*get_power)(struct lcd_device *);
38 /* Enable or disable power to the LCD (0: on; 4: off, see FB_BLANK_XXX) */ 42 /* Enable or disable power to the LCD (0: on; 4: off, see FB_BLANK_XXX) */
39 int (*set_power)(struct lcd_device *, int power); 43 int (*set_power)(struct lcd_device *, int power);
40 /* The maximum value for contrast (read-only) */
41 int max_contrast;
42 /* Get the current contrast setting (0-max_contrast) */ 44 /* Get the current contrast setting (0-max_contrast) */
43 int (*get_contrast)(struct lcd_device *); 45 int (*get_contrast)(struct lcd_device *);
44 /* Set LCD panel contrast */ 46 /* Set LCD panel contrast */
@@ -49,12 +51,13 @@ struct lcd_properties {
49}; 51};
50 52
51struct lcd_device { 53struct lcd_device {
52 /* This protects the 'props' field. If 'props' is NULL, the driver that 54 struct lcd_properties props;
55 /* This protects the 'ops' field. If 'ops' is NULL, the driver that
53 registered this device has been unloaded, and if class_get_devdata() 56 registered this device has been unloaded, and if class_get_devdata()
54 points to something in the body of that driver, it is also invalid. */ 57 points to something in the body of that driver, it is also invalid. */
55 struct mutex props_lock; 58 struct mutex ops_lock;
56 /* If this is NULL, the backing module is unloaded */ 59 /* If this is NULL, the backing module is unloaded */
57 struct lcd_properties *props; 60 struct lcd_ops *ops;
58 /* Serialise access to set_power method */ 61 /* Serialise access to set_power method */
59 struct mutex update_lock; 62 struct mutex update_lock;
60 /* The framebuffer notifier block */ 63 /* The framebuffer notifier block */
@@ -66,13 +69,13 @@ struct lcd_device {
66static inline void lcd_set_power(struct lcd_device *ld, int power) 69static inline void lcd_set_power(struct lcd_device *ld, int power)
67{ 70{
68 mutex_lock(&ld->update_lock); 71 mutex_lock(&ld->update_lock);
69 if (ld->props && ld->props->set_power) 72 if (ld->ops && ld->ops->set_power)
70 ld->props->set_power(ld, power); 73 ld->ops->set_power(ld, power);
71 mutex_unlock(&ld->update_lock); 74 mutex_unlock(&ld->update_lock);
72} 75}
73 76
74extern struct lcd_device *lcd_device_register(const char *name, 77extern struct lcd_device *lcd_device_register(const char *name,
75 void *devdata, struct lcd_properties *lp); 78 void *devdata, struct lcd_ops *ops);
76extern void lcd_device_unregister(struct lcd_device *ld); 79extern void lcd_device_unregister(struct lcd_device *ld);
77 80
78#define to_lcd_device(obj) container_of(obj, struct lcd_device, class_dev) 81#define to_lcd_device(obj) container_of(obj, struct lcd_device, class_dev)