| From 4d0f18b5c772a3df19998f98faac7883e6305bb5 Mon Sep 17 00:00:00 2001 |
| From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> |
| Date: Tue, 1 Nov 2016 12:30:58 +0800 |
| Subject: [PATCH] platform/x86: acer-wmi: Only supports AMW0_GUID1 on acer |
| family |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| commit 5241b1938a4d33eee3d3b43f23067c8e5b96db45 upstream. |
| |
| The AMW0_GUID1 wmi is not only found on Acer family but also other |
| machines like Lenovo, Fujitsu and Medion. In the past, acer-wmi handled |
| those non-Acer machines by quirks list. |
| |
| But actually acer-wmi driver was loaded on any machine that had |
| AMW0_GUID1. This behavior is strange because those machines should be |
| supported by appropriate wmi drivers. e.g. fujitsu-laptop, |
| ideapad-laptop. |
| |
| This patch adds the logic to check the machine that has AMW0_GUID1 |
| should be in Acer/Packard Bell/Gateway white list. But, it still keeps |
| the quirk list of those supported non-acer machines for backward |
| compatibility. |
| |
| Tested-by: BjΓΈrn Mork <bjorn@mork.no> |
| Signed-off-by: Lee, Chun-Yi <jlee@suse.com> |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c |
| index 79d64ea00bfb..a66192f692e3 100644 |
| --- a/drivers/platform/x86/acer-wmi.c |
| +++ b/drivers/platform/x86/acer-wmi.c |
| @@ -355,6 +355,32 @@ static const struct dmi_system_id acer_blacklist[] __initconst = { |
| {} |
| }; |
| |
| +static const struct dmi_system_id amw0_whitelist[] __initconst = { |
| + { |
| + .ident = "Acer", |
| + .matches = { |
| + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), |
| + }, |
| + }, |
| + { |
| + .ident = "Gateway", |
| + .matches = { |
| + DMI_MATCH(DMI_SYS_VENDOR, "Gateway"), |
| + }, |
| + }, |
| + { |
| + .ident = "Packard Bell", |
| + .matches = { |
| + DMI_MATCH(DMI_SYS_VENDOR, "Packard Bell"), |
| + }, |
| + }, |
| + {} |
| +}; |
| + |
| +/* |
| + * This quirk table is only for Acer/Gateway/Packard Bell family |
| + * that those machines are supported by acer-wmi driver. |
| + */ |
| static const struct dmi_system_id acer_quirks[] __initconst = { |
| { |
| .callback = dmi_matched, |
| @@ -464,6 +490,17 @@ static const struct dmi_system_id acer_quirks[] __initconst = { |
| }, |
| .driver_data = &quirk_acer_travelmate_2490, |
| }, |
| + {} |
| +}; |
| + |
| +/* |
| + * This quirk list is for those non-acer machines that have AMW0_GUID1 |
| + * but supported by acer-wmi in past days. Keeping this quirk list here |
| + * is only for backward compatible. Please do not add new machine to |
| + * here anymore. Those non-acer machines should be supported by |
| + * appropriate wmi drivers. |
| + */ |
| +static const struct dmi_system_id non_acer_quirks[] __initconst = { |
| { |
| .callback = dmi_matched, |
| .ident = "Fujitsu Siemens Amilo Li 1718", |
| @@ -598,6 +635,7 @@ static void __init find_quirks(void) |
| { |
| if (!force_series) { |
| dmi_check_system(acer_quirks); |
| + dmi_check_system(non_acer_quirks); |
| } else if (force_series == 2490) { |
| quirks = &quirk_acer_travelmate_2490; |
| } |
| @@ -2108,6 +2146,24 @@ static int __init acer_wmi_init(void) |
| find_quirks(); |
| |
| /* |
| + * The AMW0_GUID1 wmi is not only found on Acer family but also other |
| + * machines like Lenovo, Fujitsu and Medion. In the past days, |
| + * acer-wmi driver handled those non-Acer machines by quirks list. |
| + * But actually acer-wmi driver was loaded on any machines that have |
| + * AMW0_GUID1. This behavior is strange because those machines should |
| + * be supported by appropriate wmi drivers. e.g. fujitsu-laptop, |
| + * ideapad-laptop. So, here checks the machine that has AMW0_GUID1 |
| + * should be in Acer/Gateway/Packard Bell white list, or it's already |
| + * in the past quirk list. |
| + */ |
| + if (wmi_has_guid(AMW0_GUID1) && |
| + !dmi_check_system(amw0_whitelist) && |
| + quirks == &quirk_unknown) { |
| + pr_err("Unsupported machine has AMW0_GUID1, unable to load\n"); |
| + return -ENODEV; |
| + } |
| + |
| + /* |
| * Detect which ACPI-WMI interface we're using. |
| */ |
| if (wmi_has_guid(AMW0_GUID1) && wmi_has_guid(WMID_GUID1)) |
| -- |
| 2.12.0 |
| |