** Changed in: linux (Ubuntu) Assignee: (unassigned) => Nisankh Acharjya (nisankhubuntu)
-- You received this bug notification because you are a member of Kernel Packages, which is subscribed to linux in Ubuntu. https://bugs.launchpad.net/bugs/1797772 Title: ideapad_laptop disables WiFi/BT radios on Lenovo Y530 Status in linux package in Ubuntu: Incomplete Bug description: 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: $ sudo tee /etc/modprobe.d/ideapad.conf <<< "blacklist ideapad_laptop" 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 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 for 'Airplane mode') 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 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"), }, }, 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"), @@ -1239,6 +1246,7 @@ 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) @@ -1257,6 +1265,10 @@ 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; 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}, 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 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. To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1797772/+subscriptions -- Mailing list: https://launchpad.net/~kernel-packages Post to : kernel-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~kernel-packages More help : https://help.launchpad.net/ListHelp