1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Azoteq IQS7210A/7211A/E Trackpad/Touchscreen Controller 4 * 5 * Copyright (C) 2023 Jeff LaBundy <jeff@labundy.com> 6 */ 7 8 #include <linux/bits.h> 9 #include <linux/delay.h> 10 #include <linux/device.h> 11 #include <linux/err.h> 12 #include <linux/gpio/consumer.h> 13 #include <linux/i2c.h> 14 #include <linux/input.h> 15 #include <linux/input/mt.h> 16 #include <linux/input/touchscreen.h> 17 #include <linux/interrupt.h> 18 #include <linux/iopoll.h> 19 #include <linux/kernel.h> 20 #include <linux/list.h> 21 #include <linux/module.h> 22 #include <linux/of_device.h> 23 #include <linux/property.h> 24 #include <linux/slab.h> 25 #include <asm/unaligned.h> 26 27 #define IQS7211_PROD_NUM 0x00 28 29 #define IQS7211_EVENT_MASK_ALL GENMASK(14, 8) 30 #define IQS7211_EVENT_MASK_ALP BIT(13) 31 #define IQS7211_EVENT_MASK_BTN BIT(12) 32 #define IQS7211_EVENT_MASK_ATI BIT(11) 33 #define IQS7211_EVENT_MASK_MOVE BIT(10) 34 #define IQS7211_EVENT_MASK_GSTR BIT(9) 35 #define IQS7211_EVENT_MODE BIT(8) 36 37 #define IQS7211_COMMS_ERROR 0xEEEE 38 #define IQS7211_COMMS_RETRY_MS 50 39 #define IQS7211_COMMS_SLEEP_US 100 40 #define IQS7211_COMMS_TIMEOUT_US (100 * USEC_PER_MSEC) 41 #define IQS7211_RESET_TIMEOUT_MS 150 42 #define IQS7211_START_TIMEOUT_US (1 * USEC_PER_SEC) 43 44 #define IQS7211_NUM_RETRIES 5 45 #define IQS7211_NUM_CRX 8 46 #define IQS7211_MAX_CTX 13 47 48 #define IQS7211_MAX_CONTACTS 2 49 #define IQS7211_MAX_CYCLES 21 50 51 /* 52 * The following delay is used during instances that must wait for the open- 53 * drain RDY pin to settle. Its value is calculated as 5*R*C, where R and C 54 * represent typical datasheet values of 4.7k and 100 nF, respectively. 55 */ 56 #define iqs7211_irq_wait() usleep_range(2500, 2600) 57 58 enum iqs7211_dev_id { 59 IQS7210A, 60 IQS7211A, 61 IQS7211E, 62 }; 63 64 enum iqs7211_comms_mode { 65 IQS7211_COMMS_MODE_WAIT, 66 IQS7211_COMMS_MODE_FREE, 67 IQS7211_COMMS_MODE_FORCE, 68 }; 69 70 struct iqs7211_reg_field_desc { 71 struct list_head list; 72 u8 addr; 73 u16 mask; 74 u16 val; 75 }; 76 77 enum iqs7211_reg_key_id { 78 IQS7211_REG_KEY_NONE, 79 IQS7211_REG_KEY_PROX, 80 IQS7211_REG_KEY_TOUCH, 81 IQS7211_REG_KEY_TAP, 82 IQS7211_REG_KEY_HOLD, 83 IQS7211_REG_KEY_PALM, 84 IQS7211_REG_KEY_AXIAL_X, 85 IQS7211_REG_KEY_AXIAL_Y, 86 IQS7211_REG_KEY_RESERVED 87 }; 88 89 enum iqs7211_reg_grp_id { 90 IQS7211_REG_GRP_TP, 91 IQS7211_REG_GRP_BTN, 92 IQS7211_REG_GRP_ALP, 93 IQS7211_REG_GRP_SYS, 94 IQS7211_NUM_REG_GRPS 95 }; 96 97 static const char * const iqs7211_reg_grp_names[IQS7211_NUM_REG_GRPS] = { 98 [IQS7211_REG_GRP_TP] = "trackpad", 99 [IQS7211_REG_GRP_BTN] = "button", 100 [IQS7211_REG_GRP_ALP] = "alp", 101 }; 102 103 static const u16 iqs7211_reg_grp_masks[IQS7211_NUM_REG_GRPS] = { 104 [IQS7211_REG_GRP_TP] = IQS7211_EVENT_MASK_GSTR, 105 [IQS7211_REG_GRP_BTN] = IQS7211_EVENT_MASK_BTN, 106 [IQS7211_REG_GRP_ALP] = IQS7211_EVENT_MASK_ALP, 107 }; 108 109 struct iqs7211_event_desc { 110 const char *name; 111 u16 mask; 112 u16 enable; 113 enum iqs7211_reg_grp_id reg_grp; 114 enum iqs7211_reg_key_id reg_key; 115 }; 116 117 static const struct iqs7211_event_desc iqs7210a_kp_events[] = { 118 { 119 .mask = BIT(10), 120 .enable = BIT(13) | BIT(12), 121 .reg_grp = IQS7211_REG_GRP_ALP, 122 }, 123 { 124 .name = "event-prox", 125 .mask = BIT(2), 126 .enable = BIT(5) | BIT(4), 127 .reg_grp = IQS7211_REG_GRP_BTN, 128 .reg_key = IQS7211_REG_KEY_PROX, 129 }, 130 { 131 .name = "event-touch", 132 .mask = BIT(3), 133 .enable = BIT(5) | BIT(4), 134 .reg_grp = IQS7211_REG_GRP_BTN, 135 .reg_key = IQS7211_REG_KEY_TOUCH, 136 }, 137 { 138 .name = "event-tap", 139 .mask = BIT(0), 140 .enable = BIT(0), 141 .reg_grp = IQS7211_REG_GRP_TP, 142 .reg_key = IQS7211_REG_KEY_TAP, 143 }, 144 { 145 .name = "event-hold", 146 .mask = BIT(1), 147 .enable = BIT(1), 148 .reg_grp = IQS7211_REG_GRP_TP, 149 .reg_key = IQS7211_REG_KEY_HOLD, 150 }, 151 { 152 .name = "event-swipe-x-neg", 153 .mask = BIT(2), 154 .enable = BIT(2), 155 .reg_grp = IQS7211_REG_GRP_TP, 156 .reg_key = IQS7211_REG_KEY_AXIAL_X, 157 }, 158 { 159 .name = "event-swipe-x-pos", 160 .mask = BIT(3), 161 .enable = BIT(3), 162 .reg_grp = IQS7211_REG_GRP_TP, 163 .reg_key = IQS7211_REG_KEY_AXIAL_X, 164 }, 165 { 166 .name = "event-swipe-y-pos", 167 .mask = BIT(4), 168 .enable = BIT(4), 169 .reg_grp = IQS7211_REG_GRP_TP, 170 .reg_key = IQS7211_REG_KEY_AXIAL_Y, 171 }, 172 { 173 .name = "event-swipe-y-neg", 174 .mask = BIT(5), 175 .enable = BIT(5), 176 .reg_grp = IQS7211_REG_GRP_TP, 177 .reg_key = IQS7211_REG_KEY_AXIAL_Y, 178 }, 179 }; 180 181 static const struct iqs7211_event_desc iqs7211a_kp_events[] = { 182 { 183 .mask = BIT(14), 184 .reg_grp = IQS7211_REG_GRP_ALP, 185 }, 186 { 187 .name = "event-tap", 188 .mask = BIT(0), 189 .enable = BIT(0), 190 .reg_grp = IQS7211_REG_GRP_TP, 191 .reg_key = IQS7211_REG_KEY_TAP, 192 }, 193 { 194 .name = "event-hold", 195 .mask = BIT(1), 196 .enable = BIT(1), 197 .reg_grp = IQS7211_REG_GRP_TP, 198 .reg_key = IQS7211_REG_KEY_HOLD, 199 }, 200 { 201 .name = "event-swipe-x-neg", 202 .mask = BIT(2), 203 .enable = BIT(2), 204 .reg_grp = IQS7211_REG_GRP_TP, 205 .reg_key = IQS7211_REG_KEY_AXIAL_X, 206 }, 207 { 208 .name = "event-swipe-x-pos", 209 .mask = BIT(3), 210 .enable = BIT(3), 211 .reg_grp = IQS7211_REG_GRP_TP, 212 .reg_key = IQS7211_REG_KEY_AXIAL_X, 213 }, 214 { 215 .name = "event-swipe-y-pos", 216 .mask = BIT(4), 217 .enable = BIT(4), 218 .reg_grp = IQS7211_REG_GRP_TP, 219 .reg_key = IQS7211_REG_KEY_AXIAL_Y, 220 }, 221 { 222 .name = "event-swipe-y-neg", 223 .mask = BIT(5), 224 .enable = BIT(5), 225 .reg_grp = IQS7211_REG_GRP_TP, 226 .reg_key = IQS7211_REG_KEY_AXIAL_Y, 227 }, 228 }; 229 230 static const struct iqs7211_event_desc iqs7211e_kp_events[] = { 231 { 232 .mask = BIT(14), 233 .reg_grp = IQS7211_REG_GRP_ALP, 234 }, 235 { 236 .name = "event-tap", 237 .mask = BIT(0), 238 .enable = BIT(0), 239 .reg_grp = IQS7211_REG_GRP_TP, 240 .reg_key = IQS7211_REG_KEY_TAP, 241 }, 242 { 243 .name = "event-tap-double", 244 .mask = BIT(1), 245 .enable = BIT(1), 246 .reg_grp = IQS7211_REG_GRP_TP, 247 .reg_key = IQS7211_REG_KEY_TAP, 248 }, 249 { 250 .name = "event-tap-triple", 251 .mask = BIT(2), 252 .enable = BIT(2), 253 .reg_grp = IQS7211_REG_GRP_TP, 254 .reg_key = IQS7211_REG_KEY_TAP, 255 }, 256 { 257 .name = "event-hold", 258 .mask = BIT(3), 259 .enable = BIT(3), 260 .reg_grp = IQS7211_REG_GRP_TP, 261 .reg_key = IQS7211_REG_KEY_HOLD, 262 }, 263 { 264 .name = "event-palm", 265 .mask = BIT(4), 266 .enable = BIT(4), 267 .reg_grp = IQS7211_REG_GRP_TP, 268 .reg_key = IQS7211_REG_KEY_PALM, 269 }, 270 { 271 .name = "event-swipe-x-pos", 272 .mask = BIT(8), 273 .enable = BIT(8), 274 .reg_grp = IQS7211_REG_GRP_TP, 275 .reg_key = IQS7211_REG_KEY_AXIAL_X, 276 }, 277 { 278 .name = "event-swipe-x-neg", 279 .mask = BIT(9), 280 .enable = BIT(9), 281 .reg_grp = IQS7211_REG_GRP_TP, 282 .reg_key = IQS7211_REG_KEY_AXIAL_X, 283 }, 284 { 285 .name = "event-swipe-y-pos", 286 .mask = BIT(10), 287 .enable = BIT(10), 288 .reg_grp = IQS7211_REG_GRP_TP, 289 .reg_key = IQS7211_REG_KEY_AXIAL_Y, 290 }, 291 { 292 .name = "event-swipe-y-neg", 293 .mask = BIT(11), 294 .enable = BIT(11), 295 .reg_grp = IQS7211_REG_GRP_TP, 296 .reg_key = IQS7211_REG_KEY_AXIAL_Y, 297 }, 298 { 299 .name = "event-swipe-x-pos-hold", 300 .mask = BIT(12), 301 .enable = BIT(12), 302 .reg_grp = IQS7211_REG_GRP_TP, 303 .reg_key = IQS7211_REG_KEY_HOLD, 304 }, 305 { 306 .name = "event-swipe-x-neg-hold", 307 .mask = BIT(13), 308 .enable = BIT(13), 309 .reg_grp = IQS7211_REG_GRP_TP, 310 .reg_key = IQS7211_REG_KEY_HOLD, 311 }, 312 { 313 .name = "event-swipe-y-pos-hold", 314 .mask = BIT(14), 315 .enable = BIT(14), 316 .reg_grp = IQS7211_REG_GRP_TP, 317 .reg_key = IQS7211_REG_KEY_HOLD, 318 }, 319 { 320 .name = "event-swipe-y-neg-hold", 321 .mask = BIT(15), 322 .enable = BIT(15), 323 .reg_grp = IQS7211_REG_GRP_TP, 324 .reg_key = IQS7211_REG_KEY_HOLD, 325 }, 326 }; 327 328 struct iqs7211_dev_desc { 329 const char *tp_name; 330 const char *kp_name; 331 u16 prod_num; 332 u16 show_reset; 333 u16 ati_error[IQS7211_NUM_REG_GRPS]; 334 u16 ati_start[IQS7211_NUM_REG_GRPS]; 335 u16 suspend; 336 u16 ack_reset; 337 u16 comms_end; 338 u16 comms_req; 339 int charge_shift; 340 int info_offs; 341 int gesture_offs; 342 int contact_offs; 343 u8 sys_stat; 344 u8 sys_ctrl; 345 u8 alp_config; 346 u8 tp_config; 347 u8 exp_file; 348 u8 kp_enable[IQS7211_NUM_REG_GRPS]; 349 u8 gesture_angle; 350 u8 rx_tx_map; 351 u8 cycle_alloc[2]; 352 u8 cycle_limit[2]; 353 const struct iqs7211_event_desc *kp_events; 354 int num_kp_events; 355 int min_crx_alp; 356 int num_ctx; 357 }; 358 359 static const struct iqs7211_dev_desc iqs7211_devs[] = { 360 [IQS7210A] = { 361 .tp_name = "iqs7210a_trackpad", 362 .kp_name = "iqs7210a_keys", 363 .prod_num = 944, 364 .show_reset = BIT(15), 365 .ati_error = { 366 [IQS7211_REG_GRP_TP] = BIT(12), 367 [IQS7211_REG_GRP_BTN] = BIT(0), 368 [IQS7211_REG_GRP_ALP] = BIT(8), 369 }, 370 .ati_start = { 371 [IQS7211_REG_GRP_TP] = BIT(13), 372 [IQS7211_REG_GRP_BTN] = BIT(1), 373 [IQS7211_REG_GRP_ALP] = BIT(9), 374 }, 375 .suspend = BIT(11), 376 .ack_reset = BIT(7), 377 .comms_end = BIT(2), 378 .comms_req = BIT(1), 379 .charge_shift = 4, 380 .info_offs = 0, 381 .gesture_offs = 1, 382 .contact_offs = 4, 383 .sys_stat = 0x0A, 384 .sys_ctrl = 0x35, 385 .alp_config = 0x39, 386 .tp_config = 0x4E, 387 .exp_file = 0x57, 388 .kp_enable = { 389 [IQS7211_REG_GRP_TP] = 0x58, 390 [IQS7211_REG_GRP_BTN] = 0x37, 391 [IQS7211_REG_GRP_ALP] = 0x37, 392 }, 393 .gesture_angle = 0x5F, 394 .rx_tx_map = 0x60, 395 .cycle_alloc = { 0x66, 0x75, }, 396 .cycle_limit = { 10, 6, }, 397 .kp_events = iqs7210a_kp_events, 398 .num_kp_events = ARRAY_SIZE(iqs7210a_kp_events), 399 .min_crx_alp = 4, 400 .num_ctx = IQS7211_MAX_CTX - 1, 401 }, 402 [IQS7211A] = { 403 .tp_name = "iqs7211a_trackpad", 404 .kp_name = "iqs7211a_keys", 405 .prod_num = 763, 406 .show_reset = BIT(7), 407 .ati_error = { 408 [IQS7211_REG_GRP_TP] = BIT(3), 409 [IQS7211_REG_GRP_ALP] = BIT(5), 410 }, 411 .ati_start = { 412 [IQS7211_REG_GRP_TP] = BIT(5), 413 [IQS7211_REG_GRP_ALP] = BIT(6), 414 }, 415 .ack_reset = BIT(7), 416 .comms_req = BIT(4), 417 .charge_shift = 0, 418 .info_offs = 0, 419 .gesture_offs = 1, 420 .contact_offs = 4, 421 .sys_stat = 0x10, 422 .sys_ctrl = 0x50, 423 .tp_config = 0x60, 424 .alp_config = 0x72, 425 .exp_file = 0x74, 426 .kp_enable = { 427 [IQS7211_REG_GRP_TP] = 0x80, 428 }, 429 .gesture_angle = 0x87, 430 .rx_tx_map = 0x90, 431 .cycle_alloc = { 0xA0, 0xB0, }, 432 .cycle_limit = { 10, 8, }, 433 .kp_events = iqs7211a_kp_events, 434 .num_kp_events = ARRAY_SIZE(iqs7211a_kp_events), 435 .num_ctx = IQS7211_MAX_CTX - 1, 436 }, 437 [IQS7211E] = { 438 .tp_name = "iqs7211e_trackpad", 439 .kp_name = "iqs7211e_keys", 440 .prod_num = 1112, 441 .show_reset = BIT(7), 442 .ati_error = { 443 [IQS7211_REG_GRP_TP] = BIT(3), 444 [IQS7211_REG_GRP_ALP] = BIT(5), 445 }, 446 .ati_start = { 447 [IQS7211_REG_GRP_TP] = BIT(5), 448 [IQS7211_REG_GRP_ALP] = BIT(6), 449 }, 450 .suspend = BIT(11), 451 .ack_reset = BIT(7), 452 .comms_end = BIT(6), 453 .comms_req = BIT(4), 454 .charge_shift = 0, 455 .info_offs = 1, 456 .gesture_offs = 0, 457 .contact_offs = 2, 458 .sys_stat = 0x0E, 459 .sys_ctrl = 0x33, 460 .tp_config = 0x41, 461 .alp_config = 0x36, 462 .exp_file = 0x4A, 463 .kp_enable = { 464 [IQS7211_REG_GRP_TP] = 0x4B, 465 }, 466 .gesture_angle = 0x55, 467 .rx_tx_map = 0x56, 468 .cycle_alloc = { 0x5D, 0x6C, }, 469 .cycle_limit = { 10, 11, }, 470 .kp_events = iqs7211e_kp_events, 471 .num_kp_events = ARRAY_SIZE(iqs7211e_kp_events), 472 .num_ctx = IQS7211_MAX_CTX, 473 }, 474 }; 475 476 struct iqs7211_prop_desc { 477 const char *name; 478 enum iqs7211_reg_key_id reg_key; 479 u8 reg_addr[IQS7211_NUM_REG_GRPS][ARRAY_SIZE(iqs7211_devs)]; 480 int reg_shift; 481 int reg_width; 482 int val_pitch; 483 int val_min; 484 int val_max; 485 const char *label; 486 }; 487 488 static const struct iqs7211_prop_desc iqs7211_props[] = { 489 { 490 .name = "azoteq,ati-frac-div-fine", 491 .reg_addr = { 492 [IQS7211_REG_GRP_TP] = { 493 [IQS7210A] = 0x1E, 494 [IQS7211A] = 0x30, 495 [IQS7211E] = 0x21, 496 }, 497 [IQS7211_REG_GRP_BTN] = { 498 [IQS7210A] = 0x22, 499 }, 500 [IQS7211_REG_GRP_ALP] = { 501 [IQS7210A] = 0x23, 502 [IQS7211A] = 0x36, 503 [IQS7211E] = 0x25, 504 }, 505 }, 506 .reg_shift = 9, 507 .reg_width = 5, 508 .label = "ATI fine fractional divider", 509 }, 510 { 511 .name = "azoteq,ati-frac-mult-coarse", 512 .reg_addr = { 513 [IQS7211_REG_GRP_TP] = { 514 [IQS7210A] = 0x1E, 515 [IQS7211A] = 0x30, 516 [IQS7211E] = 0x21, 517 }, 518 [IQS7211_REG_GRP_BTN] = { 519 [IQS7210A] = 0x22, 520 }, 521 [IQS7211_REG_GRP_ALP] = { 522 [IQS7210A] = 0x23, 523 [IQS7211A] = 0x36, 524 [IQS7211E] = 0x25, 525 }, 526 }, 527 .reg_shift = 5, 528 .reg_width = 4, 529 .label = "ATI coarse fractional multiplier", 530 }, 531 { 532 .name = "azoteq,ati-frac-div-coarse", 533 .reg_addr = { 534 [IQS7211_REG_GRP_TP] = { 535 [IQS7210A] = 0x1E, 536 [IQS7211A] = 0x30, 537 [IQS7211E] = 0x21, 538 }, 539 [IQS7211_REG_GRP_BTN] = { 540 [IQS7210A] = 0x22, 541 }, 542 [IQS7211_REG_GRP_ALP] = { 543 [IQS7210A] = 0x23, 544 [IQS7211A] = 0x36, 545 [IQS7211E] = 0x25, 546 }, 547 }, 548 .reg_shift = 0, 549 .reg_width = 5, 550 .label = "ATI coarse fractional divider", 551 }, 552 { 553 .name = "azoteq,ati-comp-div", 554 .reg_addr = { 555 [IQS7211_REG_GRP_TP] = { 556 [IQS7210A] = 0x1F, 557 [IQS7211E] = 0x22, 558 }, 559 [IQS7211_REG_GRP_BTN] = { 560 [IQS7210A] = 0x24, 561 }, 562 [IQS7211_REG_GRP_ALP] = { 563 [IQS7211E] = 0x26, 564 }, 565 }, 566 .reg_shift = 0, 567 .reg_width = 8, 568 .val_max = 31, 569 .label = "ATI compensation divider", 570 }, 571 { 572 .name = "azoteq,ati-comp-div", 573 .reg_addr = { 574 [IQS7211_REG_GRP_ALP] = { 575 [IQS7210A] = 0x24, 576 }, 577 }, 578 .reg_shift = 8, 579 .reg_width = 8, 580 .val_max = 31, 581 .label = "ATI compensation divider", 582 }, 583 { 584 .name = "azoteq,ati-comp-div", 585 .reg_addr = { 586 [IQS7211_REG_GRP_TP] = { 587 [IQS7211A] = 0x31, 588 }, 589 [IQS7211_REG_GRP_ALP] = { 590 [IQS7211A] = 0x37, 591 }, 592 }, 593 .val_max = 31, 594 .label = "ATI compensation divider", 595 }, 596 { 597 .name = "azoteq,ati-target", 598 .reg_addr = { 599 [IQS7211_REG_GRP_TP] = { 600 [IQS7210A] = 0x20, 601 [IQS7211A] = 0x32, 602 [IQS7211E] = 0x23, 603 }, 604 [IQS7211_REG_GRP_BTN] = { 605 [IQS7210A] = 0x27, 606 }, 607 [IQS7211_REG_GRP_ALP] = { 608 [IQS7210A] = 0x28, 609 [IQS7211A] = 0x38, 610 [IQS7211E] = 0x27, 611 }, 612 }, 613 .label = "ATI target", 614 }, 615 { 616 .name = "azoteq,ati-base", 617 .reg_addr[IQS7211_REG_GRP_ALP] = { 618 [IQS7210A] = 0x26, 619 }, 620 .reg_shift = 8, 621 .reg_width = 8, 622 .val_pitch = 8, 623 .label = "ATI base", 624 }, 625 { 626 .name = "azoteq,ati-base", 627 .reg_addr[IQS7211_REG_GRP_BTN] = { 628 [IQS7210A] = 0x26, 629 }, 630 .reg_shift = 0, 631 .reg_width = 8, 632 .val_pitch = 8, 633 .label = "ATI base", 634 }, 635 { 636 .name = "azoteq,rate-active-ms", 637 .reg_addr[IQS7211_REG_GRP_SYS] = { 638 [IQS7210A] = 0x29, 639 [IQS7211A] = 0x40, 640 [IQS7211E] = 0x28, 641 }, 642 .label = "active mode report rate", 643 }, 644 { 645 .name = "azoteq,rate-touch-ms", 646 .reg_addr[IQS7211_REG_GRP_SYS] = { 647 [IQS7210A] = 0x2A, 648 [IQS7211A] = 0x41, 649 [IQS7211E] = 0x29, 650 }, 651 .label = "idle-touch mode report rate", 652 }, 653 { 654 .name = "azoteq,rate-idle-ms", 655 .reg_addr[IQS7211_REG_GRP_SYS] = { 656 [IQS7210A] = 0x2B, 657 [IQS7211A] = 0x42, 658 [IQS7211E] = 0x2A, 659 }, 660 .label = "idle mode report rate", 661 }, 662 { 663 .name = "azoteq,rate-lp1-ms", 664 .reg_addr[IQS7211_REG_GRP_SYS] = { 665 [IQS7210A] = 0x2C, 666 [IQS7211A] = 0x43, 667 [IQS7211E] = 0x2B, 668 }, 669 .label = "low-power mode 1 report rate", 670 }, 671 { 672 .name = "azoteq,rate-lp2-ms", 673 .reg_addr[IQS7211_REG_GRP_SYS] = { 674 [IQS7210A] = 0x2D, 675 [IQS7211A] = 0x44, 676 [IQS7211E] = 0x2C, 677 }, 678 .label = "low-power mode 2 report rate", 679 }, 680 { 681 .name = "azoteq,timeout-active-ms", 682 .reg_addr[IQS7211_REG_GRP_SYS] = { 683 [IQS7210A] = 0x2E, 684 [IQS7211A] = 0x45, 685 [IQS7211E] = 0x2D, 686 }, 687 .val_pitch = 1000, 688 .label = "active mode timeout", 689 }, 690 { 691 .name = "azoteq,timeout-touch-ms", 692 .reg_addr[IQS7211_REG_GRP_SYS] = { 693 [IQS7210A] = 0x2F, 694 [IQS7211A] = 0x46, 695 [IQS7211E] = 0x2E, 696 }, 697 .val_pitch = 1000, 698 .label = "idle-touch mode timeout", 699 }, 700 { 701 .name = "azoteq,timeout-idle-ms", 702 .reg_addr[IQS7211_REG_GRP_SYS] = { 703 [IQS7210A] = 0x30, 704 [IQS7211A] = 0x47, 705 [IQS7211E] = 0x2F, 706 }, 707 .val_pitch = 1000, 708 .label = "idle mode timeout", 709 }, 710 { 711 .name = "azoteq,timeout-lp1-ms", 712 .reg_addr[IQS7211_REG_GRP_SYS] = { 713 [IQS7210A] = 0x31, 714 [IQS7211A] = 0x48, 715 [IQS7211E] = 0x30, 716 }, 717 .val_pitch = 1000, 718 .label = "low-power mode 1 timeout", 719 }, 720 { 721 .name = "azoteq,timeout-lp2-ms", 722 .reg_addr[IQS7211_REG_GRP_SYS] = { 723 [IQS7210A] = 0x32, 724 [IQS7211E] = 0x31, 725 }, 726 .reg_shift = 8, 727 .reg_width = 8, 728 .val_pitch = 1000, 729 .val_max = 60000, 730 .label = "trackpad reference value update rate", 731 }, 732 { 733 .name = "azoteq,timeout-lp2-ms", 734 .reg_addr[IQS7211_REG_GRP_SYS] = { 735 [IQS7211A] = 0x49, 736 }, 737 .val_pitch = 1000, 738 .val_max = 60000, 739 .label = "trackpad reference value update rate", 740 }, 741 { 742 .name = "azoteq,timeout-ati-ms", 743 .reg_addr[IQS7211_REG_GRP_SYS] = { 744 [IQS7210A] = 0x32, 745 [IQS7211E] = 0x31, 746 }, 747 .reg_width = 8, 748 .val_pitch = 1000, 749 .val_max = 60000, 750 .label = "ATI error timeout", 751 }, 752 { 753 .name = "azoteq,timeout-ati-ms", 754 .reg_addr[IQS7211_REG_GRP_SYS] = { 755 [IQS7211A] = 0x35, 756 }, 757 .val_pitch = 1000, 758 .val_max = 60000, 759 .label = "ATI error timeout", 760 }, 761 { 762 .name = "azoteq,timeout-comms-ms", 763 .reg_addr[IQS7211_REG_GRP_SYS] = { 764 [IQS7210A] = 0x33, 765 [IQS7211A] = 0x4A, 766 [IQS7211E] = 0x32, 767 }, 768 .label = "communication timeout", 769 }, 770 { 771 .name = "azoteq,timeout-press-ms", 772 .reg_addr[IQS7211_REG_GRP_SYS] = { 773 [IQS7210A] = 0x34, 774 }, 775 .reg_width = 8, 776 .val_pitch = 1000, 777 .val_max = 60000, 778 .label = "press timeout", 779 }, 780 { 781 .name = "azoteq,ati-mode", 782 .reg_addr[IQS7211_REG_GRP_ALP] = { 783 [IQS7210A] = 0x37, 784 }, 785 .reg_shift = 15, 786 .reg_width = 1, 787 .label = "ATI mode", 788 }, 789 { 790 .name = "azoteq,ati-mode", 791 .reg_addr[IQS7211_REG_GRP_BTN] = { 792 [IQS7210A] = 0x37, 793 }, 794 .reg_shift = 7, 795 .reg_width = 1, 796 .label = "ATI mode", 797 }, 798 { 799 .name = "azoteq,sense-mode", 800 .reg_addr[IQS7211_REG_GRP_ALP] = { 801 [IQS7210A] = 0x37, 802 [IQS7211A] = 0x72, 803 [IQS7211E] = 0x36, 804 }, 805 .reg_shift = 8, 806 .reg_width = 1, 807 .label = "sensing mode", 808 }, 809 { 810 .name = "azoteq,sense-mode", 811 .reg_addr[IQS7211_REG_GRP_BTN] = { 812 [IQS7210A] = 0x37, 813 }, 814 .reg_shift = 0, 815 .reg_width = 2, 816 .val_max = 2, 817 .label = "sensing mode", 818 }, 819 { 820 .name = "azoteq,fosc-freq", 821 .reg_addr[IQS7211_REG_GRP_SYS] = { 822 [IQS7210A] = 0x38, 823 [IQS7211A] = 0x52, 824 [IQS7211E] = 0x35, 825 }, 826 .reg_shift = 4, 827 .reg_width = 1, 828 .label = "core clock frequency selection", 829 }, 830 { 831 .name = "azoteq,fosc-trim", 832 .reg_addr[IQS7211_REG_GRP_SYS] = { 833 [IQS7210A] = 0x38, 834 [IQS7211A] = 0x52, 835 [IQS7211E] = 0x35, 836 }, 837 .reg_shift = 0, 838 .reg_width = 4, 839 .label = "core clock frequency trim", 840 }, 841 { 842 .name = "azoteq,touch-exit", 843 .reg_addr = { 844 [IQS7211_REG_GRP_TP] = { 845 [IQS7210A] = 0x3B, 846 [IQS7211A] = 0x53, 847 [IQS7211E] = 0x38, 848 }, 849 [IQS7211_REG_GRP_BTN] = { 850 [IQS7210A] = 0x3E, 851 }, 852 }, 853 .reg_shift = 8, 854 .reg_width = 8, 855 .label = "touch exit factor", 856 }, 857 { 858 .name = "azoteq,touch-enter", 859 .reg_addr = { 860 [IQS7211_REG_GRP_TP] = { 861 [IQS7210A] = 0x3B, 862 [IQS7211A] = 0x53, 863 [IQS7211E] = 0x38, 864 }, 865 [IQS7211_REG_GRP_BTN] = { 866 [IQS7210A] = 0x3E, 867 }, 868 }, 869 .reg_shift = 0, 870 .reg_width = 8, 871 .label = "touch entrance factor", 872 }, 873 { 874 .name = "azoteq,thresh", 875 .reg_addr = { 876 [IQS7211_REG_GRP_BTN] = { 877 [IQS7210A] = 0x3C, 878 }, 879 [IQS7211_REG_GRP_ALP] = { 880 [IQS7210A] = 0x3D, 881 [IQS7211A] = 0x54, 882 [IQS7211E] = 0x39, 883 }, 884 }, 885 .label = "threshold", 886 }, 887 { 888 .name = "azoteq,debounce-exit", 889 .reg_addr = { 890 [IQS7211_REG_GRP_BTN] = { 891 [IQS7210A] = 0x3F, 892 }, 893 [IQS7211_REG_GRP_ALP] = { 894 [IQS7210A] = 0x40, 895 [IQS7211A] = 0x56, 896 [IQS7211E] = 0x3A, 897 }, 898 }, 899 .reg_shift = 8, 900 .reg_width = 8, 901 .label = "debounce exit factor", 902 }, 903 { 904 .name = "azoteq,debounce-enter", 905 .reg_addr = { 906 [IQS7211_REG_GRP_BTN] = { 907 [IQS7210A] = 0x3F, 908 }, 909 [IQS7211_REG_GRP_ALP] = { 910 [IQS7210A] = 0x40, 911 [IQS7211A] = 0x56, 912 [IQS7211E] = 0x3A, 913 }, 914 }, 915 .reg_shift = 0, 916 .reg_width = 8, 917 .label = "debounce entrance factor", 918 }, 919 { 920 .name = "azoteq,conv-frac", 921 .reg_addr = { 922 [IQS7211_REG_GRP_TP] = { 923 [IQS7210A] = 0x48, 924 [IQS7211A] = 0x58, 925 [IQS7211E] = 0x3D, 926 }, 927 [IQS7211_REG_GRP_BTN] = { 928 [IQS7210A] = 0x49, 929 }, 930 [IQS7211_REG_GRP_ALP] = { 931 [IQS7210A] = 0x4A, 932 [IQS7211A] = 0x59, 933 [IQS7211E] = 0x3E, 934 }, 935 }, 936 .reg_shift = 8, 937 .reg_width = 8, 938 .label = "conversion frequency fractional divider", 939 }, 940 { 941 .name = "azoteq,conv-period", 942 .reg_addr = { 943 [IQS7211_REG_GRP_TP] = { 944 [IQS7210A] = 0x48, 945 [IQS7211A] = 0x58, 946 [IQS7211E] = 0x3D, 947 }, 948 [IQS7211_REG_GRP_BTN] = { 949 [IQS7210A] = 0x49, 950 }, 951 [IQS7211_REG_GRP_ALP] = { 952 [IQS7210A] = 0x4A, 953 [IQS7211A] = 0x59, 954 [IQS7211E] = 0x3E, 955 }, 956 }, 957 .reg_shift = 0, 958 .reg_width = 8, 959 .label = "conversion period", 960 }, 961 { 962 .name = "azoteq,thresh", 963 .reg_addr[IQS7211_REG_GRP_TP] = { 964 [IQS7210A] = 0x55, 965 [IQS7211A] = 0x67, 966 [IQS7211E] = 0x48, 967 }, 968 .reg_shift = 0, 969 .reg_width = 8, 970 .label = "threshold", 971 }, 972 { 973 .name = "azoteq,contact-split", 974 .reg_addr[IQS7211_REG_GRP_SYS] = { 975 [IQS7210A] = 0x55, 976 [IQS7211A] = 0x67, 977 [IQS7211E] = 0x48, 978 }, 979 .reg_shift = 8, 980 .reg_width = 8, 981 .label = "contact split factor", 982 }, 983 { 984 .name = "azoteq,trim-x", 985 .reg_addr[IQS7211_REG_GRP_SYS] = { 986 [IQS7210A] = 0x56, 987 [IQS7211E] = 0x49, 988 }, 989 .reg_shift = 0, 990 .reg_width = 8, 991 .label = "horizontal trim width", 992 }, 993 { 994 .name = "azoteq,trim-x", 995 .reg_addr[IQS7211_REG_GRP_SYS] = { 996 [IQS7211A] = 0x68, 997 }, 998 .label = "horizontal trim width", 999 }, 1000 { 1001 .name = "azoteq,trim-y", 1002 .reg_addr[IQS7211_REG_GRP_SYS] = { 1003 [IQS7210A] = 0x56, 1004 [IQS7211E] = 0x49, 1005 }, 1006 .reg_shift = 8, 1007 .reg_width = 8, 1008 .label = "vertical trim height", 1009 }, 1010 { 1011 .name = "azoteq,trim-y", 1012 .reg_addr[IQS7211_REG_GRP_SYS] = { 1013 [IQS7211A] = 0x69, 1014 }, 1015 .label = "vertical trim height", 1016 }, 1017 { 1018 .name = "azoteq,gesture-max-ms", 1019 .reg_key = IQS7211_REG_KEY_TAP, 1020 .reg_addr[IQS7211_REG_GRP_TP] = { 1021 [IQS7210A] = 0x59, 1022 [IQS7211A] = 0x81, 1023 [IQS7211E] = 0x4C, 1024 }, 1025 .label = "maximum gesture time", 1026 }, 1027 { 1028 .name = "azoteq,gesture-mid-ms", 1029 .reg_key = IQS7211_REG_KEY_TAP, 1030 .reg_addr[IQS7211_REG_GRP_TP] = { 1031 [IQS7211E] = 0x4D, 1032 }, 1033 .label = "repeated gesture time", 1034 }, 1035 { 1036 .name = "azoteq,gesture-dist", 1037 .reg_key = IQS7211_REG_KEY_TAP, 1038 .reg_addr[IQS7211_REG_GRP_TP] = { 1039 [IQS7210A] = 0x5A, 1040 [IQS7211A] = 0x82, 1041 [IQS7211E] = 0x4E, 1042 }, 1043 .label = "gesture distance", 1044 }, 1045 { 1046 .name = "azoteq,gesture-dist", 1047 .reg_key = IQS7211_REG_KEY_HOLD, 1048 .reg_addr[IQS7211_REG_GRP_TP] = { 1049 [IQS7210A] = 0x5A, 1050 [IQS7211A] = 0x82, 1051 [IQS7211E] = 0x4E, 1052 }, 1053 .label = "gesture distance", 1054 }, 1055 { 1056 .name = "azoteq,gesture-min-ms", 1057 .reg_key = IQS7211_REG_KEY_HOLD, 1058 .reg_addr[IQS7211_REG_GRP_TP] = { 1059 [IQS7210A] = 0x5B, 1060 [IQS7211A] = 0x83, 1061 [IQS7211E] = 0x4F, 1062 }, 1063 .label = "minimum gesture time", 1064 }, 1065 { 1066 .name = "azoteq,gesture-max-ms", 1067 .reg_key = IQS7211_REG_KEY_AXIAL_X, 1068 .reg_addr[IQS7211_REG_GRP_TP] = { 1069 [IQS7210A] = 0x5C, 1070 [IQS7211A] = 0x84, 1071 [IQS7211E] = 0x50, 1072 }, 1073 .label = "maximum gesture time", 1074 }, 1075 { 1076 .name = "azoteq,gesture-max-ms", 1077 .reg_key = IQS7211_REG_KEY_AXIAL_Y, 1078 .reg_addr[IQS7211_REG_GRP_TP] = { 1079 [IQS7210A] = 0x5C, 1080 [IQS7211A] = 0x84, 1081 [IQS7211E] = 0x50, 1082 }, 1083 .label = "maximum gesture time", 1084 }, 1085 { 1086 .name = "azoteq,gesture-dist", 1087 .reg_key = IQS7211_REG_KEY_AXIAL_X, 1088 .reg_addr[IQS7211_REG_GRP_TP] = { 1089 [IQS7210A] = 0x5D, 1090 [IQS7211A] = 0x85, 1091 [IQS7211E] = 0x51, 1092 }, 1093 .label = "gesture distance", 1094 }, 1095 { 1096 .name = "azoteq,gesture-dist", 1097 .reg_key = IQS7211_REG_KEY_AXIAL_Y, 1098 .reg_addr[IQS7211_REG_GRP_TP] = { 1099 [IQS7210A] = 0x5E, 1100 [IQS7211A] = 0x86, 1101 [IQS7211E] = 0x52, 1102 }, 1103 .label = "gesture distance", 1104 }, 1105 { 1106 .name = "azoteq,gesture-dist-rep", 1107 .reg_key = IQS7211_REG_KEY_AXIAL_X, 1108 .reg_addr[IQS7211_REG_GRP_TP] = { 1109 [IQS7211E] = 0x53, 1110 }, 1111 .label = "repeated gesture distance", 1112 }, 1113 { 1114 .name = "azoteq,gesture-dist-rep", 1115 .reg_key = IQS7211_REG_KEY_AXIAL_Y, 1116 .reg_addr[IQS7211_REG_GRP_TP] = { 1117 [IQS7211E] = 0x54, 1118 }, 1119 .label = "repeated gesture distance", 1120 }, 1121 { 1122 .name = "azoteq,thresh", 1123 .reg_key = IQS7211_REG_KEY_PALM, 1124 .reg_addr[IQS7211_REG_GRP_TP] = { 1125 [IQS7211E] = 0x55, 1126 }, 1127 .reg_shift = 8, 1128 .reg_width = 8, 1129 .val_max = 42, 1130 .label = "threshold", 1131 }, 1132 }; 1133 1134 static const u8 iqs7211_gesture_angle[] = { 1135 0x00, 0x01, 0x02, 0x03, 1136 0x04, 0x06, 0x07, 0x08, 1137 0x09, 0x0A, 0x0B, 0x0C, 1138 0x0E, 0x0F, 0x10, 0x11, 1139 0x12, 0x14, 0x15, 0x16, 1140 0x17, 0x19, 0x1A, 0x1B, 1141 0x1C, 0x1E, 0x1F, 0x21, 1142 0x22, 0x23, 0x25, 0x26, 1143 0x28, 0x2A, 0x2B, 0x2D, 1144 0x2E, 0x30, 0x32, 0x34, 1145 0x36, 0x38, 0x3A, 0x3C, 1146 0x3E, 0x40, 0x42, 0x45, 1147 0x47, 0x4A, 0x4C, 0x4F, 1148 0x52, 0x55, 0x58, 0x5B, 1149 0x5F, 0x63, 0x66, 0x6B, 1150 0x6F, 0x73, 0x78, 0x7E, 1151 0x83, 0x89, 0x90, 0x97, 1152 0x9E, 0xA7, 0xB0, 0xBA, 1153 0xC5, 0xD1, 0xDF, 0xEF, 1154 }; 1155 1156 struct iqs7211_ver_info { 1157 __le16 prod_num; 1158 __le16 major; 1159 __le16 minor; 1160 __le32 patch; 1161 } __packed; 1162 1163 struct iqs7211_touch_data { 1164 __le16 abs_x; 1165 __le16 abs_y; 1166 __le16 pressure; 1167 __le16 area; 1168 } __packed; 1169 1170 struct iqs7211_tp_config { 1171 u8 tp_settings; 1172 u8 total_rx; 1173 u8 total_tx; 1174 u8 num_contacts; 1175 __le16 max_x; 1176 __le16 max_y; 1177 } __packed; 1178 1179 struct iqs7211_private { 1180 const struct iqs7211_dev_desc *dev_desc; 1181 struct gpio_desc *reset_gpio; 1182 struct gpio_desc *irq_gpio; 1183 struct i2c_client *client; 1184 struct input_dev *tp_idev; 1185 struct input_dev *kp_idev; 1186 struct iqs7211_ver_info ver_info; 1187 struct iqs7211_tp_config tp_config; 1188 struct touchscreen_properties prop; 1189 struct list_head reg_field_head; 1190 enum iqs7211_comms_mode comms_init; 1191 enum iqs7211_comms_mode comms_mode; 1192 unsigned int num_contacts; 1193 unsigned int kp_code[ARRAY_SIZE(iqs7211e_kp_events)]; 1194 u8 rx_tx_map[IQS7211_MAX_CTX + 1]; 1195 u8 cycle_alloc[2][33]; 1196 u8 exp_file[2]; 1197 u16 event_mask; 1198 u16 ati_start; 1199 u16 gesture_cache; 1200 }; 1201 1202 static int iqs7211_irq_poll(struct iqs7211_private *iqs7211, u64 timeout_us) 1203 { 1204 int error, val; 1205 1206 error = readx_poll_timeout(gpiod_get_value_cansleep, iqs7211->irq_gpio, 1207 val, val, IQS7211_COMMS_SLEEP_US, timeout_us); 1208 1209 return val < 0 ? val : error; 1210 } 1211 1212 static int iqs7211_hard_reset(struct iqs7211_private *iqs7211) 1213 { 1214 if (!iqs7211->reset_gpio) 1215 return 0; 1216 1217 gpiod_set_value_cansleep(iqs7211->reset_gpio, 1); 1218 1219 /* 1220 * The following delay ensures the shared RDY/MCLR pin is sampled in 1221 * between periodic assertions by the device and assumes the default 1222 * communication timeout has not been overwritten in OTP memory. 1223 */ 1224 if (iqs7211->reset_gpio == iqs7211->irq_gpio) 1225 msleep(IQS7211_RESET_TIMEOUT_MS); 1226 else 1227 usleep_range(1000, 1100); 1228 1229 gpiod_set_value_cansleep(iqs7211->reset_gpio, 0); 1230 if (iqs7211->reset_gpio == iqs7211->irq_gpio) 1231 iqs7211_irq_wait(); 1232 1233 return iqs7211_irq_poll(iqs7211, IQS7211_START_TIMEOUT_US); 1234 } 1235 1236 static int iqs7211_force_comms(struct iqs7211_private *iqs7211) 1237 { 1238 u8 msg_buf[] = { 0xFF, }; 1239 int ret; 1240 1241 switch (iqs7211->comms_mode) { 1242 case IQS7211_COMMS_MODE_WAIT: 1243 return iqs7211_irq_poll(iqs7211, IQS7211_START_TIMEOUT_US); 1244 1245 case IQS7211_COMMS_MODE_FREE: 1246 return 0; 1247 1248 case IQS7211_COMMS_MODE_FORCE: 1249 break; 1250 1251 default: 1252 return -EINVAL; 1253 } 1254 1255 /* 1256 * The device cannot communicate until it asserts its interrupt (RDY) 1257 * pin. Attempts to do so while RDY is deasserted return an ACK; how- 1258 * ever all write data is ignored, and all read data returns 0xEE. 1259 * 1260 * Unsolicited communication must be preceded by a special force com- 1261 * munication command, after which the device eventually asserts its 1262 * RDY pin and agrees to communicate. 1263 * 1264 * Regardless of whether communication is forced or the result of an 1265 * interrupt, the device automatically deasserts its RDY pin once it 1266 * detects an I2C stop condition, or a timeout expires. 1267 */ 1268 ret = gpiod_get_value_cansleep(iqs7211->irq_gpio); 1269 if (ret < 0) 1270 return ret; 1271 else if (ret > 0) 1272 return 0; 1273 1274 ret = i2c_master_send(iqs7211->client, msg_buf, sizeof(msg_buf)); 1275 if (ret < (int)sizeof(msg_buf)) { 1276 if (ret >= 0) 1277 ret = -EIO; 1278 1279 msleep(IQS7211_COMMS_RETRY_MS); 1280 return ret; 1281 } 1282 1283 iqs7211_irq_wait(); 1284 1285 return iqs7211_irq_poll(iqs7211, IQS7211_COMMS_TIMEOUT_US); 1286 } 1287 1288 static int iqs7211_read_burst(struct iqs7211_private *iqs7211, 1289 u8 reg, void *val, u16 val_len) 1290 { 1291 int ret, i; 1292 struct i2c_client *client = iqs7211->client; 1293 struct i2c_msg msg[] = { 1294 { 1295 .addr = client->addr, 1296 .flags = 0, 1297 .len = sizeof(reg), 1298 .buf = ®, 1299 }, 1300 { 1301 .addr = client->addr, 1302 .flags = I2C_M_RD, 1303 .len = val_len, 1304 .buf = (u8 *)val, 1305 }, 1306 }; 1307 1308 /* 1309 * The following loop protects against an edge case in which the RDY 1310 * pin is automatically deasserted just as the read is initiated. In 1311 * that case, the read must be retried using forced communication. 1312 */ 1313 for (i = 0; i < IQS7211_NUM_RETRIES; i++) { 1314 ret = iqs7211_force_comms(iqs7211); 1315 if (ret < 0) 1316 continue; 1317 1318 ret = i2c_transfer(client->adapter, msg, ARRAY_SIZE(msg)); 1319 if (ret < (int)ARRAY_SIZE(msg)) { 1320 if (ret >= 0) 1321 ret = -EIO; 1322 1323 msleep(IQS7211_COMMS_RETRY_MS); 1324 continue; 1325 } 1326 1327 if (get_unaligned_le16(msg[1].buf) == IQS7211_COMMS_ERROR) { 1328 ret = -ENODATA; 1329 continue; 1330 } 1331 1332 ret = 0; 1333 break; 1334 } 1335 1336 iqs7211_irq_wait(); 1337 1338 if (ret < 0) 1339 dev_err(&client->dev, 1340 "Failed to read from address 0x%02X: %d\n", reg, ret); 1341 1342 return ret; 1343 } 1344 1345 static int iqs7211_read_word(struct iqs7211_private *iqs7211, u8 reg, u16 *val) 1346 { 1347 __le16 val_buf; 1348 int error; 1349 1350 error = iqs7211_read_burst(iqs7211, reg, &val_buf, sizeof(val_buf)); 1351 if (error) 1352 return error; 1353 1354 *val = le16_to_cpu(val_buf); 1355 1356 return 0; 1357 } 1358 1359 static int iqs7211_write_burst(struct iqs7211_private *iqs7211, 1360 u8 reg, const void *val, u16 val_len) 1361 { 1362 int msg_len = sizeof(reg) + val_len; 1363 int ret, i; 1364 struct i2c_client *client = iqs7211->client; 1365 u8 *msg_buf; 1366 1367 msg_buf = kzalloc(msg_len, GFP_KERNEL); 1368 if (!msg_buf) 1369 return -ENOMEM; 1370 1371 *msg_buf = reg; 1372 memcpy(msg_buf + sizeof(reg), val, val_len); 1373 1374 /* 1375 * The following loop protects against an edge case in which the RDY 1376 * pin is automatically asserted just before the force communication 1377 * command is sent. 1378 * 1379 * In that case, the subsequent I2C stop condition tricks the device 1380 * into preemptively deasserting the RDY pin and the command must be 1381 * sent again. 1382 */ 1383 for (i = 0; i < IQS7211_NUM_RETRIES; i++) { 1384 ret = iqs7211_force_comms(iqs7211); 1385 if (ret < 0) 1386 continue; 1387 1388 ret = i2c_master_send(client, msg_buf, msg_len); 1389 if (ret < msg_len) { 1390 if (ret >= 0) 1391 ret = -EIO; 1392 1393 msleep(IQS7211_COMMS_RETRY_MS); 1394 continue; 1395 } 1396 1397 ret = 0; 1398 break; 1399 } 1400 1401 kfree(msg_buf); 1402 1403 iqs7211_irq_wait(); 1404 1405 if (ret < 0) 1406 dev_err(&client->dev, 1407 "Failed to write to address 0x%02X: %d\n", reg, ret); 1408 1409 return ret; 1410 } 1411 1412 static int iqs7211_write_word(struct iqs7211_private *iqs7211, u8 reg, u16 val) 1413 { 1414 __le16 val_buf = cpu_to_le16(val); 1415 1416 return iqs7211_write_burst(iqs7211, reg, &val_buf, sizeof(val_buf)); 1417 } 1418 1419 static int iqs7211_start_comms(struct iqs7211_private *iqs7211) 1420 { 1421 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc; 1422 struct i2c_client *client = iqs7211->client; 1423 bool forced_comms; 1424 unsigned int val; 1425 u16 comms_setup; 1426 int error; 1427 1428 /* 1429 * Until forced communication can be enabled, the host must wait for a 1430 * communication window each time it intends to elicit a response from 1431 * the device. 1432 * 1433 * Forced communication is not necessary, however, if the host adapter 1434 * can support clock stretching. In that case, the device freely clock 1435 * stretches until all pending conversions are complete. 1436 */ 1437 forced_comms = device_property_present(&client->dev, 1438 "azoteq,forced-comms"); 1439 1440 error = device_property_read_u32(&client->dev, 1441 "azoteq,forced-comms-default", &val); 1442 if (error == -EINVAL) { 1443 iqs7211->comms_init = IQS7211_COMMS_MODE_WAIT; 1444 } else if (error) { 1445 dev_err(&client->dev, 1446 "Failed to read default communication mode: %d\n", 1447 error); 1448 return error; 1449 } else if (val) { 1450 iqs7211->comms_init = forced_comms ? IQS7211_COMMS_MODE_FORCE 1451 : IQS7211_COMMS_MODE_WAIT; 1452 } else { 1453 iqs7211->comms_init = forced_comms ? IQS7211_COMMS_MODE_WAIT 1454 : IQS7211_COMMS_MODE_FREE; 1455 } 1456 1457 iqs7211->comms_mode = iqs7211->comms_init; 1458 1459 error = iqs7211_hard_reset(iqs7211); 1460 if (error) { 1461 dev_err(&client->dev, "Failed to reset device: %d\n", error); 1462 return error; 1463 } 1464 1465 error = iqs7211_read_burst(iqs7211, IQS7211_PROD_NUM, 1466 &iqs7211->ver_info, 1467 sizeof(iqs7211->ver_info)); 1468 if (error) 1469 return error; 1470 1471 if (le16_to_cpu(iqs7211->ver_info.prod_num) != dev_desc->prod_num) { 1472 dev_err(&client->dev, "Invalid product number: %u\n", 1473 le16_to_cpu(iqs7211->ver_info.prod_num)); 1474 return -EINVAL; 1475 } 1476 1477 error = iqs7211_read_word(iqs7211, dev_desc->sys_ctrl + 1, 1478 &comms_setup); 1479 if (error) 1480 return error; 1481 1482 if (forced_comms) 1483 comms_setup |= dev_desc->comms_req; 1484 else 1485 comms_setup &= ~dev_desc->comms_req; 1486 1487 error = iqs7211_write_word(iqs7211, dev_desc->sys_ctrl + 1, 1488 comms_setup | dev_desc->comms_end); 1489 if (error) 1490 return error; 1491 1492 if (forced_comms) 1493 iqs7211->comms_mode = IQS7211_COMMS_MODE_FORCE; 1494 else 1495 iqs7211->comms_mode = IQS7211_COMMS_MODE_FREE; 1496 1497 error = iqs7211_read_burst(iqs7211, dev_desc->exp_file, 1498 iqs7211->exp_file, 1499 sizeof(iqs7211->exp_file)); 1500 if (error) 1501 return error; 1502 1503 error = iqs7211_read_burst(iqs7211, dev_desc->tp_config, 1504 &iqs7211->tp_config, 1505 sizeof(iqs7211->tp_config)); 1506 if (error) 1507 return error; 1508 1509 error = iqs7211_write_word(iqs7211, dev_desc->sys_ctrl + 1, 1510 comms_setup); 1511 if (error) 1512 return error; 1513 1514 iqs7211->event_mask = comms_setup & ~IQS7211_EVENT_MASK_ALL; 1515 iqs7211->event_mask |= (IQS7211_EVENT_MASK_ATI | IQS7211_EVENT_MODE); 1516 1517 return 0; 1518 } 1519 1520 static int iqs7211_init_device(struct iqs7211_private *iqs7211) 1521 { 1522 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc; 1523 struct iqs7211_reg_field_desc *reg_field; 1524 __le16 sys_ctrl[] = { 1525 cpu_to_le16(dev_desc->ack_reset), 1526 cpu_to_le16(iqs7211->event_mask), 1527 }; 1528 int error, i; 1529 1530 /* 1531 * Acknowledge reset before writing any registers in case the device 1532 * suffers a spurious reset during initialization. The communication 1533 * mode is configured at this time as well. 1534 */ 1535 error = iqs7211_write_burst(iqs7211, dev_desc->sys_ctrl, sys_ctrl, 1536 sizeof(sys_ctrl)); 1537 if (error) 1538 return error; 1539 1540 if (iqs7211->event_mask & dev_desc->comms_req) 1541 iqs7211->comms_mode = IQS7211_COMMS_MODE_FORCE; 1542 else 1543 iqs7211->comms_mode = IQS7211_COMMS_MODE_FREE; 1544 1545 /* 1546 * Take advantage of the stop-bit disable function, if available, to 1547 * save the trouble of having to reopen a communication window after 1548 * each read or write. 1549 */ 1550 error = iqs7211_write_word(iqs7211, dev_desc->sys_ctrl + 1, 1551 iqs7211->event_mask | dev_desc->comms_end); 1552 if (error) 1553 return error; 1554 1555 list_for_each_entry(reg_field, &iqs7211->reg_field_head, list) { 1556 u16 new_val = reg_field->val; 1557 1558 if (reg_field->mask < U16_MAX) { 1559 u16 old_val; 1560 1561 error = iqs7211_read_word(iqs7211, reg_field->addr, 1562 &old_val); 1563 if (error) 1564 return error; 1565 1566 new_val = old_val & ~reg_field->mask; 1567 new_val |= reg_field->val; 1568 1569 if (new_val == old_val) 1570 continue; 1571 } 1572 1573 error = iqs7211_write_word(iqs7211, reg_field->addr, new_val); 1574 if (error) 1575 return error; 1576 } 1577 1578 error = iqs7211_write_burst(iqs7211, dev_desc->tp_config, 1579 &iqs7211->tp_config, 1580 sizeof(iqs7211->tp_config)); 1581 if (error) 1582 return error; 1583 1584 if (**iqs7211->cycle_alloc) { 1585 error = iqs7211_write_burst(iqs7211, dev_desc->rx_tx_map, 1586 &iqs7211->rx_tx_map, 1587 dev_desc->num_ctx); 1588 if (error) 1589 return error; 1590 1591 for (i = 0; i < sizeof(dev_desc->cycle_limit); i++) { 1592 error = iqs7211_write_burst(iqs7211, 1593 dev_desc->cycle_alloc[i], 1594 iqs7211->cycle_alloc[i], 1595 dev_desc->cycle_limit[i] * 3); 1596 if (error) 1597 return error; 1598 } 1599 } 1600 1601 *sys_ctrl = cpu_to_le16(iqs7211->ati_start); 1602 1603 return iqs7211_write_burst(iqs7211, dev_desc->sys_ctrl, sys_ctrl, 1604 sizeof(sys_ctrl)); 1605 } 1606 1607 static int iqs7211_add_field(struct iqs7211_private *iqs7211, 1608 struct iqs7211_reg_field_desc new_field) 1609 { 1610 struct i2c_client *client = iqs7211->client; 1611 struct iqs7211_reg_field_desc *reg_field; 1612 1613 if (!new_field.addr) 1614 return 0; 1615 1616 list_for_each_entry(reg_field, &iqs7211->reg_field_head, list) { 1617 if (reg_field->addr != new_field.addr) 1618 continue; 1619 1620 reg_field->mask |= new_field.mask; 1621 reg_field->val |= new_field.val; 1622 return 0; 1623 } 1624 1625 reg_field = devm_kzalloc(&client->dev, sizeof(*reg_field), GFP_KERNEL); 1626 if (!reg_field) 1627 return -ENOMEM; 1628 1629 reg_field->addr = new_field.addr; 1630 reg_field->mask = new_field.mask; 1631 reg_field->val = new_field.val; 1632 1633 list_add(®_field->list, &iqs7211->reg_field_head); 1634 1635 return 0; 1636 } 1637 1638 static int iqs7211_parse_props(struct iqs7211_private *iqs7211, 1639 struct fwnode_handle *reg_grp_node, 1640 enum iqs7211_reg_grp_id reg_grp, 1641 enum iqs7211_reg_key_id reg_key) 1642 { 1643 struct i2c_client *client = iqs7211->client; 1644 int i; 1645 1646 for (i = 0; i < ARRAY_SIZE(iqs7211_props); i++) { 1647 const char *name = iqs7211_props[i].name; 1648 u8 reg_addr = iqs7211_props[i].reg_addr[reg_grp] 1649 [iqs7211->dev_desc - 1650 iqs7211_devs]; 1651 int reg_shift = iqs7211_props[i].reg_shift; 1652 int reg_width = iqs7211_props[i].reg_width ? : 16; 1653 int val_pitch = iqs7211_props[i].val_pitch ? : 1; 1654 int val_min = iqs7211_props[i].val_min; 1655 int val_max = iqs7211_props[i].val_max; 1656 const char *label = iqs7211_props[i].label ? : name; 1657 struct iqs7211_reg_field_desc reg_field; 1658 unsigned int val; 1659 int error; 1660 1661 if (iqs7211_props[i].reg_key != reg_key) 1662 continue; 1663 1664 if (!reg_addr) 1665 continue; 1666 1667 error = fwnode_property_read_u32(reg_grp_node, name, &val); 1668 if (error == -EINVAL) { 1669 continue; 1670 } else if (error) { 1671 dev_err(&client->dev, "Failed to read %s %s: %d\n", 1672 fwnode_get_name(reg_grp_node), label, error); 1673 return error; 1674 } 1675 1676 if (!val_max) 1677 val_max = GENMASK(reg_width - 1, 0) * val_pitch; 1678 1679 if (val < val_min || val > val_max) { 1680 dev_err(&client->dev, "Invalid %s: %u\n", label, val); 1681 return -EINVAL; 1682 } 1683 1684 reg_field.addr = reg_addr; 1685 reg_field.mask = GENMASK(reg_shift + reg_width - 1, reg_shift); 1686 reg_field.val = val / val_pitch << reg_shift; 1687 1688 error = iqs7211_add_field(iqs7211, reg_field); 1689 if (error) 1690 return error; 1691 } 1692 1693 return 0; 1694 } 1695 1696 static int iqs7211_parse_event(struct iqs7211_private *iqs7211, 1697 struct fwnode_handle *event_node, 1698 enum iqs7211_reg_grp_id reg_grp, 1699 enum iqs7211_reg_key_id reg_key, 1700 unsigned int *event_code) 1701 { 1702 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc; 1703 struct i2c_client *client = iqs7211->client; 1704 struct iqs7211_reg_field_desc reg_field; 1705 unsigned int val; 1706 int error; 1707 1708 error = iqs7211_parse_props(iqs7211, event_node, reg_grp, reg_key); 1709 if (error) 1710 return error; 1711 1712 if (reg_key == IQS7211_REG_KEY_AXIAL_X || 1713 reg_key == IQS7211_REG_KEY_AXIAL_Y) { 1714 error = fwnode_property_read_u32(event_node, 1715 "azoteq,gesture-angle", &val); 1716 if (!error) { 1717 if (val >= ARRAY_SIZE(iqs7211_gesture_angle)) { 1718 dev_err(&client->dev, 1719 "Invalid %s gesture angle: %u\n", 1720 fwnode_get_name(event_node), val); 1721 return -EINVAL; 1722 } 1723 1724 reg_field.addr = dev_desc->gesture_angle; 1725 reg_field.mask = U8_MAX; 1726 reg_field.val = iqs7211_gesture_angle[val]; 1727 1728 error = iqs7211_add_field(iqs7211, reg_field); 1729 if (error) 1730 return error; 1731 } else if (error != -EINVAL) { 1732 dev_err(&client->dev, 1733 "Failed to read %s gesture angle: %d\n", 1734 fwnode_get_name(event_node), error); 1735 return error; 1736 } 1737 } 1738 1739 error = fwnode_property_read_u32(event_node, "linux,code", event_code); 1740 if (error == -EINVAL) 1741 error = 0; 1742 else if (error) 1743 dev_err(&client->dev, "Failed to read %s code: %d\n", 1744 fwnode_get_name(event_node), error); 1745 1746 return error; 1747 } 1748 1749 static int iqs7211_parse_cycles(struct iqs7211_private *iqs7211, 1750 struct fwnode_handle *tp_node) 1751 { 1752 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc; 1753 struct i2c_client *client = iqs7211->client; 1754 int num_cycles = dev_desc->cycle_limit[0] + dev_desc->cycle_limit[1]; 1755 int error, count, i, j, k, cycle_start; 1756 unsigned int cycle_alloc[IQS7211_MAX_CYCLES][2]; 1757 u8 total_rx = iqs7211->tp_config.total_rx; 1758 u8 total_tx = iqs7211->tp_config.total_tx; 1759 1760 for (i = 0; i < IQS7211_MAX_CYCLES * 2; i++) 1761 *(cycle_alloc[0] + i) = U8_MAX; 1762 1763 count = fwnode_property_count_u32(tp_node, "azoteq,channel-select"); 1764 if (count == -EINVAL) { 1765 /* 1766 * Assign each sensing cycle's slots (0 and 1) to a channel, 1767 * defined as the intersection between two CRx and CTx pins. 1768 * A channel assignment of 255 means the slot is unused. 1769 */ 1770 for (i = 0, cycle_start = 0; i < total_tx; i++) { 1771 int cycle_stop = 0; 1772 1773 for (j = 0; j < total_rx; j++) { 1774 /* 1775 * Channels formed by CRx0-3 and CRx4-7 are 1776 * bound to slots 0 and 1, respectively. 1777 */ 1778 int slot = iqs7211->rx_tx_map[j] < 4 ? 0 : 1; 1779 int chan = i * total_rx + j; 1780 1781 for (k = cycle_start; k < num_cycles; k++) { 1782 if (cycle_alloc[k][slot] < U8_MAX) 1783 continue; 1784 1785 cycle_alloc[k][slot] = chan; 1786 break; 1787 } 1788 1789 if (k < num_cycles) { 1790 cycle_stop = max(k, cycle_stop); 1791 continue; 1792 } 1793 1794 dev_err(&client->dev, 1795 "Insufficient number of cycles\n"); 1796 return -EINVAL; 1797 } 1798 1799 /* 1800 * Sensing cycles cannot straddle more than one CTx 1801 * pin. As such, the next row's starting cycle must 1802 * be greater than the previous row's highest cycle. 1803 */ 1804 cycle_start = cycle_stop + 1; 1805 } 1806 } else if (count < 0) { 1807 dev_err(&client->dev, "Failed to count channels: %d\n", count); 1808 return count; 1809 } else if (count > num_cycles * 2) { 1810 dev_err(&client->dev, "Insufficient number of cycles\n"); 1811 return -EINVAL; 1812 } else if (count > 0) { 1813 error = fwnode_property_read_u32_array(tp_node, 1814 "azoteq,channel-select", 1815 cycle_alloc[0], count); 1816 if (error) { 1817 dev_err(&client->dev, "Failed to read channels: %d\n", 1818 error); 1819 return error; 1820 } 1821 1822 for (i = 0; i < count; i++) { 1823 int chan = *(cycle_alloc[0] + i); 1824 1825 if (chan == U8_MAX) 1826 continue; 1827 1828 if (chan >= total_rx * total_tx) { 1829 dev_err(&client->dev, "Invalid channel: %d\n", 1830 chan); 1831 return -EINVAL; 1832 } 1833 1834 for (j = 0; j < count; j++) { 1835 if (j == i || *(cycle_alloc[0] + j) != chan) 1836 continue; 1837 1838 dev_err(&client->dev, "Duplicate channel: %d\n", 1839 chan); 1840 return -EINVAL; 1841 } 1842 } 1843 } 1844 1845 /* 1846 * Once the raw channel assignments have been derived, they must be 1847 * packed according to the device's register map. 1848 */ 1849 for (i = 0, cycle_start = 0; i < sizeof(dev_desc->cycle_limit); i++) { 1850 int offs = 0; 1851 1852 for (j = cycle_start; 1853 j < cycle_start + dev_desc->cycle_limit[i]; j++) { 1854 iqs7211->cycle_alloc[i][offs++] = 0x05; 1855 iqs7211->cycle_alloc[i][offs++] = cycle_alloc[j][0]; 1856 iqs7211->cycle_alloc[i][offs++] = cycle_alloc[j][1]; 1857 } 1858 1859 cycle_start += dev_desc->cycle_limit[i]; 1860 } 1861 1862 return 0; 1863 } 1864 1865 static int iqs7211_parse_tp(struct iqs7211_private *iqs7211, 1866 struct fwnode_handle *tp_node) 1867 { 1868 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc; 1869 struct i2c_client *client = iqs7211->client; 1870 unsigned int pins[IQS7211_MAX_CTX]; 1871 int error, count, i, j; 1872 1873 count = fwnode_property_count_u32(tp_node, "azoteq,rx-enable"); 1874 if (count == -EINVAL) { 1875 return 0; 1876 } else if (count < 0) { 1877 dev_err(&client->dev, "Failed to count CRx pins: %d\n", count); 1878 return count; 1879 } else if (count > IQS7211_NUM_CRX) { 1880 dev_err(&client->dev, "Invalid number of CRx pins\n"); 1881 return -EINVAL; 1882 } 1883 1884 error = fwnode_property_read_u32_array(tp_node, "azoteq,rx-enable", 1885 pins, count); 1886 if (error) { 1887 dev_err(&client->dev, "Failed to read CRx pins: %d\n", error); 1888 return error; 1889 } 1890 1891 for (i = 0; i < count; i++) { 1892 if (pins[i] >= IQS7211_NUM_CRX) { 1893 dev_err(&client->dev, "Invalid CRx pin: %u\n", pins[i]); 1894 return -EINVAL; 1895 } 1896 1897 iqs7211->rx_tx_map[i] = pins[i]; 1898 } 1899 1900 iqs7211->tp_config.total_rx = count; 1901 1902 count = fwnode_property_count_u32(tp_node, "azoteq,tx-enable"); 1903 if (count < 0) { 1904 dev_err(&client->dev, "Failed to count CTx pins: %d\n", count); 1905 return count; 1906 } else if (count > dev_desc->num_ctx) { 1907 dev_err(&client->dev, "Invalid number of CTx pins\n"); 1908 return -EINVAL; 1909 } 1910 1911 error = fwnode_property_read_u32_array(tp_node, "azoteq,tx-enable", 1912 pins, count); 1913 if (error) { 1914 dev_err(&client->dev, "Failed to read CTx pins: %d\n", error); 1915 return error; 1916 } 1917 1918 for (i = 0; i < count; i++) { 1919 if (pins[i] >= dev_desc->num_ctx) { 1920 dev_err(&client->dev, "Invalid CTx pin: %u\n", pins[i]); 1921 return -EINVAL; 1922 } 1923 1924 for (j = 0; j < iqs7211->tp_config.total_rx; j++) { 1925 if (iqs7211->rx_tx_map[j] != pins[i]) 1926 continue; 1927 1928 dev_err(&client->dev, "Conflicting CTx pin: %u\n", 1929 pins[i]); 1930 return -EINVAL; 1931 } 1932 1933 iqs7211->rx_tx_map[iqs7211->tp_config.total_rx + i] = pins[i]; 1934 } 1935 1936 iqs7211->tp_config.total_tx = count; 1937 1938 return iqs7211_parse_cycles(iqs7211, tp_node); 1939 } 1940 1941 static int iqs7211_parse_alp(struct iqs7211_private *iqs7211, 1942 struct fwnode_handle *alp_node) 1943 { 1944 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc; 1945 struct i2c_client *client = iqs7211->client; 1946 struct iqs7211_reg_field_desc reg_field; 1947 int error, count, i; 1948 1949 count = fwnode_property_count_u32(alp_node, "azoteq,rx-enable"); 1950 if (count < 0 && count != -EINVAL) { 1951 dev_err(&client->dev, "Failed to count CRx pins: %d\n", count); 1952 return count; 1953 } else if (count > IQS7211_NUM_CRX) { 1954 dev_err(&client->dev, "Invalid number of CRx pins\n"); 1955 return -EINVAL; 1956 } else if (count >= 0) { 1957 unsigned int pins[IQS7211_NUM_CRX]; 1958 1959 error = fwnode_property_read_u32_array(alp_node, 1960 "azoteq,rx-enable", 1961 pins, count); 1962 if (error) { 1963 dev_err(&client->dev, "Failed to read CRx pins: %d\n", 1964 error); 1965 return error; 1966 } 1967 1968 reg_field.addr = dev_desc->alp_config; 1969 reg_field.mask = GENMASK(IQS7211_NUM_CRX - 1, 0); 1970 reg_field.val = 0; 1971 1972 for (i = 0; i < count; i++) { 1973 if (pins[i] < dev_desc->min_crx_alp || 1974 pins[i] >= IQS7211_NUM_CRX) { 1975 dev_err(&client->dev, "Invalid CRx pin: %u\n", 1976 pins[i]); 1977 return -EINVAL; 1978 } 1979 1980 reg_field.val |= BIT(pins[i]); 1981 } 1982 1983 error = iqs7211_add_field(iqs7211, reg_field); 1984 if (error) 1985 return error; 1986 } 1987 1988 count = fwnode_property_count_u32(alp_node, "azoteq,tx-enable"); 1989 if (count < 0 && count != -EINVAL) { 1990 dev_err(&client->dev, "Failed to count CTx pins: %d\n", count); 1991 return count; 1992 } else if (count > dev_desc->num_ctx) { 1993 dev_err(&client->dev, "Invalid number of CTx pins\n"); 1994 return -EINVAL; 1995 } else if (count >= 0) { 1996 unsigned int pins[IQS7211_MAX_CTX]; 1997 1998 error = fwnode_property_read_u32_array(alp_node, 1999 "azoteq,tx-enable", 2000 pins, count); 2001 if (error) { 2002 dev_err(&client->dev, "Failed to read CTx pins: %d\n", 2003 error); 2004 return error; 2005 } 2006 2007 reg_field.addr = dev_desc->alp_config + 1; 2008 reg_field.mask = GENMASK(dev_desc->num_ctx - 1, 0); 2009 reg_field.val = 0; 2010 2011 for (i = 0; i < count; i++) { 2012 if (pins[i] >= dev_desc->num_ctx) { 2013 dev_err(&client->dev, "Invalid CTx pin: %u\n", 2014 pins[i]); 2015 return -EINVAL; 2016 } 2017 2018 reg_field.val |= BIT(pins[i]); 2019 } 2020 2021 error = iqs7211_add_field(iqs7211, reg_field); 2022 if (error) 2023 return error; 2024 } 2025 2026 return 0; 2027 } 2028 2029 static int (*iqs7211_parse_extra[IQS7211_NUM_REG_GRPS]) 2030 (struct iqs7211_private *iqs7211, 2031 struct fwnode_handle *reg_grp_node) = { 2032 [IQS7211_REG_GRP_TP] = iqs7211_parse_tp, 2033 [IQS7211_REG_GRP_ALP] = iqs7211_parse_alp, 2034 }; 2035 2036 static int iqs7211_parse_reg_grp(struct iqs7211_private *iqs7211, 2037 struct fwnode_handle *reg_grp_node, 2038 enum iqs7211_reg_grp_id reg_grp) 2039 { 2040 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc; 2041 struct iqs7211_reg_field_desc reg_field; 2042 int error, i; 2043 2044 error = iqs7211_parse_props(iqs7211, reg_grp_node, reg_grp, 2045 IQS7211_REG_KEY_NONE); 2046 if (error) 2047 return error; 2048 2049 if (iqs7211_parse_extra[reg_grp]) { 2050 error = iqs7211_parse_extra[reg_grp](iqs7211, reg_grp_node); 2051 if (error) 2052 return error; 2053 } 2054 2055 iqs7211->ati_start |= dev_desc->ati_start[reg_grp]; 2056 2057 reg_field.addr = dev_desc->kp_enable[reg_grp]; 2058 reg_field.mask = 0; 2059 reg_field.val = 0; 2060 2061 for (i = 0; i < dev_desc->num_kp_events; i++) { 2062 const char *event_name = dev_desc->kp_events[i].name; 2063 struct fwnode_handle *event_node; 2064 2065 if (dev_desc->kp_events[i].reg_grp != reg_grp) 2066 continue; 2067 2068 reg_field.mask |= dev_desc->kp_events[i].enable; 2069 2070 if (event_name) 2071 event_node = fwnode_get_named_child_node(reg_grp_node, 2072 event_name); 2073 else 2074 event_node = fwnode_handle_get(reg_grp_node); 2075 2076 if (!event_node) 2077 continue; 2078 2079 error = iqs7211_parse_event(iqs7211, event_node, 2080 dev_desc->kp_events[i].reg_grp, 2081 dev_desc->kp_events[i].reg_key, 2082 &iqs7211->kp_code[i]); 2083 fwnode_handle_put(event_node); 2084 if (error) 2085 return error; 2086 2087 reg_field.val |= dev_desc->kp_events[i].enable; 2088 2089 iqs7211->event_mask |= iqs7211_reg_grp_masks[reg_grp]; 2090 } 2091 2092 return iqs7211_add_field(iqs7211, reg_field); 2093 } 2094 2095 static int iqs7211_register_kp(struct iqs7211_private *iqs7211) 2096 { 2097 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc; 2098 struct input_dev *kp_idev = iqs7211->kp_idev; 2099 struct i2c_client *client = iqs7211->client; 2100 int error, i; 2101 2102 for (i = 0; i < dev_desc->num_kp_events; i++) 2103 if (iqs7211->kp_code[i]) 2104 break; 2105 2106 if (i == dev_desc->num_kp_events) 2107 return 0; 2108 2109 kp_idev = devm_input_allocate_device(&client->dev); 2110 if (!kp_idev) 2111 return -ENOMEM; 2112 2113 iqs7211->kp_idev = kp_idev; 2114 2115 kp_idev->name = dev_desc->kp_name; 2116 kp_idev->id.bustype = BUS_I2C; 2117 2118 for (i = 0; i < dev_desc->num_kp_events; i++) 2119 if (iqs7211->kp_code[i]) 2120 input_set_capability(iqs7211->kp_idev, EV_KEY, 2121 iqs7211->kp_code[i]); 2122 2123 error = input_register_device(kp_idev); 2124 if (error) 2125 dev_err(&client->dev, "Failed to register %s: %d\n", 2126 kp_idev->name, error); 2127 2128 return error; 2129 } 2130 2131 static int iqs7211_register_tp(struct iqs7211_private *iqs7211) 2132 { 2133 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc; 2134 struct touchscreen_properties *prop = &iqs7211->prop; 2135 struct input_dev *tp_idev = iqs7211->tp_idev; 2136 struct i2c_client *client = iqs7211->client; 2137 int error; 2138 2139 error = device_property_read_u32(&client->dev, "azoteq,num-contacts", 2140 &iqs7211->num_contacts); 2141 if (error == -EINVAL) { 2142 return 0; 2143 } else if (error) { 2144 dev_err(&client->dev, "Failed to read number of contacts: %d\n", 2145 error); 2146 return error; 2147 } else if (iqs7211->num_contacts > IQS7211_MAX_CONTACTS) { 2148 dev_err(&client->dev, "Invalid number of contacts: %u\n", 2149 iqs7211->num_contacts); 2150 return -EINVAL; 2151 } 2152 2153 iqs7211->tp_config.num_contacts = iqs7211->num_contacts ? : 1; 2154 2155 if (!iqs7211->num_contacts) 2156 return 0; 2157 2158 iqs7211->event_mask |= IQS7211_EVENT_MASK_MOVE; 2159 2160 tp_idev = devm_input_allocate_device(&client->dev); 2161 if (!tp_idev) 2162 return -ENOMEM; 2163 2164 iqs7211->tp_idev = tp_idev; 2165 2166 tp_idev->name = dev_desc->tp_name; 2167 tp_idev->id.bustype = BUS_I2C; 2168 2169 input_set_abs_params(tp_idev, ABS_MT_POSITION_X, 2170 0, le16_to_cpu(iqs7211->tp_config.max_x), 0, 0); 2171 2172 input_set_abs_params(tp_idev, ABS_MT_POSITION_Y, 2173 0, le16_to_cpu(iqs7211->tp_config.max_y), 0, 0); 2174 2175 input_set_abs_params(tp_idev, ABS_MT_PRESSURE, 0, U16_MAX, 0, 0); 2176 2177 touchscreen_parse_properties(tp_idev, true, prop); 2178 2179 /* 2180 * The device reserves 0xFFFF for coordinates that correspond to slots 2181 * which are not in a state of touch. 2182 */ 2183 if (prop->max_x >= U16_MAX || prop->max_y >= U16_MAX) { 2184 dev_err(&client->dev, "Invalid trackpad size: %u*%u\n", 2185 prop->max_x, prop->max_y); 2186 return -EINVAL; 2187 } 2188 2189 iqs7211->tp_config.max_x = cpu_to_le16(prop->max_x); 2190 iqs7211->tp_config.max_y = cpu_to_le16(prop->max_y); 2191 2192 error = input_mt_init_slots(tp_idev, iqs7211->num_contacts, 2193 INPUT_MT_DIRECT); 2194 if (error) { 2195 dev_err(&client->dev, "Failed to initialize slots: %d\n", 2196 error); 2197 return error; 2198 } 2199 2200 error = input_register_device(tp_idev); 2201 if (error) 2202 dev_err(&client->dev, "Failed to register %s: %d\n", 2203 tp_idev->name, error); 2204 2205 return error; 2206 } 2207 2208 static int iqs7211_report(struct iqs7211_private *iqs7211) 2209 { 2210 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc; 2211 struct i2c_client *client = iqs7211->client; 2212 struct iqs7211_touch_data *touch_data; 2213 u16 info_flags, charge_mode, gesture_flags; 2214 __le16 status[12]; 2215 int error, i; 2216 2217 error = iqs7211_read_burst(iqs7211, dev_desc->sys_stat, status, 2218 dev_desc->contact_offs * sizeof(__le16) + 2219 iqs7211->num_contacts * sizeof(*touch_data)); 2220 if (error) 2221 return error; 2222 2223 info_flags = le16_to_cpu(status[dev_desc->info_offs]); 2224 2225 if (info_flags & dev_desc->show_reset) { 2226 dev_err(&client->dev, "Unexpected device reset\n"); 2227 2228 /* 2229 * The device may or may not expect forced communication after 2230 * it exits hardware reset, so the corresponding state machine 2231 * must be reset as well. 2232 */ 2233 iqs7211->comms_mode = iqs7211->comms_init; 2234 2235 return iqs7211_init_device(iqs7211); 2236 } 2237 2238 for (i = 0; i < ARRAY_SIZE(dev_desc->ati_error); i++) { 2239 if (!(info_flags & dev_desc->ati_error[i])) 2240 continue; 2241 2242 dev_err(&client->dev, "Unexpected %s ATI error\n", 2243 iqs7211_reg_grp_names[i]); 2244 return 0; 2245 } 2246 2247 for (i = 0; i < iqs7211->num_contacts; i++) { 2248 u16 pressure; 2249 2250 touch_data = (struct iqs7211_touch_data *) 2251 &status[dev_desc->contact_offs] + i; 2252 pressure = le16_to_cpu(touch_data->pressure); 2253 2254 input_mt_slot(iqs7211->tp_idev, i); 2255 if (input_mt_report_slot_state(iqs7211->tp_idev, MT_TOOL_FINGER, 2256 pressure != 0)) { 2257 touchscreen_report_pos(iqs7211->tp_idev, &iqs7211->prop, 2258 le16_to_cpu(touch_data->abs_x), 2259 le16_to_cpu(touch_data->abs_y), 2260 true); 2261 input_report_abs(iqs7211->tp_idev, ABS_MT_PRESSURE, 2262 pressure); 2263 } 2264 } 2265 2266 if (iqs7211->num_contacts) { 2267 input_mt_sync_frame(iqs7211->tp_idev); 2268 input_sync(iqs7211->tp_idev); 2269 } 2270 2271 if (!iqs7211->kp_idev) 2272 return 0; 2273 2274 charge_mode = info_flags & GENMASK(dev_desc->charge_shift + 2, 2275 dev_desc->charge_shift); 2276 charge_mode >>= dev_desc->charge_shift; 2277 2278 /* 2279 * A charging mode higher than 2 (idle mode) indicates the device last 2280 * operated in low-power mode and intends to express an ALP event. 2281 */ 2282 if (info_flags & dev_desc->kp_events->mask && charge_mode > 2) { 2283 input_report_key(iqs7211->kp_idev, *iqs7211->kp_code, 1); 2284 input_sync(iqs7211->kp_idev); 2285 2286 input_report_key(iqs7211->kp_idev, *iqs7211->kp_code, 0); 2287 } 2288 2289 for (i = 0; i < dev_desc->num_kp_events; i++) { 2290 if (dev_desc->kp_events[i].reg_grp != IQS7211_REG_GRP_BTN) 2291 continue; 2292 2293 input_report_key(iqs7211->kp_idev, iqs7211->kp_code[i], 2294 info_flags & dev_desc->kp_events[i].mask); 2295 } 2296 2297 gesture_flags = le16_to_cpu(status[dev_desc->gesture_offs]); 2298 2299 for (i = 0; i < dev_desc->num_kp_events; i++) { 2300 enum iqs7211_reg_key_id reg_key = dev_desc->kp_events[i].reg_key; 2301 u16 mask = dev_desc->kp_events[i].mask; 2302 2303 if (dev_desc->kp_events[i].reg_grp != IQS7211_REG_GRP_TP) 2304 continue; 2305 2306 if ((gesture_flags ^ iqs7211->gesture_cache) & mask) 2307 input_report_key(iqs7211->kp_idev, iqs7211->kp_code[i], 2308 gesture_flags & mask); 2309 2310 iqs7211->gesture_cache &= ~mask; 2311 2312 /* 2313 * Hold and palm gestures persist while the contact remains in 2314 * place; all others are momentary and hence are followed by a 2315 * complementary release event. 2316 */ 2317 if (reg_key == IQS7211_REG_KEY_HOLD || 2318 reg_key == IQS7211_REG_KEY_PALM) { 2319 iqs7211->gesture_cache |= gesture_flags & mask; 2320 gesture_flags &= ~mask; 2321 } 2322 } 2323 2324 if (gesture_flags) { 2325 input_sync(iqs7211->kp_idev); 2326 2327 for (i = 0; i < dev_desc->num_kp_events; i++) 2328 if (dev_desc->kp_events[i].reg_grp == IQS7211_REG_GRP_TP && 2329 gesture_flags & dev_desc->kp_events[i].mask) 2330 input_report_key(iqs7211->kp_idev, 2331 iqs7211->kp_code[i], 0); 2332 } 2333 2334 input_sync(iqs7211->kp_idev); 2335 2336 return 0; 2337 } 2338 2339 static irqreturn_t iqs7211_irq(int irq, void *context) 2340 { 2341 struct iqs7211_private *iqs7211 = context; 2342 2343 return iqs7211_report(iqs7211) ? IRQ_NONE : IRQ_HANDLED; 2344 } 2345 2346 static int iqs7211_suspend(struct device *dev) 2347 { 2348 struct iqs7211_private *iqs7211 = dev_get_drvdata(dev); 2349 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc; 2350 int error; 2351 2352 if (!dev_desc->suspend || device_may_wakeup(dev)) 2353 return 0; 2354 2355 /* 2356 * I2C communication prompts the device to assert its RDY pin if it is 2357 * not already asserted. As such, the interrupt must be disabled so as 2358 * to prevent reentrant interrupts. 2359 */ 2360 disable_irq(gpiod_to_irq(iqs7211->irq_gpio)); 2361 2362 error = iqs7211_write_word(iqs7211, dev_desc->sys_ctrl, 2363 dev_desc->suspend); 2364 2365 enable_irq(gpiod_to_irq(iqs7211->irq_gpio)); 2366 2367 return error; 2368 } 2369 2370 static int iqs7211_resume(struct device *dev) 2371 { 2372 struct iqs7211_private *iqs7211 = dev_get_drvdata(dev); 2373 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc; 2374 __le16 sys_ctrl[] = { 2375 0, 2376 cpu_to_le16(iqs7211->event_mask), 2377 }; 2378 int error; 2379 2380 if (!dev_desc->suspend || device_may_wakeup(dev)) 2381 return 0; 2382 2383 disable_irq(gpiod_to_irq(iqs7211->irq_gpio)); 2384 2385 /* 2386 * Forced communication, if in use, must be explicitly enabled as part 2387 * of the wake-up command. 2388 */ 2389 error = iqs7211_write_burst(iqs7211, dev_desc->sys_ctrl, sys_ctrl, 2390 sizeof(sys_ctrl)); 2391 2392 enable_irq(gpiod_to_irq(iqs7211->irq_gpio)); 2393 2394 return error; 2395 } 2396 2397 static DEFINE_SIMPLE_DEV_PM_OPS(iqs7211_pm, iqs7211_suspend, iqs7211_resume); 2398 2399 static ssize_t fw_info_show(struct device *dev, 2400 struct device_attribute *attr, char *buf) 2401 { 2402 struct iqs7211_private *iqs7211 = dev_get_drvdata(dev); 2403 2404 return sysfs_emit(buf, "%u.%u.%u.%u:%u.%u\n", 2405 le16_to_cpu(iqs7211->ver_info.prod_num), 2406 le32_to_cpu(iqs7211->ver_info.patch), 2407 le16_to_cpu(iqs7211->ver_info.major), 2408 le16_to_cpu(iqs7211->ver_info.minor), 2409 iqs7211->exp_file[1], iqs7211->exp_file[0]); 2410 } 2411 2412 static DEVICE_ATTR_RO(fw_info); 2413 2414 static struct attribute *iqs7211_attrs[] = { 2415 &dev_attr_fw_info.attr, 2416 NULL 2417 }; 2418 ATTRIBUTE_GROUPS(iqs7211); 2419 2420 static const struct of_device_id iqs7211_of_match[] = { 2421 { 2422 .compatible = "azoteq,iqs7210a", 2423 .data = &iqs7211_devs[IQS7210A], 2424 }, 2425 { 2426 .compatible = "azoteq,iqs7211a", 2427 .data = &iqs7211_devs[IQS7211A], 2428 }, 2429 { 2430 .compatible = "azoteq,iqs7211e", 2431 .data = &iqs7211_devs[IQS7211E], 2432 }, 2433 { } 2434 }; 2435 MODULE_DEVICE_TABLE(of, iqs7211_of_match); 2436 2437 static int iqs7211_probe(struct i2c_client *client) 2438 { 2439 struct iqs7211_private *iqs7211; 2440 enum iqs7211_reg_grp_id reg_grp; 2441 unsigned long irq_flags; 2442 bool shared_irq; 2443 int error, irq; 2444 2445 iqs7211 = devm_kzalloc(&client->dev, sizeof(*iqs7211), GFP_KERNEL); 2446 if (!iqs7211) 2447 return -ENOMEM; 2448 2449 i2c_set_clientdata(client, iqs7211); 2450 iqs7211->client = client; 2451 2452 INIT_LIST_HEAD(&iqs7211->reg_field_head); 2453 2454 iqs7211->dev_desc = device_get_match_data(&client->dev); 2455 if (!iqs7211->dev_desc) 2456 return -ENODEV; 2457 2458 shared_irq = iqs7211->dev_desc->num_ctx == IQS7211_MAX_CTX; 2459 2460 /* 2461 * The RDY pin behaves as an interrupt, but must also be polled ahead 2462 * of unsolicited I2C communication. As such, it is first opened as a 2463 * GPIO and then passed to gpiod_to_irq() to register the interrupt. 2464 * 2465 * If an extra CTx pin is present, the RDY and MCLR pins are combined 2466 * into a single bidirectional pin. In that case, the platform's GPIO 2467 * must be configured as an open-drain output. 2468 */ 2469 iqs7211->irq_gpio = devm_gpiod_get(&client->dev, "irq", 2470 shared_irq ? GPIOD_OUT_LOW 2471 : GPIOD_IN); 2472 if (IS_ERR(iqs7211->irq_gpio)) { 2473 error = PTR_ERR(iqs7211->irq_gpio); 2474 dev_err(&client->dev, "Failed to request IRQ GPIO: %d\n", 2475 error); 2476 return error; 2477 } 2478 2479 if (shared_irq) { 2480 iqs7211->reset_gpio = iqs7211->irq_gpio; 2481 } else { 2482 iqs7211->reset_gpio = devm_gpiod_get_optional(&client->dev, 2483 "reset", 2484 GPIOD_OUT_HIGH); 2485 if (IS_ERR(iqs7211->reset_gpio)) { 2486 error = PTR_ERR(iqs7211->reset_gpio); 2487 dev_err(&client->dev, 2488 "Failed to request reset GPIO: %d\n", error); 2489 return error; 2490 } 2491 } 2492 2493 error = iqs7211_start_comms(iqs7211); 2494 if (error) 2495 return error; 2496 2497 for (reg_grp = 0; reg_grp < IQS7211_NUM_REG_GRPS; reg_grp++) { 2498 const char *reg_grp_name = iqs7211_reg_grp_names[reg_grp]; 2499 struct fwnode_handle *reg_grp_node; 2500 2501 if (reg_grp_name) 2502 reg_grp_node = device_get_named_child_node(&client->dev, 2503 reg_grp_name); 2504 else 2505 reg_grp_node = fwnode_handle_get(dev_fwnode(&client->dev)); 2506 2507 if (!reg_grp_node) 2508 continue; 2509 2510 error = iqs7211_parse_reg_grp(iqs7211, reg_grp_node, reg_grp); 2511 fwnode_handle_put(reg_grp_node); 2512 if (error) 2513 return error; 2514 } 2515 2516 error = iqs7211_register_kp(iqs7211); 2517 if (error) 2518 return error; 2519 2520 error = iqs7211_register_tp(iqs7211); 2521 if (error) 2522 return error; 2523 2524 error = iqs7211_init_device(iqs7211); 2525 if (error) 2526 return error; 2527 2528 irq = gpiod_to_irq(iqs7211->irq_gpio); 2529 if (irq < 0) 2530 return irq; 2531 2532 irq_flags = gpiod_is_active_low(iqs7211->irq_gpio) ? IRQF_TRIGGER_LOW 2533 : IRQF_TRIGGER_HIGH; 2534 irq_flags |= IRQF_ONESHOT; 2535 2536 error = devm_request_threaded_irq(&client->dev, irq, NULL, iqs7211_irq, 2537 irq_flags, client->name, iqs7211); 2538 if (error) 2539 dev_err(&client->dev, "Failed to request IRQ: %d\n", error); 2540 2541 return error; 2542 } 2543 2544 static struct i2c_driver iqs7211_i2c_driver = { 2545 .probe = iqs7211_probe, 2546 .driver = { 2547 .name = "iqs7211", 2548 .of_match_table = iqs7211_of_match, 2549 .dev_groups = iqs7211_groups, 2550 .pm = pm_sleep_ptr(&iqs7211_pm), 2551 }, 2552 }; 2553 module_i2c_driver(iqs7211_i2c_driver); 2554 2555 MODULE_AUTHOR("Jeff LaBundy <jeff@labundy.com>"); 2556 MODULE_DESCRIPTION("Azoteq IQS7210A/7211A/E Trackpad/Touchscreen Controller"); 2557 MODULE_LICENSE("GPL"); 2558