Commit cddd1f71 authored by Bjorn Helgaas's avatar Bjorn Helgaas Committed by Len Brown

panasonic-laptop: use .notify method instead of installing handler directly

This patch adds a .notify() method.  The presence of .notify() causes
Linux/ACPI to manage event handlers and notify handlers on our behalf,
so we don't have to install and remove them ourselves.
Signed-off-by: default avatarBjorn Helgaas <bjorn.helgaas@hp.com>
CC: Harald Welte <laforge@gnumonks.org>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent b4ec0275
...@@ -176,6 +176,7 @@ enum SINF_BITS { SINF_NUM_BATTERIES = 0, ...@@ -176,6 +176,7 @@ enum SINF_BITS { SINF_NUM_BATTERIES = 0,
static int acpi_pcc_hotkey_add(struct acpi_device *device); static int acpi_pcc_hotkey_add(struct acpi_device *device);
static int acpi_pcc_hotkey_remove(struct acpi_device *device, int type); static int acpi_pcc_hotkey_remove(struct acpi_device *device, int type);
static int acpi_pcc_hotkey_resume(struct acpi_device *device); static int acpi_pcc_hotkey_resume(struct acpi_device *device);
static void acpi_pcc_hotkey_notify(struct acpi_device *device, u32 event);
static const struct acpi_device_id pcc_device_ids[] = { static const struct acpi_device_id pcc_device_ids[] = {
{ "MAT0012", 0}, { "MAT0012", 0},
...@@ -194,6 +195,7 @@ static struct acpi_driver acpi_pcc_driver = { ...@@ -194,6 +195,7 @@ static struct acpi_driver acpi_pcc_driver = {
.add = acpi_pcc_hotkey_add, .add = acpi_pcc_hotkey_add,
.remove = acpi_pcc_hotkey_remove, .remove = acpi_pcc_hotkey_remove,
.resume = acpi_pcc_hotkey_resume, .resume = acpi_pcc_hotkey_resume,
.notify = acpi_pcc_hotkey_notify,
}, },
}; };
...@@ -527,9 +529,9 @@ static void acpi_pcc_generate_keyinput(struct pcc_acpi *pcc) ...@@ -527,9 +529,9 @@ static void acpi_pcc_generate_keyinput(struct pcc_acpi *pcc)
return; return;
} }
static void acpi_pcc_hotkey_notify(acpi_handle handle, u32 event, void *data) static void acpi_pcc_hotkey_notify(struct acpi_device *device, u32 event)
{ {
struct pcc_acpi *pcc = (struct pcc_acpi *) data; struct pcc_acpi *pcc = acpi_driver_data(device);
switch (event) { switch (event) {
case HKEY_NOTIFY: case HKEY_NOTIFY:
...@@ -599,7 +601,6 @@ static int acpi_pcc_hotkey_resume(struct acpi_device *device) ...@@ -599,7 +601,6 @@ static int acpi_pcc_hotkey_resume(struct acpi_device *device)
static int acpi_pcc_hotkey_add(struct acpi_device *device) static int acpi_pcc_hotkey_add(struct acpi_device *device)
{ {
acpi_status status;
struct pcc_acpi *pcc; struct pcc_acpi *pcc;
int num_sifr, result; int num_sifr, result;
...@@ -640,22 +641,11 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device) ...@@ -640,22 +641,11 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device)
goto out_sinf; goto out_sinf;
} }
/* initialize hotkey input device */
status = acpi_install_notify_handler(pcc->handle, ACPI_DEVICE_NOTIFY,
acpi_pcc_hotkey_notify, pcc);
if (ACPI_FAILURE(status)) {
ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
"Error installing notify handler\n"));
result = -ENODEV;
goto out_input;
}
/* initialize backlight */ /* initialize backlight */
pcc->backlight = backlight_device_register("panasonic", NULL, pcc, pcc->backlight = backlight_device_register("panasonic", NULL, pcc,
&pcc_backlight_ops); &pcc_backlight_ops);
if (IS_ERR(pcc->backlight)) if (IS_ERR(pcc->backlight))
goto out_notify; goto out_input;
if (!acpi_pcc_retrieve_biosdata(pcc, pcc->sinf)) { if (!acpi_pcc_retrieve_biosdata(pcc, pcc->sinf)) {
ACPI_DEBUG_PRINT((ACPI_DB_ERROR, ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
...@@ -680,9 +670,6 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device) ...@@ -680,9 +670,6 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device)
out_backlight: out_backlight:
backlight_device_unregister(pcc->backlight); backlight_device_unregister(pcc->backlight);
out_notify:
acpi_remove_notify_handler(pcc->handle, ACPI_DEVICE_NOTIFY,
acpi_pcc_hotkey_notify);
out_input: out_input:
input_unregister_device(pcc->input_dev); input_unregister_device(pcc->input_dev);
/* no need to input_free_device() since core input API refcount and /* no need to input_free_device() since core input API refcount and
...@@ -723,9 +710,6 @@ static int acpi_pcc_hotkey_remove(struct acpi_device *device, int type) ...@@ -723,9 +710,6 @@ static int acpi_pcc_hotkey_remove(struct acpi_device *device, int type)
backlight_device_unregister(pcc->backlight); backlight_device_unregister(pcc->backlight);
acpi_remove_notify_handler(pcc->handle, ACPI_DEVICE_NOTIFY,
acpi_pcc_hotkey_notify);
input_unregister_device(pcc->input_dev); input_unregister_device(pcc->input_dev);
/* no need to input_free_device() since core input API refcount and /* no need to input_free_device() since core input API refcount and
* free()s the device */ * free()s the device */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment