Like other buggy models that had their fixes [1], the touchscreen with
id 04f3:21b8 from ELAN Microelectronics needs the device-qualifier
quirk. Otherwise, it fails to respond, blocks the boot for a random
amount of time and pollutes dmesg with:
[ 2887.373196] usb 1-5: new full-speed USB device number 41 using xhci_hcd
[ 2889.502000] usb 1-5: unable to read config index 0 descriptor/start: -71
[ 2889.502005] usb 1-5: can't read configurations, error -71
[ 2889.654571] usb 1-5: new full-speed USB device number 42 using xhci_hcd
[ 2891.783438] usb 1-5: unable to read config index 0 descriptor/start: -71
[ 2891.783443] usb 1-5: can't read configurations, error -71
[1]: See commits c68929f, 876af5d, d749947, a32c99e and dc703ec.
Tested-by: Adrien Vergé <[email protected]>
---
drivers/hid/hid-ids.h | 1 +
drivers/hid/usbhid/hid-quirks.c | 1 +
drivers/usb/core/quirks.c | 3 +++
3 files changed, 5 insertions(+)
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index ac1feea..6b68408 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -321,6 +321,7 @@
#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103 0x0103
#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c 0x010c
#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F 0x016f
+#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_21B8 0x21b8
#define USB_VENDOR_ID_ELECOM 0x056e
#define USB_DEVICE_ID_ELECOM_BM084 0x0061
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index 94bb137..7a45942 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -77,6 +77,7 @@ static const struct hid_blacklist {
{ USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103, HID_QUIRK_ALWAYS_POLL },
{ USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c, HID_QUIRK_ALWAYS_POLL },
{ USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F, HID_QUIRK_ALWAYS_POLL },
+ { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_21B8, HID_QUIRK_ALWAYS_POLL },
{ USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
{ USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
{ USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index f5a3819..fcd6ac0 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -125,6 +125,9 @@ static const struct usb_device_id usb_quirk_list[] = {
{ USB_DEVICE(0x04f3, 0x016f), .driver_info =
USB_QUIRK_DEVICE_QUALIFIER },
+ { USB_DEVICE(0x04f3, 0x21b8), .driver_info =
+ USB_QUIRK_DEVICE_QUALIFIER },
+
/* Roland SC-8820 */
{ USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME },
--
2.4.3
On Sat, 21 Nov 2015, Adrien Vergé wrote:
> Like other buggy models that had their fixes [1], the touchscreen with
> id 04f3:21b8 from ELAN Microelectronics needs the device-qualifier
> quirk. Otherwise, it fails to respond, blocks the boot for a random
> amount of time and pollutes dmesg with:
>
> [ 2887.373196] usb 1-5: new full-speed USB device number 41 using xhci_hcd
> [ 2889.502000] usb 1-5: unable to read config index 0 descriptor/start: -71
> [ 2889.502005] usb 1-5: can't read configurations, error -71
> [ 2889.654571] usb 1-5: new full-speed USB device number 42 using xhci_hcd
> [ 2891.783438] usb 1-5: unable to read config index 0 descriptor/start: -71
> [ 2891.783443] usb 1-5: can't read configurations, error -71
The drivers/hid part is
Acked-by: Jiri Kosina <[email protected]>
Makes one wonder however whether we shouldn't be applying ALWAYS_POLL to
all ELAN devices by default anyway.
> [1]: See commits c68929f, 876af5d, d749947, a32c99e and dc703ec.
>
> Tested-by: Adrien Vergé <[email protected]>
You need signoff here as well so that the patch can be applied.
Thanks,
--
Jiri Kosina
SUSE Labs
2015-11-23 15:52 GMT+01:00 Jiri Kosina <[email protected]>:
> The drivers/hid part is
>
> Acked-by: Jiri Kosina <[email protected]>
Thanks.
> Makes one wonder however whether we shouldn't be applying ALWAYS_POLL to
> all ELAN devices by default anyway.
True! But I don't want to risk breaking anything on other models in this patch.
I'll submit a v2 with appropriate signed-off-by and acked-by.
Like other buggy models that had their fixes [1], the touchscreen with
id 04f3:21b8 from ELAN Microelectronics needs the device-qualifier
quirk. Otherwise, it fails to respond, blocks the boot for a random
amount of time and pollutes dmesg with:
[ 2887.373196] usb 1-5: new full-speed USB device number 41 using xhci_hcd
[ 2889.502000] usb 1-5: unable to read config index 0 descriptor/start: -71
[ 2889.502005] usb 1-5: can't read configurations, error -71
[ 2889.654571] usb 1-5: new full-speed USB device number 42 using xhci_hcd
[ 2891.783438] usb 1-5: unable to read config index 0 descriptor/start: -71
[ 2891.783443] usb 1-5: can't read configurations, error -71
[1]: See commits c68929f, 876af5d, d749947, a32c99e and dc703ec.
Tested-by: Adrien Vergé <[email protected]>
Signed-off-by: Adrien Vergé <[email protected]>
Acked-by: Jiri Kosina <[email protected]>
---
drivers/hid/hid-ids.h | 1 +
drivers/hid/usbhid/hid-quirks.c | 1 +
drivers/usb/core/quirks.c | 3 +++
3 files changed, 5 insertions(+)
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index ac1feea..6b68408 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -321,6 +321,7 @@
#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103 0x0103
#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c 0x010c
#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F 0x016f
+#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_21B8 0x21b8
#define USB_VENDOR_ID_ELECOM 0x056e
#define USB_DEVICE_ID_ELECOM_BM084 0x0061
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index 94bb137..7a45942 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -77,6 +77,7 @@ static const struct hid_blacklist {
{ USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103, HID_QUIRK_ALWAYS_POLL },
{ USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c, HID_QUIRK_ALWAYS_POLL },
{ USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F, HID_QUIRK_ALWAYS_POLL },
+ { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_21B8, HID_QUIRK_ALWAYS_POLL },
{ USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
{ USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
{ USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index f5a3819..fcd6ac0 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -125,6 +125,9 @@ static const struct usb_device_id usb_quirk_list[] = {
{ USB_DEVICE(0x04f3, 0x016f), .driver_info =
USB_QUIRK_DEVICE_QUALIFIER },
+ { USB_DEVICE(0x04f3, 0x21b8), .driver_info =
+ USB_QUIRK_DEVICE_QUALIFIER },
+
/* Roland SC-8820 */
{ USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME },
--
2.5.0
On Mon, 2015-11-23 at 18:37 +0100, Adrien Vergé wrote:
> > Makes one wonder however whether we shouldn't be applying
> ALWAYS_POLL to
> > all ELAN devices by default anyway.
>
> True! But I don't want to risk breaking anything on other models in
> this patch.
ALWAYS_POLL just extends an existing behavior. The chances
of breaking anything are slim. I'd go for the approach
based on the vendor ID.
Regards
Oliver
This is the third version of a patchset which originally aimed to fix a buggy
touchscreen from ELAN Microelectronics.
Thanks to feedback from Jiri Kosina and Oliver Neukum, the ALWAYS_POLL quirk is
now applied to all ELAN devices by default.
Adrien Vergé (2):
USB: quirks: Fix another ELAN touchscreen
USB: quirks: Apply ALWAYS_POLL to all ELAN devices
drivers/hid/hid-ids.h | 5 -----
drivers/hid/usbhid/hid-quirks.c | 43 +++++++++++++++++++++++++++--------------
drivers/usb/core/quirks.c | 3 +++
3 files changed, 32 insertions(+), 19 deletions(-)
--
2.4.3
Like other buggy models that had their fixes [1], the touchscreen with
id 04f3:21b8 from ELAN Microelectronics needs the device-qualifier
quirk. Otherwise, it fails to respond, blocks the boot for a random
amount of time and pollutes dmesg with:
[ 2887.373196] usb 1-5: new full-speed USB device number 41 using xhci_hcd
[ 2889.502000] usb 1-5: unable to read config index 0 descriptor/start: -71
[ 2889.502005] usb 1-5: can't read configurations, error -71
[ 2889.654571] usb 1-5: new full-speed USB device number 42 using xhci_hcd
[ 2891.783438] usb 1-5: unable to read config index 0 descriptor/start: -71
[ 2891.783443] usb 1-5: can't read configurations, error -71
[1]: See commits c68929f, 876af5d, d749947, a32c99e and dc703ec.
Tested-by: Adrien Vergé <[email protected]>
Signed-off-by: Adrien Vergé <[email protected]>
---
drivers/usb/core/quirks.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index f5a3819..fcd6ac0 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -125,6 +125,9 @@ static const struct usb_device_id usb_quirk_list[] = {
{ USB_DEVICE(0x04f3, 0x016f), .driver_info =
USB_QUIRK_DEVICE_QUALIFIER },
+ { USB_DEVICE(0x04f3, 0x21b8), .driver_info =
+ USB_QUIRK_DEVICE_QUALIFIER },
+
/* Roland SC-8820 */
{ USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME },
--
2.4.3
All ELAN hid devices seem to require the ALWAYS_POLL quirk. Let's use
this quirk for all devices from this vendor, rather than maintaining a
list of all its known product IDs.
To achieve that, this patch introduces a new hid_vendor_blacklist[] that
is checked when the product ID is not found in hid_product_blacklist[].
Tested-by: Adrien Vergé <[email protected]>
Signed-off-by: Adrien Vergé <[email protected]>
---
drivers/hid/hid-ids.h | 5 -----
drivers/hid/usbhid/hid-quirks.c | 43 +++++++++++++++++++++++++++--------------
2 files changed, 29 insertions(+), 19 deletions(-)
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index ac1feea..3c7e0c3 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -316,11 +316,6 @@
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001 0xa001
#define USB_VENDOR_ID_ELAN 0x04f3
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN 0x0089
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B 0x009b
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103 0x0103
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c 0x010c
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F 0x016f
#define USB_VENDOR_ID_ELECOM 0x056e
#define USB_DEVICE_ID_ELECOM_BM084 0x0061
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index 94bb137..9550497 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -21,15 +21,29 @@
#include "../hid-ids.h"
+struct hid_blacklist {
+ __u16 idVendor;
+ __u16 idProduct;
+ __u32 quirks;
+};
+
+/*
+ * Alphabetically sorted blacklist for vendor-global quirks. If a device matches
+ * both this blacklist and the product one (below), the more specific one
+ * (product ID) prevails.
+ */
+
+static const struct hid_blacklist hid_vendor_blacklist[] = {
+ { USB_VENDOR_ID_ELAN, 0, HID_QUIRK_ALWAYS_POLL },
+
+ { 0, 0, 0 }
+};
+
/*
* Alphabetically sorted blacklist by quirk type.
*/
-static const struct hid_blacklist {
- __u16 idVendor;
- __u16 idProduct;
- __u32 quirks;
-} hid_blacklist[] = {
+static const struct hid_blacklist hid_product_blacklist[] = {
{ USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_GAMEPAD, HID_QUIRK_BADPAD },
{ USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_PREDATOR, HID_QUIRK_BADPAD },
{ USB_VENDOR_ID_ALPS, USB_DEVICE_ID_IBM_GAMEPAD, HID_QUIRK_BADPAD },
@@ -72,11 +86,6 @@ static const struct hid_blacklist {
{ USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
{ USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
{ USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN, HID_QUIRK_ALWAYS_POLL },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B, HID_QUIRK_ALWAYS_POLL },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103, HID_QUIRK_ALWAYS_POLL },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c, HID_QUIRK_ALWAYS_POLL },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F, HID_QUIRK_ALWAYS_POLL },
{ USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
{ USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
{ USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
@@ -337,10 +346,16 @@ static const struct hid_blacklist *usbhid_exists_squirk(const u16 idVendor,
const struct hid_blacklist *bl_entry = NULL;
int n = 0;
- for (; hid_blacklist[n].idVendor; n++)
- if (hid_blacklist[n].idVendor == idVendor &&
- hid_blacklist[n].idProduct == idProduct)
- bl_entry = &hid_blacklist[n];
+ for (; hid_product_blacklist[n].idVendor; n++)
+ if (hid_product_blacklist[n].idVendor == idVendor &&
+ hid_product_blacklist[n].idProduct == idProduct)
+ bl_entry = &hid_product_blacklist[n];
+
+ if (bl_entry == NULL) {
+ for (n = 0; hid_vendor_blacklist[n].idVendor; n++)
+ if (hid_vendor_blacklist[n].idVendor == idVendor)
+ bl_entry = &hid_vendor_blacklist[n];
+ }
if (bl_entry != NULL)
dbg_hid("Found squirk 0x%x for USB HID vendor 0x%hx prod 0x%hx\n",
--
2.4.3
Hi Adrien,
On Tue, Nov 24, 2015 at 2:49 PM, Adrien Vergé <[email protected]> wrote:
> All ELAN hid devices seem to require the ALWAYS_POLL quirk. Let's use
> this quirk for all devices from this vendor, rather than maintaining a
> list of all its known product IDs.
>
> To achieve that, this patch introduces a new hid_vendor_blacklist[] that
> is checked when the product ID is not found in hid_product_blacklist[].
>
> Tested-by: Adrien Vergé <[email protected]>
> Signed-off-by: Adrien Vergé <[email protected]>
> ---
> drivers/hid/hid-ids.h | 5 -----
> drivers/hid/usbhid/hid-quirks.c | 43 +++++++++++++++++++++++++++--------------
> 2 files changed, 29 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
> index ac1feea..3c7e0c3 100644
> --- a/drivers/hid/hid-ids.h
> +++ b/drivers/hid/hid-ids.h
> @@ -316,11 +316,6 @@
> #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001 0xa001
>
> #define USB_VENDOR_ID_ELAN 0x04f3
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN 0x0089
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B 0x009b
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103 0x0103
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c 0x010c
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F 0x016f
>
> #define USB_VENDOR_ID_ELECOM 0x056e
> #define USB_DEVICE_ID_ELECOM_BM084 0x0061
> diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
> index 94bb137..9550497 100644
> --- a/drivers/hid/usbhid/hid-quirks.c
> +++ b/drivers/hid/usbhid/hid-quirks.c
> @@ -21,15 +21,29 @@
>
> #include "../hid-ids.h"
>
> +struct hid_blacklist {
> + __u16 idVendor;
> + __u16 idProduct;
> + __u32 quirks;
> +};
> +
> +/*
> + * Alphabetically sorted blacklist for vendor-global quirks. If a device matches
> + * both this blacklist and the product one (below), the more specific one
> + * (product ID) prevails.
> + */
> +
> +static const struct hid_blacklist hid_vendor_blacklist[] = {
> + { USB_VENDOR_ID_ELAN, 0, HID_QUIRK_ALWAYS_POLL },
> +
> + { 0, 0, 0 }
> +};
Instead of adding a second table, I'd rather have a match on
HID_ANY_ID for the product ID.
> +
> /*
> * Alphabetically sorted blacklist by quirk type.
> */
>
> -static const struct hid_blacklist {
> - __u16 idVendor;
> - __u16 idProduct;
> - __u32 quirks;
> -} hid_blacklist[] = {
> +static const struct hid_blacklist hid_product_blacklist[] = {
> { USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_GAMEPAD, HID_QUIRK_BADPAD },
> { USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_PREDATOR, HID_QUIRK_BADPAD },
> { USB_VENDOR_ID_ALPS, USB_DEVICE_ID_IBM_GAMEPAD, HID_QUIRK_BADPAD },
> @@ -72,11 +86,6 @@ static const struct hid_blacklist {
> { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
> { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
> { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN, HID_QUIRK_ALWAYS_POLL },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B, HID_QUIRK_ALWAYS_POLL },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103, HID_QUIRK_ALWAYS_POLL },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c, HID_QUIRK_ALWAYS_POLL },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F, HID_QUIRK_ALWAYS_POLL },
This becomes:
{ USB_VENDOR_ID_ELAN, HID_ANY_ID, HID_QUIRK_ALWAYS_POLL },
> { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
> { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
> { USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
> @@ -337,10 +346,16 @@ static const struct hid_blacklist *usbhid_exists_squirk(const u16 idVendor,
> const struct hid_blacklist *bl_entry = NULL;
> int n = 0;
>
> - for (; hid_blacklist[n].idVendor; n++)
> - if (hid_blacklist[n].idVendor == idVendor &&
> - hid_blacklist[n].idProduct == idProduct)
And here you need to check also on the match with HID_ANY_ID for both
idVendor and idProduct.
Cheers,
Benjamin
> - bl_entry = &hid_blacklist[n];
> + for (; hid_product_blacklist[n].idVendor; n++)
> + if (hid_product_blacklist[n].idVendor == idVendor &&
> + hid_product_blacklist[n].idProduct == idProduct)
> + bl_entry = &hid_product_blacklist[n];
> +
> + if (bl_entry == NULL) {
> + for (n = 0; hid_vendor_blacklist[n].idVendor; n++)
> + if (hid_vendor_blacklist[n].idVendor == idVendor)
> + bl_entry = &hid_vendor_blacklist[n];
> + }
>
> if (bl_entry != NULL)
> dbg_hid("Found squirk 0x%x for USB HID vendor 0x%hx prod 0x%hx\n",
> --
> 2.4.3
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
2015-11-24 15:11 GMT+01:00 Benjamin Tissoires <[email protected]>:
> Instead of adding a second table, I'd rather have a match on
> HID_ANY_ID for the product ID.
Thanks Benjamin, the way you propose is much cleaner. (I actually
looked for such a *wildcard* product id, but apparently didn't looked
deep enough!)
This is the fourth version of a patchset which originally aimed to fix a buggy
touchscreen from ELAN Microelectronics.
Changes since v3:
- Use HID_ANY_ID to define a vendor-ID-global quirk, as suggested by
Benjamin Tissoires.
Changes since v2:
- Apply ALWAYS_POLL quirk to all ELAN devices by default, as suggested by
Jiri Kosina and Oliver Neukum.
Adrien Vergé (2):
USB: quirks: Fix another ELAN touchscreen
USB: quirks: Apply ALWAYS_POLL to all ELAN devices
drivers/hid/hid-ids.h | 5 -----
drivers/hid/usbhid/hid-quirks.c | 9 +++------
drivers/usb/core/quirks.c | 3 +++
3 files changed, 6 insertions(+), 11 deletions(-)
--
2.4.3
Like other buggy models that had their fixes [1], the touchscreen with
id 04f3:21b8 from ELAN Microelectronics needs the device-qualifier
quirk. Otherwise, it fails to respond, blocks the boot for a random
amount of time and pollutes dmesg with:
[ 2887.373196] usb 1-5: new full-speed USB device number 41 using xhci_hcd
[ 2889.502000] usb 1-5: unable to read config index 0 descriptor/start: -71
[ 2889.502005] usb 1-5: can't read configurations, error -71
[ 2889.654571] usb 1-5: new full-speed USB device number 42 using xhci_hcd
[ 2891.783438] usb 1-5: unable to read config index 0 descriptor/start: -71
[ 2891.783443] usb 1-5: can't read configurations, error -71
[1]: See commits c68929f, 876af5d, d749947, a32c99e and dc703ec.
Tested-by: Adrien Vergé <[email protected]>
Signed-off-by: Adrien Vergé <[email protected]>
---
drivers/usb/core/quirks.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index f5a3819..fcd6ac0 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -125,6 +125,9 @@ static const struct usb_device_id usb_quirk_list[] = {
{ USB_DEVICE(0x04f3, 0x016f), .driver_info =
USB_QUIRK_DEVICE_QUALIFIER },
+ { USB_DEVICE(0x04f3, 0x21b8), .driver_info =
+ USB_QUIRK_DEVICE_QUALIFIER },
+
/* Roland SC-8820 */
{ USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME },
--
2.4.3
All ELAN hid devices seem to require the ALWAYS_POLL quirk. Let's use
this quirk for all devices from this vendor, rather than maintaining a
list of all its known product IDs.
Tested-by: Adrien Vergé <[email protected]>
Signed-off-by: Adrien Vergé <[email protected]>
---
drivers/hid/hid-ids.h | 5 -----
drivers/hid/usbhid/hid-quirks.c | 9 +++------
2 files changed, 3 insertions(+), 11 deletions(-)
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index ac1feea..3c7e0c3 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -316,11 +316,6 @@
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001 0xa001
#define USB_VENDOR_ID_ELAN 0x04f3
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN 0x0089
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B 0x009b
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103 0x0103
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c 0x010c
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F 0x016f
#define USB_VENDOR_ID_ELECOM 0x056e
#define USB_DEVICE_ID_ELECOM_BM084 0x0061
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index 94bb137..b1af008 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -72,11 +72,7 @@ static const struct hid_blacklist {
{ USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
{ USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
{ USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN, HID_QUIRK_ALWAYS_POLL },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B, HID_QUIRK_ALWAYS_POLL },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103, HID_QUIRK_ALWAYS_POLL },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c, HID_QUIRK_ALWAYS_POLL },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F, HID_QUIRK_ALWAYS_POLL },
+ { USB_VENDOR_ID_ELAN, HID_ANY_ID, HID_QUIRK_ALWAYS_POLL },
{ USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
{ USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
{ USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
@@ -339,7 +335,8 @@ static const struct hid_blacklist *usbhid_exists_squirk(const u16 idVendor,
for (; hid_blacklist[n].idVendor; n++)
if (hid_blacklist[n].idVendor == idVendor &&
- hid_blacklist[n].idProduct == idProduct)
+ (hid_blacklist[n].idProduct == HID_ANY_ID ||
+ hid_blacklist[n].idProduct == idProduct))
bl_entry = &hid_blacklist[n];
if (bl_entry != NULL)
--
2.4.3
On Tue, Nov 24, 2015 at 4:02 PM, Adrien Vergé <[email protected]> wrote:
> All ELAN hid devices seem to require the ALWAYS_POLL quirk. Let's use
> this quirk for all devices from this vendor, rather than maintaining a
> list of all its known product IDs.
>
> Tested-by: Adrien Vergé <[email protected]>
> Signed-off-by: Adrien Vergé <[email protected]>
> ---
The HID part is:
Reviewed-by: Benjamin Tissoires <[email protected]>
Cheers,
Benjamin
> drivers/hid/hid-ids.h | 5 -----
> drivers/hid/usbhid/hid-quirks.c | 9 +++------
> 2 files changed, 3 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
> index ac1feea..3c7e0c3 100644
> --- a/drivers/hid/hid-ids.h
> +++ b/drivers/hid/hid-ids.h
> @@ -316,11 +316,6 @@
> #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001 0xa001
>
> #define USB_VENDOR_ID_ELAN 0x04f3
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN 0x0089
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B 0x009b
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103 0x0103
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c 0x010c
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F 0x016f
>
> #define USB_VENDOR_ID_ELECOM 0x056e
> #define USB_DEVICE_ID_ELECOM_BM084 0x0061
> diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
> index 94bb137..b1af008 100644
> --- a/drivers/hid/usbhid/hid-quirks.c
> +++ b/drivers/hid/usbhid/hid-quirks.c
> @@ -72,11 +72,7 @@ static const struct hid_blacklist {
> { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
> { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
> { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN, HID_QUIRK_ALWAYS_POLL },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B, HID_QUIRK_ALWAYS_POLL },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103, HID_QUIRK_ALWAYS_POLL },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c, HID_QUIRK_ALWAYS_POLL },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F, HID_QUIRK_ALWAYS_POLL },
> + { USB_VENDOR_ID_ELAN, HID_ANY_ID, HID_QUIRK_ALWAYS_POLL },
> { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
> { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
> { USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
> @@ -339,7 +335,8 @@ static const struct hid_blacklist *usbhid_exists_squirk(const u16 idVendor,
>
> for (; hid_blacklist[n].idVendor; n++)
> if (hid_blacklist[n].idVendor == idVendor &&
> - hid_blacklist[n].idProduct == idProduct)
> + (hid_blacklist[n].idProduct == HID_ANY_ID ||
> + hid_blacklist[n].idProduct == idProduct))
> bl_entry = &hid_blacklist[n];
>
> if (bl_entry != NULL)
> --
> 2.4.3
>
Hi Adrien,
[auto build test WARNING on hid/for-next]
[also build test WARNING on v4.4-rc2 next-20151124]
url: https://github.com/0day-ci/linux/commits/Adrien-Verg/Fixes-for-ELAN-touchscreens/20151124-230537
base: https://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git for-next
config: avr32-hammerhead_defconfig (attached as .config)
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=avr32
All warnings (new ones prefixed by >>):
drivers/hid/usbhid/hid-quirks.c: In function 'usbhid_exists_squirk':
>> drivers/hid/usbhid/hid-quirks.c:339: warning: comparison is always false due to limited range of data type
vim +339 drivers/hid/usbhid/hid-quirks.c
323 * @idProduct: the 16-bit USB product ID, in native byteorder
324 *
325 * Description:
326 * Given a USB vendor ID and product ID, return a pointer to
327 * the hid_blacklist entry associated with that device.
328 *
329 * Returns: pointer if quirk found, or NULL if no quirks found.
330 */
331 static const struct hid_blacklist *usbhid_exists_squirk(const u16 idVendor,
332 const u16 idProduct)
333 {
334 const struct hid_blacklist *bl_entry = NULL;
335 int n = 0;
336
337 for (; hid_blacklist[n].idVendor; n++)
338 if (hid_blacklist[n].idVendor == idVendor &&
> 339 (hid_blacklist[n].idProduct == HID_ANY_ID ||
340 hid_blacklist[n].idProduct == idProduct))
341 bl_entry = &hid_blacklist[n];
342
343 if (bl_entry != NULL)
344 dbg_hid("Found squirk 0x%x for USB HID vendor 0x%hx prod 0x%hx\n",
345 bl_entry->quirks, bl_entry->idVendor,
346 bl_entry->idProduct);
347 return bl_entry;
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
On Tue, Nov 24, 2015 at 04:02:05PM +0100, Adrien Verg? wrote:
> All ELAN hid devices seem to require the ALWAYS_POLL quirk. Let's use
> this quirk for all devices from this vendor, rather than maintaining a
> list of all its known product IDs.
>
> Tested-by: Adrien Verg? <[email protected]>
> Signed-off-by: Adrien Verg? <[email protected]>
> ---
> drivers/hid/hid-ids.h | 5 -----
> drivers/hid/usbhid/hid-quirks.c | 9 +++------
> 2 files changed, 3 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
> index ac1feea..3c7e0c3 100644
> --- a/drivers/hid/hid-ids.h
> +++ b/drivers/hid/hid-ids.h
> @@ -316,11 +316,6 @@
> #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001 0xa001
>
> #define USB_VENDOR_ID_ELAN 0x04f3
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN 0x0089
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B 0x009b
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103 0x0103
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c 0x010c
> -#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F 0x016f
>
> #define USB_VENDOR_ID_ELECOM 0x056e
> #define USB_DEVICE_ID_ELECOM_BM084 0x0061
> diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
> index 94bb137..b1af008 100644
> --- a/drivers/hid/usbhid/hid-quirks.c
> +++ b/drivers/hid/usbhid/hid-quirks.c
> @@ -72,11 +72,7 @@ static const struct hid_blacklist {
> { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
> { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
> { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN, HID_QUIRK_ALWAYS_POLL },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B, HID_QUIRK_ALWAYS_POLL },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103, HID_QUIRK_ALWAYS_POLL },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c, HID_QUIRK_ALWAYS_POLL },
> - { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F, HID_QUIRK_ALWAYS_POLL },
> + { USB_VENDOR_ID_ELAN, HID_ANY_ID, HID_QUIRK_ALWAYS_POLL },
> { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
> { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
> { USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
> @@ -339,7 +335,8 @@ static const struct hid_blacklist *usbhid_exists_squirk(const u16 idVendor,
>
> for (; hid_blacklist[n].idVendor; n++)
> if (hid_blacklist[n].idVendor == idVendor &&
> - hid_blacklist[n].idProduct == idProduct)
> + (hid_blacklist[n].idProduct == HID_ANY_ID ||
> + hid_blacklist[n].idProduct == idProduct))
Please fix the warning the kbuild infrastructure told you about here.
thanks,
greg k-h
This is the fifth version of a patchset which originally aimed to fix a buggy
touchscreen from ELAN Microelectronics.
Changes since v4:
- Cast HID_ANY_ID to an __u16 so to keep gcc happy on AVR32 arch.
Changes since v3:
- Use HID_ANY_ID to define a vendor-ID-global quirk, as suggested by
Benjamin Tissoires.
Changes since v2:
- Apply ALWAYS_POLL quirk to all ELAN devices by default, as suggested by
Jiri Kosina and Oliver Neukum.
Adrien Vergé (2):
USB: quirks: Fix another ELAN touchscreen
USB: quirks: Apply ALWAYS_POLL to all ELAN devices
drivers/hid/hid-ids.h | 5 -----
drivers/hid/usbhid/hid-quirks.c | 9 +++------
drivers/usb/core/quirks.c | 3 +++
3 files changed, 6 insertions(+), 11 deletions(-)
--
2.4.3
Like other buggy models that had their fixes [1], the touchscreen with
id 04f3:21b8 from ELAN Microelectronics needs the device-qualifier
quirk. Otherwise, it fails to respond, blocks the boot for a random
amount of time and pollutes dmesg with:
[ 2887.373196] usb 1-5: new full-speed USB device number 41 using xhci_hcd
[ 2889.502000] usb 1-5: unable to read config index 0 descriptor/start: -71
[ 2889.502005] usb 1-5: can't read configurations, error -71
[ 2889.654571] usb 1-5: new full-speed USB device number 42 using xhci_hcd
[ 2891.783438] usb 1-5: unable to read config index 0 descriptor/start: -71
[ 2891.783443] usb 1-5: can't read configurations, error -71
[1]: See commits c68929f, 876af5d, d749947, a32c99e and dc703ec.
Tested-by: Adrien Vergé <[email protected]>
Signed-off-by: Adrien Vergé <[email protected]>
---
drivers/usb/core/quirks.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index f5a3819..fcd6ac0 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -125,6 +125,9 @@ static const struct usb_device_id usb_quirk_list[] = {
{ USB_DEVICE(0x04f3, 0x016f), .driver_info =
USB_QUIRK_DEVICE_QUALIFIER },
+ { USB_DEVICE(0x04f3, 0x21b8), .driver_info =
+ USB_QUIRK_DEVICE_QUALIFIER },
+
/* Roland SC-8820 */
{ USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME },
--
2.4.3
All ELAN hid devices seem to require the ALWAYS_POLL quirk. Let's use
this quirk for all devices from this vendor, rather than maintaining a
list of all its known product IDs.
Tested-by: Adrien Vergé <[email protected]>
Signed-off-by: Adrien Vergé <[email protected]>
---
drivers/hid/hid-ids.h | 5 -----
drivers/hid/usbhid/hid-quirks.c | 9 +++------
2 files changed, 3 insertions(+), 11 deletions(-)
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index ac1feea..3c7e0c3 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -316,11 +316,6 @@
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001 0xa001
#define USB_VENDOR_ID_ELAN 0x04f3
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN 0x0089
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B 0x009b
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103 0x0103
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c 0x010c
-#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F 0x016f
#define USB_VENDOR_ID_ELECOM 0x056e
#define USB_DEVICE_ID_ELECOM_BM084 0x0061
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index 94bb137..78fc94a 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -72,11 +72,7 @@ static const struct hid_blacklist {
{ USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
{ USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
{ USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN, HID_QUIRK_ALWAYS_POLL },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B, HID_QUIRK_ALWAYS_POLL },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103, HID_QUIRK_ALWAYS_POLL },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c, HID_QUIRK_ALWAYS_POLL },
- { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F, HID_QUIRK_ALWAYS_POLL },
+ { USB_VENDOR_ID_ELAN, HID_ANY_ID, HID_QUIRK_ALWAYS_POLL },
{ USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
{ USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
{ USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
@@ -339,7 +335,8 @@ static const struct hid_blacklist *usbhid_exists_squirk(const u16 idVendor,
for (; hid_blacklist[n].idVendor; n++)
if (hid_blacklist[n].idVendor == idVendor &&
- hid_blacklist[n].idProduct == idProduct)
+ (hid_blacklist[n].idProduct == (__u16) HID_ANY_ID ||
+ hid_blacklist[n].idProduct == idProduct))
bl_entry = &hid_blacklist[n];
if (bl_entry != NULL)
--
2.4.3
On Tue, 1 Dec 2015, Adrien Vergé wrote:
> All ELAN hid devices seem to require the ALWAYS_POLL quirk. Let's use
> this quirk for all devices from this vendor, rather than maintaining a
> list of all its known product IDs.
>
> Tested-by: Adrien Vergé <[email protected]>
> Signed-off-by: Adrien Vergé <[email protected]>
Reviewed-by: Benjamin Tissoires <[email protected]>
Reviewed-by: Jiri Kosina <[email protected]>
Greg, I guess it makes sense to take both 1/2 and 2/2 together as a whole.
Would you mind adding the tags above and taking it through usb git tree?
Alternatively I can take it through my tree if you Ack the usb part.
Thanks,
--
Jiri Kosina
SUSE Labs
On Tue, Dec 01, 2015 at 11:09:23PM +0100, Jiri Kosina wrote:
> On Tue, 1 Dec 2015, Adrien Verg? wrote:
>
> > All ELAN hid devices seem to require the ALWAYS_POLL quirk. Let's use
> > this quirk for all devices from this vendor, rather than maintaining a
> > list of all its known product IDs.
> >
> > Tested-by: Adrien Verg? <[email protected]>
> > Signed-off-by: Adrien Verg? <[email protected]>
>
> Reviewed-by: Benjamin Tissoires <[email protected]>
> Reviewed-by: Jiri Kosina <[email protected]>
>
> Greg, I guess it makes sense to take both 1/2 and 2/2 together as a whole.
> Would you mind adding the tags above and taking it through usb git tree?
>
> Alternatively I can take it through my tree if you Ack the usb part.
Sure, I'll take it as I've already applied the non-HID patch :)
thanks,
greg k-h
Thank you all for your help on this.
Adrien