--- x/drivers/hid/hid-steam.c +++ y/drivers/hid/hid-steam.c @@ -618,6 +618,8 @@ static void steam_input_close(struct inp unsigned long flags; bool set_lizard_mode; + if (dev->going_away) + return; if (!(steam->quirks & STEAM_QUIRK_DECK)) { spin_lock_irqsave(&steam->lock, flags); set_lizard_mode = !steam->client_opened && lizard_mode; @@ -1086,6 +1088,11 @@ static void steam_work_unregister_cb(str connected = steam->connected; spin_unlock_irqrestore(&steam->lock, flags); + if (opened) { + steam_sensors_unregister(steam); + steam_input_unregister(steam); + opened = false; + } if (connected) { if (opened) { steam_sensors_unregister(steam); @@ -1340,6 +1347,7 @@ static void steam_remove(struct hid_devi hid_hw_close(hdev); hid_hw_stop(hdev); steam_unregister(steam); + disable_work_sync(&steam->unregister_work); } static void steam_do_connect_event(struct steam_device *steam, bool connected)