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 <[EMAIL PROTECTED]>
> ---
> 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);
> + }
> }
> }
>
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
ibm-acpi-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ibm-acpi-devel