Re: [PATCH] intel-hid: add a DMI quirk to support Wacom Mobile Studio Pro

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On December 4, 2017 11:52:12 PM PST, Alex Hung <alex.hung@xxxxxxxxxxxxx> wrote:
>HEBC method reports capabilities of 5 button array but Wacom Mobile
>Studio Pro does not have this control method. A DMI quirk was created

Nit: s/Mobile Studio/MobileStudio/ here and in the subject and the `button_array_table`

>to
>enable 5 button array for this system.
>
>Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=197991
>
>Reported-by: Jason Gerecke <killertofu@xxxxxxxxx>

Please use "Reported-by: Jason Gerecke <jason.gerecke@xxxxxxxxx>" 

Thanks again for the fix! 

Jason
---
Now instead of four in the eights place /
you’ve got three, ‘Cause you added one  /
(That is to say, eight) to the two,     /
But you can’t take seven from three,    /
So you look at the sixty-fours....

>Signed-off-by: Alex Hung <alex.hung@xxxxxxxxxxxxx>
>---
>drivers/platform/x86/intel-hid.c | 34
>+++++++++++++++++++++++++++++++---
> 1 file changed, 31 insertions(+), 3 deletions(-)
>
>diff --git a/drivers/platform/x86/intel-hid.c
>b/drivers/platform/x86/intel-hid.c
>index f470279..54d761c 100644
>--- a/drivers/platform/x86/intel-hid.c
>+++ b/drivers/platform/x86/intel-hid.c
>@@ -25,6 +25,7 @@
> #include <linux/acpi.h>
> #include <linux/suspend.h>
> #include <acpi/acpi_bus.h>
>+#include <linux/dmi.h>
> 
> MODULE_LICENSE("GPL");
> MODULE_AUTHOR("Alex Hung");
>@@ -73,6 +74,17 @@ static const struct key_entry intel_array_keymap[] =
>{
> 	{ KE_END },
> };
> 
>+static const struct dmi_system_id button_array_table[] = {
>+	{
>+		.ident = "Wacom Mobile Studio Pro",
>+		.matches = {
>+			DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
>+			DMI_MATCH(DMI_PRODUCT_NAME, "Skylake"),
>+		},
>+	},
>+	{ }
>+};
>+
> struct intel_hid_priv {
> 	struct input_dev *input_dev;
> 	struct input_dev *array;
>@@ -263,10 +275,27 @@ static void notify_handler(acpi_handle handle,
>u32 event, void *context)
> 			 ev_index);
> }
> 
>+static bool button_array_present(struct platform_device *device)
>+{
>+	acpi_handle handle = ACPI_HANDLE(&device->dev);
>+	unsigned long long event_cap;
>+	acpi_status status;
>+	bool supported = false;
>+
>+	status = acpi_evaluate_integer(handle, "HEBC", NULL, &event_cap);
>+	if (ACPI_SUCCESS(status) && (event_cap & 0x20000))
>+		supported = true;
>+
>+	if (dmi_check_system(button_array_table))
>+		supported = true;
>+
>+	return supported;
>+}
>+
> static int intel_hid_probe(struct platform_device *device)
> {
> 	acpi_handle handle = ACPI_HANDLE(&device->dev);
>-	unsigned long long event_cap, mode;
>+	unsigned long long mode;
> 	struct intel_hid_priv *priv;
> 	acpi_status status;
> 	int err;
>@@ -299,8 +328,7 @@ static int intel_hid_probe(struct platform_device
>*device)
> 	}
> 
> 	/* Setup 5 button array */
>-	status = acpi_evaluate_integer(handle, "HEBC", NULL, &event_cap);
>-	if (ACPI_SUCCESS(status) && (event_cap & 0x20000)) {
>+	if (button_array_present(device)) {
> 		dev_info(&device->dev, "platform supports 5 button array\n");
> 		err = intel_button_array_input_setup(device);
> 		if (err)





[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux