diff options
-rw-r--r-- | drivers/hid/hid-thingm.c | 46 |
1 files changed, 8 insertions, 38 deletions
diff --git a/drivers/hid/hid-thingm.c b/drivers/hid/hid-thingm.c index 69a6ada09b39..5e35ec1b6d8a 100644 --- a/drivers/hid/hid-thingm.c +++ b/drivers/hid/hid-thingm.c | |||
@@ -159,7 +159,8 @@ static int thingm_init_rgb(struct thingm_rgb *rgb) | |||
159 | rgb->red.ldev.brightness_set_blocking = thingm_led_set; | 159 | rgb->red.ldev.brightness_set_blocking = thingm_led_set; |
160 | rgb->red.rgb = rgb; | 160 | rgb->red.rgb = rgb; |
161 | 161 | ||
162 | err = led_classdev_register(&rgb->tdev->hdev->dev, &rgb->red.ldev); | 162 | err = devm_led_classdev_register(&rgb->tdev->hdev->dev, |
163 | &rgb->red.ldev); | ||
163 | if (err) | 164 | if (err) |
164 | return err; | 165 | return err; |
165 | 166 | ||
@@ -171,9 +172,10 @@ static int thingm_init_rgb(struct thingm_rgb *rgb) | |||
171 | rgb->green.ldev.brightness_set_blocking = thingm_led_set; | 172 | rgb->green.ldev.brightness_set_blocking = thingm_led_set; |
172 | rgb->green.rgb = rgb; | 173 | rgb->green.rgb = rgb; |
173 | 174 | ||
174 | err = led_classdev_register(&rgb->tdev->hdev->dev, &rgb->green.ldev); | 175 | err = devm_led_classdev_register(&rgb->tdev->hdev->dev, |
176 | &rgb->green.ldev); | ||
175 | if (err) | 177 | if (err) |
176 | goto unregister_red; | 178 | return err; |
177 | 179 | ||
178 | /* Register the blue diode */ | 180 | /* Register the blue diode */ |
179 | snprintf(rgb->blue.name, sizeof(rgb->blue.name), | 181 | snprintf(rgb->blue.name, sizeof(rgb->blue.name), |
@@ -183,28 +185,11 @@ static int thingm_init_rgb(struct thingm_rgb *rgb) | |||
183 | rgb->blue.ldev.brightness_set_blocking = thingm_led_set; | 185 | rgb->blue.ldev.brightness_set_blocking = thingm_led_set; |
184 | rgb->blue.rgb = rgb; | 186 | rgb->blue.rgb = rgb; |
185 | 187 | ||
186 | err = led_classdev_register(&rgb->tdev->hdev->dev, &rgb->blue.ldev); | 188 | err = devm_led_classdev_register(&rgb->tdev->hdev->dev, |
187 | if (err) | 189 | &rgb->blue.ldev); |
188 | goto unregister_green; | ||
189 | |||
190 | return 0; | ||
191 | |||
192 | unregister_green: | ||
193 | led_classdev_unregister(&rgb->green.ldev); | ||
194 | |||
195 | unregister_red: | ||
196 | led_classdev_unregister(&rgb->red.ldev); | ||
197 | |||
198 | return err; | 190 | return err; |
199 | } | 191 | } |
200 | 192 | ||
201 | static void thingm_remove_rgb(struct thingm_rgb *rgb) | ||
202 | { | ||
203 | led_classdev_unregister(&rgb->red.ldev); | ||
204 | led_classdev_unregister(&rgb->green.ldev); | ||
205 | led_classdev_unregister(&rgb->blue.ldev); | ||
206 | } | ||
207 | |||
208 | static int thingm_probe(struct hid_device *hdev, const struct hid_device_id *id) | 193 | static int thingm_probe(struct hid_device *hdev, const struct hid_device_id *id) |
209 | { | 194 | { |
210 | struct thingm_device *tdev; | 195 | struct thingm_device *tdev; |
@@ -259,11 +244,8 @@ static int thingm_probe(struct hid_device *hdev, const struct hid_device_id *id) | |||
259 | rgb->tdev = tdev; | 244 | rgb->tdev = tdev; |
260 | rgb->num = tdev->fwinfo->first + i; | 245 | rgb->num = tdev->fwinfo->first + i; |
261 | err = thingm_init_rgb(rgb); | 246 | err = thingm_init_rgb(rgb); |
262 | if (err) { | 247 | if (err) |
263 | while (--i >= 0) | ||
264 | thingm_remove_rgb(tdev->rgb + i); | ||
265 | goto stop; | 248 | goto stop; |
266 | } | ||
267 | } | 249 | } |
268 | 250 | ||
269 | return 0; | 251 | return 0; |
@@ -273,17 +255,6 @@ error: | |||
273 | return err; | 255 | return err; |
274 | } | 256 | } |
275 | 257 | ||
276 | static void thingm_remove(struct hid_device *hdev) | ||
277 | { | ||
278 | struct thingm_device *tdev = hid_get_drvdata(hdev); | ||
279 | int i; | ||
280 | |||
281 | hid_hw_stop(hdev); | ||
282 | |||
283 | for (i = 0; i < tdev->fwinfo->numrgb; ++i) | ||
284 | thingm_remove_rgb(tdev->rgb + i); | ||
285 | } | ||
286 | |||
287 | static const struct hid_device_id thingm_table[] = { | 258 | static const struct hid_device_id thingm_table[] = { |
288 | { HID_USB_DEVICE(USB_VENDOR_ID_THINGM, USB_DEVICE_ID_BLINK1) }, | 259 | { HID_USB_DEVICE(USB_VENDOR_ID_THINGM, USB_DEVICE_ID_BLINK1) }, |
289 | { } | 260 | { } |
@@ -293,7 +264,6 @@ MODULE_DEVICE_TABLE(hid, thingm_table); | |||
293 | static struct hid_driver thingm_driver = { | 264 | static struct hid_driver thingm_driver = { |
294 | .name = "thingm", | 265 | .name = "thingm", |
295 | .probe = thingm_probe, | 266 | .probe = thingm_probe, |
296 | .remove = thingm_remove, | ||
297 | .id_table = thingm_table, | 267 | .id_table = thingm_table, |
298 | }; | 268 | }; |
299 | 269 | ||