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

Commit 9fee6195 authored by Jason Gerecke's avatar Jason Gerecke Committed by Dmitry Torokhov
Browse files

Input: wacom - add basic Intuos5 support



This patch adds support for the basic pen functions of Intuos5
tablets.

Signed-off-by: default avatarJason Gerecke <killertofu@gmail.com>
Reviewed-by: default avatarChris Bagwell <chris@cnpbagwell.com>
Reviewed-by: default avatarPing Cheng <pingc@wacom.com>
Tested-by: default avatarTimo Aaltonen <tjaalton@ubuntu.com>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent b3571400
Loading
Loading
Loading
Loading
+33 −3
Original line number Original line Diff line number Diff line
@@ -452,6 +452,7 @@ static void wacom_intuos_general(struct wacom_wac *wacom)
	if ((data[1] & 0xb8) == 0xa0) {
	if ((data[1] & 0xb8) == 0xa0) {
		t = (data[6] << 2) | ((data[7] >> 6) & 3);
		t = (data[6] << 2) | ((data[7] >> 6) & 3);
		if ((features->type >= INTUOS4S && features->type <= INTUOS4L) ||
		if ((features->type >= INTUOS4S && features->type <= INTUOS4L) ||
                    (features->type >= INTUOS5S && features->type <= INTUOS5L) ||
		    features->type == WACOM_21UX2 || features->type == WACOM_24HD) {
		    features->type == WACOM_21UX2 || features->type == WACOM_24HD) {
			t = (t << 1) | (data[1] & 1);
			t = (t << 1) | (data[1] & 1);
		}
		}
@@ -632,7 +633,9 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
	    (features->type == INTUOS3 ||
	    (features->type == INTUOS3 ||
	     features->type == INTUOS3S ||
	     features->type == INTUOS3S ||
	     features->type == INTUOS4 ||
	     features->type == INTUOS4 ||
	     features->type == INTUOS4S)) {
	     features->type == INTUOS4S ||
	     features->type == INTUOS5 ||
	     features->type == INTUOS5S)) {


		return 0;
		return 0;
	}
	}
