1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Apple USB Touchpad (for post-February 2005 PowerBooks and MacBooks) driver 4 * 5 * Copyright (C) 2001-2004 Greg Kroah-Hartman (greg@kroah.com) 6 * Copyright (C) 2005-2008 Johannes Berg (johannes@sipsolutions.net) 7 * Copyright (C) 2005-2008 Stelian Pop (stelian@popies.net) 8 * Copyright (C) 2005 Frank Arnold (frank@scirocco-5v-turbo.de) 9 * Copyright (C) 2005 Peter Osterlund (petero2@telia.com) 10 * Copyright (C) 2005 Michael Hanselmann (linux-kernel@hansmi.ch) 11 * Copyright (C) 2006 Nicolas Boichat (nicolas@boichat.ch) 12 * Copyright (C) 2007-2008 Sven Anders (anders@anduras.de) 13 * 14 * Thanks to Alex Harper <basilisk@foobox.net> for his inputs. 15 */ 16 17 #include <linux/kernel.h> 18 #include <linux/errno.h> 19 #include <linux/slab.h> 20 #include <linux/module.h> 21 #include <linux/usb/input.h> 22 23 /* 24 * Note: We try to keep the touchpad aspect ratio while still doing only 25 * simple arithmetics: 26 * 0 <= x <= (xsensors - 1) * xfact 27 * 0 <= y <= (ysensors - 1) * yfact 28 */ 29 struct atp_info { 30 int xsensors; /* number of X sensors */ 31 int xsensors_17; /* 17" models have more sensors */ 32 int ysensors; /* number of Y sensors */ 33 int xfact; /* X multiplication factor */ 34 int yfact; /* Y multiplication factor */ 35 int datalen; /* size of USB transfers */ 36 void (*callback)(struct urb *); /* callback function */ 37 int fuzz; /* fuzz touchpad generates */ 38 }; 39 40 static void atp_complete_geyser_1_2(struct urb *urb); 41 static void atp_complete_geyser_3_4(struct urb *urb); 42 43 static const struct atp_info fountain_info = { 44 .xsensors = 16, 45 .xsensors_17 = 26, 46 .ysensors = 16, 47 .xfact = 64, 48 .yfact = 43, 49 .datalen = 81, 50 .callback = atp_complete_geyser_1_2, 51 .fuzz = 16, 52 }; 53 54 static const struct atp_info geyser1_info = { 55 .xsensors = 16, 56 .xsensors_17 = 26, 57 .ysensors = 16, 58 .xfact = 64, 59 .yfact = 43, 60 .datalen = 81, 61 .callback = atp_complete_geyser_1_2, 62 .fuzz = 16, 63 }; 64 65 static const struct atp_info geyser2_info = { 66 .xsensors = 15, 67 .xsensors_17 = 20, 68 .ysensors = 9, 69 .xfact = 64, 70 .yfact = 43, 71 .datalen = 64, 72 .callback = atp_complete_geyser_1_2, 73 .fuzz = 0, 74 }; 75 76 static const struct atp_info geyser3_info = { 77 .xsensors = 20, 78 .ysensors = 10, 79 .xfact = 64, 80 .yfact = 64, 81 .datalen = 64, 82 .callback = atp_complete_geyser_3_4, 83 .fuzz = 0, 84 }; 85 86 static const struct atp_info geyser4_info = { 87 .xsensors = 20, 88 .ysensors = 10, 89 .xfact = 64, 90 .yfact = 64, 91 .datalen = 64, 92 .callback = atp_complete_geyser_3_4, 93 .fuzz = 0, 94 }; 95 96 #define ATP_DEVICE(prod, info) \ 97 { \ 98 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \ 99 USB_DEVICE_ID_MATCH_INT_CLASS | \ 100 USB_DEVICE_ID_MATCH_INT_PROTOCOL, \ 101 .idVendor = 0x05ac, /* Apple */ \ 102 .idProduct = (prod), \ 103 .bInterfaceClass = 0x03, \ 104 .bInterfaceProtocol = 0x02, \ 105 .driver_info = (unsigned long) &info, \ 106 } 107 108 /* 109 * Table of devices (Product IDs) that work with this driver. 110 * (The names come from Info.plist in AppleUSBTrackpad.kext, 111 * According to Info.plist Geyser IV is the same as Geyser III.) 112 */ 113 114 static const struct usb_device_id atp_table[] = { 115 /* PowerBooks Feb 2005, iBooks G4 */ 116 ATP_DEVICE(0x020e, fountain_info), /* FOUNTAIN ANSI */ 117 ATP_DEVICE(0x020f, fountain_info), /* FOUNTAIN ISO */ 118 ATP_DEVICE(0x030a, fountain_info), /* FOUNTAIN TP ONLY */ 119 ATP_DEVICE(0x030b, geyser1_info), /* GEYSER 1 TP ONLY */ 120 121 /* PowerBooks Oct 2005 */ 122 ATP_DEVICE(0x0214, geyser2_info), /* GEYSER 2 ANSI */ 123 ATP_DEVICE(0x0215, geyser2_info), /* GEYSER 2 ISO */ 124 ATP_DEVICE(0x0216, geyser2_info), /* GEYSER 2 JIS */ 125 126 /* Core Duo MacBook & MacBook Pro */ 127 ATP_DEVICE(0x0217, geyser3_info), /* GEYSER 3 ANSI */ 128 ATP_DEVICE(0x0218, geyser3_info), /* GEYSER 3 ISO */ 129 ATP_DEVICE(0x0219, geyser3_info), /* GEYSER 3 JIS */ 130 131 /* Core2 Duo MacBook & MacBook Pro */ 132 ATP_DEVICE(0x021a, geyser4_info), /* GEYSER 4 ANSI */ 133 ATP_DEVICE(0x021b, geyser4_info), /* GEYSER 4 ISO */ 134 ATP_DEVICE(0x021c, geyser4_info), /* GEYSER 4 JIS */ 135 136 /* Core2 Duo MacBook3,1 */ 137 ATP_DEVICE(0x0229, geyser4_info), /* GEYSER 4 HF ANSI */ 138 ATP_DEVICE(0x022a, geyser4_info), /* GEYSER 4 HF ISO */ 139 ATP_DEVICE(0x022b, geyser4_info), /* GEYSER 4 HF JIS */ 140 141 /* Terminating entry */ 142 { } 143 }; 144 MODULE_DEVICE_TABLE(usb, atp_table); 145 146 /* maximum number of sensors */ 147 #define ATP_XSENSORS 26 148 #define ATP_YSENSORS 16 149 150 /* 151 * The largest possible bank of sensors with additional buffer of 4 extra values 152 * on either side, for an array of smoothed sensor values. 153 */ 154 #define ATP_SMOOTHSIZE 34 155 156 /* maximum pressure this driver will report */ 157 #define ATP_PRESSURE 300 158 159 /* 160 * Threshold for the touchpad sensors. Any change less than ATP_THRESHOLD is 161 * ignored. 162 */ 163 #define ATP_THRESHOLD 5 164 165 /* 166 * How far we'll bitshift our sensor values before averaging them. Mitigates 167 * rounding errors. 168 */ 169 #define ATP_SCALE 12 170 171 /* Geyser initialization constants */ 172 #define ATP_GEYSER_MODE_READ_REQUEST_ID 1 173 #define ATP_GEYSER_MODE_WRITE_REQUEST_ID 9 174 #define ATP_GEYSER_MODE_REQUEST_VALUE 0x300 175 #define ATP_GEYSER_MODE_REQUEST_INDEX 0 176 #define ATP_GEYSER_MODE_VENDOR_VALUE 0x04 177 178 /** 179 * enum atp_status_bits - status bit meanings 180 * 181 * These constants represent the meaning of the status bits. 182 * (only Geyser 3/4) 183 * 184 * @ATP_STATUS_BUTTON: The button was pressed 185 * @ATP_STATUS_BASE_UPDATE: Update of the base values (untouched pad) 186 * @ATP_STATUS_FROM_RESET: Reset previously performed 187 */ 188 enum atp_status_bits { 189 ATP_STATUS_BUTTON = BIT(0), 190 ATP_STATUS_BASE_UPDATE = BIT(2), 191 ATP_STATUS_FROM_RESET = BIT(4), 192 }; 193 194 /* Structure to hold all of our device specific stuff */ 195 struct atp { 196 char phys[64]; 197 struct usb_device *udev; /* usb device */ 198 struct usb_interface *intf; /* usb interface */ 199 struct urb *urb; /* usb request block */ 200 u8 *data; /* transferred data */ 201 struct input_dev *input; /* input dev */ 202 const struct atp_info *info; /* touchpad model */ 203 bool valid; /* are the samples valid? */ 204 bool size_detect_done; 205 bool overflow_warned; 206 int fingers_old; /* last reported finger count */ 207 int x_old; /* last reported x/y, */ 208 int y_old; /* used for smoothing */ 209 signed char xy_cur[ATP_XSENSORS + ATP_YSENSORS]; 210 signed char xy_old[ATP_XSENSORS + ATP_YSENSORS]; 211 int xy_acc[ATP_XSENSORS + ATP_YSENSORS]; 212 int smooth[ATP_SMOOTHSIZE]; 213 int smooth_tmp[ATP_SMOOTHSIZE]; 214 int idlecount; /* number of empty packets */ 215 struct work_struct work; 216 }; 217 218 #define dbg_dump(msg, tab) \ 219 if (debug > 1) { \ 220 int __i; \ 221 printk(KERN_DEBUG "appletouch: %s", msg); \ 222 for (__i = 0; __i < ATP_XSENSORS + ATP_YSENSORS; __i++) \ 223 printk(" %02x", tab[__i]); \ 224 printk("\n"); \ 225 } 226 227 #define dprintk(format, a...) \ 228 do { \ 229 if (debug) \ 230 printk(KERN_DEBUG format, ##a); \ 231 } while (0) 232 233 MODULE_AUTHOR("Johannes Berg"); 234 MODULE_AUTHOR("Stelian Pop"); 235 MODULE_AUTHOR("Frank Arnold"); 236 MODULE_AUTHOR("Michael Hanselmann"); 237 MODULE_AUTHOR("Sven Anders"); 238 MODULE_DESCRIPTION("Apple PowerBook and MacBook USB touchpad driver"); 239 MODULE_LICENSE("GPL"); 240 241 /* 242 * Make the threshold a module parameter 243 */ 244 static int threshold = ATP_THRESHOLD; 245 module_param(threshold, int, 0644); 246 MODULE_PARM_DESC(threshold, "Discard any change in data from a sensor" 247 " (the trackpad has many of these sensors)" 248 " less than this value."); 249 250 static int debug; 251 module_param(debug, int, 0644); 252 MODULE_PARM_DESC(debug, "Activate debugging output"); 253 254 /* 255 * By default newer Geyser devices send standard USB HID mouse 256 * packets (Report ID 2). This code changes device mode, so it 257 * sends raw sensor reports (Report ID 5). 258 */ 259 static int atp_geyser_init(struct atp *dev) 260 { 261 struct usb_device *udev = dev->udev; 262 char *data; 263 int size; 264 int i; 265 int ret; 266 267 data = kmalloc(8, GFP_KERNEL); 268 if (!data) { 269 dev_err(&dev->intf->dev, "Out of memory\n"); 270 return -ENOMEM; 271 } 272 273 size = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 274 ATP_GEYSER_MODE_READ_REQUEST_ID, 275 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 276 ATP_GEYSER_MODE_REQUEST_VALUE, 277 ATP_GEYSER_MODE_REQUEST_INDEX, data, 8, 5000); 278 279 if (size != 8) { 280 dprintk("atp_geyser_init: read error\n"); 281 for (i = 0; i < 8; i++) 282 dprintk("appletouch[%d]: %d\n", i, data[i]); 283 284 dev_err(&dev->intf->dev, "Failed to read mode from device.\n"); 285 ret = -EIO; 286 goto out_free; 287 } 288 289 /* Apply the mode switch */ 290 data[0] = ATP_GEYSER_MODE_VENDOR_VALUE; 291 292 size = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 293 ATP_GEYSER_MODE_WRITE_REQUEST_ID, 294 USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 295 ATP_GEYSER_MODE_REQUEST_VALUE, 296 ATP_GEYSER_MODE_REQUEST_INDEX, data, 8, 5000); 297 298 if (size != 8) { 299 dprintk("atp_geyser_init: write error\n"); 300 for (i = 0; i < 8; i++) 301 dprintk("appletouch[%d]: %d\n", i, data[i]); 302 303 dev_err(&dev->intf->dev, "Failed to request geyser raw mode\n"); 304 ret = -EIO; 305 goto out_free; 306 } 307 ret = 0; 308 out_free: 309 kfree(data); 310 return ret; 311 } 312 313 /* 314 * Reinitialise the device. This usually stops stream of empty packets 315 * coming from it. 316 */ 317 static void atp_reinit(struct work_struct *work) 318 { 319 struct atp *dev = container_of(work, struct atp, work); 320 int retval; 321 322 dprintk("appletouch: putting appletouch to sleep (reinit)\n"); 323 atp_geyser_init(dev); 324 325 retval = usb_submit_urb(dev->urb, GFP_ATOMIC); 326 if (retval) 327 dev_err(&dev->intf->dev, 328 "atp_reinit: usb_submit_urb failed with error %d\n", 329 retval); 330 } 331 332 static int atp_calculate_abs(struct atp *dev, int offset, int nb_sensors, 333 int fact, int *z, int *fingers) 334 { 335 int i, pass; 336 337 /* 338 * Use offset to point xy_sensors at the first value in dev->xy_acc 339 * for whichever dimension we're looking at this particular go-round. 340 */ 341 int *xy_sensors = dev->xy_acc + offset; 342 343 /* values to calculate mean */ 344 int pcum = 0, psum = 0; 345 int is_increasing = 0; 346 347 *fingers = 0; 348 349 for (i = 0; i < nb_sensors; i++) { 350 if (xy_sensors[i] < threshold) { 351 if (is_increasing) 352 is_increasing = 0; 353 354 /* 355 * Makes the finger detection more versatile. For example, 356 * two fingers with no gap will be detected. Also, my 357 * tests show it less likely to have intermittent loss 358 * of multiple finger readings while moving around (scrolling). 359 * 360 * Changes the multiple finger detection to counting humps on 361 * sensors (transitions from nonincreasing to increasing) 362 * instead of counting transitions from low sensors (no 363 * finger reading) to high sensors (finger above 364 * sensor) 365 * 366 * - Jason Parekh <jasonparekh@gmail.com> 367 */ 368 369 } else if (i < 1 || 370 (!is_increasing && xy_sensors[i - 1] < xy_sensors[i])) { 371 (*fingers)++; 372 is_increasing = 1; 373 } else if (i > 0 && (xy_sensors[i - 1] - xy_sensors[i] > threshold)) { 374 is_increasing = 0; 375 } 376 } 377 378 if (*fingers < 1) /* No need to continue if no fingers are found. */ 379 return 0; 380 381 /* 382 * Use a smoothed version of sensor data for movement calculations, to 383 * combat noise without needing to rely so heavily on a threshold. 384 * This improves tracking. 385 * 386 * The smoothed array is bigger than the original so that the smoothing 387 * doesn't result in edge values being truncated. 388 */ 389 390 memset(dev->smooth, 0, 4 * sizeof(dev->smooth[0])); 391 /* Pull base values, scaled up to help avoid truncation errors. */ 392 for (i = 0; i < nb_sensors; i++) 393 dev->smooth[i + 4] = xy_sensors[i] << ATP_SCALE; 394 memset(&dev->smooth[nb_sensors + 4], 0, 4 * sizeof(dev->smooth[0])); 395 396 for (pass = 0; pass < 4; pass++) { 397 /* Handle edge. */ 398 dev->smooth_tmp[0] = (dev->smooth[0] + dev->smooth[1]) / 2; 399 400 /* Average values with neighbors. */ 401 for (i = 1; i < nb_sensors + 7; i++) 402 dev->smooth_tmp[i] = (dev->smooth[i - 1] + 403 dev->smooth[i] * 2 + 404 dev->smooth[i + 1]) / 4; 405 406 /* Handle other edge. */ 407 dev->smooth_tmp[i] = (dev->smooth[i - 1] + dev->smooth[i]) / 2; 408 409 memcpy(dev->smooth, dev->smooth_tmp, sizeof(dev->smooth)); 410 } 411 412 for (i = 0; i < nb_sensors + 8; i++) { 413 /* 414 * Skip values if they're small enough to be truncated to 0 415 * by scale. Mostly noise. 416 */ 417 if ((dev->smooth[i] >> ATP_SCALE) > 0) { 418 pcum += dev->smooth[i] * i; 419 psum += dev->smooth[i]; 420 } 421 } 422 423 if (psum > 0) { 424 *z = psum >> ATP_SCALE; /* Scale down pressure output. */ 425 return pcum * fact / psum; 426 } 427 428 return 0; 429 } 430 431 static inline void atp_report_fingers(struct input_dev *input, int fingers) 432 { 433 input_report_key(input, BTN_TOOL_FINGER, fingers == 1); 434 input_report_key(input, BTN_TOOL_DOUBLETAP, fingers == 2); 435 input_report_key(input, BTN_TOOL_TRIPLETAP, fingers > 2); 436 } 437 438 /* Check URB status and for correct length of data package */ 439 440 #define ATP_URB_STATUS_SUCCESS 0 441 #define ATP_URB_STATUS_ERROR 1 442 #define ATP_URB_STATUS_ERROR_FATAL 2 443 444 static int atp_status_check(struct urb *urb) 445 { 446 struct atp *dev = urb->context; 447 struct usb_interface *intf = dev->intf; 448 449 switch (urb->status) { 450 case 0: 451 /* success */ 452 break; 453 case -EOVERFLOW: 454 if (!dev->overflow_warned) { 455 dev_warn(&intf->dev, 456 "appletouch: OVERFLOW with data length %d, actual length is %d\n", 457 dev->info->datalen, dev->urb->actual_length); 458 dev->overflow_warned = true; 459 } 460 fallthrough; 461 case -ECONNRESET: 462 case -ENOENT: 463 case -ESHUTDOWN: 464 /* This urb is terminated, clean up */ 465 dev_dbg(&intf->dev, 466 "atp_complete: urb shutting down with status: %d\n", 467 urb->status); 468 return ATP_URB_STATUS_ERROR_FATAL; 469 470 default: 471 dev_dbg(&intf->dev, 472 "atp_complete: nonzero urb status received: %d\n", 473 urb->status); 474 return ATP_URB_STATUS_ERROR; 475 } 476 477 /* drop incomplete datasets */ 478 if (dev->urb->actual_length != dev->info->datalen) { 479 dprintk("appletouch: incomplete data package" 480 " (first byte: %d, length: %d).\n", 481 dev->data[0], dev->urb->actual_length); 482 return ATP_URB_STATUS_ERROR; 483 } 484 485 return ATP_URB_STATUS_SUCCESS; 486 } 487 488 static void atp_detect_size(struct atp *dev) 489 { 490 int i; 491 492 /* 17" Powerbooks have extra X sensors */ 493 for (i = dev->info->xsensors; i < ATP_XSENSORS; i++) { 494 if (dev->xy_cur[i]) { 495 496 dev_info(&dev->intf->dev, 497 "appletouch: 17\" model detected.\n"); 498 499 input_set_abs_params(dev->input, ABS_X, 0, 500 (dev->info->xsensors_17 - 1) * 501 dev->info->xfact - 1, 502 dev->info->fuzz, 0); 503 break; 504 } 505 } 506 } 507 508 /* 509 * USB interrupt callback functions 510 */ 511 512 /* Interrupt function for older touchpads: FOUNTAIN/GEYSER1/GEYSER2 */ 513 514 static void atp_complete_geyser_1_2(struct urb *urb) 515 { 516 int x, y, x_z, y_z, x_f, y_f; 517 int retval, i, j; 518 int key, fingers; 519 struct atp *dev = urb->context; 520 int status = atp_status_check(urb); 521 522 if (status == ATP_URB_STATUS_ERROR_FATAL) 523 return; 524 else if (status == ATP_URB_STATUS_ERROR) 525 goto exit; 526 527 /* reorder the sensors values */ 528 if (dev->info == &geyser2_info) { 529 memset(dev->xy_cur, 0, sizeof(dev->xy_cur)); 530 531 /* 532 * The values are laid out like this: 533 * Y1, Y2, -, Y3, Y4, -, ..., X1, X2, -, X3, X4, -, ... 534 * '-' is an unused value. 535 */ 536 537 /* read X values */ 538 for (i = 0, j = 19; i < 20; i += 2, j += 3) { 539 dev->xy_cur[i] = dev->data[j]; 540 dev->xy_cur[i + 1] = dev->data[j + 1]; 541 } 542 543 /* read Y values */ 544 for (i = 0, j = 1; i < 9; i += 2, j += 3) { 545 dev->xy_cur[ATP_XSENSORS + i] = dev->data[j]; 546 dev->xy_cur[ATP_XSENSORS + i + 1] = dev->data[j + 1]; 547 } 548 } else { 549 for (i = 0; i < 8; i++) { 550 /* X values */ 551 dev->xy_cur[i + 0] = dev->data[5 * i + 2]; 552 dev->xy_cur[i + 8] = dev->data[5 * i + 4]; 553 dev->xy_cur[i + 16] = dev->data[5 * i + 42]; 554 if (i < 2) 555 dev->xy_cur[i + 24] = dev->data[5 * i + 44]; 556 557 /* Y values */ 558 dev->xy_cur[ATP_XSENSORS + i] = dev->data[5 * i + 1]; 559 dev->xy_cur[ATP_XSENSORS + i + 8] = dev->data[5 * i + 3]; 560 } 561 } 562 563 dbg_dump("sample", dev->xy_cur); 564 565 if (!dev->valid) { 566 /* first sample */ 567 dev->valid = true; 568 dev->x_old = dev->y_old = -1; 569 570 /* Store first sample */ 571 memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old)); 572 573 /* Perform size detection, if not done already */ 574 if (unlikely(!dev->size_detect_done)) { 575 atp_detect_size(dev); 576 dev->size_detect_done = true; 577 goto exit; 578 } 579 } 580 581 for (i = 0; i < ATP_XSENSORS + ATP_YSENSORS; i++) { 582 /* accumulate the change */ 583 signed char change = dev->xy_old[i] - dev->xy_cur[i]; 584 dev->xy_acc[i] -= change; 585 586 /* prevent down drifting */ 587 if (dev->xy_acc[i] < 0) 588 dev->xy_acc[i] = 0; 589 } 590 591 memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old)); 592 593 dbg_dump("accumulator", dev->xy_acc); 594 595 x = atp_calculate_abs(dev, 0, ATP_XSENSORS, 596 dev->info->xfact, &x_z, &x_f); 597 y = atp_calculate_abs(dev, ATP_XSENSORS, ATP_YSENSORS, 598 dev->info->yfact, &y_z, &y_f); 599 key = dev->data[dev->info->datalen - 1] & ATP_STATUS_BUTTON; 600 601 fingers = max(x_f, y_f); 602 603 if (x && y && fingers == dev->fingers_old) { 604 if (dev->x_old != -1) { 605 x = (dev->x_old * 7 + x) >> 3; 606 y = (dev->y_old * 7 + y) >> 3; 607 dev->x_old = x; 608 dev->y_old = y; 609 610 if (debug > 1) 611 printk(KERN_DEBUG "appletouch: " 612 "X: %3d Y: %3d Xz: %3d Yz: %3d\n", 613 x, y, x_z, y_z); 614 615 input_report_key(dev->input, BTN_TOUCH, 1); 616 input_report_abs(dev->input, ABS_X, x); 617 input_report_abs(dev->input, ABS_Y, y); 618 input_report_abs(dev->input, ABS_PRESSURE, 619 min(ATP_PRESSURE, x_z + y_z)); 620 atp_report_fingers(dev->input, fingers); 621 } 622 dev->x_old = x; 623 dev->y_old = y; 624 625 } else if (!x && !y) { 626 627 dev->x_old = dev->y_old = -1; 628 dev->fingers_old = 0; 629 input_report_key(dev->input, BTN_TOUCH, 0); 630 input_report_abs(dev->input, ABS_PRESSURE, 0); 631 atp_report_fingers(dev->input, 0); 632 633 /* reset the accumulator on release */ 634 memset(dev->xy_acc, 0, sizeof(dev->xy_acc)); 635 } 636 637 if (fingers != dev->fingers_old) 638 dev->x_old = dev->y_old = -1; 639 dev->fingers_old = fingers; 640 641 input_report_key(dev->input, BTN_LEFT, key); 642 input_sync(dev->input); 643 644 exit: 645 retval = usb_submit_urb(dev->urb, GFP_ATOMIC); 646 if (retval) 647 dev_err(&dev->intf->dev, 648 "atp_complete: usb_submit_urb failed with result %d\n", 649 retval); 650 } 651 652 /* Interrupt function for older touchpads: GEYSER3/GEYSER4 */ 653 654 static void atp_complete_geyser_3_4(struct urb *urb) 655 { 656 int x, y, x_z, y_z, x_f, y_f; 657 int retval, i, j; 658 int key, fingers; 659 struct atp *dev = urb->context; 660 int status = atp_status_check(urb); 661 662 if (status == ATP_URB_STATUS_ERROR_FATAL) 663 return; 664 else if (status == ATP_URB_STATUS_ERROR) 665 goto exit; 666 667 /* Reorder the sensors values: 668 * 669 * The values are laid out like this: 670 * -, Y1, Y2, -, Y3, Y4, -, ..., -, X1, X2, -, X3, X4, ... 671 * '-' is an unused value. 672 */ 673 674 /* read X values */ 675 for (i = 0, j = 19; i < 20; i += 2, j += 3) { 676 dev->xy_cur[i] = dev->data[j + 1]; 677 dev->xy_cur[i + 1] = dev->data[j + 2]; 678 } 679 /* read Y values */ 680 for (i = 0, j = 1; i < 9; i += 2, j += 3) { 681 dev->xy_cur[ATP_XSENSORS + i] = dev->data[j + 1]; 682 dev->xy_cur[ATP_XSENSORS + i + 1] = dev->data[j + 2]; 683 } 684 685 dbg_dump("sample", dev->xy_cur); 686 687 /* Just update the base values (i.e. touchpad in untouched state) */ 688 if (dev->data[dev->info->datalen - 1] & ATP_STATUS_BASE_UPDATE) { 689 690 dprintk("appletouch: updated base values\n"); 691 692 memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old)); 693 goto exit; 694 } 695 696 for (i = 0; i < ATP_XSENSORS + ATP_YSENSORS; i++) { 697 /* calculate the change */ 698 dev->xy_acc[i] = dev->xy_cur[i] - dev->xy_old[i]; 699 700 /* this is a round-robin value, so couple with that */ 701 if (dev->xy_acc[i] > 127) 702 dev->xy_acc[i] -= 256; 703 704 if (dev->xy_acc[i] < -127) 705 dev->xy_acc[i] += 256; 706 707 /* prevent down drifting */ 708 if (dev->xy_acc[i] < 0) 709 dev->xy_acc[i] = 0; 710 } 711 712 dbg_dump("accumulator", dev->xy_acc); 713 714 x = atp_calculate_abs(dev, 0, ATP_XSENSORS, 715 dev->info->xfact, &x_z, &x_f); 716 y = atp_calculate_abs(dev, ATP_XSENSORS, ATP_YSENSORS, 717 dev->info->yfact, &y_z, &y_f); 718 719 key = dev->data[dev->info->datalen - 1] & ATP_STATUS_BUTTON; 720 721 fingers = max(x_f, y_f); 722 723 if (x && y && fingers == dev->fingers_old) { 724 if (dev->x_old != -1) { 725 x = (dev->x_old * 7 + x) >> 3; 726 y = (dev->y_old * 7 + y) >> 3; 727 dev->x_old = x; 728 dev->y_old = y; 729 730 if (debug > 1) 731 printk(KERN_DEBUG "appletouch: X: %3d Y: %3d " 732 "Xz: %3d Yz: %3d\n", 733 x, y, x_z, y_z); 734 735 input_report_key(dev->input, BTN_TOUCH, 1); 736 input_report_abs(dev->input, ABS_X, x); 737 input_report_abs(dev->input, ABS_Y, y); 738 input_report_abs(dev->input, ABS_PRESSURE, 739 min(ATP_PRESSURE, x_z + y_z)); 740 atp_report_fingers(dev->input, fingers); 741 } 742 dev->x_old = x; 743 dev->y_old = y; 744 745 } else if (!x && !y) { 746 747 dev->x_old = dev->y_old = -1; 748 dev->fingers_old = 0; 749 input_report_key(dev->input, BTN_TOUCH, 0); 750 input_report_abs(dev->input, ABS_PRESSURE, 0); 751 atp_report_fingers(dev->input, 0); 752 753 /* reset the accumulator on release */ 754 memset(dev->xy_acc, 0, sizeof(dev->xy_acc)); 755 } 756 757 if (fingers != dev->fingers_old) 758 dev->x_old = dev->y_old = -1; 759 dev->fingers_old = fingers; 760 761 input_report_key(dev->input, BTN_LEFT, key); 762 input_sync(dev->input); 763 764 /* 765 * Geysers 3/4 will continue to send packets continually after 766 * the first touch unless reinitialised. Do so if it's been 767 * idle for a while in order to avoid waking the kernel up 768 * several hundred times a second. 769 */ 770 771 /* 772 * Button must not be pressed when entering suspend, 773 * otherwise we will never release the button. 774 */ 775 if (!x && !y && !key) { 776 dev->idlecount++; 777 if (dev->idlecount == 10) { 778 dev->x_old = dev->y_old = -1; 779 dev->idlecount = 0; 780 schedule_work(&dev->work); 781 /* Don't resubmit urb here, wait for reinit */ 782 return; 783 } 784 } else 785 dev->idlecount = 0; 786 787 exit: 788 retval = usb_submit_urb(dev->urb, GFP_ATOMIC); 789 if (retval) 790 dev_err(&dev->intf->dev, 791 "atp_complete: usb_submit_urb failed with result %d\n", 792 retval); 793 } 794 795 static int atp_open(struct input_dev *input) 796 { 797 struct atp *dev = input_get_drvdata(input); 798 799 if (usb_submit_urb(dev->urb, GFP_KERNEL)) 800 return -EIO; 801 802 return 0; 803 } 804 805 static void atp_close(struct input_dev *input) 806 { 807 struct atp *dev = input_get_drvdata(input); 808 809 usb_kill_urb(dev->urb); 810 cancel_work_sync(&dev->work); 811 } 812 813 static int atp_handle_geyser(struct atp *dev) 814 { 815 if (dev->info != &fountain_info) { 816 /* switch to raw sensor mode */ 817 if (atp_geyser_init(dev)) 818 return -EIO; 819 820 dev_info(&dev->intf->dev, "Geyser mode initialized.\n"); 821 } 822 823 return 0; 824 } 825 826 static int atp_probe(struct usb_interface *iface, 827 const struct usb_device_id *id) 828 { 829 struct atp *dev; 830 struct input_dev *input_dev; 831 struct usb_device *udev = interface_to_usbdev(iface); 832 struct usb_host_interface *iface_desc; 833 struct usb_endpoint_descriptor *endpoint; 834 int int_in_endpointAddr = 0; 835 int i, error = -ENOMEM; 836 const struct atp_info *info = (const struct atp_info *)id->driver_info; 837 838 /* set up the endpoint information */ 839 /* use only the first interrupt-in endpoint */ 840 iface_desc = iface->cur_altsetting; 841 for (i = 0; i < iface_desc->desc.bNumEndpoints; i++) { 842 endpoint = &iface_desc->endpoint[i].desc; 843 if (!int_in_endpointAddr && usb_endpoint_is_int_in(endpoint)) { 844 /* we found an interrupt in endpoint */ 845 int_in_endpointAddr = endpoint->bEndpointAddress; 846 break; 847 } 848 } 849 if (!int_in_endpointAddr) { 850 dev_err(&iface->dev, "Could not find int-in endpoint\n"); 851 return -EIO; 852 } 853 854 /* allocate memory for our device state and initialize it */ 855 dev = kzalloc(sizeof(*dev), GFP_KERNEL); 856 input_dev = input_allocate_device(); 857 if (!dev || !input_dev) { 858 dev_err(&iface->dev, "Out of memory\n"); 859 goto err_free_devs; 860 } 861 862 dev->udev = udev; 863 dev->intf = iface; 864 dev->input = input_dev; 865 dev->info = info; 866 dev->overflow_warned = false; 867 868 dev->urb = usb_alloc_urb(0, GFP_KERNEL); 869 if (!dev->urb) 870 goto err_free_devs; 871 872 dev->data = usb_alloc_coherent(dev->udev, dev->info->datalen, GFP_KERNEL, 873 &dev->urb->transfer_dma); 874 if (!dev->data) 875 goto err_free_urb; 876 877 usb_fill_int_urb(dev->urb, udev, 878 usb_rcvintpipe(udev, int_in_endpointAddr), 879 dev->data, dev->info->datalen, 880 dev->info->callback, dev, 1); 881 882 error = atp_handle_geyser(dev); 883 if (error) 884 goto err_free_buffer; 885 886 usb_make_path(udev, dev->phys, sizeof(dev->phys)); 887 strlcat(dev->phys, "/input0", sizeof(dev->phys)); 888 889 input_dev->name = "appletouch"; 890 input_dev->phys = dev->phys; 891 usb_to_input_id(dev->udev, &input_dev->id); 892 input_dev->dev.parent = &iface->dev; 893 894 input_set_drvdata(input_dev, dev); 895 896 input_dev->open = atp_open; 897 input_dev->close = atp_close; 898 899 set_bit(EV_ABS, input_dev->evbit); 900 901 input_set_abs_params(input_dev, ABS_X, 0, 902 (dev->info->xsensors - 1) * dev->info->xfact - 1, 903 dev->info->fuzz, 0); 904 input_set_abs_params(input_dev, ABS_Y, 0, 905 (dev->info->ysensors - 1) * dev->info->yfact - 1, 906 dev->info->fuzz, 0); 907 input_set_abs_params(input_dev, ABS_PRESSURE, 0, ATP_PRESSURE, 0, 0); 908 909 set_bit(EV_KEY, input_dev->evbit); 910 set_bit(BTN_TOUCH, input_dev->keybit); 911 set_bit(BTN_TOOL_FINGER, input_dev->keybit); 912 set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit); 913 set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit); 914 set_bit(BTN_LEFT, input_dev->keybit); 915 916 INIT_WORK(&dev->work, atp_reinit); 917 918 error = input_register_device(dev->input); 919 if (error) 920 goto err_free_buffer; 921 922 /* save our data pointer in this interface device */ 923 usb_set_intfdata(iface, dev); 924 925 return 0; 926 927 err_free_buffer: 928 usb_free_coherent(dev->udev, dev->info->datalen, 929 dev->data, dev->urb->transfer_dma); 930 err_free_urb: 931 usb_free_urb(dev->urb); 932 err_free_devs: 933 usb_set_intfdata(iface, NULL); 934 kfree(dev); 935 input_free_device(input_dev); 936 return error; 937 } 938 939 static void atp_disconnect(struct usb_interface *iface) 940 { 941 struct atp *dev = usb_get_intfdata(iface); 942 943 usb_set_intfdata(iface, NULL); 944 if (dev) { 945 usb_kill_urb(dev->urb); 946 input_unregister_device(dev->input); 947 usb_free_coherent(dev->udev, dev->info->datalen, 948 dev->data, dev->urb->transfer_dma); 949 usb_free_urb(dev->urb); 950 kfree(dev); 951 } 952 dev_info(&iface->dev, "input: appletouch disconnected\n"); 953 } 954 955 static int atp_recover(struct atp *dev) 956 { 957 int error; 958 959 error = atp_handle_geyser(dev); 960 if (error) 961 return error; 962 963 guard(mutex)(&dev->input->mutex); 964 if (input_device_enabled(dev->input) && usb_submit_urb(dev->urb, GFP_KERNEL)) 965 return -EIO; 966 967 return 0; 968 } 969 970 static int atp_suspend(struct usb_interface *iface, pm_message_t message) 971 { 972 struct atp *dev = usb_get_intfdata(iface); 973 974 usb_kill_urb(dev->urb); 975 return 0; 976 } 977 978 static int atp_resume(struct usb_interface *iface) 979 { 980 struct atp *dev = usb_get_intfdata(iface); 981 982 guard(mutex)(&dev->input->mutex); 983 if (input_device_enabled(dev->input) && usb_submit_urb(dev->urb, GFP_KERNEL)) 984 return -EIO; 985 986 return 0; 987 } 988 989 static int atp_reset_resume(struct usb_interface *iface) 990 { 991 struct atp *dev = usb_get_intfdata(iface); 992 993 return atp_recover(dev); 994 } 995 996 static struct usb_driver atp_driver = { 997 .name = "appletouch", 998 .probe = atp_probe, 999 .disconnect = atp_disconnect, 1000 .suspend = atp_suspend, 1001 .resume = atp_resume, 1002 .reset_resume = atp_reset_resume, 1003 .id_table = atp_table, 1004 }; 1005 1006 module_usb_driver(atp_driver); 1007