Commit 7e129783 authored by Benjamin Tissoires's avatar Benjamin Tissoires Committed by Jiri Kosina

HID: wacom: break out wacom_intuos_get_tool_type

Allow to reuse the code in a later series and simplifies
the reading of wacom_intuos_inout().
Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
Acked-by: default avatarPing Cheng <pingc@wacom.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 526d6e7b
...@@ -575,34 +575,16 @@ static int wacom_intuos_pad(struct wacom_wac *wacom) ...@@ -575,34 +575,16 @@ static int wacom_intuos_pad(struct wacom_wac *wacom)
return 1; return 1;
} }
static int wacom_intuos_inout(struct wacom_wac *wacom) static int wacom_intuos_get_tool_type(int tool_id)
{ {
struct wacom_features *features = &wacom->features; int tool_type;
unsigned char *data = wacom->data;
struct input_dev *input = wacom->pen_input;
int idx = (features->type == INTUOS) ? (data[1] & 0x01) : 0;
if (!(((data[1] & 0xfc) == 0xc0) || /* in prox */
((data[1] & 0xfe) == 0x20) || /* in range */
((data[1] & 0xfe) == 0x80))) /* out prox */
return 0;
/* Enter report */ switch (tool_id) {
if ((data[1] & 0xfc) == 0xc0) {
/* serial number of the tool */
wacom->serial[idx] = ((data[3] & 0x0f) << 28) +
(data[4] << 20) + (data[5] << 12) +
(data[6] << 4) + (data[7] >> 4);
wacom->id[idx] = (data[2] << 4) | (data[3] >> 4) |
((data[7] & 0x0f) << 20) | ((data[8] & 0xf0) << 12);
switch (wacom->id[idx]) {
case 0x812: /* Inking pen */ case 0x812: /* Inking pen */
case 0x801: /* Intuos3 Inking pen */ case 0x801: /* Intuos3 Inking pen */
case 0x120802: /* Intuos4/5 Inking Pen */ case 0x120802: /* Intuos4/5 Inking Pen */
case 0x012: case 0x012:
wacom->tool[idx] = BTN_TOOL_PENCIL; tool_type = BTN_TOOL_PENCIL;
break; break;
case 0x822: /* Pen */ case 0x822: /* Pen */
...@@ -620,12 +602,12 @@ static int wacom_intuos_inout(struct wacom_wac *wacom) ...@@ -620,12 +602,12 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
case 0x160802: /* Cintiq 13HD Pro Pen */ case 0x160802: /* Cintiq 13HD Pro Pen */
case 0x180802: /* DTH2242 Pen */ case 0x180802: /* DTH2242 Pen */
case 0x100802: /* Intuos4/5 13HD/24HD General Pen */ case 0x100802: /* Intuos4/5 13HD/24HD General Pen */
wacom->tool[idx] = BTN_TOOL_PEN; tool_type = BTN_TOOL_PEN;
break; break;
case 0x832: /* Stroke pen */ case 0x832: /* Stroke pen */
case 0x032: case 0x032:
wacom->tool[idx] = BTN_TOOL_BRUSH; tool_type = BTN_TOOL_BRUSH;
break; break;
case 0x007: /* Mouse 4D and 2D */ case 0x007: /* Mouse 4D and 2D */
...@@ -633,13 +615,13 @@ static int wacom_intuos_inout(struct wacom_wac *wacom) ...@@ -633,13 +615,13 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
case 0x094: case 0x094:
case 0x017: /* Intuos3 2D Mouse */ case 0x017: /* Intuos3 2D Mouse */
case 0x806: /* Intuos4 Mouse */ case 0x806: /* Intuos4 Mouse */
wacom->tool[idx] = BTN_TOOL_MOUSE; tool_type = BTN_TOOL_MOUSE;
break; break;
case 0x096: /* Lens cursor */ case 0x096: /* Lens cursor */
case 0x097: /* Intuos3 Lens cursor */ case 0x097: /* Intuos3 Lens cursor */
case 0x006: /* Intuos4 Lens cursor */ case 0x006: /* Intuos4 Lens cursor */
wacom->tool[idx] = BTN_TOOL_LENS; tool_type = BTN_TOOL_LENS;
break; break;
case 0x82a: /* Eraser */ case 0x82a: /* Eraser */
...@@ -659,7 +641,7 @@ static int wacom_intuos_inout(struct wacom_wac *wacom) ...@@ -659,7 +641,7 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
case 0x16080a: /* Cintiq 13HD Pro Pen Eraser */ case 0x16080a: /* Cintiq 13HD Pro Pen Eraser */
case 0x18080a: /* DTH2242 Eraser */ case 0x18080a: /* DTH2242 Eraser */
case 0x10080a: /* Intuos4/5 13HD/24HD General Pen Eraser */ case 0x10080a: /* Intuos4/5 13HD/24HD General Pen Eraser */
wacom->tool[idx] = BTN_TOOL_RUBBER; tool_type = BTN_TOOL_RUBBER;
break; break;
case 0xd12: case 0xd12:
...@@ -668,14 +650,40 @@ static int wacom_intuos_inout(struct wacom_wac *wacom) ...@@ -668,14 +650,40 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
case 0x913: /* Intuos3 Airbrush */ case 0x913: /* Intuos3 Airbrush */
case 0x902: /* Intuos4/5 13HD/24HD Airbrush */ case 0x902: /* Intuos4/5 13HD/24HD Airbrush */
case 0x100902: /* Intuos4/5 13HD/24HD Airbrush */ case 0x100902: /* Intuos4/5 13HD/24HD Airbrush */
wacom->tool[idx] = BTN_TOOL_AIRBRUSH; tool_type = BTN_TOOL_AIRBRUSH;
break; break;
default: /* Unknown tool */ default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN; tool_type = BTN_TOOL_PEN;
break; break;
} }
wacom->shared->stylus_in_proximity = true; return tool_type;
}
static int wacom_intuos_inout(struct wacom_wac *wacom)
{
struct wacom_features *features = &wacom->features;
unsigned char *data = wacom->data;
struct input_dev *input = wacom->pen_input;
int idx = (features->type == INTUOS) ? (data[1] & 0x01) : 0;
if (!(((data[1] & 0xfc) == 0xc0) || /* in prox */
((data[1] & 0xfe) == 0x20) || /* in range */
((data[1] & 0xfe) == 0x80))) /* out prox */
return 0;
/* Enter report */
if ((data[1] & 0xfc) == 0xc0) {
/* serial number of the tool */
wacom->serial[idx] = ((data[3] & 0x0f) << 28) +
(data[4] << 20) + (data[5] << 12) +
(data[6] << 4) + (data[7] >> 4);
wacom->id[idx] = (data[2] << 4) | (data[3] >> 4) |
((data[7] & 0x0f) << 20) | ((data[8] & 0xf0) << 12);
wacom->tool[idx] = wacom_intuos_get_tool_type(wacom->id[idx]);
return 1; return 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment