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>
This commit is contained in:
Rafael J. Wysocki 2026-05-15 13:47:29 +02:00 committed by Ilpo Järvinen
parent 4339fa4fae
commit 5cfb132da0
No known key found for this signature in database
GPG Key ID: 59AC4F6153E5CE31

View File

@ -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 = {