| From fd30a5819b96e3efba0b6c93c80e3abd7e372a67 Mon Sep 17 00:00:00 2001 |
| From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> |
| Date: Fri, 28 Apr 2017 16:23:59 +0800 |
| Subject: platform/x86: acer-wmi: setup accelerometer when ACPI device was |
| found |
| |
| [ Upstream commit f9ac89f5ad613b462339e845aeb8494646fd9be2 ] |
| |
| The 98d610c3739a patch was introduced since v4.11-rc1 that it causes |
| that the accelerometer input device will not be created on workable |
| machines because the HID string comparing logic is wrong. |
| |
| And, the patch doesn't prevent that the accelerometer input device |
| be created on the machines that have no BST0001. That's because |
| the acpi_get_devices() returns success even it didn't find any |
| match device. |
| |
| This patch fixed the HID string comparing logic of BST0001 device. |
| And, it also makes sure that the acpi_get_devices() returns |
| acpi_handle for BST0001. |
| |
| Fixes: 98d610c3739a ("acer-wmi: setup accelerometer when machine has appropriate notify event") |
| Reference: https://bugzilla.kernel.org/show_bug.cgi?id=193761 |
| Reported-by: Samuel Sieb <samuel-kbugs@sieb.net> |
| Signed-off-by: "Lee, Chun-Yi" <jlee@suse.com> |
| Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/platform/x86/acer-wmi.c | 9 ++++----- |
| 1 file changed, 4 insertions(+), 5 deletions(-) |
| |
| diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c |
| index c29b9b611ab2..1515c9480f89 100644 |
| --- a/drivers/platform/x86/acer-wmi.c |
| +++ b/drivers/platform/x86/acer-wmi.c |
| @@ -1856,7 +1856,7 @@ static acpi_status __init acer_wmi_get_handle_cb(acpi_handle ah, u32 level, |
| if (!strcmp(ctx, "SENR")) { |
| if (acpi_bus_get_device(ah, &dev)) |
| return AE_OK; |
| - if (!strcmp(ACER_WMID_ACCEL_HID, acpi_device_hid(dev))) |
| + if (strcmp(ACER_WMID_ACCEL_HID, acpi_device_hid(dev))) |
| return AE_OK; |
| } else |
| return AE_OK; |
| @@ -1877,8 +1877,7 @@ static int __init acer_wmi_get_handle(const char *name, const char *prop, |
| handle = NULL; |
| status = acpi_get_devices(prop, acer_wmi_get_handle_cb, |
| (void *)name, &handle); |
| - |
| - if (ACPI_SUCCESS(status)) { |
| + if (ACPI_SUCCESS(status) && handle) { |
| *ah = handle; |
| return 0; |
| } else { |
| @@ -2247,8 +2246,8 @@ static int __init acer_wmi_init(void) |
| if (err) |
| return err; |
| err = acer_wmi_accel_setup(); |
| - if (err) |
| - return err; |
| + if (err && err != -ENODEV) |
| + pr_warn("Cannot enable accelerometer\n"); |
| } |
| |
| err = platform_driver_register(&acer_platform_driver); |
| -- |
| 2.17.1 |
| |