diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c index d93108d..4896af5 100644 --- a/drivers/platform/x86/thinkpad_acpi.c +++ b/drivers/platform/x86/thinkpad_acpi.c @@ -4055,14 +4055,37 @@ enum { }; #define TPACPI_RFK_WWAN_SW_NAME "tpacpi_wwan_sw" +static int laststat; static void wan_suspend(pm_message_t state) { + int status; + acpi_evalf(hkey_handle, &status, "GWAN", "d"); + laststat = status; + printk("s%d stat.\n", status); /* Try to make sure radio will resume powered off */ if (!acpi_evalf(NULL, NULL, "\\WGSV", "qvd", TP_ACPI_WGSV_PWR_OFF_ON_RESUME)) vdbg_printk(TPACPI_DBG_RFKILL, "WWAN power down on resume request failed\n"); + printk("sus\n"); + acpi_evalf(hkey_handle, &status, "GWAN", "d"); + printk("s%d stat.\n", status); +} + +static int wan_resume(pm_message_t state) +{ + int status; + printk("res\n"); + acpi_evalf(hkey_handle, &status, "GWAN", "d"); + printk("r%d stat.\n", status); + printk("l%d stat.\n", laststat); + if(laststat & TP_ACPI_WANCARD_RADIOSSW) { + acpi_evalf(hkey_handle, NULL, "SWAN", "vd", TP_ACPI_WANCARD_RADIOSSW); + acpi_evalf(hkey_handle, &status, "GWAN", "d"); + printk("r%d stat.\n", status); + tpacpi_rfk_update_swstate_all(); + } } static int wan_get_status(void) @@ -4078,6 +4101,7 @@ static int wan_get_status(void) if (!acpi_evalf(hkey_handle, &status, "GWAN", "d")) return -EIO; + printk("gs: %d\n", status); return ((status & TP_ACPI_WANCARD_RADIOSSW) != 0) ? TPACPI_RFK_RADIO_ON : TPACPI_RFK_RADIO_OFF; } @@ -4103,6 +4127,7 @@ static int wan_set_status(enum tpacpi_rfkill_state state) else status = 0; + printk("ss: %d\n", status); if (!acpi_evalf(hkey_handle, NULL, "SWAN", "vd", status)) return -EIO; @@ -4239,6 +4264,7 @@ static struct ibm_struct wan_driver_data = { .read = wan_read, .write = wan_write, .exit = wan_exit, + .resume = wan_resume, .suspend = wan_suspend, .shutdown = wan_shutdown, };