[PATCH v1 3/4] platform/x86: xo15-ebook: Register ACPI notify handler directly
From: Rafael J. Wysocki
Date: Fri May 08 2026 - 13:47:10 EST
From: "Rafael J. Wysocki" <rafael.j.wysocki@xxxxxxxxx>
To facilitate subsequent conversion of the driver to a platform one,
make it install an ACPI notify handler directly instead of using
a .notify() callback in struct acpi_driver.
No intentional functional impact.
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
---
drivers/platform/x86/xo15-ebook.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/drivers/platform/x86/xo15-ebook.c b/drivers/platform/x86/xo15-ebook.c
index 616f4bb3461a..8af1b9078db8 100644
--- a/drivers/platform/x86/xo15-ebook.c
+++ b/drivers/platform/x86/xo15-ebook.c
@@ -57,16 +57,15 @@ static int ebook_send_state(struct acpi_device *device)
return 0;
}
-static void ebook_switch_notify(struct acpi_device *device, u32 event)
+static void ebook_switch_notify(acpi_handle handle, u32 event, void *data)
{
switch (event) {
case ACPI_FIXED_HARDWARE_EVENT:
case XO15_EBOOK_NOTIFY_STATUS:
- ebook_send_state(device);
+ ebook_send_state(data);
break;
default:
- acpi_handle_debug(device->handle,
- "Unsupported event [0x%x]\n", event);
+ acpi_handle_debug(handle, "Unsupported event [0x%x]\n", event);
break;
}
}
@@ -123,6 +122,11 @@ static int ebook_switch_add(struct acpi_device *device)
if (error)
goto err_free_input;
+ error = acpi_dev_install_notify_handler(device, ACPI_DEVICE_NOTIFY,
+ ebook_switch_notify, device);
+ if (error)
+ goto err_unregister_input;
+
ebook_send_state(device);
if (device->wakeup.flags.valid) {
@@ -139,6 +143,10 @@ static int ebook_switch_add(struct acpi_device *device)
err_free_button:
kfree(button);
return error;
+
+err_unregister_input:
+ input_unregister_device(input);
+ goto err_free_button;
}
static void ebook_switch_remove(struct acpi_device *device)
@@ -149,6 +157,8 @@ static void ebook_switch_remove(struct acpi_device *device)
acpi_disable_gpe(device->wakeup.gpe_device,
device->wakeup.gpe_number);
+ acpi_dev_remove_notify_handler(device, ACPI_DEVICE_NOTIFY,
+ ebook_switch_notify);
input_unregister_device(button->input);
kfree(button);
}
@@ -160,7 +170,6 @@ static struct acpi_driver xo15_ebook_driver = {
.ops = {
.add = ebook_switch_add,
.remove = ebook_switch_remove,
- .notify = ebook_switch_notify,
},
.drv.pm = &ebook_switch_pm,
};