From d27b491ba18e38a1c5369320bab446324f16d325 Mon Sep 17 00:00:00 2001 From: Henrique de Moraes Holschuh Date: Sun, 23 Sep 2007 11:39:04 -0300 Subject: [PATCH] --- yaml --- r: 71615 b: refs/heads/master c: 3eea123df1637a88d0899626a67b83dca959efff h: refs/heads/master i: 71613: a14bc8a76a465e7d789b4564526bac41710c2249 71611: e7866895253884398b605f93e90d8d359a48e216 71607: 5e3b1173eb1c075527f8c2ee975c76355eac435b 71599: ea2ba09164f6893b2e611a3ec3ed9dd3de9f667e 71583: 498bd25f2ea3adcf4adcb623758256d01e79c96c 71551: 115b91ab7712573882a0a4497f6f27e0aa0bb39e v: v3 --- [refs] | 2 +- trunk/drivers/misc/thinkpad_acpi.c | 51 ++++++++++++++++++++---------- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/[refs] b/[refs] index ef3eeb61207c..e9b7c8b90934 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1b6521dc84f372dd92a96381fbeeebb01173d050 +refs/heads/master: 3eea123df1637a88d0899626a67b83dca959efff diff --git a/trunk/drivers/misc/thinkpad_acpi.c b/trunk/drivers/misc/thinkpad_acpi.c index 9a611402ee9d..3efe81b1b73c 100644 --- a/trunk/drivers/misc/thinkpad_acpi.c +++ b/trunk/drivers/misc/thinkpad_acpi.c @@ -1196,9 +1196,30 @@ 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 HKEY notification event %d\n", event); + /* forward it to userspace, maybe it knows how to handle it */ + acpi_bus_generate_netlink_event(ibm->acpi->device->pnp.device_class, + ibm->acpi->device->dev.bus_id, + event, 0); + return; + } + + while (1) { + if (!acpi_evalf(hkey_handle, &hkey, "MHKP", "d")) { + printk(IBM_ERR "failed to retrieve HKEY 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 +1241,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 HKEY event: 0x%04x\n", + hkey); send_acpi_ev = 1; } break; @@ -1240,21 +1261,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); + } } }