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

Commit cdcd3ac4 authored by Jiri Kosina's avatar Jiri Kosina
Browse files

Merge branch 'multitouch' into for-linus

Conflicts:
	drivers/hid/hid-multitouch.c
parents a3cbe10e f5ff4e1e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -268,7 +268,11 @@
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72FA	0x72fa
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302	0x7302
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349	0x7349
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_73F7	0x73f7
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001	0xa001
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224      0x7224
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72D0      0x72d0
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72C4      0x72c4

#define USB_VENDOR_ID_ELECOM		0x056e
#define USB_DEVICE_ID_ELECOM_BM084	0x0061
@@ -310,6 +314,7 @@

#define USB_VENDOR_ID_GENERAL_TOUCH	0x0dfc
#define USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS 0x0003
#define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PWT_TENFINGERS 0x0100

#define USB_VENDOR_ID_GLAB		0x06c2
#define USB_DEVICE_ID_4_PHIDGETSERVO_30	0x0038
+60 −7
Original line number Diff line number Diff line
@@ -117,6 +117,8 @@ struct mt_device {
#define MT_CLS_TOPSEED				0x0105
#define MT_CLS_PANASONIC			0x0106
#define MT_CLS_FLATFROG				0x0107
#define MT_CLS_GENERALTOUCH_TWOFINGERS		0x0108
#define MT_CLS_GENERALTOUCH_PWT_TENFINGERS	0x0109

#define MT_DEFAULT_MAXCONTACT	10

@@ -200,6 +202,17 @@ static struct mt_class mt_classes[] = {
	{ .name = MT_CLS_PANASONIC,
		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP,
		.maxcontacts = 4 },
	{ .name	= MT_CLS_GENERALTOUCH_TWOFINGERS,
		.quirks	= MT_QUIRK_NOT_SEEN_MEANS_UP |
			MT_QUIRK_VALID_IS_INRANGE |
			MT_QUIRK_SLOT_IS_CONTACTNUMBER,
		.maxcontacts = 2
	},
	{ .name	= MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
		.quirks	= MT_QUIRK_NOT_SEEN_MEANS_UP |
			MT_QUIRK_SLOT_IS_CONTACTNUMBER,
		.maxcontacts = 10
	},

	{ .name = MT_CLS_FLATFROG,
		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
@@ -682,14 +695,12 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
	struct mt_device *td;
	struct mt_class *mtclass = mt_classes; /* MT_CLS_DEFAULT */

	if (id) {
	for (i = 0; mt_classes[i].name ; i++) {
		if (id->driver_data == mt_classes[i].name) {
			mtclass = &(mt_classes[i]);
			break;
		}
	}
	}

	/* This allows the driver to correctly support devices
	 * that emit events over several HID messages.
@@ -747,6 +758,32 @@ static int mt_reset_resume(struct hid_device *hdev)
	mt_set_input_mode(hdev);
	return 0;
}

static int mt_resume(struct hid_device *hdev)
{
	struct usb_interface *intf;
	struct usb_host_interface *interface;
	struct usb_device *dev;

	if (hdev->bus != BUS_USB)
		return 0;

	intf = to_usb_interface(hdev->dev.parent);
	interface = intf->cur_altsetting;
	dev = hid_to_usb_dev(hdev);

	/* Some Elan legacy devices require SET_IDLE to be set on resume.
	 * It should be safe to send it to other devices too.
	 * Tested on 3M, Stantum, Cypress, Zytronic, eGalax, and Elan panels. */

	usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
			HID_REQ_SET_IDLE,
			USB_TYPE_CLASS | USB_RECIP_INTERFACE,
			0, interface->desc.bInterfaceNumber,
			NULL, 0, USB_CTRL_SET_TIMEOUT);

	return 0;
}
#endif

static void mt_remove(struct hid_device *hdev)
@@ -862,9 +899,21 @@ static const struct hid_device_id mt_devices[] = {
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349) },
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_73F7) },
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
	{ .driver_data = MT_CLS_EGALAX,
		HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224) },
	{ .driver_data = MT_CLS_EGALAX,
		HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72D0) },
	{ .driver_data = MT_CLS_EGALAX,
		HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72C4) },

	/* Elo TouchSystems IntelliTouch Plus panel */
	{ .driver_data = MT_CLS_DUAL_NSMU_CONTACTID,
@@ -877,9 +926,12 @@ static const struct hid_device_id mt_devices[] = {
			USB_DEVICE_ID_MULTITOUCH_3200) },

	/* GeneralTouch panel */
	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
	{ .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
			USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) },
	{ .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PWT_TENFINGERS) },

	/* Gametel game controller */
	{ .driver_data = MT_CLS_DEFAULT,
@@ -1077,6 +1129,7 @@ static struct hid_driver mt_driver = {
	.event = mt_event,
#ifdef CONFIG_PM
	.reset_resume = mt_reset_resume,
	.resume = mt_resume,
#endif
};