|
@@ -588,6 +588,11 @@ static int wacom_intuos_pad(struct wacom_wac *wacom)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+static int wacom_intuos_id_mangle(int tool_id)
|
|
|
+{
|
|
|
+ return (tool_id & ~0xFFF) << 4 | (tool_id & 0xFFF);
|
|
|
+}
|
|
|
+
|
|
|
static int wacom_intuos_get_tool_type(int tool_id)
|
|
|
{
|
|
|
int tool_type;
|
|
@@ -595,7 +600,7 @@ static int wacom_intuos_get_tool_type(int tool_id)
|
|
|
switch (tool_id) {
|
|
|
case 0x812: /* Inking pen */
|
|
|
case 0x801: /* Intuos3 Inking pen */
|
|
|
- case 0x120802: /* Intuos4/5 Inking Pen */
|
|
|
+ case 0x12802: /* Intuos4/5 Inking Pen */
|
|
|
case 0x012:
|
|
|
tool_type = BTN_TOOL_PENCIL;
|
|
|
break;
|
|
@@ -610,11 +615,11 @@ static int wacom_intuos_get_tool_type(int tool_id)
|
|
|
case 0x804: /* Intuos4/5 13HD/24HD Marker Pen */
|
|
|
case 0x8e2: /* IntuosHT2 pen */
|
|
|
case 0x022:
|
|
|
- case 0x100804: /* Intuos4/5 13HD/24HD Art Pen */
|
|
|
- case 0x140802: /* Intuos4/5 13HD/24HD Classic Pen */
|
|
|
- case 0x160802: /* Cintiq 13HD Pro Pen */
|
|
|
- case 0x180802: /* DTH2242 Pen */
|
|
|
- case 0x100802: /* Intuos4/5 13HD/24HD General Pen */
|
|
|
+ case 0x10804: /* Intuos4/5 13HD/24HD Art Pen */
|
|
|
+ case 0x14802: /* Intuos4/5 13HD/24HD Classic Pen */
|
|
|
+ case 0x16802: /* Cintiq 13HD Pro Pen */
|
|
|
+ case 0x18802: /* DTH2242 Pen */
|
|
|
+ case 0x10802: /* Intuos4/5 13HD/24HD General Pen */
|
|
|
tool_type = BTN_TOOL_PEN;
|
|
|
break;
|
|
|
|
|
@@ -648,12 +653,12 @@ static int wacom_intuos_get_tool_type(int tool_id)
|
|
|
case 0x80c: /* Intuos4/5 13HD/24HD Marker Pen Eraser */
|
|
|
case 0x80a: /* Intuos4/5 13HD/24HD General Pen Eraser */
|
|
|
case 0x90a: /* Intuos4/5 13HD/24HD Airbrush Eraser */
|
|
|
- case 0x14080a: /* Intuos4/5 13HD/24HD Classic Pen Eraser */
|
|
|
- case 0x10090a: /* Intuos4/5 13HD/24HD Airbrush Eraser */
|
|
|
- case 0x10080c: /* Intuos4/5 13HD/24HD Art Pen Eraser */
|
|
|
- case 0x16080a: /* Cintiq 13HD Pro Pen Eraser */
|
|
|
- case 0x18080a: /* DTH2242 Eraser */
|
|
|
- case 0x10080a: /* Intuos4/5 13HD/24HD General Pen Eraser */
|
|
|
+ case 0x1480a: /* Intuos4/5 13HD/24HD Classic Pen Eraser */
|
|
|
+ case 0x1090a: /* Intuos4/5 13HD/24HD Airbrush Eraser */
|
|
|
+ case 0x1080c: /* Intuos4/5 13HD/24HD Art Pen Eraser */
|
|
|
+ case 0x1680a: /* Cintiq 13HD Pro Pen Eraser */
|
|
|
+ case 0x1880a: /* DTH2242 Eraser */
|
|
|
+ case 0x1080a: /* Intuos4/5 13HD/24HD General Pen Eraser */
|
|
|
tool_type = BTN_TOOL_RUBBER;
|
|
|
break;
|
|
|
|
|
@@ -662,7 +667,7 @@ static int wacom_intuos_get_tool_type(int tool_id)
|
|
|
case 0x112:
|
|
|
case 0x913: /* Intuos3 Airbrush */
|
|
|
case 0x902: /* Intuos4/5 13HD/24HD Airbrush */
|
|
|
- case 0x100902: /* Intuos4/5 13HD/24HD Airbrush */
|
|
|
+ case 0x10902: /* Intuos4/5 13HD/24HD Airbrush */
|
|
|
tool_type = BTN_TOOL_AIRBRUSH;
|
|
|
break;
|
|
|
|
|
@@ -693,7 +698,7 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
|
|
|
(data[6] << 4) + (data[7] >> 4);
|
|
|
|
|
|
wacom->id[idx] = (data[2] << 4) | (data[3] >> 4) |
|
|
|
- ((data[7] & 0x0f) << 20) | ((data[8] & 0xf0) << 12);
|
|
|
+ ((data[7] & 0x0f) << 16) | ((data[8] & 0xf0) << 8);
|
|
|
|
|
|
wacom->tool[idx] = wacom_intuos_get_tool_type(wacom->id[idx]);
|
|
|
|
|
@@ -923,7 +928,7 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
|
|
|
* don't report events for invalid data
|
|
|
*/
|
|
|
/* older I4 styli don't work with new Cintiqs */
|
|
|
- if ((!((wacom->id[idx] >> 20) & 0x01) &&
|
|
|
+ if ((!((wacom->id[idx] >> 16) & 0x01) &&
|
|
|
(features->type == WACOM_21UX2)) ||
|
|
|
/* Only large Intuos support Lense Cursor */
|
|
|
(wacom->tool[idx] == BTN_TOOL_LENS &&
|
|
@@ -1059,7 +1064,8 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- input_report_abs(input, ABS_MISC, wacom->id[idx]); /* report tool id */
|
|
|
+ input_report_abs(input, ABS_MISC,
|
|
|
+ wacom_intuos_id_mangle(wacom->id[idx])); /* report tool id */
|
|
|
input_report_key(input, wacom->tool[idx], 1);
|
|
|
input_event(input, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
|
|
|
wacom->reporting_data = true;
|