static int acpi_fujitsu_laptop_input_setup(struct acpi_device *device)
 {
        struct fujitsu_laptop *fujitsu_laptop = acpi_driver_data(device);
-       struct input_dev *input;
-       int error;
 
-       fujitsu_laptop->input = input = input_allocate_device();
-       if (!input)
+       fujitsu_laptop->input = devm_input_allocate_device(&device->dev);
+       if (!fujitsu_laptop->input)
                return -ENOMEM;
 
        snprintf(fujitsu_laptop->phys, sizeof(fujitsu_laptop->phys),
                 "%s/video/input0", acpi_device_hid(device));
 
-       input->name = acpi_device_name(device);
-       input->phys = fujitsu_laptop->phys;
-       input->id.bustype = BUS_HOST;
-       input->id.product = 0x06;
-       input->dev.parent = &device->dev;
-
-       set_bit(EV_KEY, input->evbit);
-       set_bit(fujitsu_bl->keycode1, input->keybit);
-       set_bit(fujitsu_bl->keycode2, input->keybit);
-       set_bit(fujitsu_bl->keycode3, input->keybit);
-       set_bit(fujitsu_bl->keycode4, input->keybit);
-       set_bit(fujitsu_bl->keycode5, input->keybit);
-       set_bit(KEY_TOUCHPAD_TOGGLE, input->keybit);
-       set_bit(KEY_UNKNOWN, input->keybit);
-
-       error = input_register_device(input);
-       if (error)
-               goto err_free_input_dev;
-
-       return 0;
-
-err_free_input_dev:
-       input_free_device(input);
-
-       return error;
+       fujitsu_laptop->input->name = acpi_device_name(device);
+       fujitsu_laptop->input->phys = fujitsu_laptop->phys;
+       fujitsu_laptop->input->id.bustype = BUS_HOST;
+       fujitsu_laptop->input->id.product = 0x06;
+
+       set_bit(EV_KEY, fujitsu_laptop->input->evbit);
+       set_bit(fujitsu_bl->keycode1, fujitsu_laptop->input->keybit);
+       set_bit(fujitsu_bl->keycode2, fujitsu_laptop->input->keybit);
+       set_bit(fujitsu_bl->keycode3, fujitsu_laptop->input->keybit);
+       set_bit(fujitsu_bl->keycode4, fujitsu_laptop->input->keybit);
+       set_bit(fujitsu_bl->keycode5, fujitsu_laptop->input->keybit);
+       set_bit(KEY_TOUCHPAD_TOGGLE, fujitsu_laptop->input->keybit);
+       set_bit(KEY_UNKNOWN, fujitsu_laptop->input->keybit);
+
+       return input_register_device(fujitsu_laptop->input);
 }
 
 static int fujitsu_laptop_platform_add(void)
        error = acpi_bus_update_power(fujitsu_laptop->acpi_handle, &state);
        if (error) {
                pr_err("Error reading power state\n");
-               goto err_unregister_input_dev;
+               goto err_free_fifo;
        }
 
        pr_info("ACPI: %s [%s] (%s)\n",
 
        error = fujitsu_laptop_platform_add();
        if (error)
-               goto err_unregister_input_dev;
+               goto err_free_fifo;
 
 #if IS_ENABLED(CONFIG_LEDS_CLASS)
        if (call_fext_func(FUNC_LEDS, 0x0, 0x0, 0x0) & LOGOLAMP_POWERON) {
 
        return result;
 
-err_unregister_input_dev:
-       input_unregister_device(fujitsu_laptop->input);
 err_free_fifo:
        kfifo_free(&fujitsu_laptop->fifo);
 err_stop:
 static int acpi_fujitsu_laptop_remove(struct acpi_device *device)
 {
        struct fujitsu_laptop *fujitsu_laptop = acpi_driver_data(device);
-       struct input_dev *input = fujitsu_laptop->input;
 
 #if IS_ENABLED(CONFIG_LEDS_CLASS)
        if (fujitsu_laptop->logolamp_registered)
 
        fujitsu_laptop_platform_remove();
 
-       input_unregister_device(input);
-
        kfifo_free(&fujitsu_laptop->fifo);
 
        fujitsu_laptop->acpi_handle = NULL;