Jeremy Cline 6f9babc
From 4ef7fb944ba1e4ca9ccfbd7a43afda5a1cc884c1 Mon Sep 17 00:00:00 2001
Jeremy Cline 6f9babc
From: Hans de Goede <hdegoede@redhat.com>
Jeremy Cline 6f9babc
Date: Mon, 29 Apr 2019 15:11:26 +0200
Jeremy Cline 6f9babc
Subject: [PATCH] platform/x86: ideapad-laptop: Remove no_hw_rfkill_list
Jeremy Cline 6f9babc
Jeremy Cline 6f9babc
When the ideapad-laptop driver was first written it was written for laptops
Jeremy Cline 6f9babc
which had a hardware rfkill switch. So when the first ideapad laptops
Jeremy Cline 6f9babc
showed up without a hw rfkill switch and it turned out that in this case
Jeremy Cline 6f9babc
the ideapad firmware interface would always report the wifi being hardware-
Jeremy Cline 6f9babc
blocked, a DMI id list of models which lack a hw rfkill switch was started
Jeremy Cline 6f9babc
(by yours truly). Things were done this way to avoid regressing existing
Jeremy Cline 6f9babc
models with a hw rfkill switch. In hindsight this was a mistake.
Jeremy Cline 6f9babc
Jeremy Cline 6f9babc
Lenovo releases a lot of ideapad models every year and even the latest
Jeremy Cline 6f9babc
models still use the "VPC2004" ACPI interface the ideapad-laptop driver
Jeremy Cline 6f9babc
binds to. Having a hw rfkill switch is quite rare on modern hardware, so
Jeremy Cline 6f9babc
all these new models need to be added to the no_hw_rfkill_list, leading
Jeremy Cline 6f9babc
to a never ending game of whack a mole.
Jeremy Cline 6f9babc
Jeremy Cline 6f9babc
Worse the failure mode when not present on the list, is very bad. In this
Jeremy Cline 6f9babc
case the ideapad-laptop driver will report the wifi as being hw-blocked,
Jeremy Cline 6f9babc
at which points NetworkManager does not even try to use it and the user
Jeremy Cline 6f9babc
ends up with non working wifi.
Jeremy Cline 6f9babc
Jeremy Cline 6f9babc
This leads to various Linux fora on the internet being filled with
Jeremy Cline 6f9babc
wifi not working on ideapad laptops stories, which does not make Linux
Jeremy Cline 6f9babc
look good.
Jeremy Cline 6f9babc
Jeremy Cline 6f9babc
The failure mode when we flip the default to assuming that a hw rfkill
Jeremy Cline 6f9babc
switch is not present OTOH is quite benign. When we properly report the
Jeremy Cline 6f9babc
wifi as being hw-blocked on ideapads which do have the hw-switch; and it
Jeremy Cline 6f9babc
is in the wifi-off position, then at least when using NetworkManager +
Jeremy Cline 6f9babc
GNOME3 the user will get a "wifi disabled in hardware" message when trying
Jeremy Cline 6f9babc
to connect to the wifi from the UI. If OTOH we assume there is no hardware
Jeremy Cline 6f9babc
rfkill switch, then the user will get an empty list for the list of
Jeremy Cline 6f9babc
available networks. Although the empty list vs the "wifi disabled in
Jeremy Cline 6f9babc
hardware" message is a regression, it is a very minor regression and it
Jeremy Cline 6f9babc
can easily be fixed on a model by model basis by filling the new
Jeremy Cline 6f9babc
hw_rfkill_list this commit introduces.
Jeremy Cline 6f9babc
Jeremy Cline 6f9babc
Therefor this commit removes the ever growing no_hw_rfkill_list, flipping
Jeremy Cline 6f9babc
the default to assuming there is no hw rfkill switch and adding a new
Jeremy Cline 6f9babc
hw_rfkill_list. Thereby fixing the wifi not working on all the current
Jeremy Cline 6f9babc
ideapad and yoga models which are not on the list yet and also fixing it
Jeremy Cline 6f9babc
for all future ideapad and yoga models using the "VPC2004" ACPI interface.
Jeremy Cline 6f9babc
Jeremy Cline 6f9babc
Note once this patch has been accepted upstream. I plan to write a blog
Jeremy Cline 6f9babc
post asking for users of ideapads and yoga's with a hw rfkill switch to
Jeremy Cline 6f9babc
step forward, so that we can populate the new hw_rfkill_list with the few
Jeremy Cline 6f9babc
older yoga and ideapad models which actually have a hw rfkill switch.
Jeremy Cline 6f9babc
Jeremy Cline 6f9babc
BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1703338
Jeremy Cline 6f9babc
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Jeremy Cline 6f9babc
---
Jeremy Cline 6f9babc
 drivers/platform/x86/ideapad-laptop.c | 321 ++------------------------
Jeremy Cline 6f9babc
 1 file changed, 15 insertions(+), 306 deletions(-)
Jeremy Cline 6f9babc
Jeremy Cline 6f9babc
diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
Jeremy Cline 6f9babc
index c53ae86b59c7..2d94536dea88 100644
Jeremy Cline 6f9babc
--- a/drivers/platform/x86/ideapad-laptop.c
Jeremy Cline 6f9babc
+++ b/drivers/platform/x86/ideapad-laptop.c
Jeremy Cline 6f9babc
@@ -980,312 +980,21 @@ static void ideapad_wmi_notify(u32 value, void *context)
Jeremy Cline 6f9babc
 #endif
Jeremy Cline 6f9babc
 
