|
@@ -49,6 +49,7 @@
|
|
|
#include <linux/init.h>
|
|
|
#include <linux/usb.h>
|
|
|
#include <linux/usb/input.h>
|
|
|
+#include <linux/hid.h>
|
|
|
|
|
|
|
|
|
#define DRIVER_VERSION "v0.6"
|
|
@@ -101,7 +102,7 @@ struct usbtouch_usb {
|
|
|
|
|
|
/* device types */
|
|
|
enum {
|
|
|
- DEVTPYE_DUMMY = -1,
|
|
|
+ DEVTYPE_IGNORE = -1,
|
|
|
DEVTYPE_EGALAX,
|
|
|
DEVTYPE_PANJIT,
|
|
|
DEVTYPE_3M,
|
|
@@ -115,8 +116,21 @@ enum {
|
|
|
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[] = {
|
|
|
#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, 0x0002), .driver_info = DEVTYPE_EGALAX},
|
|
|
{USB_DEVICE(0x0123, 0x0001), .driver_info = DEVTYPE_EGALAX},
|
|
@@ -857,6 +871,10 @@ static int usbtouch_probe(struct usb_interface *intf,
|
|
|
struct usbtouch_device_info *type;
|
|
|
int err = -ENOMEM;
|
|
|
|
|
|
+ /* some devices are ignored */
|
|
|
+ if (id->driver_info == DEVTYPE_IGNORE)
|
|
|
+ return -ENODEV;
|
|
|
+
|
|
|
interface = intf->cur_altsetting;
|
|
|
endpoint = &interface->endpoint[0].desc;
|
|
|
|