diff options
Diffstat (limited to 'drivers/hid/hid-core.c')
-rw-r--r-- | drivers/hid/hid-core.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index af08ce7207d9..05a0c9a35bf2 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
@@ -1232,7 +1232,6 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask) | |||
1232 | hdev->claimed |= HID_CLAIMED_INPUT; | 1232 | hdev->claimed |= HID_CLAIMED_INPUT; |
1233 | if (hdev->quirks & HID_QUIRK_MULTITOUCH) { | 1233 | if (hdev->quirks & HID_QUIRK_MULTITOUCH) { |
1234 | /* this device should be handled by hid-multitouch, skip it */ | 1234 | /* this device should be handled by hid-multitouch, skip it */ |
1235 | hdev->quirks &= ~HID_QUIRK_MULTITOUCH; | ||
1236 | return -ENODEV; | 1235 | return -ENODEV; |
1237 | } | 1236 | } |
1238 | 1237 | ||
@@ -1409,6 +1408,8 @@ static const struct hid_device_id hid_have_special_driver[] = { | |||
1409 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D) }, | 1408 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D) }, |
1410 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E) }, | 1409 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E) }, |
1411 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C) }, | 1410 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C) }, |
1411 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224) }, | ||
1412 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_725E) }, | ||
1412 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B) }, | 1413 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B) }, |
1413 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1) }, | 1414 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1) }, |
1414 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302) }, | 1415 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302) }, |
@@ -1501,6 +1502,8 @@ static const struct hid_device_id hid_have_special_driver[] = { | |||
1501 | { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_18) }, | 1502 | { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_18) }, |
1502 | { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) }, | 1503 | { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) }, |
1503 | { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) }, | 1504 | { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) }, |
1505 | { HID_USB_DEVICE(USB_VENDOR_ID_PANASONIC, USB_DEVICE_ID_PANABOARD_UBT780) }, | ||
1506 | { HID_USB_DEVICE(USB_VENDOR_ID_PANASONIC, USB_DEVICE_ID_PANABOARD_UBT880) }, | ||
1504 | { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_PCI) }, | 1507 | { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_PCI) }, |
1505 | { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) }, | 1508 | { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) }, |
1506 | { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN) }, | 1509 | { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN) }, |
@@ -1663,6 +1666,10 @@ static int hid_bus_match(struct device *dev, struct device_driver *drv) | |||
1663 | struct hid_driver *hdrv = container_of(drv, struct hid_driver, driver); | 1666 | struct hid_driver *hdrv = container_of(drv, struct hid_driver, driver); |
1664 | struct hid_device *hdev = container_of(dev, struct hid_device, dev); | 1667 | struct hid_device *hdev = container_of(dev, struct hid_device, dev); |
1665 | 1668 | ||
1669 | if ((hdev->quirks & HID_QUIRK_MULTITOUCH) && | ||
1670 | !strncmp(hdrv->name, "hid-multitouch", 14)) | ||
1671 | return 1; | ||
1672 | |||
1666 | if (!hid_match_device(hdev, hdrv)) | 1673 | if (!hid_match_device(hdev, hdrv)) |
1667 | return 0; | 1674 | return 0; |
1668 | 1675 | ||
@@ -1687,8 +1694,11 @@ static int hid_device_probe(struct device *dev) | |||
1687 | if (!hdev->driver) { | 1694 | if (!hdev->driver) { |
1688 | id = hid_match_device(hdev, hdrv); | 1695 | id = hid_match_device(hdev, hdrv); |
1689 | if (id == NULL) { | 1696 | if (id == NULL) { |
1690 | ret = -ENODEV; | 1697 | if (!((hdev->quirks & HID_QUIRK_MULTITOUCH) && |
1691 | goto unlock; | 1698 | !strncmp(hdrv->name, "hid-multitouch", 14))) { |
1699 | ret = -ENODEV; | ||
1700 | goto unlock; | ||
1701 | } | ||
1692 | } | 1702 | } |
1693 | 1703 | ||
1694 | hdev->driver = hdrv; | 1704 | hdev->driver = hdrv; |