提交 16dd55f3 编写于 作者: M Matthias Welwarsky 提交者: Len Brown

sony-laptop: fix event reporting for new style events

In short Fn key events are always reported through acpi.
The input layer gets all the old style events and only those new style
events that, after being decoded, are mapped to an locally represented
events.
rfkill only update the rfkill device status.
Signed-off-by: NMatthias Welwarsky <matze@welwarsky.de>
Signed-off-by: NMattia Dongili <malattia@linux.it>
Signed-off-by: NLen Brown <len.brown@intel.com>
上级 14bd3136
...@@ -917,10 +917,10 @@ static struct sony_nc_event sony_127_events[] = { ...@@ -917,10 +917,10 @@ static struct sony_nc_event sony_127_events[] = {
static void sony_acpi_notify(acpi_handle handle, u32 event, void *data) static void sony_acpi_notify(acpi_handle handle, u32 event, void *data)
{ {
u32 ev = event; u32 ev = event;
int result;
if (ev >= 0x90) { if (ev >= 0x90) {
/* New-style event */ /* New-style event */
int result;
int key_handle = 0; int key_handle = 0;
ev -= 0x90; ev -= 0x90;
...@@ -932,38 +932,43 @@ static void sony_acpi_notify(acpi_handle handle, u32 event, void *data) ...@@ -932,38 +932,43 @@ static void sony_acpi_notify(acpi_handle handle, u32 event, void *data)
if (key_handle) { if (key_handle) {
struct sony_nc_event *key_event; struct sony_nc_event *key_event;
if (sony_call_snc_handle(key_handle, 0x200, &result)) if (sony_call_snc_handle(key_handle, 0x200, &result)) {
dprintk("sony_acpi_notify, unable to decode" dprintk("sony_acpi_notify, unable to decode"
" event 0x%.2x 0x%.2x\n", key_handle, " event 0x%.2x 0x%.2x\n", key_handle,
ev); ev);
else /* restore the original event */
ev = event;
} else {
ev = result & 0xFF; ev = result & 0xFF;
if (key_handle == 0x100) if (key_handle == 0x100)
key_event = sony_100_events; key_event = sony_100_events;
else else
key_event = sony_127_events; key_event = sony_127_events;
for (; key_event->data; key_event++) { for (; key_event->data; key_event++) {
if (key_event->data == ev) { if (key_event->data == ev) {
ev = key_event->event; ev = key_event->event;
break; break;
}
} }
}
if (!key_event->data) { if (!key_event->data)
printk(KERN_INFO DRV_PFX printk(KERN_INFO DRV_PFX
"Unknown event: 0x%x 0x%x\n", key_handle, "Unknown event: 0x%x 0x%x\n",
ev); key_handle,
ev);
else
sony_laptop_report_input_event(ev);
} }
} else if (sony_find_snc_handle(0x124) == ev) { } else if (sony_find_snc_handle(0x124) == ev) {
sony_nc_rfkill_update(); sony_nc_rfkill_update();
return; return;
} }
} } else
sony_laptop_report_input_event(ev);
dprintk("sony_acpi_notify, event: 0x%.2x\n", ev); dprintk("sony_acpi_notify, event: 0x%.2x\n", ev);
sony_laptop_report_input_event(ev);
acpi_bus_generate_proc_event(sony_nc_acpi_device, 1, ev); acpi_bus_generate_proc_event(sony_nc_acpi_device, 1, ev);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册