diff options
author | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2018-07-02 16:05:33 -0400 |
---|---|---|
committer | Jacek Anaszewski <jacek.anaszewski@gmail.com> | 2018-07-05 17:21:14 -0400 |
commit | e4786ba0db7b1163403c29c429f5ef61906a84c0 (patch) | |
tree | 7e81e79d6e12810e87754fa1d29a426bf4f5c375 /drivers/leds | |
parent | 13d698cbd99ce90f1d6b4fb0ff11ab90eb55f55e (diff) |
leds: backlight trigger: simplifications from core changes
Use the new module_led_trigger() helper. Also use
attribute support from the trigger core. Drop error message on
allocation failure as kzalloc() already screams loudly when failing. Use
wrappers to get and set trigger data.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
Diffstat (limited to 'drivers/leds')
-rw-r--r-- | drivers/leds/trigger/ledtrig-backlight.c | 62 |
1 files changed, 19 insertions, 43 deletions
diff --git a/drivers/leds/trigger/ledtrig-backlight.c b/drivers/leds/trigger/ledtrig-backlight.c index 84512960d630..c2b57beef718 100644 --- a/drivers/leds/trigger/ledtrig-backlight.c +++ b/drivers/leds/trigger/ledtrig-backlight.c | |||
@@ -64,8 +64,7 @@ static int fb_notifier_callback(struct notifier_block *p, | |||
64 | static ssize_t bl_trig_invert_show(struct device *dev, | 64 | static ssize_t bl_trig_invert_show(struct device *dev, |
65 | struct device_attribute *attr, char *buf) | 65 | struct device_attribute *attr, char *buf) |
66 | { | 66 | { |
67 | struct led_classdev *led = dev_get_drvdata(dev); | 67 | struct bl_trig_notifier *n = led_trigger_get_drvdata(dev); |
68 | struct bl_trig_notifier *n = led->trigger_data; | ||
69 | 68 | ||
70 | return sprintf(buf, "%u\n", n->invert); | 69 | return sprintf(buf, "%u\n", n->invert); |
71 | } | 70 | } |
@@ -73,8 +72,8 @@ static ssize_t bl_trig_invert_show(struct device *dev, | |||
73 | static ssize_t bl_trig_invert_store(struct device *dev, | 72 | static ssize_t bl_trig_invert_store(struct device *dev, |
74 | struct device_attribute *attr, const char *buf, size_t num) | 73 | struct device_attribute *attr, const char *buf, size_t num) |
75 | { | 74 | { |
76 | struct led_classdev *led = dev_get_drvdata(dev); | 75 | struct led_classdev *led = led_trigger_get_led(dev); |
77 | struct bl_trig_notifier *n = led->trigger_data; | 76 | struct bl_trig_notifier *n = led_trigger_get_drvdata(dev); |
78 | unsigned long invert; | 77 | unsigned long invert; |
79 | int ret; | 78 | int ret; |
80 | 79 | ||
@@ -97,6 +96,12 @@ static ssize_t bl_trig_invert_store(struct device *dev, | |||
97 | } | 96 | } |
98 | static DEVICE_ATTR(inverted, 0644, bl_trig_invert_show, bl_trig_invert_store); | 97 | static DEVICE_ATTR(inverted, 0644, bl_trig_invert_show, bl_trig_invert_store); |
99 | 98 | ||
99 | static struct attribute *bl_trig_attrs[] = { | ||
100 | &dev_attr_inverted.attr, | ||
101 | NULL, | ||
102 | }; | ||
103 | ATTRIBUTE_GROUPS(bl_trig); | ||
104 | |||
100 | static int bl_trig_activate(struct led_classdev *led) | 105 | static int bl_trig_activate(struct led_classdev *led) |
101 | { | 106 | { |
102 | int ret; | 107 | int ret; |
@@ -104,15 +109,9 @@ static int bl_trig_activate(struct led_classdev *led) | |||
104 | struct bl_trig_notifier *n; | 109 | struct bl_trig_notifier *n; |
105 | 110 | ||
106 | n = kzalloc(sizeof(struct bl_trig_notifier), GFP_KERNEL); | 111 | n = kzalloc(sizeof(struct bl_trig_notifier), GFP_KERNEL); |
107 | led->trigger_data = n; | 112 | if (!n) |
108 | if (!n) { | 113 | return -ENOMEM; |
109 | dev_err(led->dev, "unable to allocate backlight trigger\n"); | 114 | led_set_trigger_data(led, n); |
110 | return 0; | ||
111 | } | ||
112 | |||
113 | ret = device_create_file(led->dev, &dev_attr_inverted); | ||
114 | if (ret) | ||
115 | goto err_invert; | ||
116 | 115 | ||
117 | n->led = led; | 116 | n->led = led; |
118 | n->brightness = led->brightness; | 117 | n->brightness = led->brightness; |
@@ -122,48 +121,25 @@ static int bl_trig_activate(struct led_classdev *led) | |||
122 | ret = fb_register_client(&n->notifier); | 121 | ret = fb_register_client(&n->notifier); |
123 | if (ret) | 122 | if (ret) |
124 | dev_err(led->dev, "unable to register backlight trigger\n"); | 123 | dev_err(led->dev, "unable to register backlight trigger\n"); |
125 | led->activated = true; | ||
126 | |||
127 | return 0; | ||
128 | |||
129 | err_invert: | ||
130 | led->trigger_data = NULL; | ||
131 | kfree(n); | ||
132 | 124 | ||
133 | return 0; | 125 | return 0; |
134 | } | 126 | } |
135 | 127 | ||
136 | static void bl_trig_deactivate(struct led_classdev *led) | 128 | static void bl_trig_deactivate(struct led_classdev *led) |
137 | { | 129 | { |
138 | struct bl_trig_notifier *n = | 130 | struct bl_trig_notifier *n = led_get_trigger_data(led); |
139 | (struct bl_trig_notifier *) led->trigger_data; | 131 | |
140 | 132 | fb_unregister_client(&n->notifier); | |
141 | if (led->activated) { | 133 | kfree(n); |
142 | device_remove_file(led->dev, &dev_attr_inverted); | ||
143 | fb_unregister_client(&n->notifier); | ||
144 | kfree(n); | ||
145 | led->activated = false; | ||
146 | } | ||
147 | } | 134 | } |
148 | 135 | ||
149 | static struct led_trigger bl_led_trigger = { | 136 | static struct led_trigger bl_led_trigger = { |
150 | .name = "backlight", | 137 | .name = "backlight", |
151 | .activate = bl_trig_activate, | 138 | .activate = bl_trig_activate, |
152 | .deactivate = bl_trig_deactivate | 139 | .deactivate = bl_trig_deactivate, |
140 | .groups = bl_trig_groups, | ||
153 | }; | 141 | }; |
154 | 142 | module_led_trigger(bl_led_trigger); | |
155 | static int __init bl_trig_init(void) | ||
156 | { | ||
157 | return led_trigger_register(&bl_led_trigger); | ||
158 | } | ||
159 | |||
160 | static void __exit bl_trig_exit(void) | ||
161 | { | ||
162 | led_trigger_unregister(&bl_led_trigger); | ||
163 | } | ||
164 | |||
165 | module_init(bl_trig_init); | ||
166 | module_exit(bl_trig_exit); | ||
167 | 143 | ||
168 | MODULE_AUTHOR("Rodolfo Giometti <giometti@linux.it>"); | 144 | MODULE_AUTHOR("Rodolfo Giometti <giometti@linux.it>"); |
169 | MODULE_DESCRIPTION("Backlight emulation LED trigger"); | 145 | MODULE_DESCRIPTION("Backlight emulation LED trigger"); |