@@ -685,7 +688,8 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)


		} else if (wacom->tool[idx] == BTN_TOOL_MOUSE) {
		} else if (wacom->tool[idx] == BTN_TOOL_MOUSE) {
			/* I4 mouse */
			/* I4 mouse */
			if (features->type >= INTUOS4S && features->type <= INTUOS4L) {
			if ((features->type >= INTUOS4S && features->type <= INTUOS4L) ||
			    (features->type >= INTUOS5S && features->type <= INTUOS5L)) {
				input_report_key(input, BTN_LEFT,   data[6] & 0x01);
				input_report_key(input, BTN_LEFT,   data[6] & 0x01);
				input_report_key(input, BTN_MIDDLE, data[6] & 0x02);
				input_report_key(input, BTN_MIDDLE, data[6] & 0x02);
				input_report_key(input, BTN_RIGHT,  data[6] & 0x04);
				input_report_key(input, BTN_RIGHT,  data[6] & 0x04);
@@ -712,7 +716,7 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
				}
				}
			}
			}
		} else if ((features->type < INTUOS3S || features->type == INTUOS3L ||
		} else if ((features->type < INTUOS3S || features->type == INTUOS3L ||
				features->type == INTUOS4L) &&
				features->type == INTUOS4L || features->type == INTUOS5L) &&
			   wacom->tool[idx] == BTN_TOOL_LENS) {
			   wacom->tool[idx] == BTN_TOOL_LENS) {
			/* Lens cursor packets */
			/* Lens cursor packets */
			input_report_key(input, BTN_LEFT,   data[8] & 0x01);
			input_report_key(input, BTN_LEFT,   data[8] & 0x01);
@@ -1107,6 +1111,9 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
	case INTUOS4S:
	case INTUOS4S:
	case INTUOS4:
	case INTUOS4:
	case INTUOS4L:
	case INTUOS4L:
	case INTUOS5S:
	case INTUOS5:
	case INTUOS5L:
	case CINTIQ:
	case CINTIQ:
	case WACOM_BEE:
	case WACOM_BEE:
	case WACOM_21UX2:
	case WACOM_21UX2:
@@ -1355,12 +1362,15 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
		wacom_setup_intuos(wacom_wac);
		wacom_setup_intuos(wacom_wac);
		break;
		break;


	case INTUOS5:
	case INTUOS5L:
	case INTUOS4:
	case INTUOS4:
	case INTUOS4L:
	case INTUOS4L:
		__set_bit(BTN_7, input_dev->keybit);
		__set_bit(BTN_7, input_dev->keybit);
		__set_bit(BTN_8, input_dev->keybit);
		__set_bit(BTN_8, input_dev->keybit);
		/* fall through */
		/* fall through */


	case INTUOS5S:
	case INTUOS4S:
	case INTUOS4S:
		for (i = 0; i < 7; i++)
		for (i = 0; i < 7; i++)
			__set_bit(BTN_0 + i, input_dev->keybit);
			__set_bit(BTN_0 + i, input_dev->keybit);
@@ -1629,6 +1639,21 @@ static const struct wacom_features wacom_features_0xBB =
static const struct wacom_features wacom_features_0xBC =
static const struct wacom_features wacom_features_0xBC =
	{ "Wacom Intuos4 WL",     WACOM_PKGLEN_INTUOS,    40840, 25400, 2047,
	{ "Wacom Intuos4 WL",     WACOM_PKGLEN_INTUOS,    40840, 25400, 2047,
	  63, INTUOS4, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
	  63, INTUOS4, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
static const struct wacom_features wacom_features_0x26 =
	{ "Wacom Intuos5 touch S", WACOM_PKGLEN_INTUOS,  31496, 19685, 2047,
	  63, INTUOS5S, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
static const struct wacom_features wacom_features_0x27 =
	{ "Wacom Intuos5 touch M", WACOM_PKGLEN_INTUOS,  44704, 27940, 2047,
	  63, INTUOS5, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
static const struct wacom_features wacom_features_0x28 =
	{ "Wacom Intuos5 touch L", WACOM_PKGLEN_INTUOS, 65024, 40640, 2047,
	  63, INTUOS5L, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
static const struct wacom_features wacom_features_0x29 =
	{ "Wacom Intuos5 S", WACOM_PKGLEN_INTUOS,  31496, 19685, 2047,
	  63, INTUOS5S, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
static const struct wacom_features wacom_features_0x2A =
	{ "Wacom Intuos5 M", WACOM_PKGLEN_INTUOS,  44704, 27940, 2047,
	  63, INTUOS5, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
static const struct wacom_features wacom_features_0xF4 =
static const struct wacom_features wacom_features_0xF4 =
	{ "Wacom Cintiq 24HD",    WACOM_PKGLEN_INTUOS,   104480, 65600, 2047,
	{ "Wacom Cintiq 24HD",    WACOM_PKGLEN_INTUOS,   104480, 65600, 2047,
	  63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
	  63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
@@ -1801,6 +1826,11 @@ const struct usb_device_id wacom_ids[] = {
	{ USB_DEVICE_WACOM(0xBA) },
	{ USB_DEVICE_WACOM(0xBA) },
	{ USB_DEVICE_WACOM(0xBB) },
	{ USB_DEVICE_WACOM(0xBB) },
	{ USB_DEVICE_WACOM(0xBC) },
	{ USB_DEVICE_WACOM(0xBC) },
	{ USB_DEVICE_WACOM(0x26) },
	{ USB_DEVICE_WACOM(0x27) },
	{ USB_DEVICE_WACOM(0x28) },
	{ USB_DEVICE_WACOM(0x29) },
	{ USB_DEVICE_WACOM(0x2A) },
	{ USB_DEVICE_WACOM(0x3F) },
	{ USB_DEVICE_WACOM(0x3F) },
	{ USB_DEVICE_WACOM(0xC5) },
	{ USB_DEVICE_WACOM(0xC5) },
	{ USB_DEVICE_WACOM(0xC6) },
	{ USB_DEVICE_WACOM(0xC6) },
+3 −0
Original line number Original line Diff line number Diff line
@@ -65,6 +65,9 @@ enum {
	INTUOS4S,
	INTUOS4S,
	INTUOS4,
	INTUOS4,
	INTUOS4L,
	INTUOS4L,
	INTUOS5S,
	INTUOS5,
	INTUOS5L,
	WACOM_24HD,
	WACOM_24HD,
	WACOM_21UX2,
	WACOM_21UX2,
	CINTIQ,
	CINTIQ,