1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Atmel maXTouch Touchscreen driver 4 * 5 * Copyright (C) 2010 Samsung Electronics Co.Ltd 6 * Copyright (C) 2011-2014 Atmel Corporation 7 * Copyright (C) 2012 Google, Inc. 8 * Copyright (C) 2016 Zodiac Inflight Innovations 9 * 10 * Author: Joonyoung Shim <jy0922.shim@samsung.com> 11 */ 12 13 #include <linux/acpi.h> 14 #include <linux/dmi.h> 15 #include <linux/module.h> 16 #include <linux/init.h> 17 #include <linux/completion.h> 18 #include <linux/delay.h> 19 #include <linux/firmware.h> 20 #include <linux/i2c.h> 21 #include <linux/input/mt.h> 22 #include <linux/interrupt.h> 23 #include <linux/irq.h> 24 #include <linux/of.h> 25 #include <linux/property.h> 26 #include <linux/slab.h> 27 #include <linux/regulator/consumer.h> 28 #include <linux/gpio/consumer.h> 29 #include <asm/unaligned.h> 30 #include <media/v4l2-device.h> 31 #include <media/v4l2-ioctl.h> 32 #include <media/videobuf2-v4l2.h> 33 #include <media/videobuf2-vmalloc.h> 34 35 /* Firmware files */ 36 #define MXT_FW_NAME "maxtouch.fw" 37 #define MXT_CFG_NAME "maxtouch.cfg" 38 #define MXT_CFG_MAGIC "OBP_RAW V1" 39 40 /* Registers */ 41 #define MXT_OBJECT_START 0x07 42 #define MXT_OBJECT_SIZE 6 43 #define MXT_INFO_CHECKSUM_SIZE 3 44 #define MXT_MAX_BLOCK_WRITE 256 45 46 /* Object types */ 47 #define MXT_DEBUG_DIAGNOSTIC_T37 37 48 #define MXT_GEN_MESSAGE_T5 5 49 #define MXT_GEN_COMMAND_T6 6 50 #define MXT_GEN_POWER_T7 7 51 #define MXT_GEN_ACQUIRE_T8 8 52 #define MXT_GEN_DATASOURCE_T53 53 53 #define MXT_TOUCH_MULTI_T9 9 54 #define MXT_TOUCH_KEYARRAY_T15 15 55 #define MXT_TOUCH_PROXIMITY_T23 23 56 #define MXT_TOUCH_PROXKEY_T52 52 57 #define MXT_PROCI_GRIPFACE_T20 20 58 #define MXT_PROCG_NOISE_T22 22 59 #define MXT_PROCI_ONETOUCH_T24 24 60 #define MXT_PROCI_TWOTOUCH_T27 27 61 #define MXT_PROCI_GRIP_T40 40 62 #define MXT_PROCI_PALM_T41 41 63 #define MXT_PROCI_TOUCHSUPPRESSION_T42 42 64 #define MXT_PROCI_STYLUS_T47 47 65 #define MXT_PROCG_NOISESUPPRESSION_T48 48 66 #define MXT_SPT_COMMSCONFIG_T18 18 67 #define MXT_SPT_GPIOPWM_T19 19 68 #define MXT_SPT_SELFTEST_T25 25 69 #define MXT_SPT_CTECONFIG_T28 28 70 #define MXT_SPT_USERDATA_T38 38 71 #define MXT_SPT_DIGITIZER_T43 43 72 #define MXT_SPT_MESSAGECOUNT_T44 44 73 #define MXT_SPT_CTECONFIG_T46 46 74 #define MXT_SPT_DYNAMICCONFIGURATIONCONTAINER_T71 71 75 #define MXT_TOUCH_MULTITOUCHSCREEN_T100 100 76 77 /* MXT_GEN_MESSAGE_T5 object */ 78 #define MXT_RPTID_NOMSG 0xff 79 80 /* MXT_GEN_COMMAND_T6 field */ 81 #define MXT_COMMAND_RESET 0 82 #define MXT_COMMAND_BACKUPNV 1 83 #define MXT_COMMAND_CALIBRATE 2 84 #define MXT_COMMAND_REPORTALL 3 85 #define MXT_COMMAND_DIAGNOSTIC 5 86 87 /* Define for T6 status byte */ 88 #define MXT_T6_STATUS_RESET BIT(7) 89 #define MXT_T6_STATUS_OFL BIT(6) 90 #define MXT_T6_STATUS_SIGERR BIT(5) 91 #define MXT_T6_STATUS_CAL BIT(4) 92 #define MXT_T6_STATUS_CFGERR BIT(3) 93 #define MXT_T6_STATUS_COMSERR BIT(2) 94 95 /* MXT_GEN_POWER_T7 field */ 96 struct t7_config { 97 u8 idle; 98 u8 active; 99 } __packed; 100 101 #define MXT_POWER_CFG_RUN 0 102 #define MXT_POWER_CFG_DEEPSLEEP 1 103 104 /* MXT_TOUCH_MULTI_T9 field */ 105 #define MXT_T9_CTRL 0 106 #define MXT_T9_XSIZE 3 107 #define MXT_T9_YSIZE 4 108 #define MXT_T9_ORIENT 9 109 #define MXT_T9_RANGE 18 110 111 /* MXT_TOUCH_MULTI_T9 status */ 112 #define MXT_T9_UNGRIP BIT(0) 113 #define MXT_T9_SUPPRESS BIT(1) 114 #define MXT_T9_AMP BIT(2) 115 #define MXT_T9_VECTOR BIT(3) 116 #define MXT_T9_MOVE BIT(4) 117 #define MXT_T9_RELEASE BIT(5) 118 #define MXT_T9_PRESS BIT(6) 119 #define MXT_T9_DETECT BIT(7) 120 121 struct t9_range { 122 __le16 x; 123 __le16 y; 124 } __packed; 125 126 /* MXT_TOUCH_MULTI_T9 orient */ 127 #define MXT_T9_ORIENT_SWITCH BIT(0) 128 #define MXT_T9_ORIENT_INVERTX BIT(1) 129 #define MXT_T9_ORIENT_INVERTY BIT(2) 130 131 /* MXT_SPT_COMMSCONFIG_T18 */ 132 #define MXT_COMMS_CTRL 0 133 #define MXT_COMMS_CMD 1 134 #define MXT_COMMS_RETRIGEN BIT(6) 135 136 /* MXT_DEBUG_DIAGNOSTIC_T37 */ 137 #define MXT_DIAGNOSTIC_PAGEUP 0x01 138 #define MXT_DIAGNOSTIC_DELTAS 0x10 139 #define MXT_DIAGNOSTIC_REFS 0x11 140 #define MXT_DIAGNOSTIC_SIZE 128 141 142 #define MXT_FAMILY_1386 160 143 #define MXT1386_COLUMNS 3 144 #define MXT1386_PAGES_PER_COLUMN 8 145 146 struct t37_debug { 147 #ifdef CONFIG_TOUCHSCREEN_ATMEL_MXT_T37 148 u8 mode; 149 u8 page; 150 u8 data[MXT_DIAGNOSTIC_SIZE]; 151 #endif 152 }; 153 154 /* Define for MXT_GEN_COMMAND_T6 */ 155 #define MXT_BOOT_VALUE 0xa5 156 #define MXT_RESET_VALUE 0x01 157 #define MXT_BACKUP_VALUE 0x55 158 159 /* T100 Multiple Touch Touchscreen */ 160 #define MXT_T100_CTRL 0 161 #define MXT_T100_CFG1 1 162 #define MXT_T100_TCHAUX 3 163 #define MXT_T100_XSIZE 9 164 #define MXT_T100_XRANGE 13 165 #define MXT_T100_YSIZE 20 166 #define MXT_T100_YRANGE 24 167 168 #define MXT_T100_CFG_SWITCHXY BIT(5) 169 #define MXT_T100_CFG_INVERTY BIT(6) 170 #define MXT_T100_CFG_INVERTX BIT(7) 171 172 #define MXT_T100_TCHAUX_VECT BIT(0) 173 #define MXT_T100_TCHAUX_AMPL BIT(1) 174 #define MXT_T100_TCHAUX_AREA BIT(2) 175 176 #define MXT_T100_DETECT BIT(7) 177 #define MXT_T100_TYPE_MASK 0x70 178 179 enum t100_type { 180 MXT_T100_TYPE_FINGER = 1, 181 MXT_T100_TYPE_PASSIVE_STYLUS = 2, 182 MXT_T100_TYPE_HOVERING_FINGER = 4, 183 MXT_T100_TYPE_GLOVE = 5, 184 MXT_T100_TYPE_LARGE_TOUCH = 6, 185 }; 186 187 #define MXT_DISTANCE_ACTIVE_TOUCH 0 188 #define MXT_DISTANCE_HOVERING 1 189 190 #define MXT_TOUCH_MAJOR_DEFAULT 1 191 #define MXT_PRESSURE_DEFAULT 1 192 193 /* Delay times */ 194 #define MXT_BACKUP_TIME 50 /* msec */ 195 #define MXT_RESET_GPIO_TIME 20 /* msec */ 196 #define MXT_RESET_INVALID_CHG 100 /* msec */ 197 #define MXT_RESET_TIME 200 /* msec */ 198 #define MXT_RESET_TIMEOUT 3000 /* msec */ 199 #define MXT_CRC_TIMEOUT 1000 /* msec */ 200 #define MXT_FW_RESET_TIME 3000 /* msec */ 201 #define MXT_FW_CHG_TIMEOUT 300 /* msec */ 202 203 /* Command to unlock bootloader */ 204 #define MXT_UNLOCK_CMD_MSB 0xaa 205 #define MXT_UNLOCK_CMD_LSB 0xdc 206 207 /* Bootloader mode status */ 208 #define MXT_WAITING_BOOTLOAD_CMD 0xc0 /* valid 7 6 bit only */ 209 #define MXT_WAITING_FRAME_DATA 0x80 /* valid 7 6 bit only */ 210 #define MXT_FRAME_CRC_CHECK 0x02 211 #define MXT_FRAME_CRC_FAIL 0x03 212 #define MXT_FRAME_CRC_PASS 0x04 213 #define MXT_APP_CRC_FAIL 0x40 /* valid 7 8 bit only */ 214 #define MXT_BOOT_STATUS_MASK 0x3f 215 #define MXT_BOOT_EXTENDED_ID BIT(5) 216 #define MXT_BOOT_ID_MASK 0x1f 217 218 /* Touchscreen absolute values */ 219 #define MXT_MAX_AREA 0xff 220 221 #define MXT_PIXELS_PER_MM 20 222 223 struct mxt_info { 224 u8 family_id; 225 u8 variant_id; 226 u8 version; 227 u8 build; 228 u8 matrix_xsize; 229 u8 matrix_ysize; 230 u8 object_num; 231 }; 232 233 struct mxt_object { 234 u8 type; 235 u16 start_address; 236 u8 size_minus_one; 237 u8 instances_minus_one; 238 u8 num_report_ids; 239 } __packed; 240 241 struct mxt_dbg { 242 u16 t37_address; 243 u16 diag_cmd_address; 244 struct t37_debug *t37_buf; 245 unsigned int t37_pages; 246 unsigned int t37_nodes; 247 248 struct v4l2_device v4l2; 249 struct v4l2_pix_format format; 250 struct video_device vdev; 251 struct vb2_queue queue; 252 struct mutex lock; 253 int input; 254 }; 255 256 enum v4l_dbg_inputs { 257 MXT_V4L_INPUT_DELTAS, 258 MXT_V4L_INPUT_REFS, 259 MXT_V4L_INPUT_MAX, 260 }; 261 262 enum mxt_suspend_mode { 263 MXT_SUSPEND_DEEP_SLEEP = 0, 264 MXT_SUSPEND_T9_CTRL = 1, 265 }; 266 267 /* Config update context */ 268 struct mxt_cfg { 269 u8 *raw; 270 size_t raw_size; 271 off_t raw_pos; 272 273 u8 *mem; 274 size_t mem_size; 275 int start_ofs; 276 277 struct mxt_info info; 278 }; 279 280 /* Each client has this additional data */ 281 struct mxt_data { 282 struct i2c_client *client; 283 struct input_dev *input_dev; 284 char phys[64]; /* device physical location */ 285 struct mxt_object *object_table; 286 struct mxt_info *info; 287 void *raw_info_block; 288 unsigned int irq; 289 unsigned int max_x; 290 unsigned int max_y; 291 bool invertx; 292 bool inverty; 293 bool xy_switch; 294 u8 xsize; 295 u8 ysize; 296 bool in_bootloader; 297 u16 mem_size; 298 u8 t100_aux_ampl; 299 u8 t100_aux_area; 300 u8 t100_aux_vect; 301 u8 max_reportid; 302 u32 config_crc; 303 u32 info_crc; 304 u8 bootloader_addr; 305 u8 *msg_buf; 306 u8 t6_status; 307 bool update_input; 308 u8 last_message_count; 309 u8 num_touchids; 310 u8 multitouch; 311 struct t7_config t7_cfg; 312 struct mxt_dbg dbg; 313 struct regulator_bulk_data regulators[2]; 314 struct gpio_desc *reset_gpio; 315 bool use_retrigen_workaround; 316 317 /* Cached parameters from object table */ 318 u16 T5_address; 319 u8 T5_msg_size; 320 u8 T6_reportid; 321 u16 T6_address; 322 u16 T7_address; 323 u16 T71_address; 324 u8 T9_reportid_min; 325 u8 T9_reportid_max; 326 u16 T18_address; 327 u8 T19_reportid; 328 u16 T44_address; 329 u8 T100_reportid_min; 330 u8 T100_reportid_max; 331 332 /* for fw update in bootloader */ 333 struct completion bl_completion; 334 335 /* for reset handling */ 336 struct completion reset_completion; 337 338 /* for config update handling */ 339 struct completion crc_completion; 340 341 u32 *t19_keymap; 342 unsigned int t19_num_keys; 343 344 enum mxt_suspend_mode suspend_mode; 345 }; 346 347 struct mxt_vb2_buffer { 348 struct vb2_buffer vb; 349 struct list_head list; 350 }; 351 352 static size_t mxt_obj_size(const struct mxt_object *obj) 353 { 354 return obj->size_minus_one + 1; 355 } 356 357 static size_t mxt_obj_instances(const struct mxt_object *obj) 358 { 359 return obj->instances_minus_one + 1; 360 } 361 362 static bool mxt_object_readable(unsigned int type) 363 { 364 switch (type) { 365 case MXT_GEN_COMMAND_T6: 366 case MXT_GEN_POWER_T7: 367 case MXT_GEN_ACQUIRE_T8: 368 case MXT_GEN_DATASOURCE_T53: 369 case MXT_TOUCH_MULTI_T9: 370 case MXT_TOUCH_KEYARRAY_T15: 371 case MXT_TOUCH_PROXIMITY_T23: 372 case MXT_TOUCH_PROXKEY_T52: 373 case MXT_TOUCH_MULTITOUCHSCREEN_T100: 374 case MXT_PROCI_GRIPFACE_T20: 375 case MXT_PROCG_NOISE_T22: 376 case MXT_PROCI_ONETOUCH_T24: 377 case MXT_PROCI_TWOTOUCH_T27: 378 case MXT_PROCI_GRIP_T40: 379 case MXT_PROCI_PALM_T41: 380 case MXT_PROCI_TOUCHSUPPRESSION_T42: 381 case MXT_PROCI_STYLUS_T47: 382 case MXT_PROCG_NOISESUPPRESSION_T48: 383 case MXT_SPT_COMMSCONFIG_T18: 384 case MXT_SPT_GPIOPWM_T19: 385 case MXT_SPT_SELFTEST_T25: 386 case MXT_SPT_CTECONFIG_T28: 387 case MXT_SPT_USERDATA_T38: 388 case MXT_SPT_DIGITIZER_T43: 389 case MXT_SPT_CTECONFIG_T46: 390 case MXT_SPT_DYNAMICCONFIGURATIONCONTAINER_T71: 391 return true; 392 default: 393 return false; 394 } 395 } 396 397 static void mxt_dump_message(struct mxt_data *data, u8 *message) 398 { 399 dev_dbg(&data->client->dev, "message: %*ph\n", 400 data->T5_msg_size, message); 401 } 402 403 static int mxt_wait_for_completion(struct mxt_data *data, 404 struct completion *comp, 405 unsigned int timeout_ms) 406 { 407 struct device *dev = &data->client->dev; 408 unsigned long timeout = msecs_to_jiffies(timeout_ms); 409 long ret; 410 411 ret = wait_for_completion_interruptible_timeout(comp, timeout); 412 if (ret < 0) { 413 return ret; 414 } else if (ret == 0) { 415 dev_err(dev, "Wait for completion timed out.\n"); 416 return -ETIMEDOUT; 417 } 418 return 0; 419 } 420 421 static int mxt_bootloader_read(struct mxt_data *data, 422 u8 *val, unsigned int count) 423 { 424 int ret; 425 struct i2c_msg msg; 426 427 msg.addr = data->bootloader_addr; 428 msg.flags = data->client->flags & I2C_M_TEN; 429 msg.flags |= I2C_M_RD; 430 msg.len = count; 431 msg.buf = val; 432 433 ret = i2c_transfer(data->client->adapter, &msg, 1); 434 if (ret == 1) { 435 ret = 0; 436 } else { 437 ret = ret < 0 ? ret : -EIO; 438 dev_err(&data->client->dev, "%s: i2c recv failed (%d)\n", 439 __func__, ret); 440 } 441 442 return ret; 443 } 444 445 static int mxt_bootloader_write(struct mxt_data *data, 446 const u8 * const val, unsigned int count) 447 { 448 int ret; 449 struct i2c_msg msg; 450 451 msg.addr = data->bootloader_addr; 452 msg.flags = data->client->flags & I2C_M_TEN; 453 msg.len = count; 454 msg.buf = (u8 *)val; 455 456 ret = i2c_transfer(data->client->adapter, &msg, 1); 457 if (ret == 1) { 458 ret = 0; 459 } else { 460 ret = ret < 0 ? ret : -EIO; 461 dev_err(&data->client->dev, "%s: i2c send failed (%d)\n", 462 __func__, ret); 463 } 464 465 return ret; 466 } 467 468 static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry) 469 { 470 u8 appmode = data->client->addr; 471 u8 bootloader; 472 u8 family_id = data->info ? data->info->family_id : 0; 473 474 switch (appmode) { 475 case 0x4a: 476 case 0x4b: 477 /* Chips after 1664S use different scheme */ 478 if (retry || family_id >= 0xa2) { 479 bootloader = appmode - 0x24; 480 break; 481 } 482 fallthrough; /* for normal case */ 483 case 0x4c: 484 case 0x4d: 485 case 0x5a: 486 case 0x5b: 487 bootloader = appmode - 0x26; 488 break; 489 490 default: 491 dev_err(&data->client->dev, 492 "Appmode i2c address 0x%02x not found\n", 493 appmode); 494 return -EINVAL; 495 } 496 497 data->bootloader_addr = bootloader; 498 return 0; 499 } 500 501 static int mxt_probe_bootloader(struct mxt_data *data, bool alt_address) 502 { 503 struct device *dev = &data->client->dev; 504 int error; 505 u8 val; 506 bool crc_failure; 507 508 error = mxt_lookup_bootloader_address(data, alt_address); 509 if (error) 510 return error; 511 512 error = mxt_bootloader_read(data, &val, 1); 513 if (error) 514 return error; 515 516 /* Check app crc fail mode */ 517 crc_failure = (val & ~MXT_BOOT_STATUS_MASK) == MXT_APP_CRC_FAIL; 518 519 dev_err(dev, "Detected bootloader, status:%02X%s\n", 520 val, crc_failure ? ", APP_CRC_FAIL" : ""); 521 522 return 0; 523 } 524 525 static u8 mxt_get_bootloader_version(struct mxt_data *data, u8 val) 526 { 527 struct device *dev = &data->client->dev; 528 u8 buf[3]; 529 530 if (val & MXT_BOOT_EXTENDED_ID) { 531 if (mxt_bootloader_read(data, &buf[0], 3) != 0) { 532 dev_err(dev, "%s: i2c failure\n", __func__); 533 return val; 534 } 535 536 dev_dbg(dev, "Bootloader ID:%d Version:%d\n", buf[1], buf[2]); 537 538 return buf[0]; 539 } else { 540 dev_dbg(dev, "Bootloader ID:%d\n", val & MXT_BOOT_ID_MASK); 541 542 return val; 543 } 544 } 545 546 static int mxt_check_bootloader(struct mxt_data *data, unsigned int state, 547 bool wait) 548 { 549 struct device *dev = &data->client->dev; 550 u8 val; 551 int ret; 552 553 recheck: 554 if (wait) { 555 /* 556 * In application update mode, the interrupt 557 * line signals state transitions. We must wait for the 558 * CHG assertion before reading the status byte. 559 * Once the status byte has been read, the line is deasserted. 560 */ 561 ret = mxt_wait_for_completion(data, &data->bl_completion, 562 MXT_FW_CHG_TIMEOUT); 563 if (ret) { 564 /* 565 * TODO: handle -ERESTARTSYS better by terminating 566 * fw update process before returning to userspace 567 * by writing length 0x000 to device (iff we are in 568 * WAITING_FRAME_DATA state). 569 */ 570 dev_err(dev, "Update wait error %d\n", ret); 571 return ret; 572 } 573 } 574 575 ret = mxt_bootloader_read(data, &val, 1); 576 if (ret) 577 return ret; 578 579 if (state == MXT_WAITING_BOOTLOAD_CMD) 580 val = mxt_get_bootloader_version(data, val); 581 582 switch (state) { 583 case MXT_WAITING_BOOTLOAD_CMD: 584 case MXT_WAITING_FRAME_DATA: 585 case MXT_APP_CRC_FAIL: 586 val &= ~MXT_BOOT_STATUS_MASK; 587 break; 588 case MXT_FRAME_CRC_PASS: 589 if (val == MXT_FRAME_CRC_CHECK) { 590 goto recheck; 591 } else if (val == MXT_FRAME_CRC_FAIL) { 592 dev_err(dev, "Bootloader CRC fail\n"); 593 return -EINVAL; 594 } 595 break; 596 default: 597 return -EINVAL; 598 } 599 600 if (val != state) { 601 dev_err(dev, "Invalid bootloader state %02X != %02X\n", 602 val, state); 603 return -EINVAL; 604 } 605 606 return 0; 607 } 608 609 static int mxt_send_bootloader_cmd(struct mxt_data *data, bool unlock) 610 { 611 int ret; 612 u8 buf[2]; 613 614 if (unlock) { 615 buf[0] = MXT_UNLOCK_CMD_LSB; 616 buf[1] = MXT_UNLOCK_CMD_MSB; 617 } else { 618 buf[0] = 0x01; 619 buf[1] = 0x01; 620 } 621 622 ret = mxt_bootloader_write(data, buf, 2); 623 if (ret) 624 return ret; 625 626 return 0; 627 } 628 629 static int __mxt_read_reg(struct i2c_client *client, 630 u16 reg, u16 len, void *val) 631 { 632 struct i2c_msg xfer[2]; 633 u8 buf[2]; 634 int ret; 635 636 buf[0] = reg & 0xff; 637 buf[1] = (reg >> 8) & 0xff; 638 639 /* Write register */ 640 xfer[0].addr = client->addr; 641 xfer[0].flags = 0; 642 xfer[0].len = 2; 643 xfer[0].buf = buf; 644 645 /* Read data */ 646 xfer[1].addr = client->addr; 647 xfer[1].flags = I2C_M_RD; 648 xfer[1].len = len; 649 xfer[1].buf = val; 650 651 ret = i2c_transfer(client->adapter, xfer, 2); 652 if (ret == 2) { 653 ret = 0; 654 } else { 655 if (ret >= 0) 656 ret = -EIO; 657 dev_err(&client->dev, "%s: i2c transfer failed (%d)\n", 658 __func__, ret); 659 } 660 661 return ret; 662 } 663 664 static int __mxt_write_reg(struct i2c_client *client, u16 reg, u16 len, 665 const void *val) 666 { 667 u8 *buf; 668 size_t count; 669 int ret; 670 671 count = len + 2; 672 buf = kmalloc(count, GFP_KERNEL); 673 if (!buf) 674 return -ENOMEM; 675 676 buf[0] = reg & 0xff; 677 buf[1] = (reg >> 8) & 0xff; 678 memcpy(&buf[2], val, len); 679 680 ret = i2c_master_send(client, buf, count); 681 if (ret == count) { 682 ret = 0; 683 } else { 684 if (ret >= 0) 685 ret = -EIO; 686 dev_err(&client->dev, "%s: i2c send failed (%d)\n", 687 __func__, ret); 688 } 689 690 kfree(buf); 691 return ret; 692 } 693 694 static int mxt_write_reg(struct i2c_client *client, u16 reg, u8 val) 695 { 696 return __mxt_write_reg(client, reg, 1, &val); 697 } 698 699 static struct mxt_object * 700 mxt_get_object(struct mxt_data *data, u8 type) 701 { 702 struct mxt_object *object; 703 int i; 704 705 for (i = 0; i < data->info->object_num; i++) { 706 object = data->object_table + i; 707 if (object->type == type) 708 return object; 709 } 710 711 dev_warn(&data->client->dev, "Invalid object type T%u\n", type); 712 return NULL; 713 } 714 715 static void mxt_proc_t6_messages(struct mxt_data *data, u8 *msg) 716 { 717 struct device *dev = &data->client->dev; 718 u8 status = msg[1]; 719 u32 crc = msg[2] | (msg[3] << 8) | (msg[4] << 16); 720 721 if (crc != data->config_crc) { 722 data->config_crc = crc; 723 dev_dbg(dev, "T6 Config Checksum: 0x%06X\n", crc); 724 } 725 726 complete(&data->crc_completion); 727 728 /* Detect reset */ 729 if (status & MXT_T6_STATUS_RESET) 730 complete(&data->reset_completion); 731 732 /* Output debug if status has changed */ 733 if (status != data->t6_status) 734 dev_dbg(dev, "T6 Status 0x%02X%s%s%s%s%s%s%s\n", 735 status, 736 status == 0 ? " OK" : "", 737 status & MXT_T6_STATUS_RESET ? " RESET" : "", 738 status & MXT_T6_STATUS_OFL ? " OFL" : "", 739 status & MXT_T6_STATUS_SIGERR ? " SIGERR" : "", 740 status & MXT_T6_STATUS_CAL ? " CAL" : "", 741 status & MXT_T6_STATUS_CFGERR ? " CFGERR" : "", 742 status & MXT_T6_STATUS_COMSERR ? " COMSERR" : ""); 743 744 /* Save current status */ 745 data->t6_status = status; 746 } 747 748 static int mxt_write_object(struct mxt_data *data, 749 u8 type, u8 offset, u8 val) 750 { 751 struct mxt_object *object; 752 u16 reg; 753 754 object = mxt_get_object(data, type); 755 if (!object || offset >= mxt_obj_size(object)) 756 return -EINVAL; 757 758 reg = object->start_address; 759 return mxt_write_reg(data->client, reg + offset, val); 760 } 761 762 static void mxt_input_button(struct mxt_data *data, u8 *message) 763 { 764 struct input_dev *input = data->input_dev; 765 int i; 766 767 for (i = 0; i < data->t19_num_keys; i++) { 768 if (data->t19_keymap[i] == KEY_RESERVED) 769 continue; 770 771 /* Active-low switch */ 772 input_report_key(input, data->t19_keymap[i], 773 !(message[1] & BIT(i))); 774 } 775 } 776 777 static void mxt_input_sync(struct mxt_data *data) 778 { 779 input_mt_report_pointer_emulation(data->input_dev, 780 data->t19_num_keys); 781 input_sync(data->input_dev); 782 } 783 784 static void mxt_proc_t9_message(struct mxt_data *data, u8 *message) 785 { 786 struct device *dev = &data->client->dev; 787 struct input_dev *input_dev = data->input_dev; 788 int id; 789 u8 status; 790 int x; 791 int y; 792 int area; 793 int amplitude; 794 795 id = message[0] - data->T9_reportid_min; 796 status = message[1]; 797 x = (message[2] << 4) | ((message[4] >> 4) & 0xf); 798 y = (message[3] << 4) | ((message[4] & 0xf)); 799 800 /* Handle 10/12 bit switching */ 801 if (data->max_x < 1024) 802 x >>= 2; 803 if (data->max_y < 1024) 804 y >>= 2; 805 806 area = message[5]; 807 amplitude = message[6]; 808 809 dev_dbg(dev, 810 "[%u] %c%c%c%c%c%c%c%c x: %5u y: %5u area: %3u amp: %3u\n", 811 id, 812 (status & MXT_T9_DETECT) ? 'D' : '.', 813 (status & MXT_T9_PRESS) ? 'P' : '.', 814 (status & MXT_T9_RELEASE) ? 'R' : '.', 815 (status & MXT_T9_MOVE) ? 'M' : '.', 816 (status & MXT_T9_VECTOR) ? 'V' : '.', 817 (status & MXT_T9_AMP) ? 'A' : '.', 818 (status & MXT_T9_SUPPRESS) ? 'S' : '.', 819 (status & MXT_T9_UNGRIP) ? 'U' : '.', 820 x, y, area, amplitude); 821 822 input_mt_slot(input_dev, id); 823 824 if (status & MXT_T9_DETECT) { 825 /* 826 * Multiple bits may be set if the host is slow to read 827 * the status messages, indicating all the events that 828 * have happened. 829 */ 830 if (status & MXT_T9_RELEASE) { 831 input_mt_report_slot_inactive(input_dev); 832 mxt_input_sync(data); 833 } 834 835 /* if active, pressure must be non-zero */ 836 if (!amplitude) 837 amplitude = MXT_PRESSURE_DEFAULT; 838 839 /* Touch active */ 840 input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 1); 841 input_report_abs(input_dev, ABS_MT_POSITION_X, x); 842 input_report_abs(input_dev, ABS_MT_POSITION_Y, y); 843 input_report_abs(input_dev, ABS_MT_PRESSURE, amplitude); 844 input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, area); 845 } else { 846 /* Touch no longer active, close out slot */ 847 input_mt_report_slot_inactive(input_dev); 848 } 849 850 data->update_input = true; 851 } 852 853 static void mxt_proc_t100_message(struct mxt_data *data, u8 *message) 854 { 855 struct device *dev = &data->client->dev; 856 struct input_dev *input_dev = data->input_dev; 857 int id; 858 u8 status; 859 u8 type = 0; 860 u16 x; 861 u16 y; 862 int distance = 0; 863 int tool = 0; 864 u8 major = 0; 865 u8 pressure = 0; 866 u8 orientation = 0; 867 868 id = message[0] - data->T100_reportid_min - 2; 869 870 /* ignore SCRSTATUS events */ 871 if (id < 0) 872 return; 873 874 status = message[1]; 875 x = get_unaligned_le16(&message[2]); 876 y = get_unaligned_le16(&message[4]); 877 878 if (status & MXT_T100_DETECT) { 879 type = (status & MXT_T100_TYPE_MASK) >> 4; 880 881 switch (type) { 882 case MXT_T100_TYPE_HOVERING_FINGER: 883 tool = MT_TOOL_FINGER; 884 distance = MXT_DISTANCE_HOVERING; 885 886 if (data->t100_aux_vect) 887 orientation = message[data->t100_aux_vect]; 888 889 break; 890 891 case MXT_T100_TYPE_FINGER: 892 case MXT_T100_TYPE_GLOVE: 893 tool = MT_TOOL_FINGER; 894 distance = MXT_DISTANCE_ACTIVE_TOUCH; 895 896 if (data->t100_aux_area) 897 major = message[data->t100_aux_area]; 898 899 if (data->t100_aux_ampl) 900 pressure = message[data->t100_aux_ampl]; 901 902 if (data->t100_aux_vect) 903 orientation = message[data->t100_aux_vect]; 904 905 break; 906 907 case MXT_T100_TYPE_PASSIVE_STYLUS: 908 tool = MT_TOOL_PEN; 909 910 /* 911 * Passive stylus is reported with size zero so 912 * hardcode. 913 */ 914 major = MXT_TOUCH_MAJOR_DEFAULT; 915 916 if (data->t100_aux_ampl) 917 pressure = message[data->t100_aux_ampl]; 918 919 break; 920 921 case MXT_T100_TYPE_LARGE_TOUCH: 922 /* Ignore suppressed touch */ 923 break; 924 925 default: 926 dev_dbg(dev, "Unexpected T100 type\n"); 927 return; 928 } 929 } 930 931 /* 932 * Values reported should be non-zero if tool is touching the 933 * device 934 */ 935 if (!pressure && type != MXT_T100_TYPE_HOVERING_FINGER) 936 pressure = MXT_PRESSURE_DEFAULT; 937 938 input_mt_slot(input_dev, id); 939 940 if (status & MXT_T100_DETECT) { 941 dev_dbg(dev, "[%u] type:%u x:%u y:%u a:%02X p:%02X v:%02X\n", 942 id, type, x, y, major, pressure, orientation); 943 944 input_mt_report_slot_state(input_dev, tool, 1); 945 input_report_abs(input_dev, ABS_MT_POSITION_X, x); 946 input_report_abs(input_dev, ABS_MT_POSITION_Y, y); 947 input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, major); 948 input_report_abs(input_dev, ABS_MT_PRESSURE, pressure); 949 input_report_abs(input_dev, ABS_MT_DISTANCE, distance); 950 input_report_abs(input_dev, ABS_MT_ORIENTATION, orientation); 951 } else { 952 dev_dbg(dev, "[%u] release\n", id); 953 954 /* close out slot */ 955 input_mt_report_slot_inactive(input_dev); 956 } 957 958 data->update_input = true; 959 } 960 961 static int mxt_proc_message(struct mxt_data *data, u8 *message) 962 { 963 u8 report_id = message[0]; 964 965 if (report_id == MXT_RPTID_NOMSG) 966 return 0; 967 968 if (report_id == data->T6_reportid) { 969 mxt_proc_t6_messages(data, message); 970 } else if (!data->input_dev) { 971 /* 972 * Do not report events if input device 973 * is not yet registered. 974 */ 975 mxt_dump_message(data, message); 976 } else if (report_id >= data->T9_reportid_min && 977 report_id <= data->T9_reportid_max) { 978 mxt_proc_t9_message(data, message); 979 } else if (report_id >= data->T100_reportid_min && 980 report_id <= data->T100_reportid_max) { 981 mxt_proc_t100_message(data, message); 982 } else if (report_id == data->T19_reportid) { 983 mxt_input_button(data, message); 984 data->update_input = true; 985 } else { 986 mxt_dump_message(data, message); 987 } 988 989 return 1; 990 } 991 992 static int mxt_read_and_process_messages(struct mxt_data *data, u8 count) 993 { 994 struct device *dev = &data->client->dev; 995 int ret; 996 int i; 997 u8 num_valid = 0; 998 999 /* Safety check for msg_buf */ 1000 if (count > data->max_reportid) 1001 return -EINVAL; 1002 1003 /* Process remaining messages if necessary */ 1004 ret = __mxt_read_reg(data->client, data->T5_address, 1005 data->T5_msg_size * count, data->msg_buf); 1006 if (ret) { 1007 dev_err(dev, "Failed to read %u messages (%d)\n", count, ret); 1008 return ret; 1009 } 1010 1011 for (i = 0; i < count; i++) { 1012 ret = mxt_proc_message(data, 1013 data->msg_buf + data->T5_msg_size * i); 1014 1015 if (ret == 1) 1016 num_valid++; 1017 } 1018 1019 /* return number of messages read */ 1020 return num_valid; 1021 } 1022 1023 static irqreturn_t mxt_process_messages_t44(struct mxt_data *data) 1024 { 1025 struct device *dev = &data->client->dev; 1026 int ret; 1027 u8 count, num_left; 1028 1029 /* Read T44 and T5 together */ 1030 ret = __mxt_read_reg(data->client, data->T44_address, 1031 data->T5_msg_size + 1, data->msg_buf); 1032 if (ret) { 1033 dev_err(dev, "Failed to read T44 and T5 (%d)\n", ret); 1034 return IRQ_NONE; 1035 } 1036 1037 count = data->msg_buf[0]; 1038 1039 /* 1040 * This condition may be caused by the CHG line being configured in 1041 * Mode 0. It results in unnecessary I2C operations but it is benign. 1042 */ 1043 if (count == 0) 1044 return IRQ_NONE; 1045 1046 if (count > data->max_reportid) { 1047 dev_warn(dev, "T44 count %d exceeded max report id\n", count); 1048 count = data->max_reportid; 1049 } 1050 1051 /* Process first message */ 1052 ret = mxt_proc_message(data, data->msg_buf + 1); 1053 if (ret < 0) { 1054 dev_warn(dev, "Unexpected invalid message\n"); 1055 return IRQ_NONE; 1056 } 1057 1058 num_left = count - 1; 1059 1060 /* Process remaining messages if necessary */ 1061 if (num_left) { 1062 ret = mxt_read_and_process_messages(data, num_left); 1063 if (ret < 0) 1064 goto end; 1065 else if (ret != num_left) 1066 dev_warn(dev, "Unexpected invalid message\n"); 1067 } 1068 1069 end: 1070 if (data->update_input) { 1071 mxt_input_sync(data); 1072 data->update_input = false; 1073 } 1074 1075 return IRQ_HANDLED; 1076 } 1077 1078 static int mxt_process_messages_until_invalid(struct mxt_data *data) 1079 { 1080 struct device *dev = &data->client->dev; 1081 int count, read; 1082 u8 tries = 2; 1083 1084 count = data->max_reportid; 1085 1086 /* Read messages until we force an invalid */ 1087 do { 1088 read = mxt_read_and_process_messages(data, count); 1089 if (read < count) 1090 return 0; 1091 } while (--tries); 1092 1093 if (data->update_input) { 1094 mxt_input_sync(data); 1095 data->update_input = false; 1096 } 1097 1098 dev_err(dev, "CHG pin isn't cleared\n"); 1099 return -EBUSY; 1100 } 1101 1102 static irqreturn_t mxt_process_messages(struct mxt_data *data) 1103 { 1104 int total_handled, num_handled; 1105 u8 count = data->last_message_count; 1106 1107 if (count < 1 || count > data->max_reportid) 1108 count = 1; 1109 1110 /* include final invalid message */ 1111 total_handled = mxt_read_and_process_messages(data, count + 1); 1112 if (total_handled < 0) 1113 return IRQ_NONE; 1114 /* if there were invalid messages, then we are done */ 1115 else if (total_handled <= count) 1116 goto update_count; 1117 1118 /* keep reading two msgs until one is invalid or reportid limit */ 1119 do { 1120 num_handled = mxt_read_and_process_messages(data, 2); 1121 if (num_handled < 0) 1122 return IRQ_NONE; 1123 1124 total_handled += num_handled; 1125 1126 if (num_handled < 2) 1127 break; 1128 } while (total_handled < data->num_touchids); 1129 1130 update_count: 1131 data->last_message_count = total_handled; 1132 1133 if (data->update_input) { 1134 mxt_input_sync(data); 1135 data->update_input = false; 1136 } 1137 1138 return IRQ_HANDLED; 1139 } 1140 1141 static irqreturn_t mxt_interrupt(int irq, void *dev_id) 1142 { 1143 struct mxt_data *data = dev_id; 1144 1145 if (data->in_bootloader) { 1146 /* bootloader state transition completion */ 1147 complete(&data->bl_completion); 1148 return IRQ_HANDLED; 1149 } 1150 1151 if (!data->object_table) 1152 return IRQ_HANDLED; 1153 1154 if (data->T44_address) { 1155 return mxt_process_messages_t44(data); 1156 } else { 1157 return mxt_process_messages(data); 1158 } 1159 } 1160 1161 static int mxt_t6_command(struct mxt_data *data, u16 cmd_offset, 1162 u8 value, bool wait) 1163 { 1164 u16 reg; 1165 u8 command_register; 1166 int timeout_counter = 0; 1167 int ret; 1168 1169 reg = data->T6_address + cmd_offset; 1170 1171 ret = mxt_write_reg(data->client, reg, value); 1172 if (ret) 1173 return ret; 1174 1175 if (!wait) 1176 return 0; 1177 1178 do { 1179 msleep(20); 1180 ret = __mxt_read_reg(data->client, reg, 1, &command_register); 1181 if (ret) 1182 return ret; 1183 } while (command_register != 0 && timeout_counter++ <= 100); 1184 1185 if (timeout_counter > 100) { 1186 dev_err(&data->client->dev, "Command failed!\n"); 1187 return -EIO; 1188 } 1189 1190 return 0; 1191 } 1192 1193 static int mxt_acquire_irq(struct mxt_data *data) 1194 { 1195 int error; 1196 1197 enable_irq(data->irq); 1198 1199 if (data->use_retrigen_workaround) { 1200 error = mxt_process_messages_until_invalid(data); 1201 if (error) 1202 return error; 1203 } 1204 1205 return 0; 1206 } 1207 1208 static int mxt_soft_reset(struct mxt_data *data) 1209 { 1210 struct device *dev = &data->client->dev; 1211 int ret = 0; 1212 1213 dev_info(dev, "Resetting device\n"); 1214 1215 disable_irq(data->irq); 1216 1217 reinit_completion(&data->reset_completion); 1218 1219 ret = mxt_t6_command(data, MXT_COMMAND_RESET, MXT_RESET_VALUE, false); 1220 if (ret) 1221 return ret; 1222 1223 /* Ignore CHG line for 100ms after reset */ 1224 msleep(MXT_RESET_INVALID_CHG); 1225 1226 mxt_acquire_irq(data); 1227 1228 ret = mxt_wait_for_completion(data, &data->reset_completion, 1229 MXT_RESET_TIMEOUT); 1230 if (ret) 1231 return ret; 1232 1233 return 0; 1234 } 1235 1236 static void mxt_update_crc(struct mxt_data *data, u8 cmd, u8 value) 1237 { 1238 /* 1239 * On failure, CRC is set to 0 and config will always be 1240 * downloaded. 1241 */ 1242 data->config_crc = 0; 1243 reinit_completion(&data->crc_completion); 1244 1245 mxt_t6_command(data, cmd, value, true); 1246 1247 /* 1248 * Wait for crc message. On failure, CRC is set to 0 and config will 1249 * always be downloaded. 1250 */ 1251 mxt_wait_for_completion(data, &data->crc_completion, MXT_CRC_TIMEOUT); 1252 } 1253 1254 static void mxt_calc_crc24(u32 *crc, u8 firstbyte, u8 secondbyte) 1255 { 1256 static const unsigned int crcpoly = 0x80001B; 1257 u32 result; 1258 u32 data_word; 1259 1260 data_word = (secondbyte << 8) | firstbyte; 1261 result = ((*crc << 1) ^ data_word); 1262 1263 if (result & 0x1000000) 1264 result ^= crcpoly; 1265 1266 *crc = result; 1267 } 1268 1269 static u32 mxt_calculate_crc(u8 *base, off_t start_off, off_t end_off) 1270 { 1271 u32 crc = 0; 1272 u8 *ptr = base + start_off; 1273 u8 *last_val = base + end_off - 1; 1274 1275 if (end_off < start_off) 1276 return -EINVAL; 1277 1278 while (ptr < last_val) { 1279 mxt_calc_crc24(&crc, *ptr, *(ptr + 1)); 1280 ptr += 2; 1281 } 1282 1283 /* if len is odd, fill the last byte with 0 */ 1284 if (ptr == last_val) 1285 mxt_calc_crc24(&crc, *ptr, 0); 1286 1287 /* Mask to 24-bit */ 1288 crc &= 0x00FFFFFF; 1289 1290 return crc; 1291 } 1292 1293 static int mxt_check_retrigen(struct mxt_data *data) 1294 { 1295 struct i2c_client *client = data->client; 1296 int error; 1297 int val; 1298 struct irq_data *irqd; 1299 1300 data->use_retrigen_workaround = false; 1301 1302 irqd = irq_get_irq_data(data->irq); 1303 if (!irqd) 1304 return -EINVAL; 1305 1306 if (irqd_is_level_type(irqd)) 1307 return 0; 1308 1309 if (data->T18_address) { 1310 error = __mxt_read_reg(client, 1311 data->T18_address + MXT_COMMS_CTRL, 1312 1, &val); 1313 if (error) 1314 return error; 1315 1316 if (val & MXT_COMMS_RETRIGEN) 1317 return 0; 1318 } 1319 1320 dev_warn(&client->dev, "Enabling RETRIGEN workaround\n"); 1321 data->use_retrigen_workaround = true; 1322 return 0; 1323 } 1324 1325 static int mxt_prepare_cfg_mem(struct mxt_data *data, struct mxt_cfg *cfg) 1326 { 1327 struct device *dev = &data->client->dev; 1328 struct mxt_object *object; 1329 unsigned int type, instance, size, byte_offset; 1330 int offset; 1331 int ret; 1332 int i; 1333 u16 reg; 1334 u8 val; 1335 1336 while (cfg->raw_pos < cfg->raw_size) { 1337 /* Read type, instance, length */ 1338 ret = sscanf(cfg->raw + cfg->raw_pos, "%x %x %x%n", 1339 &type, &instance, &size, &offset); 1340 if (ret == 0) { 1341 /* EOF */ 1342 break; 1343 } else if (ret != 3) { 1344 dev_err(dev, "Bad format: failed to parse object\n"); 1345 return -EINVAL; 1346 } 1347 cfg->raw_pos += offset; 1348 1349 object = mxt_get_object(data, type); 1350 if (!object) { 1351 /* Skip object */ 1352 for (i = 0; i < size; i++) { 1353 ret = sscanf(cfg->raw + cfg->raw_pos, "%hhx%n", 1354 &val, &offset); 1355 if (ret != 1) { 1356 dev_err(dev, "Bad format in T%d at %d\n", 1357 type, i); 1358 return -EINVAL; 1359 } 1360 cfg->raw_pos += offset; 1361 } 1362 continue; 1363 } 1364 1365 if (size > mxt_obj_size(object)) { 1366 /* 1367 * Either we are in fallback mode due to wrong 1368 * config or config from a later fw version, 1369 * or the file is corrupt or hand-edited. 1370 */ 1371 dev_warn(dev, "Discarding %zu byte(s) in T%u\n", 1372 size - mxt_obj_size(object), type); 1373 } else if (mxt_obj_size(object) > size) { 1374 /* 1375 * If firmware is upgraded, new bytes may be added to 1376 * end of objects. It is generally forward compatible 1377 * to zero these bytes - previous behaviour will be 1378 * retained. However this does invalidate the CRC and 1379 * will force fallback mode until the configuration is 1380 * updated. We warn here but do nothing else - the 1381 * malloc has zeroed the entire configuration. 1382 */ 1383 dev_warn(dev, "Zeroing %zu byte(s) in T%d\n", 1384 mxt_obj_size(object) - size, type); 1385 } 1386 1387 if (instance >= mxt_obj_instances(object)) { 1388 dev_err(dev, "Object instances exceeded!\n"); 1389 return -EINVAL; 1390 } 1391 1392 reg = object->start_address + mxt_obj_size(object) * instance; 1393 1394 for (i = 0; i < size; i++) { 1395 ret = sscanf(cfg->raw + cfg->raw_pos, "%hhx%n", 1396 &val, 1397 &offset); 1398 if (ret != 1) { 1399 dev_err(dev, "Bad format in T%d at %d\n", 1400 type, i); 1401 return -EINVAL; 1402 } 1403 cfg->raw_pos += offset; 1404 1405 if (i > mxt_obj_size(object)) 1406 continue; 1407 1408 byte_offset = reg + i - cfg->start_ofs; 1409 1410 if (byte_offset >= 0 && byte_offset < cfg->mem_size) { 1411 *(cfg->mem + byte_offset) = val; 1412 } else { 1413 dev_err(dev, "Bad object: reg:%d, T%d, ofs=%d\n", 1414 reg, object->type, byte_offset); 1415 return -EINVAL; 1416 } 1417 } 1418 } 1419 1420 return 0; 1421 } 1422 1423 static int mxt_upload_cfg_mem(struct mxt_data *data, struct mxt_cfg *cfg) 1424 { 1425 unsigned int byte_offset = 0; 1426 int error; 1427 1428 /* Write configuration as blocks */ 1429 while (byte_offset < cfg->mem_size) { 1430 unsigned int size = cfg->mem_size - byte_offset; 1431 1432 if (size > MXT_MAX_BLOCK_WRITE) 1433 size = MXT_MAX_BLOCK_WRITE; 1434 1435 error = __mxt_write_reg(data->client, 1436 cfg->start_ofs + byte_offset, 1437 size, cfg->mem + byte_offset); 1438 if (error) { 1439 dev_err(&data->client->dev, 1440 "Config write error, ret=%d\n", error); 1441 return error; 1442 } 1443 1444 byte_offset += size; 1445 } 1446 1447 return 0; 1448 } 1449 1450 static int mxt_init_t7_power_cfg(struct mxt_data *data); 1451 1452 /* 1453 * mxt_update_cfg - download configuration to chip 1454 * 1455 * Atmel Raw Config File Format 1456 * 1457 * The first four lines of the raw config file contain: 1458 * 1) Version 1459 * 2) Chip ID Information (first 7 bytes of device memory) 1460 * 3) Chip Information Block 24-bit CRC Checksum 1461 * 4) Chip Configuration 24-bit CRC Checksum 1462 * 1463 * The rest of the file consists of one line per object instance: 1464 * <TYPE> <INSTANCE> <SIZE> <CONTENTS> 1465 * 1466 * <TYPE> - 2-byte object type as hex 1467 * <INSTANCE> - 2-byte object instance number as hex 1468 * <SIZE> - 2-byte object size as hex 1469 * <CONTENTS> - array of <SIZE> 1-byte hex values 1470 */ 1471 static int mxt_update_cfg(struct mxt_data *data, const struct firmware *fw) 1472 { 1473 struct device *dev = &data->client->dev; 1474 struct mxt_cfg cfg; 1475 int ret; 1476 int offset; 1477 int i; 1478 u32 info_crc, config_crc, calculated_crc; 1479 u16 crc_start = 0; 1480 1481 /* Make zero terminated copy of the OBP_RAW file */ 1482 cfg.raw = kmemdup_nul(fw->data, fw->size, GFP_KERNEL); 1483 if (!cfg.raw) 1484 return -ENOMEM; 1485 1486 cfg.raw_size = fw->size; 1487 1488 mxt_update_crc(data, MXT_COMMAND_REPORTALL, 1); 1489 1490 if (strncmp(cfg.raw, MXT_CFG_MAGIC, strlen(MXT_CFG_MAGIC))) { 1491 dev_err(dev, "Unrecognised config file\n"); 1492 ret = -EINVAL; 1493 goto release_raw; 1494 } 1495 1496 cfg.raw_pos = strlen(MXT_CFG_MAGIC); 1497 1498 /* Load information block and check */ 1499 for (i = 0; i < sizeof(struct mxt_info); i++) { 1500 ret = sscanf(cfg.raw + cfg.raw_pos, "%hhx%n", 1501 (unsigned char *)&cfg.info + i, 1502 &offset); 1503 if (ret != 1) { 1504 dev_err(dev, "Bad format\n"); 1505 ret = -EINVAL; 1506 goto release_raw; 1507 } 1508 1509 cfg.raw_pos += offset; 1510 } 1511 1512 if (cfg.info.family_id != data->info->family_id) { 1513 dev_err(dev, "Family ID mismatch!\n"); 1514 ret = -EINVAL; 1515 goto release_raw; 1516 } 1517 1518 if (cfg.info.variant_id != data->info->variant_id) { 1519 dev_err(dev, "Variant ID mismatch!\n"); 1520 ret = -EINVAL; 1521 goto release_raw; 1522 } 1523 1524 /* Read CRCs */ 1525 ret = sscanf(cfg.raw + cfg.raw_pos, "%x%n", &info_crc, &offset); 1526 if (ret != 1) { 1527 dev_err(dev, "Bad format: failed to parse Info CRC\n"); 1528 ret = -EINVAL; 1529 goto release_raw; 1530 } 1531 cfg.raw_pos += offset; 1532 1533 ret = sscanf(cfg.raw + cfg.raw_pos, "%x%n", &config_crc, &offset); 1534 if (ret != 1) { 1535 dev_err(dev, "Bad format: failed to parse Config CRC\n"); 1536 ret = -EINVAL; 1537 goto release_raw; 1538 } 1539 cfg.raw_pos += offset; 1540 1541 /* 1542 * The Info Block CRC is calculated over mxt_info and the object 1543 * table. If it does not match then we are trying to load the 1544 * configuration from a different chip or firmware version, so 1545 * the configuration CRC is invalid anyway. 1546 */ 1547 if (info_crc == data->info_crc) { 1548 if (config_crc == 0 || data->config_crc == 0) { 1549 dev_info(dev, "CRC zero, attempting to apply config\n"); 1550 } else if (config_crc == data->config_crc) { 1551 dev_dbg(dev, "Config CRC 0x%06X: OK\n", 1552 data->config_crc); 1553 ret = 0; 1554 goto release_raw; 1555 } else { 1556 dev_info(dev, "Config CRC 0x%06X: does not match file 0x%06X\n", 1557 data->config_crc, config_crc); 1558 } 1559 } else { 1560 dev_warn(dev, 1561 "Warning: Info CRC error - device=0x%06X file=0x%06X\n", 1562 data->info_crc, info_crc); 1563 } 1564 1565 /* Malloc memory to store configuration */ 1566 cfg.start_ofs = MXT_OBJECT_START + 1567 data->info->object_num * sizeof(struct mxt_object) + 1568 MXT_INFO_CHECKSUM_SIZE; 1569 cfg.mem_size = data->mem_size - cfg.start_ofs; 1570 cfg.mem = kzalloc(cfg.mem_size, GFP_KERNEL); 1571 if (!cfg.mem) { 1572 ret = -ENOMEM; 1573 goto release_raw; 1574 } 1575 1576 ret = mxt_prepare_cfg_mem(data, &cfg); 1577 if (ret) 1578 goto release_mem; 1579 1580 /* Calculate crc of the received configs (not the raw config file) */ 1581 if (data->T71_address) 1582 crc_start = data->T71_address; 1583 else if (data->T7_address) 1584 crc_start = data->T7_address; 1585 else 1586 dev_warn(dev, "Could not find CRC start\n"); 1587 1588 if (crc_start > cfg.start_ofs) { 1589 calculated_crc = mxt_calculate_crc(cfg.mem, 1590 crc_start - cfg.start_ofs, 1591 cfg.mem_size); 1592 1593 if (config_crc > 0 && config_crc != calculated_crc) 1594 dev_warn(dev, "Config CRC in file inconsistent, calculated=%06X, file=%06X\n", 1595 calculated_crc, config_crc); 1596 } 1597 1598 ret = mxt_upload_cfg_mem(data, &cfg); 1599 if (ret) 1600 goto release_mem; 1601 1602 mxt_update_crc(data, MXT_COMMAND_BACKUPNV, MXT_BACKUP_VALUE); 1603 1604 ret = mxt_check_retrigen(data); 1605 if (ret) 1606 goto release_mem; 1607 1608 ret = mxt_soft_reset(data); 1609 if (ret) 1610 goto release_mem; 1611 1612 dev_info(dev, "Config successfully updated\n"); 1613 1614 /* T7 config may have changed */ 1615 mxt_init_t7_power_cfg(data); 1616 1617 release_mem: 1618 kfree(cfg.mem); 1619 release_raw: 1620 kfree(cfg.raw); 1621 return ret; 1622 } 1623 1624 static void mxt_free_input_device(struct mxt_data *data) 1625 { 1626 if (data->input_dev) { 1627 input_unregister_device(data->input_dev); 1628 data->input_dev = NULL; 1629 } 1630 } 1631 1632 static void mxt_free_object_table(struct mxt_data *data) 1633 { 1634 #ifdef CONFIG_TOUCHSCREEN_ATMEL_MXT_T37 1635 video_unregister_device(&data->dbg.vdev); 1636 v4l2_device_unregister(&data->dbg.v4l2); 1637 #endif 1638 data->object_table = NULL; 1639 data->info = NULL; 1640 kfree(data->raw_info_block); 1641 data->raw_info_block = NULL; 1642 kfree(data->msg_buf); 1643 data->msg_buf = NULL; 1644 data->T5_address = 0; 1645 data->T5_msg_size = 0; 1646 data->T6_reportid = 0; 1647 data->T7_address = 0; 1648 data->T71_address = 0; 1649 data->T9_reportid_min = 0; 1650 data->T9_reportid_max = 0; 1651 data->T18_address = 0; 1652 data->T19_reportid = 0; 1653 data->T44_address = 0; 1654 data->T100_reportid_min = 0; 1655 data->T100_reportid_max = 0; 1656 data->max_reportid = 0; 1657 } 1658 1659 static int mxt_parse_object_table(struct mxt_data *data, 1660 struct mxt_object *object_table) 1661 { 1662 struct i2c_client *client = data->client; 1663 int i; 1664 u8 reportid; 1665 u16 end_address; 1666 1667 /* Valid Report IDs start counting from 1 */ 1668 reportid = 1; 1669 data->mem_size = 0; 1670 for (i = 0; i < data->info->object_num; i++) { 1671 struct mxt_object *object = object_table + i; 1672 u8 min_id, max_id; 1673 1674 le16_to_cpus(&object->start_address); 1675 1676 if (object->num_report_ids) { 1677 min_id = reportid; 1678 reportid += object->num_report_ids * 1679 mxt_obj_instances(object); 1680 max_id = reportid - 1; 1681 } else { 1682 min_id = 0; 1683 max_id = 0; 1684 } 1685 1686 dev_dbg(&data->client->dev, 1687 "T%u Start:%u Size:%zu Instances:%zu Report IDs:%u-%u\n", 1688 object->type, object->start_address, 1689 mxt_obj_size(object), mxt_obj_instances(object), 1690 min_id, max_id); 1691 1692 switch (object->type) { 1693 case MXT_GEN_MESSAGE_T5: 1694 if (data->info->family_id == 0x80 && 1695 data->info->version < 0x20) { 1696 /* 1697 * On mXT224 firmware versions prior to V2.0 1698 * read and discard unused CRC byte otherwise 1699 * DMA reads are misaligned. 1700 */ 1701 data->T5_msg_size = mxt_obj_size(object); 1702 } else { 1703 /* CRC not enabled, so skip last byte */ 1704 data->T5_msg_size = mxt_obj_size(object) - 1; 1705 } 1706 data->T5_address = object->start_address; 1707 break; 1708 case MXT_GEN_COMMAND_T6: 1709 data->T6_reportid = min_id; 1710 data->T6_address = object->start_address; 1711 break; 1712 case MXT_GEN_POWER_T7: 1713 data->T7_address = object->start_address; 1714 break; 1715 case MXT_SPT_DYNAMICCONFIGURATIONCONTAINER_T71: 1716 data->T71_address = object->start_address; 1717 break; 1718 case MXT_TOUCH_MULTI_T9: 1719 data->multitouch = MXT_TOUCH_MULTI_T9; 1720 /* Only handle messages from first T9 instance */ 1721 data->T9_reportid_min = min_id; 1722 data->T9_reportid_max = min_id + 1723 object->num_report_ids - 1; 1724 data->num_touchids = object->num_report_ids; 1725 break; 1726 case MXT_SPT_COMMSCONFIG_T18: 1727 data->T18_address = object->start_address; 1728 break; 1729 case MXT_SPT_MESSAGECOUNT_T44: 1730 data->T44_address = object->start_address; 1731 break; 1732 case MXT_SPT_GPIOPWM_T19: 1733 data->T19_reportid = min_id; 1734 break; 1735 case MXT_TOUCH_MULTITOUCHSCREEN_T100: 1736 data->multitouch = MXT_TOUCH_MULTITOUCHSCREEN_T100; 1737 data->T100_reportid_min = min_id; 1738 data->T100_reportid_max = max_id; 1739 /* first two report IDs reserved */ 1740 data->num_touchids = object->num_report_ids - 2; 1741 break; 1742 } 1743 1744 end_address = object->start_address 1745 + mxt_obj_size(object) * mxt_obj_instances(object) - 1; 1746 1747 if (end_address >= data->mem_size) 1748 data->mem_size = end_address + 1; 1749 } 1750 1751 /* Store maximum reportid */ 1752 data->max_reportid = reportid; 1753 1754 /* If T44 exists, T5 position has to be directly after */ 1755 if (data->T44_address && (data->T5_address != data->T44_address + 1)) { 1756 dev_err(&client->dev, "Invalid T44 position\n"); 1757 return -EINVAL; 1758 } 1759 1760 data->msg_buf = kcalloc(data->max_reportid, 1761 data->T5_msg_size, GFP_KERNEL); 1762 if (!data->msg_buf) 1763 return -ENOMEM; 1764 1765 return 0; 1766 } 1767 1768 static int mxt_read_info_block(struct mxt_data *data) 1769 { 1770 struct i2c_client *client = data->client; 1771 int error; 1772 size_t size; 1773 void *id_buf, *buf; 1774 uint8_t num_objects; 1775 u32 calculated_crc; 1776 u8 *crc_ptr; 1777 1778 /* If info block already allocated, free it */ 1779 if (data->raw_info_block) 1780 mxt_free_object_table(data); 1781 1782 /* Read 7-byte ID information block starting at address 0 */ 1783 size = sizeof(struct mxt_info); 1784 id_buf = kzalloc(size, GFP_KERNEL); 1785 if (!id_buf) 1786 return -ENOMEM; 1787 1788 error = __mxt_read_reg(client, 0, size, id_buf); 1789 if (error) 1790 goto err_free_mem; 1791 1792 /* Resize buffer to give space for rest of info block */ 1793 num_objects = ((struct mxt_info *)id_buf)->object_num; 1794 size += (num_objects * sizeof(struct mxt_object)) 1795 + MXT_INFO_CHECKSUM_SIZE; 1796 1797 buf = krealloc(id_buf, size, GFP_KERNEL); 1798 if (!buf) { 1799 error = -ENOMEM; 1800 goto err_free_mem; 1801 } 1802 id_buf = buf; 1803 1804 /* Read rest of info block */ 1805 error = __mxt_read_reg(client, MXT_OBJECT_START, 1806 size - MXT_OBJECT_START, 1807 id_buf + MXT_OBJECT_START); 1808 if (error) 1809 goto err_free_mem; 1810 1811 /* Extract & calculate checksum */ 1812 crc_ptr = id_buf + size - MXT_INFO_CHECKSUM_SIZE; 1813 data->info_crc = crc_ptr[0] | (crc_ptr[1] << 8) | (crc_ptr[2] << 16); 1814 1815 calculated_crc = mxt_calculate_crc(id_buf, 0, 1816 size - MXT_INFO_CHECKSUM_SIZE); 1817 1818 /* 1819 * CRC mismatch can be caused by data corruption due to I2C comms 1820 * issue or else device is not using Object Based Protocol (eg i2c-hid) 1821 */ 1822 if ((data->info_crc == 0) || (data->info_crc != calculated_crc)) { 1823 dev_err(&client->dev, 1824 "Info Block CRC error calculated=0x%06X read=0x%06X\n", 1825 calculated_crc, data->info_crc); 1826 error = -EIO; 1827 goto err_free_mem; 1828 } 1829 1830 data->raw_info_block = id_buf; 1831 data->info = (struct mxt_info *)id_buf; 1832 1833 dev_info(&client->dev, 1834 "Family: %u Variant: %u Firmware V%u.%u.%02X Objects: %u\n", 1835 data->info->family_id, data->info->variant_id, 1836 data->info->version >> 4, data->info->version & 0xf, 1837 data->info->build, data->info->object_num); 1838 1839 /* Parse object table information */ 1840 error = mxt_parse_object_table(data, id_buf + MXT_OBJECT_START); 1841 if (error) { 1842 dev_err(&client->dev, "Error %d parsing object table\n", error); 1843 mxt_free_object_table(data); 1844 goto err_free_mem; 1845 } 1846 1847 data->object_table = (struct mxt_object *)(id_buf + MXT_OBJECT_START); 1848 1849 return 0; 1850 1851 err_free_mem: 1852 kfree(id_buf); 1853 return error; 1854 } 1855 1856 static int mxt_read_t9_resolution(struct mxt_data *data) 1857 { 1858 struct i2c_client *client = data->client; 1859 int error; 1860 struct t9_range range; 1861 unsigned char orient; 1862 struct mxt_object *object; 1863 1864 object = mxt_get_object(data, MXT_TOUCH_MULTI_T9); 1865 if (!object) 1866 return -EINVAL; 1867 1868 error = __mxt_read_reg(client, 1869 object->start_address + MXT_T9_XSIZE, 1870 sizeof(data->xsize), &data->xsize); 1871 if (error) 1872 return error; 1873 1874 error = __mxt_read_reg(client, 1875 object->start_address + MXT_T9_YSIZE, 1876 sizeof(data->ysize), &data->ysize); 1877 if (error) 1878 return error; 1879 1880 error = __mxt_read_reg(client, 1881 object->start_address + MXT_T9_RANGE, 1882 sizeof(range), &range); 1883 if (error) 1884 return error; 1885 1886 data->max_x = get_unaligned_le16(&range.x); 1887 data->max_y = get_unaligned_le16(&range.y); 1888 1889 error = __mxt_read_reg(client, 1890 object->start_address + MXT_T9_ORIENT, 1891 1, &orient); 1892 if (error) 1893 return error; 1894 1895 data->xy_switch = orient & MXT_T9_ORIENT_SWITCH; 1896 data->invertx = orient & MXT_T9_ORIENT_INVERTX; 1897 data->inverty = orient & MXT_T9_ORIENT_INVERTY; 1898 1899 return 0; 1900 } 1901 1902 static int mxt_read_t100_config(struct mxt_data *data) 1903 { 1904 struct i2c_client *client = data->client; 1905 int error; 1906 struct mxt_object *object; 1907 u16 range_x, range_y; 1908 u8 cfg, tchaux; 1909 u8 aux; 1910 1911 object = mxt_get_object(data, MXT_TOUCH_MULTITOUCHSCREEN_T100); 1912 if (!object) 1913 return -EINVAL; 1914 1915 /* read touchscreen dimensions */ 1916 error = __mxt_read_reg(client, 1917 object->start_address + MXT_T100_XRANGE, 1918 sizeof(range_x), &range_x); 1919 if (error) 1920 return error; 1921 1922 data->max_x = get_unaligned_le16(&range_x); 1923 1924 error = __mxt_read_reg(client, 1925 object->start_address + MXT_T100_YRANGE, 1926 sizeof(range_y), &range_y); 1927 if (error) 1928 return error; 1929 1930 data->max_y = get_unaligned_le16(&range_y); 1931 1932 error = __mxt_read_reg(client, 1933 object->start_address + MXT_T100_XSIZE, 1934 sizeof(data->xsize), &data->xsize); 1935 if (error) 1936 return error; 1937 1938 error = __mxt_read_reg(client, 1939 object->start_address + MXT_T100_YSIZE, 1940 sizeof(data->ysize), &data->ysize); 1941 if (error) 1942 return error; 1943 1944 /* read orientation config */ 1945 error = __mxt_read_reg(client, 1946 object->start_address + MXT_T100_CFG1, 1947 1, &cfg); 1948 if (error) 1949 return error; 1950 1951 data->xy_switch = cfg & MXT_T100_CFG_SWITCHXY; 1952 data->invertx = cfg & MXT_T100_CFG_INVERTX; 1953 data->inverty = cfg & MXT_T100_CFG_INVERTY; 1954 1955 /* allocate aux bytes */ 1956 error = __mxt_read_reg(client, 1957 object->start_address + MXT_T100_TCHAUX, 1958 1, &tchaux); 1959 if (error) 1960 return error; 1961 1962 aux = 6; 1963 1964 if (tchaux & MXT_T100_TCHAUX_VECT) 1965 data->t100_aux_vect = aux++; 1966 1967 if (tchaux & MXT_T100_TCHAUX_AMPL) 1968 data->t100_aux_ampl = aux++; 1969 1970 if (tchaux & MXT_T100_TCHAUX_AREA) 1971 data->t100_aux_area = aux++; 1972 1973 dev_dbg(&client->dev, 1974 "T100 aux mappings vect:%u ampl:%u area:%u\n", 1975 data->t100_aux_vect, data->t100_aux_ampl, data->t100_aux_area); 1976 1977 return 0; 1978 } 1979 1980 static int mxt_input_open(struct input_dev *dev); 1981 static void mxt_input_close(struct input_dev *dev); 1982 1983 static void mxt_set_up_as_touchpad(struct input_dev *input_dev, 1984 struct mxt_data *data) 1985 { 1986 int i; 1987 1988 input_dev->name = "Atmel maXTouch Touchpad"; 1989 1990 __set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit); 1991 1992 input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM); 1993 input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM); 1994 input_abs_set_res(input_dev, ABS_MT_POSITION_X, 1995 MXT_PIXELS_PER_MM); 1996 input_abs_set_res(input_dev, ABS_MT_POSITION_Y, 1997 MXT_PIXELS_PER_MM); 1998 1999 for (i = 0; i < data->t19_num_keys; i++) 2000 if (data->t19_keymap[i] != KEY_RESERVED) 2001 input_set_capability(input_dev, EV_KEY, 2002 data->t19_keymap[i]); 2003 } 2004 2005 static int mxt_initialize_input_device(struct mxt_data *data) 2006 { 2007 struct device *dev = &data->client->dev; 2008 struct input_dev *input_dev; 2009 int error; 2010 unsigned int num_mt_slots; 2011 unsigned int mt_flags = 0; 2012 2013 switch (data->multitouch) { 2014 case MXT_TOUCH_MULTI_T9: 2015 num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1; 2016 error = mxt_read_t9_resolution(data); 2017 if (error) 2018 dev_warn(dev, "Failed to initialize T9 resolution\n"); 2019 break; 2020 2021 case MXT_TOUCH_MULTITOUCHSCREEN_T100: 2022 num_mt_slots = data->num_touchids; 2023 error = mxt_read_t100_config(data); 2024 if (error) 2025 dev_warn(dev, "Failed to read T100 config\n"); 2026 break; 2027 2028 default: 2029 dev_err(dev, "Invalid multitouch object\n"); 2030 return -EINVAL; 2031 } 2032 2033 /* Handle default values and orientation switch */ 2034 if (data->max_x == 0) 2035 data->max_x = 1023; 2036 2037 if (data->max_y == 0) 2038 data->max_y = 1023; 2039 2040 if (data->xy_switch) 2041 swap(data->max_x, data->max_y); 2042 2043 dev_info(dev, "Touchscreen size X%uY%u\n", data->max_x, data->max_y); 2044 2045 /* Register input device */ 2046 input_dev = input_allocate_device(); 2047 if (!input_dev) 2048 return -ENOMEM; 2049 2050 input_dev->name = "Atmel maXTouch Touchscreen"; 2051 input_dev->phys = data->phys; 2052 input_dev->id.bustype = BUS_I2C; 2053 input_dev->dev.parent = dev; 2054 input_dev->open = mxt_input_open; 2055 input_dev->close = mxt_input_close; 2056 2057 input_set_capability(input_dev, EV_KEY, BTN_TOUCH); 2058 2059 /* For single touch */ 2060 input_set_abs_params(input_dev, ABS_X, 0, data->max_x, 0, 0); 2061 input_set_abs_params(input_dev, ABS_Y, 0, data->max_y, 0, 0); 2062 2063 if (data->multitouch == MXT_TOUCH_MULTI_T9 || 2064 (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && 2065 data->t100_aux_ampl)) { 2066 input_set_abs_params(input_dev, ABS_PRESSURE, 0, 255, 0, 0); 2067 } 2068 2069 /* If device has buttons we assume it is a touchpad */ 2070 if (data->t19_num_keys) { 2071 mxt_set_up_as_touchpad(input_dev, data); 2072 mt_flags |= INPUT_MT_POINTER; 2073 } else { 2074 mt_flags |= INPUT_MT_DIRECT; 2075 } 2076 2077 /* For multi touch */ 2078 error = input_mt_init_slots(input_dev, num_mt_slots, mt_flags); 2079 if (error) { 2080 dev_err(dev, "Error %d initialising slots\n", error); 2081 goto err_free_mem; 2082 } 2083 2084 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100) { 2085 input_set_abs_params(input_dev, ABS_MT_TOOL_TYPE, 2086 0, MT_TOOL_MAX, 0, 0); 2087 input_set_abs_params(input_dev, ABS_MT_DISTANCE, 2088 MXT_DISTANCE_ACTIVE_TOUCH, 2089 MXT_DISTANCE_HOVERING, 2090 0, 0); 2091 } 2092 2093 input_set_abs_params(input_dev, ABS_MT_POSITION_X, 2094 0, data->max_x, 0, 0); 2095 input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 2096 0, data->max_y, 0, 0); 2097 2098 if (data->multitouch == MXT_TOUCH_MULTI_T9 || 2099 (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && 2100 data->t100_aux_area)) { 2101 input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 2102 0, MXT_MAX_AREA, 0, 0); 2103 } 2104 2105 if (data->multitouch == MXT_TOUCH_MULTI_T9 || 2106 (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && 2107 data->t100_aux_ampl)) { 2108 input_set_abs_params(input_dev, ABS_MT_PRESSURE, 2109 0, 255, 0, 0); 2110 } 2111 2112 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && 2113 data->t100_aux_vect) { 2114 input_set_abs_params(input_dev, ABS_MT_ORIENTATION, 2115 0, 255, 0, 0); 2116 } 2117 2118 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && 2119 data->t100_aux_vect) { 2120 input_set_abs_params(input_dev, ABS_MT_ORIENTATION, 2121 0, 255, 0, 0); 2122 } 2123 2124 input_set_drvdata(input_dev, data); 2125 2126 error = input_register_device(input_dev); 2127 if (error) { 2128 dev_err(dev, "Error %d registering input device\n", error); 2129 goto err_free_mem; 2130 } 2131 2132 data->input_dev = input_dev; 2133 2134 return 0; 2135 2136 err_free_mem: 2137 input_free_device(input_dev); 2138 return error; 2139 } 2140 2141 static int mxt_configure_objects(struct mxt_data *data, 2142 const struct firmware *cfg); 2143 2144 static void mxt_config_cb(const struct firmware *cfg, void *ctx) 2145 { 2146 mxt_configure_objects(ctx, cfg); 2147 release_firmware(cfg); 2148 } 2149 2150 static int mxt_initialize(struct mxt_data *data) 2151 { 2152 struct i2c_client *client = data->client; 2153 int recovery_attempts = 0; 2154 int error; 2155 2156 while (1) { 2157 error = mxt_read_info_block(data); 2158 if (!error) 2159 break; 2160 2161 /* Check bootloader state */ 2162 error = mxt_probe_bootloader(data, false); 2163 if (error) { 2164 dev_info(&client->dev, "Trying alternate bootloader address\n"); 2165 error = mxt_probe_bootloader(data, true); 2166 if (error) { 2167 /* Chip is not in appmode or bootloader mode */ 2168 return error; 2169 } 2170 } 2171 2172 /* OK, we are in bootloader, see if we can recover */ 2173 if (++recovery_attempts > 1) { 2174 dev_err(&client->dev, "Could not recover from bootloader mode\n"); 2175 /* 2176 * We can reflash from this state, so do not 2177 * abort initialization. 2178 */ 2179 data->in_bootloader = true; 2180 return 0; 2181 } 2182 2183 /* Attempt to exit bootloader into app mode */ 2184 mxt_send_bootloader_cmd(data, false); 2185 msleep(MXT_FW_RESET_TIME); 2186 } 2187 2188 error = mxt_acquire_irq(data); 2189 if (error) 2190 return error; 2191 2192 error = mxt_check_retrigen(data); 2193 if (error) 2194 return error; 2195 2196 error = request_firmware_nowait(THIS_MODULE, true, MXT_CFG_NAME, 2197 &client->dev, GFP_KERNEL, data, 2198 mxt_config_cb); 2199 if (error) { 2200 dev_err(&client->dev, "Failed to invoke firmware loader: %d\n", 2201 error); 2202 return error; 2203 } 2204 2205 return 0; 2206 } 2207 2208 static int mxt_set_t7_power_cfg(struct mxt_data *data, u8 sleep) 2209 { 2210 struct device *dev = &data->client->dev; 2211 int error; 2212 struct t7_config *new_config; 2213 struct t7_config deepsleep = { .active = 0, .idle = 0 }; 2214 2215 if (sleep == MXT_POWER_CFG_DEEPSLEEP) 2216 new_config = &deepsleep; 2217 else 2218 new_config = &data->t7_cfg; 2219 2220 error = __mxt_write_reg(data->client, data->T7_address, 2221 sizeof(data->t7_cfg), new_config); 2222 if (error) 2223 return error; 2224 2225 dev_dbg(dev, "Set T7 ACTV:%d IDLE:%d\n", 2226 new_config->active, new_config->idle); 2227 2228 return 0; 2229 } 2230 2231 static int mxt_init_t7_power_cfg(struct mxt_data *data) 2232 { 2233 struct device *dev = &data->client->dev; 2234 int error; 2235 bool retry = false; 2236 2237 recheck: 2238 error = __mxt_read_reg(data->client, data->T7_address, 2239 sizeof(data->t7_cfg), &data->t7_cfg); 2240 if (error) 2241 return error; 2242 2243 if (data->t7_cfg.active == 0 || data->t7_cfg.idle == 0) { 2244 if (!retry) { 2245 dev_dbg(dev, "T7 cfg zero, resetting\n"); 2246 mxt_soft_reset(data); 2247 retry = true; 2248 goto recheck; 2249 } else { 2250 dev_dbg(dev, "T7 cfg zero after reset, overriding\n"); 2251 data->t7_cfg.active = 20; 2252 data->t7_cfg.idle = 100; 2253 return mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN); 2254 } 2255 } 2256 2257 dev_dbg(dev, "Initialized power cfg: ACTV %d, IDLE %d\n", 2258 data->t7_cfg.active, data->t7_cfg.idle); 2259 return 0; 2260 } 2261 2262 #ifdef CONFIG_TOUCHSCREEN_ATMEL_MXT_T37 2263 static const struct v4l2_file_operations mxt_video_fops = { 2264 .owner = THIS_MODULE, 2265 .open = v4l2_fh_open, 2266 .release = vb2_fop_release, 2267 .unlocked_ioctl = video_ioctl2, 2268 .read = vb2_fop_read, 2269 .mmap = vb2_fop_mmap, 2270 .poll = vb2_fop_poll, 2271 }; 2272 2273 static u16 mxt_get_debug_value(struct mxt_data *data, unsigned int x, 2274 unsigned int y) 2275 { 2276 struct mxt_info *info = data->info; 2277 struct mxt_dbg *dbg = &data->dbg; 2278 unsigned int ofs, page; 2279 unsigned int col = 0; 2280 unsigned int col_width; 2281 2282 if (info->family_id == MXT_FAMILY_1386) { 2283 col_width = info->matrix_ysize / MXT1386_COLUMNS; 2284 col = y / col_width; 2285 y = y % col_width; 2286 } else { 2287 col_width = info->matrix_ysize; 2288 } 2289 2290 ofs = (y + (x * col_width)) * sizeof(u16); 2291 page = ofs / MXT_DIAGNOSTIC_SIZE; 2292 ofs %= MXT_DIAGNOSTIC_SIZE; 2293 2294 if (info->family_id == MXT_FAMILY_1386) 2295 page += col * MXT1386_PAGES_PER_COLUMN; 2296 2297 return get_unaligned_le16(&dbg->t37_buf[page].data[ofs]); 2298 } 2299 2300 static int mxt_convert_debug_pages(struct mxt_data *data, u16 *outbuf) 2301 { 2302 struct mxt_dbg *dbg = &data->dbg; 2303 unsigned int x = 0; 2304 unsigned int y = 0; 2305 unsigned int i, rx, ry; 2306 2307 for (i = 0; i < dbg->t37_nodes; i++) { 2308 /* Handle orientation */ 2309 rx = data->xy_switch ? y : x; 2310 ry = data->xy_switch ? x : y; 2311 rx = data->invertx ? (data->xsize - 1 - rx) : rx; 2312 ry = data->inverty ? (data->ysize - 1 - ry) : ry; 2313 2314 outbuf[i] = mxt_get_debug_value(data, rx, ry); 2315 2316 /* Next value */ 2317 if (++x >= (data->xy_switch ? data->ysize : data->xsize)) { 2318 x = 0; 2319 y++; 2320 } 2321 } 2322 2323 return 0; 2324 } 2325 2326 static int mxt_read_diagnostic_debug(struct mxt_data *data, u8 mode, 2327 u16 *outbuf) 2328 { 2329 struct mxt_dbg *dbg = &data->dbg; 2330 int retries = 0; 2331 int page; 2332 int ret; 2333 u8 cmd = mode; 2334 struct t37_debug *p; 2335 u8 cmd_poll; 2336 2337 for (page = 0; page < dbg->t37_pages; page++) { 2338 p = dbg->t37_buf + page; 2339 2340 ret = mxt_write_reg(data->client, dbg->diag_cmd_address, 2341 cmd); 2342 if (ret) 2343 return ret; 2344 2345 retries = 0; 2346 msleep(20); 2347 wait_cmd: 2348 /* Read back command byte */ 2349 ret = __mxt_read_reg(data->client, dbg->diag_cmd_address, 2350 sizeof(cmd_poll), &cmd_poll); 2351 if (ret) 2352 return ret; 2353 2354 /* Field is cleared once the command has been processed */ 2355 if (cmd_poll) { 2356 if (retries++ > 100) 2357 return -EINVAL; 2358 2359 msleep(20); 2360 goto wait_cmd; 2361 } 2362 2363 /* Read T37 page */ 2364 ret = __mxt_read_reg(data->client, dbg->t37_address, 2365 sizeof(struct t37_debug), p); 2366 if (ret) 2367 return ret; 2368 2369 if (p->mode != mode || p->page != page) { 2370 dev_err(&data->client->dev, "T37 page mismatch\n"); 2371 return -EINVAL; 2372 } 2373 2374 dev_dbg(&data->client->dev, "%s page:%d retries:%d\n", 2375 __func__, page, retries); 2376 2377 /* For remaining pages, write PAGEUP rather than mode */ 2378 cmd = MXT_DIAGNOSTIC_PAGEUP; 2379 } 2380 2381 return mxt_convert_debug_pages(data, outbuf); 2382 } 2383 2384 static int mxt_queue_setup(struct vb2_queue *q, 2385 unsigned int *nbuffers, unsigned int *nplanes, 2386 unsigned int sizes[], struct device *alloc_devs[]) 2387 { 2388 struct mxt_data *data = q->drv_priv; 2389 size_t size = data->dbg.t37_nodes * sizeof(u16); 2390 2391 if (*nplanes) 2392 return sizes[0] < size ? -EINVAL : 0; 2393 2394 *nplanes = 1; 2395 sizes[0] = size; 2396 2397 return 0; 2398 } 2399 2400 static void mxt_buffer_queue(struct vb2_buffer *vb) 2401 { 2402 struct mxt_data *data = vb2_get_drv_priv(vb->vb2_queue); 2403 u16 *ptr; 2404 int ret; 2405 u8 mode; 2406 2407 ptr = vb2_plane_vaddr(vb, 0); 2408 if (!ptr) { 2409 dev_err(&data->client->dev, "Error acquiring frame ptr\n"); 2410 goto fault; 2411 } 2412 2413 switch (data->dbg.input) { 2414 case MXT_V4L_INPUT_DELTAS: 2415 default: 2416 mode = MXT_DIAGNOSTIC_DELTAS; 2417 break; 2418 2419 case MXT_V4L_INPUT_REFS: 2420 mode = MXT_DIAGNOSTIC_REFS; 2421 break; 2422 } 2423 2424 ret = mxt_read_diagnostic_debug(data, mode, ptr); 2425 if (ret) 2426 goto fault; 2427 2428 vb2_set_plane_payload(vb, 0, data->dbg.t37_nodes * sizeof(u16)); 2429 vb2_buffer_done(vb, VB2_BUF_STATE_DONE); 2430 return; 2431 2432 fault: 2433 vb2_buffer_done(vb, VB2_BUF_STATE_ERROR); 2434 } 2435 2436 /* V4L2 structures */ 2437 static const struct vb2_ops mxt_queue_ops = { 2438 .queue_setup = mxt_queue_setup, 2439 .buf_queue = mxt_buffer_queue, 2440 .wait_prepare = vb2_ops_wait_prepare, 2441 .wait_finish = vb2_ops_wait_finish, 2442 }; 2443 2444 static const struct vb2_queue mxt_queue = { 2445 .type = V4L2_BUF_TYPE_VIDEO_CAPTURE, 2446 .io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ, 2447 .buf_struct_size = sizeof(struct mxt_vb2_buffer), 2448 .ops = &mxt_queue_ops, 2449 .mem_ops = &vb2_vmalloc_memops, 2450 .timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC, 2451 .min_buffers_needed = 1, 2452 }; 2453 2454 static int mxt_vidioc_querycap(struct file *file, void *priv, 2455 struct v4l2_capability *cap) 2456 { 2457 struct mxt_data *data = video_drvdata(file); 2458 2459 strlcpy(cap->driver, "atmel_mxt_ts", sizeof(cap->driver)); 2460 strlcpy(cap->card, "atmel_mxt_ts touch", sizeof(cap->card)); 2461 snprintf(cap->bus_info, sizeof(cap->bus_info), 2462 "I2C:%s", dev_name(&data->client->dev)); 2463 return 0; 2464 } 2465 2466 static int mxt_vidioc_enum_input(struct file *file, void *priv, 2467 struct v4l2_input *i) 2468 { 2469 if (i->index >= MXT_V4L_INPUT_MAX) 2470 return -EINVAL; 2471 2472 i->type = V4L2_INPUT_TYPE_TOUCH; 2473 2474 switch (i->index) { 2475 case MXT_V4L_INPUT_REFS: 2476 strlcpy(i->name, "Mutual Capacitance References", 2477 sizeof(i->name)); 2478 break; 2479 case MXT_V4L_INPUT_DELTAS: 2480 strlcpy(i->name, "Mutual Capacitance Deltas", sizeof(i->name)); 2481 break; 2482 } 2483 2484 return 0; 2485 } 2486 2487 static int mxt_set_input(struct mxt_data *data, unsigned int i) 2488 { 2489 struct v4l2_pix_format *f = &data->dbg.format; 2490 2491 if (i >= MXT_V4L_INPUT_MAX) 2492 return -EINVAL; 2493 2494 if (i == MXT_V4L_INPUT_DELTAS) 2495 f->pixelformat = V4L2_TCH_FMT_DELTA_TD16; 2496 else 2497 f->pixelformat = V4L2_TCH_FMT_TU16; 2498 2499 f->width = data->xy_switch ? data->ysize : data->xsize; 2500 f->height = data->xy_switch ? data->xsize : data->ysize; 2501 f->field = V4L2_FIELD_NONE; 2502 f->colorspace = V4L2_COLORSPACE_RAW; 2503 f->bytesperline = f->width * sizeof(u16); 2504 f->sizeimage = f->width * f->height * sizeof(u16); 2505 2506 data->dbg.input = i; 2507 2508 return 0; 2509 } 2510 2511 static int mxt_vidioc_s_input(struct file *file, void *priv, unsigned int i) 2512 { 2513 return mxt_set_input(video_drvdata(file), i); 2514 } 2515 2516 static int mxt_vidioc_g_input(struct file *file, void *priv, unsigned int *i) 2517 { 2518 struct mxt_data *data = video_drvdata(file); 2519 2520 *i = data->dbg.input; 2521 2522 return 0; 2523 } 2524 2525 static int mxt_vidioc_fmt(struct file *file, void *priv, struct v4l2_format *f) 2526 { 2527 struct mxt_data *data = video_drvdata(file); 2528 2529 f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 2530 f->fmt.pix = data->dbg.format; 2531 2532 return 0; 2533 } 2534 2535 static int mxt_vidioc_enum_fmt(struct file *file, void *priv, 2536 struct v4l2_fmtdesc *fmt) 2537 { 2538 if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) 2539 return -EINVAL; 2540 2541 switch (fmt->index) { 2542 case 0: 2543 fmt->pixelformat = V4L2_TCH_FMT_TU16; 2544 break; 2545 2546 case 1: 2547 fmt->pixelformat = V4L2_TCH_FMT_DELTA_TD16; 2548 break; 2549 2550 default: 2551 return -EINVAL; 2552 } 2553 2554 return 0; 2555 } 2556 2557 static int mxt_vidioc_g_parm(struct file *file, void *fh, 2558 struct v4l2_streamparm *a) 2559 { 2560 if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) 2561 return -EINVAL; 2562 2563 a->parm.capture.readbuffers = 1; 2564 a->parm.capture.timeperframe.numerator = 1; 2565 a->parm.capture.timeperframe.denominator = 10; 2566 return 0; 2567 } 2568 2569 static const struct v4l2_ioctl_ops mxt_video_ioctl_ops = { 2570 .vidioc_querycap = mxt_vidioc_querycap, 2571 2572 .vidioc_enum_fmt_vid_cap = mxt_vidioc_enum_fmt, 2573 .vidioc_s_fmt_vid_cap = mxt_vidioc_fmt, 2574 .vidioc_g_fmt_vid_cap = mxt_vidioc_fmt, 2575 .vidioc_try_fmt_vid_cap = mxt_vidioc_fmt, 2576 .vidioc_g_parm = mxt_vidioc_g_parm, 2577 2578 .vidioc_enum_input = mxt_vidioc_enum_input, 2579 .vidioc_g_input = mxt_vidioc_g_input, 2580 .vidioc_s_input = mxt_vidioc_s_input, 2581 2582 .vidioc_reqbufs = vb2_ioctl_reqbufs, 2583 .vidioc_create_bufs = vb2_ioctl_create_bufs, 2584 .vidioc_querybuf = vb2_ioctl_querybuf, 2585 .vidioc_qbuf = vb2_ioctl_qbuf, 2586 .vidioc_dqbuf = vb2_ioctl_dqbuf, 2587 .vidioc_expbuf = vb2_ioctl_expbuf, 2588 2589 .vidioc_streamon = vb2_ioctl_streamon, 2590 .vidioc_streamoff = vb2_ioctl_streamoff, 2591 }; 2592 2593 static const struct video_device mxt_video_device = { 2594 .name = "Atmel maxTouch", 2595 .fops = &mxt_video_fops, 2596 .ioctl_ops = &mxt_video_ioctl_ops, 2597 .release = video_device_release_empty, 2598 .device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TOUCH | 2599 V4L2_CAP_READWRITE | V4L2_CAP_STREAMING, 2600 }; 2601 2602 static void mxt_debug_init(struct mxt_data *data) 2603 { 2604 struct mxt_info *info = data->info; 2605 struct mxt_dbg *dbg = &data->dbg; 2606 struct mxt_object *object; 2607 int error; 2608 2609 object = mxt_get_object(data, MXT_GEN_COMMAND_T6); 2610 if (!object) 2611 goto error; 2612 2613 dbg->diag_cmd_address = object->start_address + MXT_COMMAND_DIAGNOSTIC; 2614 2615 object = mxt_get_object(data, MXT_DEBUG_DIAGNOSTIC_T37); 2616 if (!object) 2617 goto error; 2618 2619 if (mxt_obj_size(object) != sizeof(struct t37_debug)) { 2620 dev_warn(&data->client->dev, "Bad T37 size"); 2621 goto error; 2622 } 2623 2624 dbg->t37_address = object->start_address; 2625 2626 /* Calculate size of data and allocate buffer */ 2627 dbg->t37_nodes = data->xsize * data->ysize; 2628 2629 if (info->family_id == MXT_FAMILY_1386) 2630 dbg->t37_pages = MXT1386_COLUMNS * MXT1386_PAGES_PER_COLUMN; 2631 else 2632 dbg->t37_pages = DIV_ROUND_UP(data->xsize * 2633 info->matrix_ysize * 2634 sizeof(u16), 2635 sizeof(dbg->t37_buf->data)); 2636 2637 dbg->t37_buf = devm_kmalloc_array(&data->client->dev, dbg->t37_pages, 2638 sizeof(struct t37_debug), GFP_KERNEL); 2639 if (!dbg->t37_buf) 2640 goto error; 2641 2642 /* init channel to zero */ 2643 mxt_set_input(data, 0); 2644 2645 /* register video device */ 2646 snprintf(dbg->v4l2.name, sizeof(dbg->v4l2.name), "%s", "atmel_mxt_ts"); 2647 error = v4l2_device_register(&data->client->dev, &dbg->v4l2); 2648 if (error) 2649 goto error; 2650 2651 /* initialize the queue */ 2652 mutex_init(&dbg->lock); 2653 dbg->queue = mxt_queue; 2654 dbg->queue.drv_priv = data; 2655 dbg->queue.lock = &dbg->lock; 2656 dbg->queue.dev = &data->client->dev; 2657 2658 error = vb2_queue_init(&dbg->queue); 2659 if (error) 2660 goto error_unreg_v4l2; 2661 2662 dbg->vdev = mxt_video_device; 2663 dbg->vdev.v4l2_dev = &dbg->v4l2; 2664 dbg->vdev.lock = &dbg->lock; 2665 dbg->vdev.vfl_dir = VFL_DIR_RX; 2666 dbg->vdev.queue = &dbg->queue; 2667 video_set_drvdata(&dbg->vdev, data); 2668 2669 error = video_register_device(&dbg->vdev, VFL_TYPE_TOUCH, -1); 2670 if (error) 2671 goto error_unreg_v4l2; 2672 2673 return; 2674 2675 error_unreg_v4l2: 2676 v4l2_device_unregister(&dbg->v4l2); 2677 error: 2678 dev_warn(&data->client->dev, "Error initializing T37\n"); 2679 } 2680 #else 2681 static void mxt_debug_init(struct mxt_data *data) 2682 { 2683 } 2684 #endif 2685 2686 static int mxt_configure_objects(struct mxt_data *data, 2687 const struct firmware *cfg) 2688 { 2689 struct device *dev = &data->client->dev; 2690 int error; 2691 2692 error = mxt_init_t7_power_cfg(data); 2693 if (error) { 2694 dev_err(dev, "Failed to initialize power cfg\n"); 2695 return error; 2696 } 2697 2698 if (cfg) { 2699 error = mxt_update_cfg(data, cfg); 2700 if (error) 2701 dev_warn(dev, "Error %d updating config\n", error); 2702 } 2703 2704 if (data->multitouch) { 2705 error = mxt_initialize_input_device(data); 2706 if (error) 2707 return error; 2708 } else { 2709 dev_warn(dev, "No touch object detected\n"); 2710 } 2711 2712 mxt_debug_init(data); 2713 2714 return 0; 2715 } 2716 2717 /* Firmware Version is returned as Major.Minor.Build */ 2718 static ssize_t mxt_fw_version_show(struct device *dev, 2719 struct device_attribute *attr, char *buf) 2720 { 2721 struct mxt_data *data = dev_get_drvdata(dev); 2722 struct mxt_info *info = data->info; 2723 return scnprintf(buf, PAGE_SIZE, "%u.%u.%02X\n", 2724 info->version >> 4, info->version & 0xf, info->build); 2725 } 2726 2727 /* Hardware Version is returned as FamilyID.VariantID */ 2728 static ssize_t mxt_hw_version_show(struct device *dev, 2729 struct device_attribute *attr, char *buf) 2730 { 2731 struct mxt_data *data = dev_get_drvdata(dev); 2732 struct mxt_info *info = data->info; 2733 return scnprintf(buf, PAGE_SIZE, "%u.%u\n", 2734 info->family_id, info->variant_id); 2735 } 2736 2737 static ssize_t mxt_show_instance(char *buf, int count, 2738 struct mxt_object *object, int instance, 2739 const u8 *val) 2740 { 2741 int i; 2742 2743 if (mxt_obj_instances(object) > 1) 2744 count += scnprintf(buf + count, PAGE_SIZE - count, 2745 "Instance %u\n", instance); 2746 2747 for (i = 0; i < mxt_obj_size(object); i++) 2748 count += scnprintf(buf + count, PAGE_SIZE - count, 2749 "\t[%2u]: %02x (%d)\n", i, val[i], val[i]); 2750 count += scnprintf(buf + count, PAGE_SIZE - count, "\n"); 2751 2752 return count; 2753 } 2754 2755 static ssize_t mxt_object_show(struct device *dev, 2756 struct device_attribute *attr, char *buf) 2757 { 2758 struct mxt_data *data = dev_get_drvdata(dev); 2759 struct mxt_object *object; 2760 int count = 0; 2761 int i, j; 2762 int error; 2763 u8 *obuf; 2764 2765 /* Pre-allocate buffer large enough to hold max sized object. */ 2766 obuf = kmalloc(256, GFP_KERNEL); 2767 if (!obuf) 2768 return -ENOMEM; 2769 2770 error = 0; 2771 for (i = 0; i < data->info->object_num; i++) { 2772 object = data->object_table + i; 2773 2774 if (!mxt_object_readable(object->type)) 2775 continue; 2776 2777 count += scnprintf(buf + count, PAGE_SIZE - count, 2778 "T%u:\n", object->type); 2779 2780 for (j = 0; j < mxt_obj_instances(object); j++) { 2781 u16 size = mxt_obj_size(object); 2782 u16 addr = object->start_address + j * size; 2783 2784 error = __mxt_read_reg(data->client, addr, size, obuf); 2785 if (error) 2786 goto done; 2787 2788 count = mxt_show_instance(buf, count, object, j, obuf); 2789 } 2790 } 2791 2792 done: 2793 kfree(obuf); 2794 return error ?: count; 2795 } 2796 2797 static int mxt_check_firmware_format(struct device *dev, 2798 const struct firmware *fw) 2799 { 2800 unsigned int pos = 0; 2801 char c; 2802 2803 while (pos < fw->size) { 2804 c = *(fw->data + pos); 2805 2806 if (c < '0' || (c > '9' && c < 'A') || c > 'F') 2807 return 0; 2808 2809 pos++; 2810 } 2811 2812 /* 2813 * To convert file try: 2814 * xxd -r -p mXTXXX__APP_VX-X-XX.enc > maxtouch.fw 2815 */ 2816 dev_err(dev, "Aborting: firmware file must be in binary format\n"); 2817 2818 return -EINVAL; 2819 } 2820 2821 static int mxt_load_fw(struct device *dev, const char *fn) 2822 { 2823 struct mxt_data *data = dev_get_drvdata(dev); 2824 const struct firmware *fw = NULL; 2825 unsigned int frame_size; 2826 unsigned int pos = 0; 2827 unsigned int retry = 0; 2828 unsigned int frame = 0; 2829 int ret; 2830 2831 ret = request_firmware(&fw, fn, dev); 2832 if (ret) { 2833 dev_err(dev, "Unable to open firmware %s\n", fn); 2834 return ret; 2835 } 2836 2837 /* Check for incorrect enc file */ 2838 ret = mxt_check_firmware_format(dev, fw); 2839 if (ret) 2840 goto release_firmware; 2841 2842 if (!data->in_bootloader) { 2843 /* Change to the bootloader mode */ 2844 data->in_bootloader = true; 2845 2846 ret = mxt_t6_command(data, MXT_COMMAND_RESET, 2847 MXT_BOOT_VALUE, false); 2848 if (ret) 2849 goto release_firmware; 2850 2851 msleep(MXT_RESET_TIME); 2852 2853 /* Do not need to scan since we know family ID */ 2854 ret = mxt_lookup_bootloader_address(data, 0); 2855 if (ret) 2856 goto release_firmware; 2857 2858 mxt_free_input_device(data); 2859 mxt_free_object_table(data); 2860 } else { 2861 enable_irq(data->irq); 2862 } 2863 2864 reinit_completion(&data->bl_completion); 2865 2866 ret = mxt_check_bootloader(data, MXT_WAITING_BOOTLOAD_CMD, false); 2867 if (ret) { 2868 /* Bootloader may still be unlocked from previous attempt */ 2869 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, false); 2870 if (ret) 2871 goto disable_irq; 2872 } else { 2873 dev_info(dev, "Unlocking bootloader\n"); 2874 2875 /* Unlock bootloader */ 2876 ret = mxt_send_bootloader_cmd(data, true); 2877 if (ret) 2878 goto disable_irq; 2879 } 2880 2881 while (pos < fw->size) { 2882 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, true); 2883 if (ret) 2884 goto disable_irq; 2885 2886 frame_size = ((*(fw->data + pos) << 8) | *(fw->data + pos + 1)); 2887 2888 /* Take account of CRC bytes */ 2889 frame_size += 2; 2890 2891 /* Write one frame to device */ 2892 ret = mxt_bootloader_write(data, fw->data + pos, frame_size); 2893 if (ret) 2894 goto disable_irq; 2895 2896 ret = mxt_check_bootloader(data, MXT_FRAME_CRC_PASS, true); 2897 if (ret) { 2898 retry++; 2899 2900 /* Back off by 20ms per retry */ 2901 msleep(retry * 20); 2902 2903 if (retry > 20) { 2904 dev_err(dev, "Retry count exceeded\n"); 2905 goto disable_irq; 2906 } 2907 } else { 2908 retry = 0; 2909 pos += frame_size; 2910 frame++; 2911 } 2912 2913 if (frame % 50 == 0) 2914 dev_dbg(dev, "Sent %d frames, %d/%zd bytes\n", 2915 frame, pos, fw->size); 2916 } 2917 2918 /* Wait for flash. */ 2919 ret = mxt_wait_for_completion(data, &data->bl_completion, 2920 MXT_FW_RESET_TIME); 2921 if (ret) 2922 goto disable_irq; 2923 2924 dev_dbg(dev, "Sent %d frames, %d bytes\n", frame, pos); 2925 2926 /* 2927 * Wait for device to reset. Some bootloader versions do not assert 2928 * the CHG line after bootloading has finished, so ignore potential 2929 * errors. 2930 */ 2931 mxt_wait_for_completion(data, &data->bl_completion, MXT_FW_RESET_TIME); 2932 2933 data->in_bootloader = false; 2934 2935 disable_irq: 2936 disable_irq(data->irq); 2937 release_firmware: 2938 release_firmware(fw); 2939 return ret; 2940 } 2941 2942 static ssize_t mxt_update_fw_store(struct device *dev, 2943 struct device_attribute *attr, 2944 const char *buf, size_t count) 2945 { 2946 struct mxt_data *data = dev_get_drvdata(dev); 2947 int error; 2948 2949 error = mxt_load_fw(dev, MXT_FW_NAME); 2950 if (error) { 2951 dev_err(dev, "The firmware update failed(%d)\n", error); 2952 count = error; 2953 } else { 2954 dev_info(dev, "The firmware update succeeded\n"); 2955 2956 error = mxt_initialize(data); 2957 if (error) 2958 return error; 2959 } 2960 2961 return count; 2962 } 2963 2964 static DEVICE_ATTR(fw_version, S_IRUGO, mxt_fw_version_show, NULL); 2965 static DEVICE_ATTR(hw_version, S_IRUGO, mxt_hw_version_show, NULL); 2966 static DEVICE_ATTR(object, S_IRUGO, mxt_object_show, NULL); 2967 static DEVICE_ATTR(update_fw, S_IWUSR, NULL, mxt_update_fw_store); 2968 2969 static struct attribute *mxt_attrs[] = { 2970 &dev_attr_fw_version.attr, 2971 &dev_attr_hw_version.attr, 2972 &dev_attr_object.attr, 2973 &dev_attr_update_fw.attr, 2974 NULL 2975 }; 2976 2977 static const struct attribute_group mxt_attr_group = { 2978 .attrs = mxt_attrs, 2979 }; 2980 2981 static void mxt_start(struct mxt_data *data) 2982 { 2983 switch (data->suspend_mode) { 2984 case MXT_SUSPEND_T9_CTRL: 2985 mxt_soft_reset(data); 2986 2987 /* Touch enable */ 2988 /* 0x83 = SCANEN | RPTEN | ENABLE */ 2989 mxt_write_object(data, 2990 MXT_TOUCH_MULTI_T9, MXT_T9_CTRL, 0x83); 2991 break; 2992 2993 case MXT_SUSPEND_DEEP_SLEEP: 2994 default: 2995 mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN); 2996 2997 /* Recalibrate since chip has been in deep sleep */ 2998 mxt_t6_command(data, MXT_COMMAND_CALIBRATE, 1, false); 2999 break; 3000 } 3001 } 3002 3003 static void mxt_stop(struct mxt_data *data) 3004 { 3005 switch (data->suspend_mode) { 3006 case MXT_SUSPEND_T9_CTRL: 3007 /* Touch disable */ 3008 mxt_write_object(data, 3009 MXT_TOUCH_MULTI_T9, MXT_T9_CTRL, 0); 3010 break; 3011 3012 case MXT_SUSPEND_DEEP_SLEEP: 3013 default: 3014 mxt_set_t7_power_cfg(data, MXT_POWER_CFG_DEEPSLEEP); 3015 break; 3016 } 3017 } 3018 3019 static int mxt_input_open(struct input_dev *dev) 3020 { 3021 struct mxt_data *data = input_get_drvdata(dev); 3022 3023 mxt_start(data); 3024 3025 return 0; 3026 } 3027 3028 static void mxt_input_close(struct input_dev *dev) 3029 { 3030 struct mxt_data *data = input_get_drvdata(dev); 3031 3032 mxt_stop(data); 3033 } 3034 3035 static int mxt_parse_device_properties(struct mxt_data *data) 3036 { 3037 static const char keymap_property[] = "linux,gpio-keymap"; 3038 struct device *dev = &data->client->dev; 3039 u32 *keymap; 3040 int n_keys; 3041 int error; 3042 3043 if (device_property_present(dev, keymap_property)) { 3044 n_keys = device_property_count_u32(dev, keymap_property); 3045 if (n_keys <= 0) { 3046 error = n_keys < 0 ? n_keys : -EINVAL; 3047 dev_err(dev, "invalid/malformed '%s' property: %d\n", 3048 keymap_property, error); 3049 return error; 3050 } 3051 3052 keymap = devm_kmalloc_array(dev, n_keys, sizeof(*keymap), 3053 GFP_KERNEL); 3054 if (!keymap) 3055 return -ENOMEM; 3056 3057 error = device_property_read_u32_array(dev, keymap_property, 3058 keymap, n_keys); 3059 if (error) { 3060 dev_err(dev, "failed to parse '%s' property: %d\n", 3061 keymap_property, error); 3062 return error; 3063 } 3064 3065 data->t19_keymap = keymap; 3066 data->t19_num_keys = n_keys; 3067 } 3068 3069 return 0; 3070 } 3071 3072 static const struct dmi_system_id chromebook_T9_suspend_dmi[] = { 3073 { 3074 .matches = { 3075 DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"), 3076 DMI_MATCH(DMI_PRODUCT_NAME, "Link"), 3077 }, 3078 }, 3079 { 3080 .matches = { 3081 DMI_MATCH(DMI_PRODUCT_NAME, "Peppy"), 3082 }, 3083 }, 3084 { } 3085 }; 3086 3087 static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id) 3088 { 3089 struct mxt_data *data; 3090 int error; 3091 3092 /* 3093 * Ignore devices that do not have device properties attached to 3094 * them, as we need help determining whether we are dealing with 3095 * touch screen or touchpad. 3096 * 3097 * So far on x86 the only users of Atmel touch controllers are 3098 * Chromebooks, and chromeos_laptop driver will ensure that 3099 * necessary properties are provided (if firmware does not do that). 3100 */ 3101 if (!device_property_present(&client->dev, "compatible")) 3102 return -ENXIO; 3103 3104 /* 3105 * Ignore ACPI devices representing bootloader mode. 3106 * 3107 * This is a bit of a hack: Google Chromebook BIOS creates ACPI 3108 * devices for both application and bootloader modes, but we are 3109 * interested in application mode only (if device is in bootloader 3110 * mode we'll end up switching into application anyway). So far 3111 * application mode addresses were all above 0x40, so we'll use it 3112 * as a threshold. 3113 */ 3114 if (ACPI_COMPANION(&client->dev) && client->addr < 0x40) 3115 return -ENXIO; 3116 3117 data = devm_kzalloc(&client->dev, sizeof(struct mxt_data), GFP_KERNEL); 3118 if (!data) 3119 return -ENOMEM; 3120 3121 snprintf(data->phys, sizeof(data->phys), "i2c-%u-%04x/input0", 3122 client->adapter->nr, client->addr); 3123 3124 data->client = client; 3125 data->irq = client->irq; 3126 i2c_set_clientdata(client, data); 3127 3128 init_completion(&data->bl_completion); 3129 init_completion(&data->reset_completion); 3130 init_completion(&data->crc_completion); 3131 3132 data->suspend_mode = dmi_check_system(chromebook_T9_suspend_dmi) ? 3133 MXT_SUSPEND_T9_CTRL : MXT_SUSPEND_DEEP_SLEEP; 3134 3135 error = mxt_parse_device_properties(data); 3136 if (error) 3137 return error; 3138 3139 /* 3140 * VDDA is the analog voltage supply 2.57..3.47 V 3141 * VDD is the digital voltage supply 1.71..3.47 V 3142 */ 3143 data->regulators[0].supply = "vdda"; 3144 data->regulators[1].supply = "vdd"; 3145 error = devm_regulator_bulk_get(&client->dev, ARRAY_SIZE(data->regulators), 3146 data->regulators); 3147 if (error) { 3148 if (error != -EPROBE_DEFER) 3149 dev_err(&client->dev, "Failed to get regulators %d\n", 3150 error); 3151 return error; 3152 } 3153 3154 /* Request the RESET line as asserted so we go into reset */ 3155 data->reset_gpio = devm_gpiod_get_optional(&client->dev, 3156 "reset", GPIOD_OUT_HIGH); 3157 if (IS_ERR(data->reset_gpio)) { 3158 error = PTR_ERR(data->reset_gpio); 3159 dev_err(&client->dev, "Failed to get reset gpio: %d\n", error); 3160 return error; 3161 } 3162 3163 error = devm_request_threaded_irq(&client->dev, client->irq, 3164 NULL, mxt_interrupt, IRQF_ONESHOT, 3165 client->name, data); 3166 if (error) { 3167 dev_err(&client->dev, "Failed to register interrupt\n"); 3168 return error; 3169 } 3170 3171 disable_irq(client->irq); 3172 3173 error = regulator_bulk_enable(ARRAY_SIZE(data->regulators), 3174 data->regulators); 3175 if (error) { 3176 dev_err(&client->dev, "failed to enable regulators: %d\n", 3177 error); 3178 return error; 3179 } 3180 /* 3181 * The device takes 40ms to come up after power-on according 3182 * to the mXT224 datasheet, page 13. 3183 */ 3184 msleep(MXT_BACKUP_TIME); 3185 3186 if (data->reset_gpio) { 3187 /* Wait a while and then de-assert the RESET GPIO line */ 3188 msleep(MXT_RESET_GPIO_TIME); 3189 gpiod_set_value(data->reset_gpio, 0); 3190 msleep(MXT_RESET_INVALID_CHG); 3191 } 3192 3193 error = mxt_initialize(data); 3194 if (error) 3195 goto err_disable_regulators; 3196 3197 error = sysfs_create_group(&client->dev.kobj, &mxt_attr_group); 3198 if (error) { 3199 dev_err(&client->dev, "Failure %d creating sysfs group\n", 3200 error); 3201 goto err_free_object; 3202 } 3203 3204 return 0; 3205 3206 err_free_object: 3207 mxt_free_input_device(data); 3208 mxt_free_object_table(data); 3209 err_disable_regulators: 3210 regulator_bulk_disable(ARRAY_SIZE(data->regulators), 3211 data->regulators); 3212 return error; 3213 } 3214 3215 static int mxt_remove(struct i2c_client *client) 3216 { 3217 struct mxt_data *data = i2c_get_clientdata(client); 3218 3219 disable_irq(data->irq); 3220 sysfs_remove_group(&client->dev.kobj, &mxt_attr_group); 3221 mxt_free_input_device(data); 3222 mxt_free_object_table(data); 3223 regulator_bulk_disable(ARRAY_SIZE(data->regulators), 3224 data->regulators); 3225 3226 return 0; 3227 } 3228 3229 static int __maybe_unused mxt_suspend(struct device *dev) 3230 { 3231 struct i2c_client *client = to_i2c_client(dev); 3232 struct mxt_data *data = i2c_get_clientdata(client); 3233 struct input_dev *input_dev = data->input_dev; 3234 3235 if (!input_dev) 3236 return 0; 3237 3238 mutex_lock(&input_dev->mutex); 3239 3240 if (input_device_enabled(input_dev)) 3241 mxt_stop(data); 3242 3243 mutex_unlock(&input_dev->mutex); 3244 3245 disable_irq(data->irq); 3246 3247 return 0; 3248 } 3249 3250 static int __maybe_unused mxt_resume(struct device *dev) 3251 { 3252 struct i2c_client *client = to_i2c_client(dev); 3253 struct mxt_data *data = i2c_get_clientdata(client); 3254 struct input_dev *input_dev = data->input_dev; 3255 3256 if (!input_dev) 3257 return 0; 3258 3259 enable_irq(data->irq); 3260 3261 mutex_lock(&input_dev->mutex); 3262 3263 if (input_device_enabled(input_dev)) 3264 mxt_start(data); 3265 3266 mutex_unlock(&input_dev->mutex); 3267 3268 return 0; 3269 } 3270 3271 static SIMPLE_DEV_PM_OPS(mxt_pm_ops, mxt_suspend, mxt_resume); 3272 3273 static const struct of_device_id mxt_of_match[] = { 3274 { .compatible = "atmel,maxtouch", }, 3275 /* Compatibles listed below are deprecated */ 3276 { .compatible = "atmel,qt602240_ts", }, 3277 { .compatible = "atmel,atmel_mxt_ts", }, 3278 { .compatible = "atmel,atmel_mxt_tp", }, 3279 { .compatible = "atmel,mXT224", }, 3280 {}, 3281 }; 3282 MODULE_DEVICE_TABLE(of, mxt_of_match); 3283 3284 #ifdef CONFIG_ACPI 3285 static const struct acpi_device_id mxt_acpi_id[] = { 3286 { "ATML0000", 0 }, /* Touchpad */ 3287 { "ATML0001", 0 }, /* Touchscreen */ 3288 { } 3289 }; 3290 MODULE_DEVICE_TABLE(acpi, mxt_acpi_id); 3291 #endif 3292 3293 static const struct i2c_device_id mxt_id[] = { 3294 { "qt602240_ts", 0 }, 3295 { "atmel_mxt_ts", 0 }, 3296 { "atmel_mxt_tp", 0 }, 3297 { "maxtouch", 0 }, 3298 { "mXT224", 0 }, 3299 { } 3300 }; 3301 MODULE_DEVICE_TABLE(i2c, mxt_id); 3302 3303 static struct i2c_driver mxt_driver = { 3304 .driver = { 3305 .name = "atmel_mxt_ts", 3306 .of_match_table = mxt_of_match, 3307 .acpi_match_table = ACPI_PTR(mxt_acpi_id), 3308 .pm = &mxt_pm_ops, 3309 }, 3310 .probe = mxt_probe, 3311 .remove = mxt_remove, 3312 .id_table = mxt_id, 3313 }; 3314 3315 module_i2c_driver(mxt_driver); 3316 3317 /* Module information */ 3318 MODULE_AUTHOR("Joonyoung Shim <jy0922.shim@samsung.com>"); 3319 MODULE_DESCRIPTION("Atmel maXTouch Touchscreen driver"); 3320 MODULE_LICENSE("GPL"); 3321