diff options
| author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2026-05-15 13:47:29 +0200 |
|---|---|---|
| committer | Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> | 2026-05-20 13:06:59 +0300 |
| commit | 5cfb132da0afd3a711e2d5279243100102d2e836 (patch) | |
| tree | 0aaa3ef77a847b178b59432a472bb92c154b6aa2 | |
| parent | 4339fa4fae057c99cbcfd8127769219feb14964b (diff) | |
platform/x86: xo15-ebook: Use devres-based resource management
Use devm_kzalloc() and devm_input_allocate_device() in
ebook_switch_probe() for allocating the button object and the
input device, respectively, to simplify the rollback path in
that function and ebook_switch_remove().
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://patch.msgid.link/6015220.DvuYhMxLoT@rafael.j.wysocki
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
| -rw-r--r-- | drivers/platform/x86/xo15-ebook.c | 43 |
1 files changed, 14 insertions, 29 deletions
diff --git a/drivers/platform/x86/xo15-ebook.c b/drivers/platform/x86/xo15-ebook.c index 2ca15f04b2d9..e40e385c52bd 100644 --- a/drivers/platform/x86/xo15-ebook.c +++ b/drivers/platform/x86/xo15-ebook.c @@ -82,30 +82,28 @@ static SIMPLE_DEV_PM_OPS(ebook_switch_pm, NULL, ebook_switch_resume); static int ebook_switch_probe(struct platform_device *pdev) { - struct acpi_device *device = ACPI_COMPANION(&pdev->dev); + struct device *dev = &pdev->dev; + struct acpi_device *device = ACPI_COMPANION(dev); const struct acpi_device_id *id; struct ebook_switch *button; struct input_dev *input; int error; - button = kzalloc_obj(struct ebook_switch); + button = devm_kzalloc(dev, sizeof(*button), GFP_KERNEL); if (!button) return -ENOMEM; platform_set_drvdata(pdev, button); - button->input = input = input_allocate_device(); - if (!input) { - error = -ENOMEM; - goto err_free_button; - } + input = devm_input_allocate_device(dev); + if (!input) + return -ENOMEM; + + button->input = input; id = acpi_match_acpi_device(ebook_device_ids, device); - if (!id) { - dev_err(&pdev->dev, "Unsupported hid\n"); - error = -ENODEV; - goto err_free_input; - } + if (!id) + return dev_err_probe(dev, -ENODEV, "Unsupported hid\n"); strscpy(acpi_device_name(device), XO15_EBOOK_DEVICE_NAME); strscpy(acpi_device_class(device), XO15_EBOOK_CLASS "/" XO15_EBOOK_SUBCLASS); @@ -115,21 +113,20 @@ static int ebook_switch_probe(struct platform_device *pdev) input->name = acpi_device_name(device); input->phys = button->phys; input->id.bustype = BUS_HOST; - input->dev.parent = &pdev->dev; input->evbit[0] = BIT_MASK(EV_SW); set_bit(SW_TABLET_MODE, input->swbit); error = input_register_device(input); if (error) - goto err_free_input; + return error; error = acpi_dev_install_notify_handler(device, ACPI_DEVICE_NOTIFY, - ebook_switch_notify, &pdev->dev); + ebook_switch_notify, dev); if (error) - goto err_unregister_input; + return error; - ebook_send_state(&pdev->dev); + ebook_send_state(dev); if (device->wakeup.flags.valid) { /* Button's GPE is run-wake GPE */ @@ -139,16 +136,6 @@ static int ebook_switch_probe(struct platform_device *pdev) } return 0; - -err_free_input: - input_free_device(input); -err_free_button: - kfree(button); - return error; - -err_unregister_input: - input_unregister_device(input); - goto err_free_button; } static void ebook_switch_remove(struct platform_device *pdev) @@ -162,8 +149,6 @@ static void ebook_switch_remove(struct platform_device *pdev) acpi_dev_remove_notify_handler(device, ACPI_DEVICE_NOTIFY, ebook_switch_notify); - input_unregister_device(button->input); - kfree(button); } static struct platform_driver xo15_ebook_driver = { |
