Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

USB: Wacom driver updates

Updated Intuos and Graphire irq calls
Report pad device ID

Signed-off-by: Ping Cheng <pingc@wacom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Ping Cheng and committed by
Greg Kroah-Hartman
80d4e8e9 50f97a1f

+65 -39
+64 -39
drivers/usb/input/wacom_wac.c
··· 163 163 } 164 164 165 165 id = STYLUS_DEVICE_ID; 166 - if (data[1] & 0x10) { /* in prox */ 166 + if (data[1] & 0x80) { /* in prox */ 167 167 168 168 switch ((data[1] >> 5) & 3) { 169 169 ··· 196 196 wacom_report_abs(wcombo, ABS_DISTANCE, data[7] & 0x3f); 197 197 break; 198 198 } 199 - } 200 - 201 - if (data[1] & 0x90) { 202 199 x = wacom_le16_to_cpu(&data[2]); 203 200 y = wacom_le16_to_cpu(&data[4]); 204 201 wacom_report_abs(wcombo, ABS_X, x); ··· 207 210 wacom_report_key(wcombo, BTN_STYLUS2, data[1] & 0x04); 208 211 } 209 212 wacom_report_abs(wcombo, ABS_MISC, id); /* report tool id */ 210 - } 211 - else 212 - wacom_report_abs(wcombo, ABS_MISC, 0); /* reset tool id */ 213 - 214 - if (data[1] & 0x10) /* only report prox-in when in area */ 215 213 wacom_report_key(wcombo, wacom->tool[0], 1); 216 - if (!(data[1] & 0x90)) /* report prox-out when physically out */ 214 + } else if (!(data[1] & 0x90)) { 215 + wacom_report_abs(wcombo, ABS_X, 0); 216 + wacom_report_abs(wcombo, ABS_Y, 0); 217 + if (wacom->tool[0] == BTN_TOOL_MOUSE) { 218 + wacom_report_key(wcombo, BTN_LEFT, 0); 219 + wacom_report_key(wcombo, BTN_RIGHT, 0); 220 + wacom_report_abs(wcombo, ABS_DISTANCE, 0); 221 + } else { 222 + wacom_report_abs(wcombo, ABS_PRESSURE, 0); 223 + wacom_report_key(wcombo, BTN_TOUCH, 0); 224 + wacom_report_key(wcombo, BTN_STYLUS, 0); 225 + wacom_report_key(wcombo, BTN_STYLUS2, 0); 226 + } 227 + wacom_report_abs(wcombo, ABS_MISC, 0); /* reset tool id */ 217 228 wacom_report_key(wcombo, wacom->tool[0], 0); 218 - wacom_input_sync(wcombo); 229 + } 219 230 220 231 /* send pad data */ 221 232 if (wacom->features->type == WACOM_G4) { 222 - if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) { 233 + if (data[7] & 0xf8) { 234 + wacom_input_sync(wcombo); /* sync last event */ 223 235 wacom->id[1] = 1; 224 236 wacom->serial[1] = (data[7] & 0xf8); 225 237 wacom_report_key(wcombo, BTN_0, (data[7] & 0x40)); ··· 236 230 rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3); 237 231 wacom_report_rel(wcombo, REL_WHEEL, rw); 238 232 wacom_report_key(wcombo, BTN_TOOL_FINGER, 0xf0); 233 + wacom_report_abs(wcombo, ABS_MISC, PAD_DEVICE_ID); 239 234 wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, 0xf0); 240 235 } else if (wacom->id[1]) { 236 + wacom_input_sync(wcombo); /* sync last event */ 241 237 wacom->id[1] = 0; 238 + wacom_report_key(wcombo, BTN_0, (data[7] & 0x40)); 239 + wacom_report_key(wcombo, BTN_4, (data[7] & 0x80)); 242 240 wacom_report_key(wcombo, BTN_TOOL_FINGER, 0); 241 + wacom_report_abs(wcombo, ABS_MISC, 0); 243 242 wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, 0xf0); 244 243 } 245 244 } ··· 315 304 default: /* Unknown tool */ 316 305 wacom->tool[idx] = BTN_TOOL_PEN; 317 306 } 318 - /* only large I3 support Lens Cursor */ 319 - if(!((wacom->tool[idx] == BTN_TOOL_LENS) 320 - && ((wacom->features->type == INTUOS3) 321 - || (wacom->features->type == INTUOS3S)))) { 322 - wacom_report_abs(wcombo, ABS_MISC, wacom->id[idx]); /* report tool id */ 323 - wacom_report_key(wcombo, wacom->tool[idx], 1); 324 - wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, wacom->serial[idx]); 325 - return 2; 326 - } 327 307 return 1; 328 308 } 329 309 330 310 /* Exit report */ 331 311 if ((data[1] & 0xfe) == 0x80) { 332 - if(!((wacom->tool[idx] == BTN_TOOL_LENS) 333 - && ((wacom->features->type == INTUOS3) 334 - || (wacom->features->type == INTUOS3S)))) { 335 - wacom_report_key(wcombo, wacom->tool[idx], 0); 336 - wacom_report_abs(wcombo, ABS_MISC, 0); /* reset tool id */ 337 - wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, wacom->serial[idx]); 338 - return 2; 312 + wacom_report_abs(wcombo, ABS_X, 0); 313 + wacom_report_abs(wcombo, ABS_Y, 0); 314 + wacom_report_abs(wcombo, ABS_DISTANCE, 0); 315 + if (wacom->tool[idx] >= BTN_TOOL_MOUSE) { 316 + wacom_report_key(wcombo, BTN_LEFT, 0); 317 + wacom_report_key(wcombo, BTN_MIDDLE, 0); 318 + wacom_report_key(wcombo, BTN_RIGHT, 0); 319 + wacom_report_key(wcombo, BTN_SIDE, 0); 320 + wacom_report_key(wcombo, BTN_EXTRA, 0); 321 + wacom_report_abs(wcombo, ABS_THROTTLE, 0); 322 + wacom_report_abs(wcombo, ABS_RZ, 0); 323 + } else { 324 + wacom_report_abs(wcombo, ABS_PRESSURE, 0); 325 + wacom_report_abs(wcombo, ABS_TILT_X, 0); 326 + wacom_report_abs(wcombo, ABS_TILT_Y, 0); 327 + wacom_report_key(wcombo, BTN_STYLUS, 0); 328 + wacom_report_key(wcombo, BTN_STYLUS2, 0); 329 + wacom_report_key(wcombo, BTN_TOUCH, 0); 330 + wacom_report_abs(wcombo, ABS_WHEEL, 0); 339 331 } 332 + wacom_report_key(wcombo, wacom->tool[idx], 0); 333 + wacom_report_abs(wcombo, ABS_MISC, 0); /* reset tool id */ 334 + wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, wacom->serial[idx]); 335 + return 2; 340 336 } 341 337 return 0; 342 338 } ··· 412 394 wacom_report_key(wcombo, wacom->tool[1], 1); 413 395 else 414 396 wacom_report_key(wcombo, wacom->tool[1], 0); 397 + wacom_report_abs(wcombo, ABS_MISC, PAD_DEVICE_ID); 415 398 wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, 0xffffffff); 416 399 return 1; 417 400 } ··· 421 402 result = wacom_intuos_inout(wacom, wcombo); 422 403 if (result) 423 404 return result-1; 405 + 406 + /* Only large I3 and I1 & I2 support Lense Cursor */ 407 + if((wacom->tool[idx] == BTN_TOOL_LENS) 408 + && ((wacom->features->type == INTUOS3) 409 + || (wacom->features->type == INTUOS3S))) 410 + return 0; 424 411 425 412 /* Cintiq doesn't send data when RDY bit isn't set */ 426 413 if ((wacom->features->type == CINTIQ) && !(data[1] & 0x40)) ··· 579 554 { "Wacom Volito2 4x5", 8, 5104, 3712, 511, 63, GRAPHIRE }, 580 555 { "Wacom Volito2 2x3", 8, 3248, 2320, 511, 63, GRAPHIRE }, 581 556 { "Wacom PenPartner2", 8, 3250, 2320, 255, 63, GRAPHIRE }, 582 - { "Wacom Intuos 4x5", 10, 12700, 10600, 1023, 63, INTUOS }, 583 - { "Wacom Intuos 6x8", 10, 20320, 16240, 1023, 63, INTUOS }, 584 - { "Wacom Intuos 9x12", 10, 30480, 24060, 1023, 63, INTUOS }, 585 - { "Wacom Intuos 12x12", 10, 30480, 31680, 1023, 63, INTUOS }, 586 - { "Wacom Intuos 12x18", 10, 45720, 31680, 1023, 63, INTUOS }, 557 + { "Wacom Intuos 4x5", 10, 12700, 10600, 1023, 31, INTUOS }, 558 + { "Wacom Intuos 6x8", 10, 20320, 16240, 1023, 31, INTUOS }, 559 + { "Wacom Intuos 9x12", 10, 30480, 24060, 1023, 31, INTUOS }, 560 + { "Wacom Intuos 12x12", 10, 30480, 31680, 1023, 31, INTUOS }, 561 + { "Wacom Intuos 12x18", 10, 45720, 31680, 1023, 31, INTUOS }, 587 562 { "Wacom PL400", 8, 5408, 4056, 255, 0, PL }, 588 563 { "Wacom PL500", 8, 6144, 4608, 255, 0, PL }, 589 564 { "Wacom PL600", 8, 6126, 4604, 255, 0, PL }, ··· 596 571 { "Wacom DTF521", 8, 6282, 4762, 511, 0, PL }, 597 572 { "Wacom DTF720", 8, 6858, 5506, 511, 0, PL }, 598 573 { "Wacom Cintiq Partner",8, 20480, 15360, 511, 0, PTU }, 599 - { "Wacom Intuos2 4x5", 10, 12700, 10600, 1023, 63, INTUOS }, 600 - { "Wacom Intuos2 6x8", 10, 20320, 16240, 1023, 63, INTUOS }, 601 - { "Wacom Intuos2 9x12", 10, 30480, 24060, 1023, 63, INTUOS }, 602 - { "Wacom Intuos2 12x12", 10, 30480, 31680, 1023, 63, INTUOS }, 603 - { "Wacom Intuos2 12x18", 10, 45720, 31680, 1023, 63, INTUOS }, 574 + { "Wacom Intuos2 4x5", 10, 12700, 10600, 1023, 31, INTUOS }, 575 + { "Wacom Intuos2 6x8", 10, 20320, 16240, 1023, 31, INTUOS }, 576 + { "Wacom Intuos2 9x12", 10, 30480, 24060, 1023, 31, INTUOS }, 577 + { "Wacom Intuos2 12x12", 10, 30480, 31680, 1023, 31, INTUOS }, 578 + { "Wacom Intuos2 12x18", 10, 45720, 31680, 1023, 31, INTUOS }, 604 579 { "Wacom Intuos3 4x5", 10, 25400, 20320, 1023, 63, INTUOS3S }, 605 580 { "Wacom Intuos3 6x8", 10, 40640, 30480, 1023, 63, INTUOS3 }, 606 581 { "Wacom Intuos3 9x12", 10, 60960, 45720, 1023, 63, INTUOS3 }, ··· 609 584 { "Wacom Intuos3 6x11", 10, 54204, 31750, 1023, 63, INTUOS3 }, 610 585 { "Wacom Intuos3 4x6", 10, 31496, 19685, 1023, 63, INTUOS3S }, 611 586 { "Wacom Cintiq 21UX", 10, 87200, 65600, 1023, 63, CINTIQ }, 612 - { "Wacom Intuos2 6x8", 10, 20320, 16240, 1023, 63, INTUOS }, 587 + { "Wacom Intuos2 6x8", 10, 20320, 16240, 1023, 31, INTUOS }, 613 588 { } 614 589 }; 615 590
+1
drivers/usb/input/wacom_wac.h
··· 12 12 #define STYLUS_DEVICE_ID 0x02 13 13 #define CURSOR_DEVICE_ID 0x06 14 14 #define ERASER_DEVICE_ID 0x0A 15 + #define PAD_DEVICE_ID 0x0F 15 16 16 17 enum { 17 18 PENPARTNER = 0,