於 六,2011-03-19 於 07:46 +0800,Lee, Chun-Yi 提到:
> 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 <[email protected]>
> Cc: Matthew Garrett <[email protected]>
> Cc: Dmitry Torokhov <[email protected]>
> Cc: Corentin Chary <[email protected]>
> Cc: Thomas Renninger <[email protected]>
> Signed-off-by: Lee, Chun-Yi <[email protected]>
> ---
> drivers/platform/x86/acer-wmi.c | 20 ++++++++++++++++++--
> 1 files changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
> index 1953c70..9764ddc 100644
> --- a/drivers/platform/x86/acer-wmi.c
> +++ b/drivers/platform/x86/acer-wmi.c
> @@ -1224,14 +1224,17 @@ static int acer_rfkill_init(struct device *dev)
> }
> }
>
> - 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);
> @@ -1332,6 +1335,19 @@ static void acer_wmi_notify(u32 value, void *context)
> return_value.key_num, 1, true))
> pr_warning("Unknown key number - 0x%x\n",
> return_value.key_num);
> + 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));
> + }
> break;
> default:
> pr_warning("Unknown function number - %d - %d\n",
That will be better move the set devices state to before send out key
event when rfkill-input enabled:
@@ -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",
Will send out v2 patch for review.
Thank's
Joey Lee
--
To unsubscribe from this list: send the line "unsubscribe platform-driver-x86"
in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html