Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b77c3920 authored by Benjamin Tissoires's avatar Benjamin Tissoires Committed by Jiri Kosina
Browse files

HID: add autodetection of multitouch devices

As mentioned by http://www.microsoft.com/whdc/device/input/DigitizerDrvs_touch.mspx


multitouch devices are those that have the input report HID_CONTACTID.

This patch detects this and unloads the generic-usb driver.

Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@enac.fr>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent a062cc5a
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -1212,6 +1212,12 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
	if ((connect_mask & HID_CONNECT_HIDINPUT) && !hidinput_connect(hdev,
				connect_mask & HID_CONNECT_HIDINPUT_FORCE))
		hdev->claimed |= HID_CLAIMED_INPUT;
	if (hdev->quirks & HID_QUIRK_MULTITOUCH) {
		/* this device should be handled by hid-multitouch, skip it */
		hdev->quirks &= ~HID_QUIRK_MULTITOUCH;
		return -ENODEV;
	}

	if ((connect_mask & HID_CONNECT_HIDDEV) && hdev->hiddev_connect &&
			!hdev->hiddev_connect(hdev,
				connect_mask & HID_CONNECT_HIDDEV_FORCE))
+11 −0
Original line number Diff line number Diff line
@@ -474,6 +474,10 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
			map_key_clear(BTN_STYLUS2);
			break;

		case 0x51: /* ContactID */
			device->quirks |= HID_QUIRK_MULTITOUCH;
			goto unknown;

		default:  goto unknown;
		}
		break;
@@ -978,6 +982,13 @@ int hidinput_connect(struct hid_device *hid, unsigned int force)
		}
	}

	if (hid->quirks & HID_QUIRK_MULTITOUCH) {
		/* generic hid does not know how to handle multitouch devices */
		if (hidinput)
			goto out_cleanup;
		goto out_unwind;
	}

	if (hidinput && input_register_device(hidinput->input))
		goto out_cleanup;

+1 −0
Original line number Diff line number Diff line
@@ -312,6 +312,7 @@ struct hid_item {
#define HID_QUIRK_BADPAD			0x00000020
#define HID_QUIRK_MULTI_INPUT			0x00000040
#define HID_QUIRK_HIDINPUT_FORCE		0x00000080
#define HID_QUIRK_MULTITOUCH			0x00000100
#define HID_QUIRK_SKIP_OUTPUT_REPORTS		0x00010000
#define HID_QUIRK_FULLSPEED_INTERVAL		0x10000000
#define HID_QUIRK_NO_INIT_REPORTS		0x20000000