diff options
author | Richard Purdie <rpurdie@rpsys.net> | 2007-02-10 18:07:48 -0500 |
---|---|---|
committer | Richard Purdie <rpurdie@rpsys.net> | 2007-02-20 04:26:53 -0500 |
commit | 599a52d12629394236d785615808845823875868 (patch) | |
tree | 4e2dfa3a25ce761be0ecc0490acabac553f77a67 /include/linux/backlight.h | |
parent | 321709c5994f952b78d567fd7083dbebbdc381b7 (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/backlight.h')
-rw-r--r-- | include/linux/backlight.h | 33 |
1 files changed, 19 insertions, 14 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 @@ | |||
30 | struct backlight_device; | 30 | struct backlight_device; |
31 | struct fb_info; | 31 | struct fb_info; |
32 | 32 | ||
33 | /* This structure defines all the properties of a backlight | 33 | struct backlight_ops { |
34 | (usually attached to a LCD). */ | ||
35 | struct 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 */ | ||
45 | struct 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 | ||
56 | struct backlight_device { | 57 | struct 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 { | |||
71 | static inline void backlight_update_status(struct backlight_device *bd) | 76 | static 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 | ||
79 | extern struct backlight_device *backlight_device_register(const char *name, | 84 | extern 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); |
81 | extern void backlight_device_unregister(struct backlight_device *bd); | 86 | extern 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) |