Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+5 −21
Original line number Original line Diff line number Diff line
@@ -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 = {
				.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)
	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)


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)
		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)


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)


	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 */