aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform
diff options
context:
space:
mode:
authorShuduo Sang <shuduo.sang@canonical.com>2014-03-27 06:06:25 -0400
committerMatthew Garrett <matthew.garrett@nebula.com>2014-04-06 12:58:14 -0400
commit330947b84382479459e5296a0024c670367b0b57 (patch)
treed6ac43bcab6bd149656452c6fbb397552ec69cbe /drivers/platform
parent3a9d20bda1d6daae9d81a4cc4cc67238c5574d31 (diff)
save and restore adaptive keyboard mode for suspend and,resume
Dan Aloni has submitted a patch to set adaptive mode to function mode when system resume back. Thanks Dan. :) Following patch can make it to be restored to previous mode like What Windows does. Thanks, Shuduo >From 0ca960138518ceab23110141a0d7c0cafd54a859 Mon Sep 17 00:00:00 2001 From: Shuduo Sang <shuduo.sang@canonical.com> Date: Thu, 27 Mar 2014 17:51:24 +0800 Subject: [PATCH] save and restore adaptive keyboard mode for suspend and resume The mode of adaptive keyboard on X1 Carbon need be saved first before suspend then it can be restored after resume. Otherwise it will be unusable. Signed-off-by: Bruce Ma <bruce.ma@canonical.com> Signed-off-by: Shuduo Sang <shuduo.sang@canonical.com> Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
Diffstat (limited to 'drivers/platform')
-rw-r--r--drivers/platform/x86/thinkpad_acpi.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index d0f2a5330096..18c9862dd932 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -3830,13 +3830,28 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event)
3830 3830
3831static void hotkey_suspend(void) 3831static void hotkey_suspend(void)
3832{ 3832{
3833 int hkeyv;
3834
3833 /* Do these on suspend, we get the events on early resume! */ 3835 /* Do these on suspend, we get the events on early resume! */
3834 hotkey_wakeup_reason = TP_ACPI_WAKEUP_NONE; 3836 hotkey_wakeup_reason = TP_ACPI_WAKEUP_NONE;
3835 hotkey_autosleep_ack = 0; 3837 hotkey_autosleep_ack = 0;
3838
3839 /* save previous mode of adaptive keyboard of X1 Carbon */
3840 if (acpi_evalf(hkey_handle, &hkeyv, "MHKV", "qd")) {
3841 if ((hkeyv >> 8) == 2) {
3842 if (!acpi_evalf(hkey_handle,
3843 &adaptive_keyboard_prev_mode,
3844 "GTRW", "dd", 0)) {
3845 pr_err("Cannot read adaptive keyboard mode.\n");
3846 }
3847 }
3848 }
3836} 3849}
3837 3850
3838static void hotkey_resume(void) 3851static void hotkey_resume(void)
3839{ 3852{
3853 int hkeyv;
3854
3840 tpacpi_disable_brightness_delay(); 3855 tpacpi_disable_brightness_delay();
3841 3856
3842 if (hotkey_status_set(true) < 0 || 3857 if (hotkey_status_set(true) < 0 ||
@@ -3849,6 +3864,18 @@ static void hotkey_resume(void)
3849 hotkey_wakeup_reason_notify_change(); 3864 hotkey_wakeup_reason_notify_change();
3850 hotkey_wakeup_hotunplug_complete_notify_change(); 3865 hotkey_wakeup_hotunplug_complete_notify_change();
3851 hotkey_poll_setup_safe(false); 3866 hotkey_poll_setup_safe(false);
3867
3868 /* restore previous mode of adapive keyboard of X1 Carbon */
3869 if (acpi_evalf(hkey_handle, &hkeyv, "MHKV", "qd")) {
3870 if ((hkeyv >> 8) == 2) {
3871 if (!acpi_evalf(hkey_handle,
3872 NULL,
3873 "STRW", "vd",
3874 adaptive_keyboard_prev_mode)) {
3875 pr_err("Cannot set adaptive keyboard mode.\n");
3876 }
3877 }
3878 }
3852} 3879}
3853 3880
3854/* procfs -------------------------------------------------------------- */ 3881/* procfs -------------------------------------------------------------- */