HID: thingm: switch to managed version of led_classdev_register
authorHeiner Kallweit <hkallweit1@gmail.com>
Mon, 29 Feb 2016 20:38:26 +0000 (21:38 +0100)
committerJiri Kosina <jkosina@suse.cz>
Wed, 2 Mar 2016 09:20:30 +0000 (10:20 +0100)
Simplify the code by switching to the managed version of
led_classdev_register.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-thingm.c

index 69a6ada09b399776ab3c5658e6cf545d18e24b7d..5e35ec1b6d8a3d2bf0834b308805f9ad6469b98d 100644 (file)
@@ -159,7 +159,8 @@ static int thingm_init_rgb(struct thingm_rgb *rgb)
        rgb->red.ldev.brightness_set_blocking = thingm_led_set;
        rgb->red.rgb = rgb;
 
-       err = led_classdev_register(&rgb->tdev->hdev->dev, &rgb->red.ldev);
+       err = devm_led_classdev_register(&rgb->tdev->hdev->dev,
+                                        &rgb->red.ldev);
        if (err)
                return err;
 
@@ -171,9 +172,10 @@ static int thingm_init_rgb(struct thingm_rgb *rgb)
        rgb->green.ldev.brightness_set_blocking = thingm_led_set;
        rgb->green.rgb = rgb;
 
-       err = led_classdev_register(&rgb->tdev->hdev->dev, &rgb->green.ldev);
+       err = devm_led_classdev_register(&rgb->tdev->hdev->dev,
+                                        &rgb->green.ldev);
        if (err)
-               goto unregister_red;
+               return err;
 
        /* Register the blue diode */
        snprintf(rgb->blue.name, sizeof(rgb->blue.name),
@@ -183,28 +185,11 @@ static int thingm_init_rgb(struct thingm_rgb *rgb)
        rgb->blue.ldev.brightness_set_blocking = thingm_led_set;
        rgb->blue.rgb = rgb;
 
-       err = led_classdev_register(&rgb->tdev->hdev->dev, &rgb->blue.ldev);
-       if (err)
-               goto unregister_green;
-
-       return 0;
-
-unregister_green:
-       led_classdev_unregister(&rgb->green.ldev);
-
-unregister_red:
-       led_classdev_unregister(&rgb->red.ldev);
-
+       err = devm_led_classdev_register(&rgb->tdev->hdev->dev,
+                                        &rgb->blue.ldev);
        return err;
 }
 
-static void thingm_remove_rgb(struct thingm_rgb *rgb)
-{
-       led_classdev_unregister(&rgb->red.ldev);
-       led_classdev_unregister(&rgb->green.ldev);
-       led_classdev_unregister(&rgb->blue.ldev);
-}
-
 static int thingm_probe(struct hid_device *hdev, const struct hid_device_id *id)
 {
        struct thingm_device *tdev;
@@ -259,11 +244,8 @@ static int thingm_probe(struct hid_device *hdev, const struct hid_device_id *id)
                rgb->tdev = tdev;
                rgb->num = tdev->fwinfo->first + i;
                err = thingm_init_rgb(rgb);
-               if (err) {
-                       while (--i >= 0)
-                               thingm_remove_rgb(tdev->rgb + i);
+               if (err)
                        goto stop;
-               }
        }
 
        return 0;
@@ -273,17 +255,6 @@ error:
        return err;
 }
 
-static void thingm_remove(struct hid_device *hdev)
-{
-       struct thingm_device *tdev = hid_get_drvdata(hdev);
-       int i;
-
-       hid_hw_stop(hdev);
-
-       for (i = 0; i < tdev->fwinfo->numrgb; ++i)
-               thingm_remove_rgb(tdev->rgb + i);
-}
-
 static const struct hid_device_id thingm_table[] = {
        { HID_USB_DEVICE(USB_VENDOR_ID_THINGM, USB_DEVICE_ID_BLINK1) },
        { }
@@ -293,7 +264,6 @@ MODULE_DEVICE_TABLE(hid, thingm_table);
 static struct hid_driver thingm_driver = {
        .name = "thingm",
        .probe = thingm_probe,
-       .remove = thingm_remove,
        .id_table = thingm_table,
 };