All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Fix WWAN device disabled issue after S3 deep When WWAN device wake from S3 deep, under thinkpad platform,it would be disabled. This disable status could be checked by command 'nmcli r wwan' or 'rfkill list'. Issue analysis as below: 1. 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. 2. If wan_get_status() return off, rfkill_set_sw_state() would set WWAN's status as disabled. 3. This may be a fault of LENOVO BIOS. 4. Workaround is add a WWAN device check before rfkill_set_sw_state(). If it's a Foxconn WWAN device, then we will ignore to do a status update.
@ 2021-08-11  8:03 Slark Xiao
  0 siblings, 0 replies; only message in thread
From: Slark Xiao @ 2021-08-11  8:03 UTC (permalink / raw)
  To: hmh, hdegoede
  Cc: ibm-acpi-devel, platform-driver-x86, linux-kernel, Slark Xiao

Signed-off-by: Slark Xiao <slark_xiao@163.com>
---
 drivers/platform/x86/thinkpad_acpi.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 603156a6e3ed..e3b7bc0e7a33 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -1159,6 +1159,13 @@ struct tpacpi_rfk_ops {
 
 static struct tpacpi_rfk *tpacpi_rfkill_switches[TPACPI_RFK_SW_MAX];
 
+/*Foxconn SDX55 T77W175 products. All available device ID*/
+static const struct pci_device_id foxconn_device_ids[] = {
+	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xE0AB) },
+	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xE0AF) },
+	{ PCI_DEVICE(PCI_VENDOR_ID_FOXCONN, 0xE0B4) },
+	{}
+};
 /* Query FW and update rfkill sw state for a given rfkill switch */
 static int tpacpi_rfk_update_swstate(const struct tpacpi_rfk *tp_rfk)
 {
@@ -1182,8 +1189,13 @@ 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]);
+	for (i = 0; i < TPACPI_RFK_SW_MAX; i++) {
+		if (pci_dev_present(foxconn_device_ids) && i == 1)
+			pr_info("Find Foxconn wwan device, ignore to update rfkill switch status\n");
+		else
+			tpacpi_rfk_update_swstate(tpacpi_rfkill_switches[i]);
+
+	}
 }
 
 /*
-- 
2.25.1



^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2021-08-11  8:20 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-11  8:03 [PATCH] Fix WWAN device disabled issue after S3 deep When WWAN device wake from S3 deep, under thinkpad platform,it would be disabled. This disable status could be checked by command 'nmcli r wwan' or 'rfkill list'. Issue analysis as below: 1. 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. 2. If wan_get_status() return off, rfkill_set_sw_state() would set WWAN's status as disabled. 3. This may be a fault of LENOVO BIOS. 4. Workaround is add a WWAN device check before rfkill_set_sw_state(). If it's a Foxconn WWAN device, then we will ignore to do a status update Slark Xiao

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.