Make input_unregister_device() the first step of thinkpad_acpi_module_exit(), so that the order in thinkpad_acpi_module_exit() properly mirrors the order in thinkpad_acpi_module_init(); And move the kfree(hotkey_keycode_map) call to hotkey_exit() (the exit handler of the hotkey subdriver) where it belongs. Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> --- drivers/platform/x86/thinkpad_acpi.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c index 392af8f1c213..a4ef57ddcc90 100644 --- a/drivers/platform/x86/thinkpad_acpi.c +++ b/drivers/platform/x86/thinkpad_acpi.c @@ -3050,6 +3050,8 @@ static void hotkey_exit(void) hotkey_mask_set(hotkey_orig_mask)) | hotkey_status_set(false)) != 0) pr_err("failed to restore hot key mask to BIOS defaults\n"); + + kfree(hotkey_keycode_map); } static void __init hotkey_unmap(const unsigned int scancode) @@ -11184,6 +11186,8 @@ static void thinkpad_acpi_module_exit(void) tpacpi_lifecycle = TPACPI_LIFE_EXITING; + if (tp_features.input_device_registered) + input_unregister_device(tpacpi_inputdev); if (tpacpi_hwmon) hwmon_device_unregister(tpacpi_hwmon); if (tp_features.sensors_pdrv_registered) @@ -11199,14 +11203,8 @@ static void thinkpad_acpi_module_exit(void) dbg_printk(TPACPI_DBG_INIT, "finished subdriver exit path...\n"); - if (tpacpi_inputdev) { - if (tp_features.input_device_registered) - input_unregister_device(tpacpi_inputdev); - else - input_free_device(tpacpi_inputdev); - kfree(hotkey_keycode_map); - } - + if (tpacpi_inputdev) + input_free_device(tpacpi_inputdev); if (tpacpi_sensors_pdev) platform_device_unregister(tpacpi_sensors_pdev); if (tpacpi_pdev) -- 2.33.1