| From ed5a92b655f78abc45013d1cb13ad0b0069ad58a Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 19 Oct 2020 20:56:25 +0200 |
| Subject: platform/x86: acer-wmi: Cleanup accelerometer device handling |
| |
| From: Hans de Goede <hdegoede@redhat.com> |
| |
| [ Upstream commit 9feb0763e4985ccfae632de3bb2f029cc8389842 ] |
| |
| Cleanup accelerometer device handling: |
| -Drop acer_wmi_accel_destroy instead directly call input_unregister_device. |
| -The information tracked by the CAP_ACCEL flag mirrors acer_wmi_accel_dev |
| being NULL. Drop the CAP flag, this is a preparation change for allowing |
| users to override the capability flags. Dropping the flag stops users |
| from causing a NULL pointer dereference by forcing the capability. |
| |
| Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> |
| Signed-off-by: Hans de Goede <hdegoede@redhat.com> |
| Link: https://lore.kernel.org/r/20201019185628.264473-3-hdegoede@redhat.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/platform/x86/acer-wmi.c | 20 ++++++-------------- |
| 1 file changed, 6 insertions(+), 14 deletions(-) |
| |
| diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c |
| index 41311c1526a0..445e9c17f4a8 100644 |
| --- a/drivers/platform/x86/acer-wmi.c |
| +++ b/drivers/platform/x86/acer-wmi.c |
| @@ -223,7 +223,6 @@ struct hotkey_function_type_aa { |
| #define ACER_CAP_BLUETOOTH BIT(2) |
| #define ACER_CAP_BRIGHTNESS BIT(3) |
| #define ACER_CAP_THREEG BIT(4) |
| -#define ACER_CAP_ACCEL BIT(5) |
| |
| /* |
| * Interface type flags |
| @@ -1528,7 +1527,7 @@ static int acer_gsensor_event(void) |
| struct acpi_buffer output; |
| union acpi_object out_obj[5]; |
| |
| - if (!has_cap(ACER_CAP_ACCEL)) |
| + if (!acer_wmi_accel_dev) |
| return -1; |
| |
| output.length = sizeof(out_obj); |
| @@ -1937,8 +1936,6 @@ static int __init acer_wmi_accel_setup(void) |
| if (err) |
| return err; |
| |
| - interface->capability |= ACER_CAP_ACCEL; |
| - |
| acer_wmi_accel_dev = input_allocate_device(); |
| if (!acer_wmi_accel_dev) |
| return -ENOMEM; |
| @@ -1964,11 +1961,6 @@ err_free_dev: |
| return err; |
| } |
| |
| -static void acer_wmi_accel_destroy(void) |
| -{ |
| - input_unregister_device(acer_wmi_accel_dev); |
| -} |
| - |
| static int __init acer_wmi_input_setup(void) |
| { |
| acpi_status status; |
| @@ -2123,7 +2115,7 @@ static int acer_resume(struct device *dev) |
| if (has_cap(ACER_CAP_BRIGHTNESS)) |
| set_u32(data->brightness, ACER_CAP_BRIGHTNESS); |
| |
| - if (has_cap(ACER_CAP_ACCEL)) |
| + if (acer_wmi_accel_dev) |
| acer_gsensor_init(); |
| |
| return 0; |
| @@ -2331,8 +2323,8 @@ error_device_alloc: |
| error_platform_register: |
| if (wmi_has_guid(ACERWMID_EVENT_GUID)) |
| acer_wmi_input_destroy(); |
| - if (has_cap(ACER_CAP_ACCEL)) |
| - acer_wmi_accel_destroy(); |
| + if (acer_wmi_accel_dev) |
| + input_unregister_device(acer_wmi_accel_dev); |
| |
| return err; |
| } |
| @@ -2342,8 +2334,8 @@ static void __exit acer_wmi_exit(void) |
| if (wmi_has_guid(ACERWMID_EVENT_GUID)) |
| acer_wmi_input_destroy(); |
| |
| - if (has_cap(ACER_CAP_ACCEL)) |
| - acer_wmi_accel_destroy(); |
| + if (acer_wmi_accel_dev) |
| + input_unregister_device(acer_wmi_accel_dev); |
| |
| remove_debugfs(); |
| platform_device_unregister(acer_platform_device); |
| -- |
| 2.30.1 |
| |