diff options
Diffstat (limited to 'drivers/hid')
-rw-r--r-- | drivers/hid/hid-core.c | 6 | ||||
-rw-r--r-- | drivers/hid/hid-input.c | 11 |
2 files changed, 17 insertions, 0 deletions
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 956f84968fa..f869ab35e6d 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
@@ -1212,6 +1212,12 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask) | |||
1212 | if ((connect_mask & HID_CONNECT_HIDINPUT) && !hidinput_connect(hdev, | 1212 | if ((connect_mask & HID_CONNECT_HIDINPUT) && !hidinput_connect(hdev, |
1213 | connect_mask & HID_CONNECT_HIDINPUT_FORCE)) | 1213 | connect_mask & HID_CONNECT_HIDINPUT_FORCE)) |
1214 | hdev->claimed |= HID_CLAIMED_INPUT; | 1214 | hdev->claimed |= HID_CLAIMED_INPUT; |
1215 | if (hdev->quirks & HID_QUIRK_MULTITOUCH) { | ||
1216 | /* this device should be handled by hid-multitouch, skip it */ | ||
1217 | hdev->quirks &= ~HID_QUIRK_MULTITOUCH; | ||
1218 | return -ENODEV; | ||
1219 | } | ||
1220 | |||
1215 | if ((connect_mask & HID_CONNECT_HIDDEV) && hdev->hiddev_connect && | 1221 | if ((connect_mask & HID_CONNECT_HIDDEV) && hdev->hiddev_connect && |
1216 | !hdev->hiddev_connect(hdev, | 1222 | !hdev->hiddev_connect(hdev, |
1217 | connect_mask & HID_CONNECT_HIDDEV_FORCE)) | 1223 | connect_mask & HID_CONNECT_HIDDEV_FORCE)) |
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index 6559e2e3364..f333139d1a4 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c | |||
@@ -474,6 +474,10 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel | |||
474 | map_key_clear(BTN_STYLUS2); | 474 | map_key_clear(BTN_STYLUS2); |
475 | break; | 475 | break; |
476 | 476 | ||
477 | case 0x51: /* ContactID */ | ||
478 | device->quirks |= HID_QUIRK_MULTITOUCH; | ||
479 | goto unknown; | ||
480 | |||
477 | default: goto unknown; | 481 | default: goto unknown; |
478 | } | 482 | } |
479 | break; | 483 | break; |
@@ -978,6 +982,13 @@ int hidinput_connect(struct hid_device *hid, unsigned int force) | |||
978 | } | 982 | } |
979 | } | 983 | } |
980 | 984 | ||
985 | if (hid->quirks & HID_QUIRK_MULTITOUCH) { | ||
986 | /* generic hid does not know how to handle multitouch devices */ | ||
987 | if (hidinput) | ||
988 | goto out_cleanup; | ||
989 | goto out_unwind; | ||
990 | } | ||
991 | |||
981 | if (hidinput && input_register_device(hidinput->input)) | 992 | if (hidinput && input_register_device(hidinput->input)) |
982 | goto out_cleanup; | 993 | goto out_cleanup; |
983 | 994 | ||