mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-23 04:54:01 +08:00
ACPI: thinkpad-acpi: dequeue all pending hot key events at once (v2.2)
Receive all pending HKEY events at once from a single notification, and don't complain if the queue is empty. Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
1b6521dc84
commit
3eea123df1
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user