HID: nvidia-shield: Introduce thunderstrike_destroy()
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Mon, 18 Sep 2023 11:54:32 +0000 (04:54 -0700)
committerJiri Kosina <jkosina@suse.cz>
Wed, 4 Oct 2023 18:57:56 +0000 (20:57 +0200)
In order to simplify some error handling paths and avoid code duplication,
introduce thunderstrike_destroy() which undoes thunderstrike_create().

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: Rahul Rameshbabu <rrameshbabu@nvidia.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-nvidia-shield.c

index c463e54..82d0a77 100644 (file)
@@ -915,6 +915,15 @@ err_id:
        return ERR_PTR(ret);
 }
 
+static void thunderstrike_destroy(struct thunderstrike *ts)
+{
+       led_classdev_unregister(&ts->led_dev);
+       power_supply_unregister(ts->base.battery_dev.psy);
+       if (ts->haptics_dev)
+               input_unregister_device(ts->haptics_dev);
+       ida_free(&thunderstrike_ida, ts->id);
+}
+
 static int android_input_mapping(struct hid_device *hdev, struct hid_input *hi,
                                 struct hid_field *field,
                                 struct hid_usage *usage, unsigned long **bit,
@@ -1074,11 +1083,7 @@ static int shield_probe(struct hid_device *hdev, const struct hid_device_id *id)
 err_stop:
        hid_hw_stop(hdev);
 err_ts_create:
-       power_supply_unregister(ts->base.battery_dev.psy);
-       if (ts->haptics_dev)
-               input_unregister_device(ts->haptics_dev);
-       led_classdev_unregister(&ts->led_dev);
-       ida_free(&thunderstrike_ida, ts->id);
+       thunderstrike_destroy(ts);
        return ret;
 }
 
@@ -1090,11 +1095,7 @@ static void shield_remove(struct hid_device *hdev)
        ts = container_of(dev, struct thunderstrike, base);
 
        hid_hw_close(hdev);
-       power_supply_unregister(dev->battery_dev.psy);
-       if (ts->haptics_dev)
-               input_unregister_device(ts->haptics_dev);
-       led_classdev_unregister(&ts->led_dev);
-       ida_free(&thunderstrike_ida, ts->id);
+       thunderstrike_destroy(ts);
        del_timer_sync(&ts->psy_stats_timer);
        cancel_work_sync(&ts->hostcmd_req_work);
        hid_hw_stop(hdev);