** Description changed: I've been working with a user that has a Lenovo Legion Y530-15ICH where booting Ubuntu 18.10 (kernel 4.18.0-8) results in the radios being disabled by the platform driver "ideapad-laptop". Unloading or blacklisting the module solves the issue but disables other platform ACPI interfaces. The system has the most recent firmware: [ 0.000000] DMI: LENOVO 81FV/LNVNB161216, BIOS 8JCN44WW 08/13/2018 The wifi device is: 00:14.3 Network controller [0280]: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:a370] (rev 10) - Subsystem: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:0034] - Kernel driver in use: iwlwifi + Subsystem: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:0034] + Kernel driver in use: iwlwifi We investigated the issue extensively and built the module with additional logic without solving the issue. It is well-known that some Lenovo models do not have a separate hardware radio kill switch (this model uses hot-keys Fn + F7) and need to use a DMI match to disable the rfkill logic. We used dmidecode to get the correct Version string: Handle 0x0001, DMI type 1, 27 bytes System Information - Manufacturer: LENOVO - Product Name: 81FV - Version: Lenovo Legion Y530-15ICH - Serial Number: PF18CD10 - UUID: A44F71C1-5E3D-11E8-9379-8C16458E3F9D - Wake-up Type: Power Switch - SKU Number: LENOVO_MT_81FV_BU_idea_FM_Legion Y530-15ICH - Family: Legion Y530-15ICH + Manufacturer: LENOVO + Product Name: 81FV + Version: Lenovo Legion Y530-15ICH + Serial Number: PF18CD10 + UUID: A44F71C1-5E3D-11E8-9379-8C16458E3F9D + Wake-up Type: Power Switch + SKU Number: LENOVO_MT_81FV_BU_idea_FM_Legion Y530-15ICH + Family: Legion Y530-15ICH and added it to no_hw_rfkill_list[]: - { - .ident = "Lenovo Legion Y530-15ICH", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), - DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"), - }, - }, + { + .ident = "Lenovo Legion Y530-15ICH", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"), + }, + }, However, rfkill was still listing the platform devices "ideapad_wlan" and "ideapad_bluetooth": + + + 0: ideapad_wlan: Wireless LAN + Soft blocked: no + Hard blocked: yes + 1: ideapad_bluetooth: Bluetooth + Soft blocked: yes + Hard blocked: yes + 3: phy0: Wireless LAN + Soft blocked: no + Hard blocked: no + 4: hci0: Bluetooth + Soft blocked: yes + Hard blocked: no /sys/class/rfkill/rfkill0/hard=1 /sys/class/rfkill/rfkill0/index=0 /sys/class/rfkill/rfkill0/name=ideapad_wlan /sys/class/rfkill/rfkill0/persistent=1 /sys/class/rfkill/rfkill0/soft=0 /sys/class/rfkill/rfkill0/state=2 /sys/class/rfkill/rfkill0/type=wlan /sys/class/rfkill/rfkill0/uevent=RFKILL_NAME=ideapad_wlan RFKILL_TYPE=wlan RFKILL_STATE=2 /sys/class/rfkill/rfkill1/hard=1 /sys/class/rfkill/rfkill1/index=1 /sys/class/rfkill/rfkill1/name=ideapad_bluetooth /sys/class/rfkill/rfkill1/persistent=1 /sys/class/rfkill/rfkill1/soft=1 /sys/class/rfkill/rfkill1/state=2 /sys/class/rfkill/rfkill1/type=bluetooth /sys/class/rfkill/rfkill1/uevent=RFKILL_NAME=ideapad_bluetooth RFKILL_TYPE=bluetooth RFKILL_STATE=2 /sys/class/rfkill/rfkill3/hard=0 /sys/class/rfkill/rfkill3/index=3 /sys/class/rfkill/rfkill3/name=phy0 /sys/class/rfkill/rfkill3/persistent=0 /sys/class/rfkill/rfkill3/soft=0 /sys/class/rfkill/rfkill3/state=1 /sys/class/rfkill/rfkill3/type=wlan /sys/class/rfkill/rfkill3/uevent=RFKILL_NAME=phy0 RFKILL_TYPE=wlan RFKILL_STATE=1 /sys/class/rfkill/rfkill4/hard=0 /sys/class/rfkill/rfkill4/index=4 /sys/class/rfkill/rfkill4/name=hci0 /sys/class/rfkill/rfkill4/persistent=0 /sys/class/rfkill/rfkill4/soft=1 /sys/class/rfkill/rfkill4/state=0 /sys/class/rfkill/rfkill4/type=bluetooth /sys/class/rfkill/rfkill4/uevent=RFKILL_NAME=hci0 RFKILL_TYPE=bluetooth RFKILL_STATE=0 We then added printk(KERN_NOTICE ... in the module's platform_driver.probe function ideapad_acpi_add() both at entry and later to report the DMI and status of the hardware switch control flag: diff -u /home/all/SourceCode/linux/linux/drivers/platform/x86/ideapad-laptop.c ./ideapad-laptop.c --- /home/all/SourceCode/linux/linux/drivers/platform/x86/ideapad-laptop.c 2018-10-14 01:46:49.506088219 +0100 +++ ./ideapad-laptop.c 2018-10-14 06:19:48.843813865 +0100 @@ -1147,6 +1147,13 @@ - }, - }, - { + }, + }, + { + .ident = "Lenovo Legion Y530-15ICH", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"), + }, + }, + { - .ident = "Lenovo Legion Y720-15IKB", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + .ident = "Lenovo Legion Y720-15IKB", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), @@ -1239,6 +1246,7 @@ - int cfg; - struct ideapad_private *priv; - struct acpi_device *adev; + int cfg; + struct ideapad_private *priv; + struct acpi_device *adev; + const char *dmi_vendor, *dmi_version; - ret = acpi_bus_get_device(ACPI_HANDLE(&pdev->dev), &adev); - if (ret) + ret = acpi_bus_get_device(ACPI_HANDLE(&pdev->dev), &adev); + if (ret) @@ -1257,6 +1265,10 @@ - priv->platform_device = pdev; - priv->has_hw_rfkill_switch = !dmi_check_system(no_hw_rfkill_list); + priv->platform_device = pdev; + priv->has_hw_rfkill_switch = !dmi_check_system(no_hw_rfkill_list); + dmi_vendor = dmi_get_system_info(DMI_SYS_VENDOR); + dmi_version = dmi_get_system_info(DMI_PRODUCT_VERSION); + printk(KERN_NOTICE "DMI: %s, %s. has_hw_rfkill_switch=%d\n", dmi_vendor, dmi_version, priv->has_hw_rfkill_switch); + - ret = ideapad_sysfs_init(priv); - if (ret) - return ret; + ret = ideapad_sysfs_init(priv); + if (ret) + return ret; And this revealed that the function is not being called - the KERN_NOTICE messages do not appear in 'dmesg' output. This suggests: static const struct acpi_device_id ideapad_device_ids[] = { - { "VPC2004", 0}, + { "VPC2004", 0}, is not being matched via platform_driver.driver.acpi_match_table = ACPI_PTR(ideapad_device_ids), We then decompiled the ACPI DSDT and confirmed that _HID is being set to VPC2004: grep -C4 VPC2004 dsdt.dsl - Scope (\_SB.PCI0.LPCB.EC0) - { - Device (VPC0) - { - Name (_HID, "VPC2004") // _HID: Hardware ID - Name (_UID, Zero) // _UID: Unique ID - Name (_VPC, 0xFC0DF516) - Name (VPCD, Zero) - Method (_STA, 0, NotSerialized) // _STA: Status + Scope (\_SB.PCI0.LPCB.EC0) + { + Device (VPC0) + { + Name (_HID, "VPC2004") // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + Name (_VPC, 0xFC0DF516) + Name (VPCD, Zero) + Method (_STA, 0, NotSerialized) // _STA: Status - - At this point we're not sure what the next step should be. Wifi works correctly with the module blacklisted but it would be good to fix this properly. + At this point we're not sure what the next step should be. Wifi works + correctly with the module blacklisted but it would be good to fix this + properly.
-- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1797772 Title: ideapad_laptop disables WiFi/BT radios on Lenovo Y530 To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1797772/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs