diff options
Diffstat (limited to 'drivers/input/tablet/wacom_wac.c')
-rw-r--r-- | drivers/input/tablet/wacom_wac.c | 171 |
1 files changed, 131 insertions, 40 deletions
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c index 2638811c61ac..38bf86384aeb 100644 --- a/drivers/input/tablet/wacom_wac.c +++ b/drivers/input/tablet/wacom_wac.c | |||
@@ -283,10 +283,11 @@ static int wacom_graphire_irq(struct wacom_wac *wacom, void *wcombo) | |||
283 | static int wacom_intuos_inout(struct wacom_wac *wacom, void *wcombo) | 283 | static int wacom_intuos_inout(struct wacom_wac *wacom, void *wcombo) |
284 | { | 284 | { |
285 | unsigned char *data = wacom->data; | 285 | unsigned char *data = wacom->data; |
286 | int idx; | 286 | int idx = 0; |
287 | 287 | ||
288 | /* tool number */ | 288 | /* tool number */ |
289 | idx = data[1] & 0x01; | 289 | if (wacom->features->type == INTUOS) |
290 | idx = data[1] & 0x01; | ||
290 | 291 | ||
291 | /* Enter report */ | 292 | /* Enter report */ |
292 | if ((data[1] & 0xfc) == 0xc0) { | 293 | if ((data[1] & 0xfc) == 0xc0) { |
@@ -299,6 +300,7 @@ static int wacom_intuos_inout(struct wacom_wac *wacom, void *wcombo) | |||
299 | switch (wacom->id[idx]) { | 300 | switch (wacom->id[idx]) { |
300 | case 0x812: /* Inking pen */ | 301 | case 0x812: /* Inking pen */ |
301 | case 0x801: /* Intuos3 Inking pen */ | 302 | case 0x801: /* Intuos3 Inking pen */ |
303 | case 0x20802: /* Intuos4 Classic Pen */ | ||
302 | case 0x012: | 304 | case 0x012: |
303 | wacom->tool[idx] = BTN_TOOL_PENCIL; | 305 | wacom->tool[idx] = BTN_TOOL_PENCIL; |
304 | break; | 306 | break; |
@@ -308,6 +310,9 @@ static int wacom_intuos_inout(struct wacom_wac *wacom, void *wcombo) | |||
308 | case 0x823: /* Intuos3 Grip Pen */ | 310 | case 0x823: /* Intuos3 Grip Pen */ |
309 | case 0x813: /* Intuos3 Classic Pen */ | 311 | case 0x813: /* Intuos3 Classic Pen */ |
310 | case 0x885: /* Intuos3 Marker Pen */ | 312 | case 0x885: /* Intuos3 Marker Pen */ |
313 | case 0x802: /* Intuos4 Grip Pen Eraser */ | ||
314 | case 0x804: /* Intuos4 Marker Pen */ | ||
315 | case 0x40802: /* Intuos4 Classic Pen */ | ||
311 | case 0x022: | 316 | case 0x022: |
312 | wacom->tool[idx] = BTN_TOOL_PEN; | 317 | wacom->tool[idx] = BTN_TOOL_PEN; |
313 | break; | 318 | break; |
@@ -319,10 +324,12 @@ static int wacom_intuos_inout(struct wacom_wac *wacom, void *wcombo) | |||
319 | case 0x09c: | 324 | case 0x09c: |
320 | case 0x094: | 325 | case 0x094: |
321 | case 0x017: /* Intuos3 2D Mouse */ | 326 | case 0x017: /* Intuos3 2D Mouse */ |
327 | case 0x806: /* Intuos4 Mouse */ | ||
322 | wacom->tool[idx] = BTN_TOOL_MOUSE; | 328 | wacom->tool[idx] = BTN_TOOL_MOUSE; |
323 | break; | 329 | break; |
324 | case 0x096: /* Lens cursor */ | 330 | case 0x096: /* Lens cursor */ |
325 | case 0x097: /* Intuos3 Lens cursor */ | 331 | case 0x097: /* Intuos3 Lens cursor */ |
332 | case 0x006: /* Intuos4 Lens cursor */ | ||
326 | wacom->tool[idx] = BTN_TOOL_LENS; | 333 | wacom->tool[idx] = BTN_TOOL_LENS; |
327 | break; | 334 | break; |
328 | case 0x82a: /* Eraser */ | 335 | case 0x82a: /* Eraser */ |
@@ -333,12 +340,17 @@ static int wacom_intuos_inout(struct wacom_wac *wacom, void *wcombo) | |||
333 | case 0x82b: /* Intuos3 Grip Pen Eraser */ | 340 | case 0x82b: /* Intuos3 Grip Pen Eraser */ |
334 | case 0x81b: /* Intuos3 Classic Pen Eraser */ | 341 | case 0x81b: /* Intuos3 Classic Pen Eraser */ |
335 | case 0x91b: /* Intuos3 Airbrush Eraser */ | 342 | case 0x91b: /* Intuos3 Airbrush Eraser */ |
343 | case 0x80c: /* Intuos4 Marker Pen Eraser */ | ||
344 | case 0x80a: /* Intuos4 Grip Pen Eraser */ | ||
345 | case 0x4080a: /* Intuos4 Classic Pen Eraser */ | ||
346 | case 0x90a: /* Intuos4 Airbrush Eraser */ | ||
336 | wacom->tool[idx] = BTN_TOOL_RUBBER; | 347 | wacom->tool[idx] = BTN_TOOL_RUBBER; |
337 | break; | 348 | break; |
338 | case 0xd12: | 349 | case 0xd12: |
339 | case 0x912: | 350 | case 0x912: |
340 | case 0x112: | 351 | case 0x112: |
341 | case 0x913: /* Intuos3 Airbrush */ | 352 | case 0x913: /* Intuos3 Airbrush */ |
353 | case 0x902: /* Intuos4 Airbrush */ | ||
342 | wacom->tool[idx] = BTN_TOOL_AIRBRUSH; | 354 | wacom->tool[idx] = BTN_TOOL_AIRBRUSH; |
343 | break; | 355 | break; |
344 | default: /* Unknown tool */ | 356 | default: /* Unknown tool */ |
@@ -349,9 +361,15 @@ static int wacom_intuos_inout(struct wacom_wac *wacom, void *wcombo) | |||
349 | 361 | ||
350 | /* Exit report */ | 362 | /* Exit report */ |
351 | if ((data[1] & 0xfe) == 0x80) { | 363 | if ((data[1] & 0xfe) == 0x80) { |
364 | /* | ||
365 | * Reset all states otherwise we lose the initial states | ||
366 | * when in-prox next time | ||
367 | */ | ||
352 | wacom_report_abs(wcombo, ABS_X, 0); | 368 | wacom_report_abs(wcombo, ABS_X, 0); |
353 | wacom_report_abs(wcombo, ABS_Y, 0); | 369 | wacom_report_abs(wcombo, ABS_Y, 0); |
354 | wacom_report_abs(wcombo, ABS_DISTANCE, 0); | 370 | wacom_report_abs(wcombo, ABS_DISTANCE, 0); |
371 | wacom_report_abs(wcombo, ABS_TILT_X, 0); | ||
372 | wacom_report_abs(wcombo, ABS_TILT_Y, 0); | ||
355 | if (wacom->tool[idx] >= BTN_TOOL_MOUSE) { | 373 | if (wacom->tool[idx] >= BTN_TOOL_MOUSE) { |
356 | wacom_report_key(wcombo, BTN_LEFT, 0); | 374 | wacom_report_key(wcombo, BTN_LEFT, 0); |
357 | wacom_report_key(wcombo, BTN_MIDDLE, 0); | 375 | wacom_report_key(wcombo, BTN_MIDDLE, 0); |
@@ -362,8 +380,6 @@ static int wacom_intuos_inout(struct wacom_wac *wacom, void *wcombo) | |||
362 | wacom_report_abs(wcombo, ABS_RZ, 0); | 380 | wacom_report_abs(wcombo, ABS_RZ, 0); |
363 | } else { | 381 | } else { |
364 | wacom_report_abs(wcombo, ABS_PRESSURE, 0); | 382 | wacom_report_abs(wcombo, ABS_PRESSURE, 0); |
365 | wacom_report_abs(wcombo, ABS_TILT_X, 0); | ||
366 | wacom_report_abs(wcombo, ABS_TILT_Y, 0); | ||
367 | wacom_report_key(wcombo, BTN_STYLUS, 0); | 383 | wacom_report_key(wcombo, BTN_STYLUS, 0); |
368 | wacom_report_key(wcombo, BTN_STYLUS2, 0); | 384 | wacom_report_key(wcombo, BTN_STYLUS2, 0); |
369 | wacom_report_key(wcombo, BTN_TOUCH, 0); | 385 | wacom_report_key(wcombo, BTN_TOUCH, 0); |
@@ -372,6 +388,7 @@ static int wacom_intuos_inout(struct wacom_wac *wacom, void *wcombo) | |||
372 | wacom_report_key(wcombo, wacom->tool[idx], 0); | 388 | wacom_report_key(wcombo, wacom->tool[idx], 0); |
373 | wacom_report_abs(wcombo, ABS_MISC, 0); /* reset tool id */ | 389 | wacom_report_abs(wcombo, ABS_MISC, 0); /* reset tool id */ |
374 | wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, wacom->serial[idx]); | 390 | wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, wacom->serial[idx]); |
391 | wacom->id[idx] = 0; | ||
375 | return 2; | 392 | return 2; |
376 | } | 393 | } |
377 | return 0; | 394 | return 0; |
@@ -385,6 +402,8 @@ static void wacom_intuos_general(struct wacom_wac *wacom, void *wcombo) | |||
385 | /* general pen packet */ | 402 | /* general pen packet */ |
386 | if ((data[1] & 0xb8) == 0xa0) { | 403 | if ((data[1] & 0xb8) == 0xa0) { |
387 | t = (data[6] << 2) | ((data[7] >> 6) & 3); | 404 | t = (data[6] << 2) | ((data[7] >> 6) & 3); |
405 | if (wacom->features->type >= INTUOS4S && wacom->features->type <= INTUOS4L) | ||
406 | t = (t << 1) | (data[1] & 1); | ||
388 | wacom_report_abs(wcombo, ABS_PRESSURE, t); | 407 | wacom_report_abs(wcombo, ABS_PRESSURE, t); |
389 | wacom_report_abs(wcombo, ABS_TILT_X, | 408 | wacom_report_abs(wcombo, ABS_TILT_X, |
390 | ((data[7] << 1) & 0x7e) | (data[8] >> 7)); | 409 | ((data[7] << 1) & 0x7e) | (data[8] >> 7)); |
@@ -409,7 +428,7 @@ static int wacom_intuos_irq(struct wacom_wac *wacom, void *wcombo) | |||
409 | { | 428 | { |
410 | unsigned char *data = wacom->data; | 429 | unsigned char *data = wacom->data; |
411 | unsigned int t; | 430 | unsigned int t; |
412 | int idx, result; | 431 | int idx = 0, result; |
413 | 432 | ||
414 | if (data[0] != 2 && data[0] != 5 && data[0] != 6 && data[0] != 12) { | 433 | if (data[0] != 2 && data[0] != 5 && data[0] != 6 && data[0] != 12) { |
415 | dbg("wacom_intuos_irq: received unknown report #%d", data[0]); | 434 | dbg("wacom_intuos_irq: received unknown report #%d", data[0]); |
@@ -417,7 +436,8 @@ static int wacom_intuos_irq(struct wacom_wac *wacom, void *wcombo) | |||
417 | } | 436 | } |
418 | 437 | ||
419 | /* tool number */ | 438 | /* tool number */ |
420 | idx = data[1] & 0x01; | 439 | if (wacom->features->type == INTUOS) |
440 | idx = data[1] & 0x01; | ||
421 | 441 | ||
422 | /* pad packets. Works as a second tool and is always in prox */ | 442 | /* pad packets. Works as a second tool and is always in prox */ |
423 | if (data[0] == 12) { | 443 | if (data[0] == 12) { |
@@ -425,25 +445,54 @@ static int wacom_intuos_irq(struct wacom_wac *wacom, void *wcombo) | |||
425 | if (wacom->tool[1] != BTN_TOOL_FINGER) | 445 | if (wacom->tool[1] != BTN_TOOL_FINGER) |
426 | wacom->tool[1] = BTN_TOOL_FINGER; | 446 | wacom->tool[1] = BTN_TOOL_FINGER; |
427 | 447 | ||
428 | wacom_report_key(wcombo, BTN_0, (data[5] & 0x01)); | 448 | if (wacom->features->type >= INTUOS4S && wacom->features->type <= INTUOS4L) { |
429 | wacom_report_key(wcombo, BTN_1, (data[5] & 0x02)); | 449 | wacom_report_key(wcombo, BTN_0, (data[2] & 0x01)); |
430 | wacom_report_key(wcombo, BTN_2, (data[5] & 0x04)); | 450 | wacom_report_key(wcombo, BTN_1, (data[3] & 0x01)); |
431 | wacom_report_key(wcombo, BTN_3, (data[5] & 0x08)); | 451 | wacom_report_key(wcombo, BTN_2, (data[3] & 0x02)); |
432 | wacom_report_key(wcombo, BTN_4, (data[6] & 0x01)); | 452 | wacom_report_key(wcombo, BTN_3, (data[3] & 0x04)); |
433 | wacom_report_key(wcombo, BTN_5, (data[6] & 0x02)); | 453 | wacom_report_key(wcombo, BTN_4, (data[3] & 0x08)); |
434 | wacom_report_key(wcombo, BTN_6, (data[6] & 0x04)); | 454 | wacom_report_key(wcombo, BTN_5, (data[3] & 0x10)); |
435 | wacom_report_key(wcombo, BTN_7, (data[6] & 0x08)); | 455 | wacom_report_key(wcombo, BTN_6, (data[3] & 0x20)); |
436 | wacom_report_key(wcombo, BTN_8, (data[5] & 0x10)); | 456 | if (data[1] & 0x80) { |
437 | wacom_report_key(wcombo, BTN_9, (data[6] & 0x10)); | 457 | wacom_report_abs(wcombo, ABS_WHEEL, (data[1] & 0x7f)); |
438 | wacom_report_abs(wcombo, ABS_RX, ((data[1] & 0x1f) << 8) | data[2]); | 458 | } else { |
439 | wacom_report_abs(wcombo, ABS_RY, ((data[3] & 0x1f) << 8) | data[4]); | 459 | /* Out of proximity, clear wheel value. */ |
440 | 460 | wacom_report_abs(wcombo, ABS_WHEEL, 0); | |
441 | if ((data[5] & 0x1f) | (data[6] & 0x1f) | (data[1] & 0x1f) | | 461 | } |
442 | data[2] | (data[3] & 0x1f) | data[4]) | 462 | if (wacom->features->type != INTUOS4S) { |
443 | wacom_report_key(wcombo, wacom->tool[1], 1); | 463 | wacom_report_key(wcombo, BTN_7, (data[3] & 0x40)); |
444 | else | 464 | wacom_report_key(wcombo, BTN_8, (data[3] & 0x80)); |
445 | wacom_report_key(wcombo, wacom->tool[1], 0); | 465 | } |
446 | wacom_report_abs(wcombo, ABS_MISC, PAD_DEVICE_ID); | 466 | if (data[1] | (data[2] & 0x01) | data[3]) { |
467 | wacom_report_key(wcombo, wacom->tool[1], 1); | ||
468 | wacom_report_abs(wcombo, ABS_MISC, PAD_DEVICE_ID); | ||
469 | } else { | ||
470 | wacom_report_key(wcombo, wacom->tool[1], 0); | ||
471 | wacom_report_abs(wcombo, ABS_MISC, 0); | ||
472 | } | ||
473 | } else { | ||
474 | wacom_report_key(wcombo, BTN_0, (data[5] & 0x01)); | ||
475 | wacom_report_key(wcombo, BTN_1, (data[5] & 0x02)); | ||
476 | wacom_report_key(wcombo, BTN_2, (data[5] & 0x04)); | ||
477 | wacom_report_key(wcombo, BTN_3, (data[5] & 0x08)); | ||
478 | wacom_report_key(wcombo, BTN_4, (data[6] & 0x01)); | ||
479 | wacom_report_key(wcombo, BTN_5, (data[6] & 0x02)); | ||
480 | wacom_report_key(wcombo, BTN_6, (data[6] & 0x04)); | ||
481 | wacom_report_key(wcombo, BTN_7, (data[6] & 0x08)); | ||
482 | wacom_report_key(wcombo, BTN_8, (data[5] & 0x10)); | ||
483 | wacom_report_key(wcombo, BTN_9, (data[6] & 0x10)); | ||
484 | wacom_report_abs(wcombo, ABS_RX, ((data[1] & 0x1f) << 8) | data[2]); | ||
485 | wacom_report_abs(wcombo, ABS_RY, ((data[3] & 0x1f) << 8) | data[4]); | ||
486 | |||
487 | if ((data[5] & 0x1f) | (data[6] & 0x1f) | (data[1] & 0x1f) | | ||
488 | data[2] | (data[3] & 0x1f) | data[4]) { | ||
489 | wacom_report_key(wcombo, wacom->tool[1], 1); | ||
490 | wacom_report_abs(wcombo, ABS_MISC, PAD_DEVICE_ID); | ||
491 | } else { | ||
492 | wacom_report_key(wcombo, wacom->tool[1], 0); | ||
493 | wacom_report_abs(wcombo, ABS_MISC, 0); | ||
494 | } | ||
495 | } | ||
447 | wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, 0xffffffff); | 496 | wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, 0xffffffff); |
448 | return 1; | 497 | return 1; |
449 | } | 498 | } |
@@ -453,10 +502,16 @@ static int wacom_intuos_irq(struct wacom_wac *wacom, void *wcombo) | |||
453 | if (result) | 502 | if (result) |
454 | return result-1; | 503 | return result-1; |
455 | 504 | ||
456 | /* Only large I3 and I1 & I2 support Lense Cursor */ | 505 | /* don't proceed if we don't know the ID */ |
506 | if (!wacom->id[idx]) | ||
507 | return 0; | ||
508 | |||
509 | /* Only large Intuos support Lense Cursor */ | ||
457 | if ((wacom->tool[idx] == BTN_TOOL_LENS) | 510 | if ((wacom->tool[idx] == BTN_TOOL_LENS) |
458 | && ((wacom->features->type == INTUOS3) | 511 | && ((wacom->features->type == INTUOS3) |
459 | || (wacom->features->type == INTUOS3S))) | 512 | || (wacom->features->type == INTUOS3S) |
513 | || (wacom->features->type == INTUOS4) | ||
514 | || (wacom->features->type == INTUOS4S))) | ||
460 | return 0; | 515 | return 0; |
461 | 516 | ||
462 | /* Cintiq doesn't send data when RDY bit isn't set */ | 517 | /* Cintiq doesn't send data when RDY bit isn't set */ |
@@ -476,8 +531,8 @@ static int wacom_intuos_irq(struct wacom_wac *wacom, void *wcombo) | |||
476 | /* process general packets */ | 531 | /* process general packets */ |
477 | wacom_intuos_general(wacom, wcombo); | 532 | wacom_intuos_general(wacom, wcombo); |
478 | 533 | ||
479 | /* 4D mouse, 2D mouse, marker pen rotation, or Lens cursor packets */ | 534 | /* 4D mouse, 2D mouse, marker pen rotation, tilt mouse, or Lens cursor packets */ |
480 | if ((data[1] & 0xbc) == 0xa8 || (data[1] & 0xbe) == 0xb0) { | 535 | if ((data[1] & 0xbc) == 0xa8 || (data[1] & 0xbe) == 0xb0 || (data[1] & 0xbc) == 0xac) { |
481 | 536 | ||
482 | if (data[1] & 0x02) { | 537 | if (data[1] & 0x02) { |
483 | /* Rotation packet */ | 538 | /* Rotation packet */ |
@@ -506,20 +561,36 @@ static int wacom_intuos_irq(struct wacom_wac *wacom, void *wcombo) | |||
506 | wacom_report_abs(wcombo, ABS_THROTTLE, (data[8] & 0x08) ? -t : t); | 561 | wacom_report_abs(wcombo, ABS_THROTTLE, (data[8] & 0x08) ? -t : t); |
507 | 562 | ||
508 | } else if (wacom->tool[idx] == BTN_TOOL_MOUSE) { | 563 | } else if (wacom->tool[idx] == BTN_TOOL_MOUSE) { |
509 | /* 2D mouse packet */ | 564 | /* I4 mouse */ |
510 | wacom_report_key(wcombo, BTN_LEFT, data[8] & 0x04); | 565 | if (wacom->features->type >= INTUOS4S && wacom->features->type <= INTUOS4L) { |
511 | wacom_report_key(wcombo, BTN_MIDDLE, data[8] & 0x08); | 566 | wacom_report_key(wcombo, BTN_LEFT, data[6] & 0x01); |
512 | wacom_report_key(wcombo, BTN_RIGHT, data[8] & 0x10); | 567 | wacom_report_key(wcombo, BTN_MIDDLE, data[6] & 0x02); |
513 | wacom_report_rel(wcombo, REL_WHEEL, (data[8] & 0x01) | 568 | wacom_report_key(wcombo, BTN_RIGHT, data[6] & 0x04); |
569 | wacom_report_rel(wcombo, REL_WHEEL, ((data[7] & 0x80) >> 7) | ||
570 | - ((data[7] & 0x40) >> 6)); | ||
571 | wacom_report_key(wcombo, BTN_SIDE, data[6] & 0x08); | ||
572 | wacom_report_key(wcombo, BTN_EXTRA, data[6] & 0x10); | ||
573 | |||
574 | wacom_report_abs(wcombo, ABS_TILT_X, | ||
575 | ((data[7] << 1) & 0x7e) | (data[8] >> 7)); | ||
576 | wacom_report_abs(wcombo, ABS_TILT_Y, data[8] & 0x7f); | ||
577 | } else { | ||
578 | /* 2D mouse packet */ | ||
579 | wacom_report_key(wcombo, BTN_LEFT, data[8] & 0x04); | ||
580 | wacom_report_key(wcombo, BTN_MIDDLE, data[8] & 0x08); | ||
581 | wacom_report_key(wcombo, BTN_RIGHT, data[8] & 0x10); | ||
582 | wacom_report_rel(wcombo, REL_WHEEL, (data[8] & 0x01) | ||
514 | - ((data[8] & 0x02) >> 1)); | 583 | - ((data[8] & 0x02) >> 1)); |
515 | 584 | ||
516 | /* I3 2D mouse side buttons */ | 585 | /* I3 2D mouse side buttons */ |
517 | if (wacom->features->type >= INTUOS3S && wacom->features->type <= INTUOS3L) { | 586 | if (wacom->features->type >= INTUOS3S && wacom->features->type <= INTUOS3L) { |
518 | wacom_report_key(wcombo, BTN_SIDE, data[8] & 0x40); | 587 | wacom_report_key(wcombo, BTN_SIDE, data[8] & 0x40); |
519 | wacom_report_key(wcombo, BTN_EXTRA, data[8] & 0x20); | 588 | wacom_report_key(wcombo, BTN_EXTRA, data[8] & 0x20); |
589 | } | ||
520 | } | 590 | } |
521 | 591 | } else if ((wacom->features->type < INTUOS3S || wacom->features->type == INTUOS3L || | |
522 | } else if (wacom->features->type < INTUOS3S || wacom->features->type == INTUOS3L) { | 592 | wacom->features->type == INTUOS4L) && |
593 | wacom->tool[idx] == BTN_TOOL_LENS) { | ||
523 | /* Lens cursor packets */ | 594 | /* Lens cursor packets */ |
524 | wacom_report_key(wcombo, BTN_LEFT, data[8] & 0x01); | 595 | wacom_report_key(wcombo, BTN_LEFT, data[8] & 0x01); |
525 | wacom_report_key(wcombo, BTN_MIDDLE, data[8] & 0x02); | 596 | wacom_report_key(wcombo, BTN_MIDDLE, data[8] & 0x02); |
@@ -581,6 +652,7 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, void *wcombo) | |||
581 | } | 652 | } |
582 | } else if (touchOut || !prox) { /* force touch out-prox */ | 653 | } else if (touchOut || !prox) { /* force touch out-prox */ |
583 | wacom_report_abs(wcombo, ABS_MISC, TOUCH_DEVICE_ID); | 654 | wacom_report_abs(wcombo, ABS_MISC, TOUCH_DEVICE_ID); |
655 | wacom_report_key(wcombo, wacom->tool[1], 0); | ||
584 | wacom_report_key(wcombo, BTN_TOUCH, 0); | 656 | wacom_report_key(wcombo, BTN_TOUCH, 0); |
585 | touchOut = 0; | 657 | touchOut = 0; |
586 | touchInProx = 1; | 658 | touchInProx = 1; |
@@ -669,6 +741,9 @@ int wacom_wac_irq(struct wacom_wac *wacom_wac, void *wcombo) | |||
669 | case INTUOS3S: | 741 | case INTUOS3S: |
670 | case INTUOS3: | 742 | case INTUOS3: |
671 | case INTUOS3L: | 743 | case INTUOS3L: |
744 | case INTUOS4S: | ||
745 | case INTUOS4: | ||
746 | case INTUOS4L: | ||
672 | case CINTIQ: | 747 | case CINTIQ: |
673 | case WACOM_BEE: | 748 | case WACOM_BEE: |
674 | return wacom_intuos_irq(wacom_wac, wcombo); | 749 | return wacom_intuos_irq(wacom_wac, wcombo); |
@@ -706,6 +781,14 @@ void wacom_init_input_dev(struct input_dev *input_dev, struct wacom_wac *wacom_w | |||
706 | case INTUOS: | 781 | case INTUOS: |
707 | input_dev_i(input_dev, wacom_wac); | 782 | input_dev_i(input_dev, wacom_wac); |
708 | break; | 783 | break; |
784 | case INTUOS4: | ||
785 | case INTUOS4L: | ||
786 | input_dev_i4(input_dev, wacom_wac); | ||
787 | /* fall through */ | ||
788 | case INTUOS4S: | ||
789 | input_dev_i4s(input_dev, wacom_wac); | ||
790 | input_dev_i(input_dev, wacom_wac); | ||
791 | break; | ||
709 | case PL: | 792 | case PL: |
710 | case PTU: | 793 | case PTU: |
711 | case TABLETPC: | 794 | case TABLETPC: |
@@ -766,6 +849,10 @@ static struct wacom_features wacom_features[] = { | |||
766 | { "Wacom Intuos3 12x19", 10, 97536, 60960, 1023, 63, INTUOS3L }, | 849 | { "Wacom Intuos3 12x19", 10, 97536, 60960, 1023, 63, INTUOS3L }, |
767 | { "Wacom Intuos3 6x11", 10, 54204, 31750, 1023, 63, INTUOS3 }, | 850 | { "Wacom Intuos3 6x11", 10, 54204, 31750, 1023, 63, INTUOS3 }, |
768 | { "Wacom Intuos3 4x6", 10, 31496, 19685, 1023, 63, INTUOS3S }, | 851 | { "Wacom Intuos3 4x6", 10, 31496, 19685, 1023, 63, INTUOS3S }, |
852 | { "Wacom Intuos4 4x6", 10, 31496, 19685, 2047, 63, INTUOS4S }, | ||
853 | { "Wacom Intuos4 6x9", 10, 44704, 27940, 2047, 63, INTUOS4 }, | ||
854 | { "Wacom Intuos4 8x13", 10, 65024, 40640, 2047, 63, INTUOS4L }, | ||
855 | { "Wacom Intuos4 12x19", 10, 97536, 60960, 2047, 63, INTUOS4L }, | ||
769 | { "Wacom Cintiq 21UX", 10, 87200, 65600, 1023, 63, CINTIQ }, | 856 | { "Wacom Cintiq 21UX", 10, 87200, 65600, 1023, 63, CINTIQ }, |
770 | { "Wacom Cintiq 20WSX", 10, 86680, 54180, 1023, 63, WACOM_BEE }, | 857 | { "Wacom Cintiq 20WSX", 10, 86680, 54180, 1023, 63, WACOM_BEE }, |
771 | { "Wacom Cintiq 12WX", 10, 53020, 33440, 1023, 63, WACOM_BEE }, | 858 | { "Wacom Cintiq 12WX", 10, 53020, 33440, 1023, 63, WACOM_BEE }, |
@@ -825,6 +912,10 @@ static struct usb_device_id wacom_ids[] = { | |||
825 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB4) }, | 912 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB4) }, |
826 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB5) }, | 913 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB5) }, |
827 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB7) }, | 914 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB7) }, |
915 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB8) }, | ||
916 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB9) }, | ||
917 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xBA) }, | ||
918 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xBB) }, | ||
828 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x3F) }, | 919 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x3F) }, |
829 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC5) }, | 920 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC5) }, |
830 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC6) }, | 921 | { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC6) }, |