diff options
author | Ike Panhc <ike.pan@canonical.com> | 2012-02-03 03:46:39 -0500 |
---|---|---|
committer | Matthew Garrett <mjg@redhat.com> | 2012-03-12 09:58:02 -0400 |
commit | 461e74377cfcfc2c0d6bbdfa8fc5fbc21b052c2a (patch) | |
tree | e2397007bddafd259938640350ebdf8ac4f7cd29 | |
parent | 2d24c49080afdb80816f6cedaef0e3999f344c4b (diff) |
acer-wmi: No wifi rfkill on Lenovo machines
We have several reports which says acer-wmi is loaded on ideapads
and register rfkill for wifi which can not be unblocked.
Since ideapad-laptop also register rfkill for wifi and it works
reliably, it will be fine acer-wmi is not going to register rfkill
for wifi once VPC2004 is found.
Also put IBM0068/LEN0068 in the list. Though thinkpad_acpi has no
wifi rfkill capability, there are reports which says acer-wmi also
block wireless on Thinkpad E520/E420.
Signed-off-by: Ike Panhc <ike.pan@canonical.com>
Signed-off-by: Matthew Garrett <mjg@redhat.com>
-rw-r--r-- | drivers/platform/x86/acer-wmi.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c index b848277171a..1e5290b5396 100644 --- a/drivers/platform/x86/acer-wmi.c +++ b/drivers/platform/x86/acer-wmi.c | |||
@@ -679,6 +679,32 @@ static acpi_status AMW0_find_mailled(void) | |||
679 | return AE_OK; | 679 | return AE_OK; |
680 | } | 680 | } |
681 | 681 | ||
682 | static int AMW0_set_cap_acpi_check_device_found; | ||
683 | |||
684 | static acpi_status AMW0_set_cap_acpi_check_device_cb(acpi_handle handle, | ||
685 | u32 level, void *context, void **retval) | ||
686 | { | ||
687 | AMW0_set_cap_acpi_check_device_found = 1; | ||
688 | return AE_OK; | ||
689 | } | ||
690 | |||
691 | static const struct acpi_device_id norfkill_ids[] = { | ||
692 | { "VPC2004", 0}, | ||
693 | { "IBM0068", 0}, | ||
694 | { "LEN0068", 0}, | ||
695 | { "", 0}, | ||
696 | }; | ||
697 | |||
698 | static int AMW0_set_cap_acpi_check_device(void) | ||
699 | { | ||
700 | const struct acpi_device_id *id; | ||
701 | |||
702 | for (id = norfkill_ids; id->id[0]; id++) | ||
703 | acpi_get_devices(id->id, AMW0_set_cap_acpi_check_device_cb, | ||
704 | NULL, NULL); | ||
705 | return AMW0_set_cap_acpi_check_device_found; | ||
706 | } | ||
707 | |||
682 | static acpi_status AMW0_set_capabilities(void) | 708 | static acpi_status AMW0_set_capabilities(void) |
683 | { | 709 | { |
684 | struct wmab_args args; | 710 | struct wmab_args args; |
@@ -692,7 +718,9 @@ static acpi_status AMW0_set_capabilities(void) | |||
692 | * work. | 718 | * work. |
693 | */ | 719 | */ |
694 | if (wmi_has_guid(AMW0_GUID2)) { | 720 | if (wmi_has_guid(AMW0_GUID2)) { |
695 | interface->capability |= ACER_CAP_WIRELESS; | 721 | if ((quirks != &quirk_unknown) || |
722 | !AMW0_set_cap_acpi_check_device()) | ||
723 | interface->capability |= ACER_CAP_WIRELESS; | ||
696 | return AE_OK; | 724 | return AE_OK; |
697 | } | 725 | } |
698 | 726 | ||