Re: [PATCH 6/7] ACPI: thinkpad-acpi: dequeue all pending hot key events at once

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thursday 20 September 2007 09:50, Henrique de Moraes Holschuh wrote:
> Receive all pending hot key events at once from a single notification, and
> don't complain if the queue is empty.
> 
> Signed-off-by: Henrique de Moraes Holschuh <hmh@xxxxxxxxxx>
> ---
>  drivers/misc/thinkpad_acpi.c |   52 ++++++++++++++++++++++++++++-------------
>  1 files changed, 35 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/misc/thinkpad_acpi.c b/drivers/misc/thinkpad_acpi.c
> index 9a61140..de415fe 100644
> --- a/drivers/misc/thinkpad_acpi.c
> +++ b/drivers/misc/thinkpad_acpi.c
> @@ -1196,9 +1196,31 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event)
>  {
>  	u32 hkey;
>  	unsigned int keycode, scancode;
> -	int send_acpi_ev = 0;
> +	int send_acpi_ev;
> +
> +	if (event != 0x80) {
> +		printk(IBM_ERR "unknown hotkey notification event %d\n", event);
> +		/* forward it to userspace, maybe it knows how to handle it */
> +		acpi_bus_generate_proc_event(ibm->acpi->device, event, 0);
> +		acpi_bus_generate_netlink_event(ibm->acpi->device->pnp.device_class,
> +						ibm->acpi->device->dev.bus_id,
> +						event, 0);

If this is really an event due to an hotkey (emphasis on the word KEY:-),
why is it being sent via netlink instead of via input?

thanks,
-Len

> +		return;
> +	}
> +
> +	while (1) {
> +		if (!acpi_evalf(hkey_handle, &hkey, "MHKP", "d")) {
> +			printk(IBM_ERR "failed to retrieve hot key event\n");
> +			return;
> +		}
> +
> +		if (hkey == 0) {
> +			/* queue empty */
> +			return;
> +		}
> +
> +		send_acpi_ev = 0;
>  
> -	if (event == 0x80 && acpi_evalf(hkey_handle, &hkey, "MHKP", "d")) {
>  		switch (hkey >> 12) {
>  		case 1:
>  			/* 0x1000-0x1FFF: key presses */
> @@ -1220,8 +1242,8 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event)
>  			 * eat up known LID events */
>  			if (hkey != 0x5001 && hkey != 0x5002) {
>  				printk(IBM_ERR
> -					"unknown LID-related hotkey event: 0x%04x\n",
> -					hkey);
> +				       "unknown LID-related hotkey event: 0x%04x\n",
> +				       hkey);
>  				send_acpi_ev = 1;
>  			}
>  			break;
> @@ -1240,21 +1262,17 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event)
>  			printk(IBM_NOTICE "unhandled HKEY event 0x%04x\n", hkey);
>  			send_acpi_ev = 1;
>  		}
> -	} else {
> -		printk(IBM_ERR "unknown hotkey notification event %d\n", event);
> -		hkey = 0;
> -		send_acpi_ev = 1;
> -	}
>  
> -	/* Legacy events */
> -	if (send_acpi_ev || hotkey_report_mode < 2)
> -		acpi_bus_generate_proc_event(ibm->acpi->device, event, hkey);
> +		/* Legacy events */
> +		if (send_acpi_ev || hotkey_report_mode < 2)
> +			acpi_bus_generate_proc_event(ibm->acpi->device, event, hkey);
>  
> -	/* netlink events */
> -	if (send_acpi_ev) {
> -		acpi_bus_generate_netlink_event(ibm->acpi->device->pnp.device_class,
> -						ibm->acpi->device->dev.bus_id,
> -						event, hkey);
> +		/* netlink events */
> +		if (send_acpi_ev) {
> +			acpi_bus_generate_netlink_event(ibm->acpi->device->pnp.device_class,
> +							ibm->acpi->device->dev.bus_id,
> +							event, hkey);
> +		}
>  	}
>  }
>  
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux