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

Commit 6afdc289 authored by Ping Cheng's avatar Ping Cheng Committed by Dmitry Torokhov
Browse files

Input: wacom - add support for 2 new multi-touch tablets (0x100 and 0x101)



This adds support for the two new multi-touch tablets.

Signed-off-by: default avatarPing Cheng <pinglinux@gmail.com>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 3699dd7e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -397,6 +397,10 @@ static int wacom_parse_hid(struct usb_interface *intf,
							features->pktlen = WACOM_PKGLEN_MTOUCH;
							break;

						case MTTPC:
							features->pktlen = WACOM_PKGLEN_MTTPC;
							break;

						case BAMBOO_PT:
							features->pktlen = WACOM_PKGLEN_BBTOUCH;
							break;
@@ -453,6 +457,7 @@ static int wacom_parse_hid(struct usb_interface *intf,
						switch (features->type) {
						case TABLETPC2FG:
						case MTSCREEN:
						case MTTPC:
							features->y_max =
								get_unaligned_le16(&report[i + 3]);
							features->y_phy =
+18 −3
Original line number Diff line number Diff line
@@ -877,6 +877,11 @@ static int wacom_mt_touch(struct wacom_wac *wacom)
	int i;
	int current_num_contacts = data[2];
	int contacts_to_send = 0;
	int x_offset = 0;

	/* MTTPC does not support Height and Width */
	if (wacom->features.type == MTTPC)
		x_offset = -4;

	/*
	 * First packet resets the counter since only the first
@@ -889,7 +894,7 @@ static int wacom_mt_touch(struct wacom_wac *wacom)
	contacts_to_send = min(5, wacom->num_contacts_left);

	for (i = 0; i < contacts_to_send; i++) {
		int offset = (WACOM_BYTES_PER_MT_PACKET * i) + 3;
		int offset = (WACOM_BYTES_PER_MT_PACKET + x_offset) * i + 3;
		bool touch = data[offset] & 0x1;
		int id = le16_to_cpup((__le16 *)&data[offset + 1]);
		int slot = find_slot_from_contactid(wacom, id);
@@ -900,8 +905,8 @@ static int wacom_mt_touch(struct wacom_wac *wacom)
		input_mt_slot(input, slot);
		input_mt_report_slot_state(input, MT_TOOL_FINGER, touch);
		if (touch) {
			int x = le16_to_cpup((__le16 *)&data[offset + 7]);
			int y = le16_to_cpup((__le16 *)&data[offset + 9]);
			int x = le16_to_cpup((__le16 *)&data[offset + x_offset + 7]);
			int y = le16_to_cpup((__le16 *)&data[offset + x_offset + 9]);
			input_report_abs(input, ABS_MT_POSITION_X, x);
			input_report_abs(input, ABS_MT_POSITION_Y, y);
		}
@@ -1336,6 +1341,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
	case TABLETPCE:
	case TABLETPC2FG:
	case MTSCREEN:
	case MTTPC:
		sync = wacom_tpc_irq(wacom_wac, len);
		break;

@@ -1657,6 +1663,7 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
		/* fall through */

	case MTSCREEN:
	case MTTPC:
		if (features->device_type == BTN_TOOL_FINGER) {
			wacom_wac->slots = kmalloc(features->touch_max *
							sizeof(int),
@@ -2018,6 +2025,12 @@ static const struct wacom_features wacom_features_0xED =
static const struct wacom_features wacom_features_0xEF =
	{ "Wacom ISDv4 EF",       WACOM_PKGLEN_GRAPHIRE,  26202, 16325,  255,
	  0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
static const struct wacom_features wacom_features_0x100 =
	{ "Wacom ISDv4 100",      WACOM_PKGLEN_MTTPC,     26202, 16325,  255,
	  0, MTTPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
static const struct wacom_features wacom_features_0x101 =
	{ "Wacom ISDv4 101",      WACOM_PKGLEN_MTTPC,     26202, 16325,  255,
	  0, MTTPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
static const struct wacom_features wacom_features_0x47 =
	{ "Wacom Intuos2 6x8",    WACOM_PKGLEN_INTUOS,    20320, 16240, 1023,
	  31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
@@ -2194,6 +2207,8 @@ const struct usb_device_id wacom_ids[] = {
	{ USB_DEVICE_WACOM(0xEC) },
	{ USB_DEVICE_WACOM(0xED) },
	{ USB_DEVICE_WACOM(0xEF) },
	{ USB_DEVICE_WACOM(0x100) },
	{ USB_DEVICE_WACOM(0x101) },
	{ USB_DEVICE_WACOM(0x47) },
	{ USB_DEVICE_WACOM(0xF4) },
	{ USB_DEVICE_WACOM(0xF8) },
+2 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#define WACOM_PKGLEN_BBPEN	10
#define WACOM_PKGLEN_WIRELESS	32
#define WACOM_PKGLEN_MTOUCH	62
#define WACOM_PKGLEN_MTTPC	40

/* wacom data size per MT contact */
#define WACOM_BYTES_PER_MT_PACKET	11
@@ -88,6 +89,7 @@ enum {
	TABLETPCE,
	TABLETPC2FG,
	MTSCREEN,
	MTTPC,
	MAX_TYPE
};