Commit ec42d448 authored by Daniel Ritz's avatar Daniel Ritz Committed by Dmitry Torokhov

Input: usbtouchscreen - ignore eGalax screens supporting HID protocol

The newer versions of the eGalax/EETI screen implement the HID protocol.
The device IDs are still the same, but the USB interface descriptor shows
the device being of HID class. Change usbtouchscreen to ignore the HID
models as they are handled properly by usbhid.
Signed-off-by: default avatarDaniel Ritz <daniel.ritz@gmx.ch>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 89cdb8ce
...@@ -49,6 +49,7 @@ ...@@ -49,6 +49,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/usb.h> #include <linux/usb.h>
#include <linux/usb/input.h> #include <linux/usb/input.h>
#include <linux/hid.h>
#define DRIVER_VERSION "v0.6" #define DRIVER_VERSION "v0.6"
...@@ -101,7 +102,7 @@ struct usbtouch_usb { ...@@ -101,7 +102,7 @@ struct usbtouch_usb {
/* device types */ /* device types */
enum { enum {
DEVTPYE_DUMMY = -1, DEVTYPE_IGNORE = -1,
DEVTYPE_EGALAX, DEVTYPE_EGALAX,
DEVTYPE_PANJIT, DEVTYPE_PANJIT,
DEVTYPE_3M, DEVTYPE_3M,
...@@ -115,8 +116,21 @@ enum { ...@@ -115,8 +116,21 @@ enum {
DEVTYPE_GOTOP, DEVTYPE_GOTOP,
}; };
#define USB_DEVICE_HID_CLASS(vend, prod) \
.match_flags = USB_DEVICE_ID_MATCH_INT_CLASS \
| USB_DEVICE_ID_MATCH_DEVICE, \
.idVendor = (vend), \
.idProduct = (prod), \
.bInterfaceClass = USB_INTERFACE_CLASS_HID, \
.bInterfaceProtocol = USB_INTERFACE_PROTOCOL_MOUSE
static struct usb_device_id usbtouch_devices[] = { static struct usb_device_id usbtouch_devices[] = {
#ifdef CONFIG_TOUCHSCREEN_USB_EGALAX #ifdef CONFIG_TOUCHSCREEN_USB_EGALAX
/* ignore the HID capable devices, handled by usbhid */
{USB_DEVICE_HID_CLASS(0x0eef, 0x0001), .driver_info = DEVTYPE_IGNORE},
{USB_DEVICE_HID_CLASS(0x0eef, 0x0002), .driver_info = DEVTYPE_IGNORE},
/* normal device IDs */
{USB_DEVICE(0x3823, 0x0001), .driver_info = DEVTYPE_EGALAX}, {USB_DEVICE(0x3823, 0x0001), .driver_info = DEVTYPE_EGALAX},
{USB_DEVICE(0x3823, 0x0002), .driver_info = DEVTYPE_EGALAX}, {USB_DEVICE(0x3823, 0x0002), .driver_info = DEVTYPE_EGALAX},
{USB_DEVICE(0x0123, 0x0001), .driver_info = DEVTYPE_EGALAX}, {USB_DEVICE(0x0123, 0x0001), .driver_info = DEVTYPE_EGALAX},
...@@ -857,6 +871,10 @@ static int usbtouch_probe(struct usb_interface *intf, ...@@ -857,6 +871,10 @@ static int usbtouch_probe(struct usb_interface *intf,
struct usbtouch_device_info *type; struct usbtouch_device_info *type;
int err = -ENOMEM; int err = -ENOMEM;
/* some devices are ignored */
if (id->driver_info == DEVTYPE_IGNORE)
return -ENODEV;
interface = intf->cur_altsetting; interface = intf->cur_altsetting;
endpoint = &interface->endpoint[0].desc; endpoint = &interface->endpoint[0].desc;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment