Merge branch 'for-6.7/nvidia-shield' into for-linus
authorJiri Kosina <jkosina@suse.cz>
Tue, 31 Oct 2023 23:16:20 +0000 (00:16 +0100)
committerJiri Kosina <jkosina@suse.cz>
Tue, 31 Oct 2023 23:16:20 +0000 (00:16 +0100)
- probe error handling path fixes in hid-nvidia-shield driver (Christophe JAILLET)

drivers/hid/hid-nvidia-shield.c

index c463e54decbce1476bb9e56980af2330fed6a4b9..82d0a77359c460c9bad772038e1a129e9983e0c0 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);