Hi, On 8/11/21 11:34 AM, Slark Xiao wrote: > 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. > If wan_get_status() return off, rfkill_set_sw_state() would set WWAN's > status as disabled. > This may be a fault of LENOVO BIOS. > 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. > > Signed-off-by: Slark Xiao <slark_xiao@xxxxxxx> Thank you for debugging this and thank you for the patch. I'm not in favor of using a pci-device-id list here. Maybe we should simply just never update the sw-rfkill state after a suspend-resume ? I mean the sw_state should be unchanged after a suspend/resume. Only the hw_state on older devices which still have a physical radio on/off slider on the side might have changed during suspend. So I think it might be better to just drop the tpacpi_rfk_update_swstate call all together from the resume path? Mark do you have any input here? Regards, Hans > --- > 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]); > + > + } > } > > /* > _______________________________________________ ibm-acpi-devel mailing list ibm-acpi-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.sourceforge.net/lists/listinfo/ibm-acpi-devel