Skip to content

Commit

Permalink
acer-wmi: does not poll device status when WMI event is available
Browse files Browse the repository at this point in the history
Acer WMI hotkey event's result include current device status, just
need sync the status to killswitch after acer-wmi driver receive
hotkey event but not always poll device status. This is good for
performance.

But, if use EC raw mode, Acer BIOS will not emit wmi event and
leave EC to control device status. So, still startup polling job
when doesn't detect WMI event GUID or user choice to use ec_raw_mode.

Tested on Acer TravelMate 8572 notebook.

Cc: Carlos Corbacho <carlos@strangeworlds.co.uk>
Cc: Matthew Garrett <mjg@redhat.com>
Cc: Dmitry Torokhov <dtor@mail.ru>
Cc: Corentin Chary <corentincj@iksaif.net>
Cc: Thomas Renninger <trenn@suse.de>
Signed-off-by: Lee, Chun-Yi <jlee@novell.com>
Signed-off-by: Matthew Garrett <mjg@redhat.com>
  • Loading branch information
Lee, Chun-Yi authored and Matthew Garrett committed Mar 28, 2011
1 parent 8215af0 commit 70a9b90
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions drivers/platform/x86/acer-wmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1234,14 +1234,17 @@ static int acer_rfkill_init(struct device *dev)

rfkill_inited = true;

schedule_delayed_work(&acer_rfkill_work, round_jiffies_relative(HZ));
if (ec_raw_mode || !wmi_has_guid(ACERWMID_EVENT_GUID))
schedule_delayed_work(&acer_rfkill_work,
round_jiffies_relative(HZ));

return 0;
}

static void acer_rfkill_exit(void)
{
cancel_delayed_work_sync(&acer_rfkill_work);
if (ec_raw_mode || !wmi_has_guid(ACERWMID_EVENT_GUID))
cancel_delayed_work_sync(&acer_rfkill_work);

rfkill_unregister(wireless_rfkill);
rfkill_destroy(wireless_rfkill);
Expand Down Expand Up @@ -1338,6 +1341,19 @@ static void acer_wmi_notify(u32 value, void *context)

switch (return_value.function) {
case WMID_HOTKEY_EVENT:
if (return_value.device_state) {
u16 device_state = return_value.device_state;
pr_debug("deivces states: 0x%x\n", device_state);
if (has_cap(ACER_CAP_WIRELESS))
rfkill_set_sw_state(wireless_rfkill,
!(device_state & ACER_WMID3_GDS_WIRELESS));
if (has_cap(ACER_CAP_BLUETOOTH))
rfkill_set_sw_state(bluetooth_rfkill,
!(device_state & ACER_WMID3_GDS_BLUETOOTH));
if (has_cap(ACER_CAP_THREEG))
rfkill_set_sw_state(threeg_rfkill,
!(device_state & ACER_WMID3_GDS_THREEG));
}
if (!sparse_keymap_report_event(acer_wmi_input_dev,
return_value.key_num, 1, true))
pr_warning("Unknown key number - 0x%x\n",
Expand Down

0 comments on commit 70a9b90

Please sign in to comment.