| From bf9c322e961bfb0b3a81bdb3b357aa542121e4e1 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 8 Nov 2021 14:06:48 +0800 |
| Subject: platform/x86: thinkpad_acpi: Fix WWAN device disabled issue after S3 |
| deep |
| |
| From: Slark Xiao <slark_xiao@163.com> |
| |
| [ Upstream commit 39f53292181081d35174a581a98441de5da22bc9 ] |
| |
| When WWAN device wake from S3 deep, under thinkpad platform, |
| WWAN would be disabled. This disable status could be checked |
| by command 'nmcli r wwan' or 'rfkill list'. |
| |
| Issue analysis as below: |
| When host resume from S3 deep, thinkpad_acpi driver would |
| call hotkey_resume() function. Finnaly, it will use |
| wan_get_status to check the current status of WWAN device. |
| During this resume progress, wan_get_status would always |
| return off even WWAN boot up completely. |
| In patch V2, Hans said 'sw_state should be unchanged |
| after a suspend/resume. It's better to drop the |
| tpacpi_rfk_update_swstate call all together from the |
| resume path'. |
| And it's confimed by Lenovo that GWAN is no longer |
| available from WHL generation because the design does not |
| match with current pin control. |
| |
| Signed-off-by: Slark Xiao <slark_xiao@163.com> |
| Link: https://lore.kernel.org/r/20211108060648.8212-1-slark_xiao@163.com |
| Reviewed-by: Hans de Goede <hdegoede@redhat.com> |
| Signed-off-by: Hans de Goede <hdegoede@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/platform/x86/thinkpad_acpi.c | 12 ------------ |
| 1 file changed, 12 deletions(-) |
| |
| diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c |
| index f3954af14f52f..466a0d0162c3d 100644 |
| --- a/drivers/platform/x86/thinkpad_acpi.c |
| +++ b/drivers/platform/x86/thinkpad_acpi.c |
| @@ -1168,15 +1168,6 @@ static int tpacpi_rfk_update_swstate(const struct tpacpi_rfk *tp_rfk) |
| return status; |
| } |
| |
| -/* Query FW and update rfkill sw state for all rfkill switches */ |
| -static void tpacpi_rfk_update_swstate_all(void) |
| -{ |
| - unsigned int i; |
| - |
| - for (i = 0; i < TPACPI_RFK_SW_MAX; i++) |
| - tpacpi_rfk_update_swstate(tpacpi_rfkill_switches[i]); |
| -} |
| - |
| /* |
| * Sync the HW-blocking state of all rfkill switches, |
| * do notice it causes the rfkill core to schedule uevents |
| @@ -3015,9 +3006,6 @@ static void tpacpi_send_radiosw_update(void) |
| if (wlsw == TPACPI_RFK_RADIO_OFF) |
| tpacpi_rfk_update_hwblock_state(true); |
| |
| - /* Sync sw blocking state */ |
| - tpacpi_rfk_update_swstate_all(); |
| - |
| /* Sync hw blocking state last if it is hw-unblocked */ |
| if (wlsw == TPACPI_RFK_RADIO_ON) |
| tpacpi_rfk_update_hwblock_state(false); |
| -- |
| 2.33.0 |
| |