Jeremy Cline 6f9babc
 /*
Jeremy Cline 6f9babc
- * Some ideapads don't have a hardware rfkill switch, reading VPCCMD_R_RF
Jeremy Cline 6f9babc
- * always results in 0 on these models, causing ideapad_laptop to wrongly
Jeremy Cline 6f9babc
- * report all radios as hardware-blocked.
Jeremy Cline 6f9babc
+ * Some ideapads have a hardware rfkill switch, but most do not have one.
Jeremy Cline 6f9babc
+ * Reading VPCCMD_R_RF always results in 0 on models without a hardware rfkill,
Jeremy Cline 6f9babc
+ * switch causing ideapad_laptop to wrongly report all radios as hw-blocked.
Jeremy Cline 6f9babc
+ * There used to be a long list of DMI ids for models without a hw rfkill
Jeremy Cline 6f9babc
+ * switch here, but that resulted in playing whack a mole.
Jeremy Cline 6f9babc
+ * More importantly wrongly reporting the wifi radio as hw-blocked, results in
Jeremy Cline 6f9babc
+ * non working wifi. Whereas not reporting it hw-blocked, when it actually is
Jeremy Cline 6f9babc
+ * hw-blocked results in an empty SSID list, which is a much more benign
Jeremy Cline 6f9babc
+ * failure mode.
Jeremy Cline 6f9babc
+ * So the default now is the much safer option of assuming there is no
Jeremy Cline 6f9babc
+ * hardware rfkill switch. This default also actually matches most hardware,
Jeremy Cline 6f9babc
+ * since having a hw rfkill switch is quite rare on modern hardware, so this
Jeremy Cline 6f9babc
+ * also leads to a much shorter list.
Jeremy Cline 6f9babc
  */
Jeremy Cline 6f9babc
-static const struct dmi_system_id no_hw_rfkill_list[] = {
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo RESCUER R720-15IKBN",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo R720-15IKBN"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo G40-30",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo G40-30"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo G50-30",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo G50-30"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo V310-14IKB",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo V310-14IKB"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo V310-14ISK",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo V310-14ISK"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo V310-15IKB",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo V310-15IKB"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo V310-15ISK",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo V310-15ISK"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo V510-15IKB",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo V510-15IKB"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad 300-15IBR",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 300-15IBR"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad 300-15IKB",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 300-15IKB"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad 300S-11IBR",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 300S-11BR"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad 310-15ABR",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 310-15ABR"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad 310-15IAP",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 310-15IAP"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad 310-15IKB",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 310-15IKB"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad 310-15ISK",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 310-15ISK"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad 330-15ICH",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 330-15ICH"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad 530S-14ARR",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 530S-14ARR"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad S130-14IGM",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad S130-14IGM"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad Y700-14ISK",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad Y700-14ISK"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad Y700-15ACZ",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad Y700-15ACZ"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad Y700-15ISK",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad Y700-15ISK"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad Y700 Touch-15ISK",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad Y700 Touch-15ISK"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad Y700-17ISK",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad Y700-17ISK"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo ideapad MIIX 720-12IKB",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "MIIX 720-12IKB"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Legion Y520-15IKB",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Y520-15IKB"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Y520-15IKBM",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Y520-15IKBM"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Legion Y530-15ICH",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Legion Y530-15ICH-1060",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH-1060"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Legion Y720-15IKB",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Y720-15IKB"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Legion Y720-15IKBN",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Y720-15IKBN"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Y720-15IKBM",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Y720-15IKBM"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Yoga 2 11 / 13 / Pro",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 2"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Yoga 2 11 / 13 / Pro",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_BOARD_NAME, "Yoga2"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Yoga 2 13",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Yoga 2 13"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Yoga 3 1170 / 1470",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 3"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Yoga 3 Pro 1370",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 3"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Yoga 700",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 700"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Yoga 900",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 900"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Yoga 900",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_BOARD_NAME, "VIUU4"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo YOGA 910-13IKB",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 910-13IKB"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo YOGA 920-13IKB",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 920-13IKB"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo YOGA C930-13IKB",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA C930-13IKB"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
-	{
Jeremy Cline 6f9babc
-		.ident = "Lenovo Zhaoyang E42-80",
Jeremy Cline 6f9babc
-		.matches = {
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
Jeremy Cline 6f9babc
-			DMI_MATCH(DMI_PRODUCT_VERSION, "ZHAOYANG E42-80"),
Jeremy Cline 6f9babc
-		},
Jeremy Cline 6f9babc
-	},
Jeremy Cline 6f9babc
+static const struct dmi_system_id hw_rfkill_list[] = {
Jeremy Cline 6f9babc
 	{}
Jeremy Cline 6f9babc
 };
Jeremy Cline 6f9babc
 
Jeremy Cline 6f9babc
@@ -1311,7 +1020,7 @@ static int ideapad_acpi_add(struct platform_device *pdev)
Jeremy Cline 6f9babc
 	priv->cfg = cfg;
Jeremy Cline 6f9babc
 	priv->adev = adev;
Jeremy Cline 6f9babc
 	priv->platform_device = pdev;
Jeremy Cline 6f9babc
-	priv->has_hw_rfkill_switch = !dmi_check_system(no_hw_rfkill_list);
Jeremy Cline 6f9babc
+	priv->has_hw_rfkill_switch = dmi_check_system(hw_rfkill_list);
Jeremy Cline 6f9babc
 
Jeremy Cline 6f9babc
 	ret = ideapad_sysfs_init(priv);
Jeremy Cline 6f9babc
 	if (ret)
Jeremy Cline 6f9babc
-- 
Jeremy Cline 6f9babc
2.21.0
Jeremy Cline 6f9babc