Merge tag 'filelock-v6.6' of git://git.kernel.org/pub/scm/linux/kernel/git/jlayton...
[sfrench/cifs-2.6.git] / drivers / input / misc / iqs7222.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Azoteq IQS7222A/B/C Capacitive Touch Controller
4  *
5  * Copyright (C) 2022 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/interrupt.h>
16 #include <linux/kernel.h>
17 #include <linux/ktime.h>
18 #include <linux/module.h>
19 #include <linux/of_device.h>
20 #include <linux/property.h>
21 #include <linux/slab.h>
22 #include <asm/unaligned.h>
23
24 #define IQS7222_PROD_NUM                        0x00
25 #define IQS7222_PROD_NUM_A                      840
26 #define IQS7222_PROD_NUM_B                      698
27 #define IQS7222_PROD_NUM_C                      863
28
29 #define IQS7222_SYS_STATUS                      0x10
30 #define IQS7222_SYS_STATUS_RESET                BIT(3)
31 #define IQS7222_SYS_STATUS_ATI_ERROR            BIT(1)
32 #define IQS7222_SYS_STATUS_ATI_ACTIVE           BIT(0)
33
34 #define IQS7222_CHAN_SETUP_0_REF_MODE_MASK      GENMASK(15, 14)
35 #define IQS7222_CHAN_SETUP_0_REF_MODE_FOLLOW    BIT(15)
36 #define IQS7222_CHAN_SETUP_0_REF_MODE_REF       BIT(14)
37 #define IQS7222_CHAN_SETUP_0_CHAN_EN            BIT(8)
38
39 #define IQS7222_SLDR_SETUP_0_CHAN_CNT_MASK      GENMASK(2, 0)
40 #define IQS7222_SLDR_SETUP_2_RES_MASK           GENMASK(15, 8)
41 #define IQS7222_SLDR_SETUP_2_RES_SHIFT          8
42 #define IQS7222_SLDR_SETUP_2_TOP_SPEED_MASK     GENMASK(7, 0)
43
44 #define IQS7222_GPIO_SETUP_0_GPIO_EN            BIT(0)
45
46 #define IQS7222_SYS_SETUP                       0xD0
47 #define IQS7222_SYS_SETUP_INTF_MODE_MASK        GENMASK(7, 6)
48 #define IQS7222_SYS_SETUP_INTF_MODE_TOUCH       BIT(7)
49 #define IQS7222_SYS_SETUP_INTF_MODE_EVENT       BIT(6)
50 #define IQS7222_SYS_SETUP_PWR_MODE_MASK         GENMASK(5, 4)
51 #define IQS7222_SYS_SETUP_PWR_MODE_AUTO         IQS7222_SYS_SETUP_PWR_MODE_MASK
52 #define IQS7222_SYS_SETUP_REDO_ATI              BIT(2)
53 #define IQS7222_SYS_SETUP_ACK_RESET             BIT(0)
54
55 #define IQS7222_EVENT_MASK_ATI                  BIT(12)
56 #define IQS7222_EVENT_MASK_SLDR                 BIT(10)
57 #define IQS7222_EVENT_MASK_TOUCH                BIT(1)
58 #define IQS7222_EVENT_MASK_PROX                 BIT(0)
59
60 #define IQS7222_COMMS_HOLD                      BIT(0)
61 #define IQS7222_COMMS_ERROR                     0xEEEE
62 #define IQS7222_COMMS_RETRY_MS                  50
63 #define IQS7222_COMMS_TIMEOUT_MS                100
64 #define IQS7222_RESET_TIMEOUT_MS                250
65 #define IQS7222_ATI_TIMEOUT_MS                  2000
66
67 #define IQS7222_MAX_COLS_STAT                   8
68 #define IQS7222_MAX_COLS_CYCLE                  3
69 #define IQS7222_MAX_COLS_GLBL                   3
70 #define IQS7222_MAX_COLS_BTN                    3
71 #define IQS7222_MAX_COLS_CHAN                   6
72 #define IQS7222_MAX_COLS_FILT                   2
73 #define IQS7222_MAX_COLS_SLDR                   11
74 #define IQS7222_MAX_COLS_GPIO                   3
75 #define IQS7222_MAX_COLS_SYS                    13
76
77 #define IQS7222_MAX_CHAN                        20
78 #define IQS7222_MAX_SLDR                        2
79
80 #define IQS7222_NUM_RETRIES                     5
81 #define IQS7222_REG_OFFSET                      0x100
82
83 enum iqs7222_reg_key_id {
84         IQS7222_REG_KEY_NONE,
85         IQS7222_REG_KEY_PROX,
86         IQS7222_REG_KEY_TOUCH,
87         IQS7222_REG_KEY_DEBOUNCE,
88         IQS7222_REG_KEY_TAP,
89         IQS7222_REG_KEY_TAP_LEGACY,
90         IQS7222_REG_KEY_AXIAL,
91         IQS7222_REG_KEY_AXIAL_LEGACY,
92         IQS7222_REG_KEY_WHEEL,
93         IQS7222_REG_KEY_NO_WHEEL,
94         IQS7222_REG_KEY_RESERVED
95 };
96
97 enum iqs7222_reg_grp_id {
98         IQS7222_REG_GRP_STAT,
99         IQS7222_REG_GRP_FILT,
100         IQS7222_REG_GRP_CYCLE,
101         IQS7222_REG_GRP_GLBL,
102         IQS7222_REG_GRP_BTN,
103         IQS7222_REG_GRP_CHAN,
104         IQS7222_REG_GRP_SLDR,
105         IQS7222_REG_GRP_GPIO,
106         IQS7222_REG_GRP_SYS,
107         IQS7222_NUM_REG_GRPS
108 };
109
110 static const char * const iqs7222_reg_grp_names[IQS7222_NUM_REG_GRPS] = {
111         [IQS7222_REG_GRP_CYCLE] = "cycle",
112         [IQS7222_REG_GRP_CHAN] = "channel",
113         [IQS7222_REG_GRP_SLDR] = "slider",
114         [IQS7222_REG_GRP_GPIO] = "gpio",
115 };
116
117 static const unsigned int iqs7222_max_cols[IQS7222_NUM_REG_GRPS] = {
118         [IQS7222_REG_GRP_STAT] = IQS7222_MAX_COLS_STAT,
119         [IQS7222_REG_GRP_CYCLE] = IQS7222_MAX_COLS_CYCLE,
120         [IQS7222_REG_GRP_GLBL] = IQS7222_MAX_COLS_GLBL,
121         [IQS7222_REG_GRP_BTN] = IQS7222_MAX_COLS_BTN,
122         [IQS7222_REG_GRP_CHAN] = IQS7222_MAX_COLS_CHAN,
123         [IQS7222_REG_GRP_FILT] = IQS7222_MAX_COLS_FILT,
124         [IQS7222_REG_GRP_SLDR] = IQS7222_MAX_COLS_SLDR,
125         [IQS7222_REG_GRP_GPIO] = IQS7222_MAX_COLS_GPIO,
126         [IQS7222_REG_GRP_SYS] = IQS7222_MAX_COLS_SYS,
127 };
128
129 static const unsigned int iqs7222_gpio_links[] = { 2, 5, 6, };
130
131 struct iqs7222_event_desc {
132         const char *name;
133         u16 mask;
134         u16 val;
135         u16 enable;
136         enum iqs7222_reg_key_id reg_key;
137 };
138
139 static const struct iqs7222_event_desc iqs7222_kp_events[] = {
140         {
141                 .name = "event-prox",
142                 .enable = IQS7222_EVENT_MASK_PROX,
143                 .reg_key = IQS7222_REG_KEY_PROX,
144         },
145         {
146                 .name = "event-touch",
147                 .enable = IQS7222_EVENT_MASK_TOUCH,
148                 .reg_key = IQS7222_REG_KEY_TOUCH,
149         },
150 };
151
152 static const struct iqs7222_event_desc iqs7222_sl_events[] = {
153         { .name = "event-press", },
154         {
155                 .name = "event-tap",
156                 .mask = BIT(0),
157                 .val = BIT(0),
158                 .enable = BIT(0),
159                 .reg_key = IQS7222_REG_KEY_TAP,
160         },
161         {
162                 .name = "event-swipe-pos",
163                 .mask = BIT(5) | BIT(1),
164                 .val = BIT(1),
165                 .enable = BIT(1),
166                 .reg_key = IQS7222_REG_KEY_AXIAL,
167         },
168         {
169                 .name = "event-swipe-neg",
170                 .mask = BIT(5) | BIT(1),
171                 .val = BIT(5) | BIT(1),
172                 .enable = BIT(1),
173                 .reg_key = IQS7222_REG_KEY_AXIAL,
174         },
175         {
176                 .name = "event-flick-pos",
177                 .mask = BIT(5) | BIT(2),
178                 .val = BIT(2),
179                 .enable = BIT(2),
180                 .reg_key = IQS7222_REG_KEY_AXIAL,
181         },
182         {
183                 .name = "event-flick-neg",
184                 .mask = BIT(5) | BIT(2),
185                 .val = BIT(5) | BIT(2),
186                 .enable = BIT(2),
187                 .reg_key = IQS7222_REG_KEY_AXIAL,
188         },
189 };
190
191 struct iqs7222_reg_grp_desc {
192         u16 base;
193         int num_row;
194         int num_col;
195 };
196
197 struct iqs7222_dev_desc {
198         u16 prod_num;
199         u16 fw_major;
200         u16 fw_minor;
201         u16 sldr_res;
202         u16 touch_link;
203         u16 wheel_enable;
204         int allow_offset;
205         int event_offset;
206         int comms_offset;
207         bool legacy_gesture;
208         struct iqs7222_reg_grp_desc reg_grps[IQS7222_NUM_REG_GRPS];
209 };
210
211 static const struct iqs7222_dev_desc iqs7222_devs[] = {
212         {
213                 .prod_num = IQS7222_PROD_NUM_A,
214                 .fw_major = 1,
215                 .fw_minor = 13,
216                 .sldr_res = U8_MAX * 16,
217                 .touch_link = 1768,
218                 .allow_offset = 9,
219                 .event_offset = 10,
220                 .comms_offset = 12,
221                 .reg_grps = {
222                         [IQS7222_REG_GRP_STAT] = {
223                                 .base = IQS7222_SYS_STATUS,
224                                 .num_row = 1,
225                                 .num_col = 8,
226                         },
227                         [IQS7222_REG_GRP_CYCLE] = {
228                                 .base = 0x8000,
229                                 .num_row = 7,
230                                 .num_col = 3,
231                         },
232                         [IQS7222_REG_GRP_GLBL] = {
233                                 .base = 0x8700,
234                                 .num_row = 1,
235                                 .num_col = 3,
236                         },
237                         [IQS7222_REG_GRP_BTN] = {
238                                 .base = 0x9000,
239                                 .num_row = 12,
240                                 .num_col = 3,
241                         },
242                         [IQS7222_REG_GRP_CHAN] = {
243                                 .base = 0xA000,
244                                 .num_row = 12,
245                                 .num_col = 6,
246                         },
247                         [IQS7222_REG_GRP_FILT] = {
248                                 .base = 0xAC00,
249                                 .num_row = 1,
250                                 .num_col = 2,
251                         },
252                         [IQS7222_REG_GRP_SLDR] = {
253                                 .base = 0xB000,
254                                 .num_row = 2,
255                                 .num_col = 11,
256                         },
257                         [IQS7222_REG_GRP_GPIO] = {
258                                 .base = 0xC000,
259                                 .num_row = 1,
260                                 .num_col = 3,
261                         },
262                         [IQS7222_REG_GRP_SYS] = {
263                                 .base = IQS7222_SYS_SETUP,
264                                 .num_row = 1,
265                                 .num_col = 13,
266                         },
267                 },
268         },
269         {
270                 .prod_num = IQS7222_PROD_NUM_A,
271                 .fw_major = 1,
272                 .fw_minor = 12,
273                 .sldr_res = U8_MAX * 16,
274                 .touch_link = 1768,
275                 .allow_offset = 9,
276                 .event_offset = 10,
277                 .comms_offset = 12,
278                 .legacy_gesture = true,
279                 .reg_grps = {
280                         [IQS7222_REG_GRP_STAT] = {
281                                 .base = IQS7222_SYS_STATUS,
282                                 .num_row = 1,
283                                 .num_col = 8,
284                         },
285                         [IQS7222_REG_GRP_CYCLE] = {
286                                 .base = 0x8000,
287                                 .num_row = 7,
288                                 .num_col = 3,
289                         },
290                         [IQS7222_REG_GRP_GLBL] = {
291                                 .base = 0x8700,
292                                 .num_row = 1,
293                                 .num_col = 3,
294                         },
295                         [IQS7222_REG_GRP_BTN] = {
296                                 .base = 0x9000,
297                                 .num_row = 12,
298                                 .num_col = 3,
299                         },
300                         [IQS7222_REG_GRP_CHAN] = {
301                                 .base = 0xA000,
302                                 .num_row = 12,
303                                 .num_col = 6,
304                         },
305                         [IQS7222_REG_GRP_FILT] = {
306                                 .base = 0xAC00,
307                                 .num_row = 1,
308                                 .num_col = 2,
309                         },
310                         [IQS7222_REG_GRP_SLDR] = {
311                                 .base = 0xB000,
312                                 .num_row = 2,
313                                 .num_col = 11,
314                         },
315                         [IQS7222_REG_GRP_GPIO] = {
316                                 .base = 0xC000,
317                                 .num_row = 1,
318                                 .num_col = 3,
319                         },
320                         [IQS7222_REG_GRP_SYS] = {
321                                 .base = IQS7222_SYS_SETUP,
322                                 .num_row = 1,
323                                 .num_col = 13,
324                         },
325                 },
326         },
327         {
328                 .prod_num = IQS7222_PROD_NUM_B,
329                 .fw_major = 1,
330                 .fw_minor = 43,
331                 .event_offset = 10,
332                 .comms_offset = 11,
333                 .reg_grps = {
334                         [IQS7222_REG_GRP_STAT] = {
335                                 .base = IQS7222_SYS_STATUS,
336                                 .num_row = 1,
337                                 .num_col = 6,
338                         },
339                         [IQS7222_REG_GRP_CYCLE] = {
340                                 .base = 0x8000,
341                                 .num_row = 10,
342                                 .num_col = 2,
343                         },
344                         [IQS7222_REG_GRP_GLBL] = {
345                                 .base = 0x8A00,
346                                 .num_row = 1,
347                                 .num_col = 3,
348                         },
349                         [IQS7222_REG_GRP_BTN] = {
350                                 .base = 0x9000,
351                                 .num_row = 20,
352                                 .num_col = 2,
353                         },
354                         [IQS7222_REG_GRP_CHAN] = {
355                                 .base = 0xB000,
356                                 .num_row = 20,
357                                 .num_col = 4,
358                         },
359                         [IQS7222_REG_GRP_FILT] = {
360                                 .base = 0xC400,
361                                 .num_row = 1,
362                                 .num_col = 2,
363                         },
364                         [IQS7222_REG_GRP_SYS] = {
365                                 .base = IQS7222_SYS_SETUP,
366                                 .num_row = 1,
367                                 .num_col = 13,
368                         },
369                 },
370         },
371         {
372                 .prod_num = IQS7222_PROD_NUM_B,
373                 .fw_major = 1,
374                 .fw_minor = 27,
375                 .reg_grps = {
376                         [IQS7222_REG_GRP_STAT] = {
377                                 .base = IQS7222_SYS_STATUS,
378                                 .num_row = 1,
379                                 .num_col = 6,
380                         },
381                         [IQS7222_REG_GRP_CYCLE] = {
382                                 .base = 0x8000,
383                                 .num_row = 10,
384                                 .num_col = 2,
385                         },
386                         [IQS7222_REG_GRP_GLBL] = {
387                                 .base = 0x8A00,
388                                 .num_row = 1,
389                                 .num_col = 3,
390                         },
391                         [IQS7222_REG_GRP_BTN] = {
392                                 .base = 0x9000,
393                                 .num_row = 20,
394                                 .num_col = 2,
395                         },
396                         [IQS7222_REG_GRP_CHAN] = {
397                                 .base = 0xB000,
398                                 .num_row = 20,
399                                 .num_col = 4,
400                         },
401                         [IQS7222_REG_GRP_FILT] = {
402                                 .base = 0xC400,
403                                 .num_row = 1,
404                                 .num_col = 2,
405                         },
406                         [IQS7222_REG_GRP_SYS] = {
407                                 .base = IQS7222_SYS_SETUP,
408                                 .num_row = 1,
409                                 .num_col = 10,
410                         },
411                 },
412         },
413         {
414                 .prod_num = IQS7222_PROD_NUM_C,
415                 .fw_major = 2,
416                 .fw_minor = 6,
417                 .sldr_res = U16_MAX,
418                 .touch_link = 1686,
419                 .wheel_enable = BIT(3),
420                 .event_offset = 9,
421                 .comms_offset = 10,
422                 .reg_grps = {
423                         [IQS7222_REG_GRP_STAT] = {
424                                 .base = IQS7222_SYS_STATUS,
425                                 .num_row = 1,
426                                 .num_col = 6,
427                         },
428                         [IQS7222_REG_GRP_CYCLE] = {
429                                 .base = 0x8000,
430                                 .num_row = 5,
431                                 .num_col = 3,
432                         },
433                         [IQS7222_REG_GRP_GLBL] = {
434                                 .base = 0x8500,
435                                 .num_row = 1,
436                                 .num_col = 3,
437                         },
438                         [IQS7222_REG_GRP_BTN] = {
439                                 .base = 0x9000,
440                                 .num_row = 10,
441                                 .num_col = 3,
442                         },
443                         [IQS7222_REG_GRP_CHAN] = {
444                                 .base = 0xA000,
445                                 .num_row = 10,
446                                 .num_col = 6,
447                         },
448                         [IQS7222_REG_GRP_FILT] = {
449                                 .base = 0xAA00,
450                                 .num_row = 1,
451                                 .num_col = 2,
452                         },
453                         [IQS7222_REG_GRP_SLDR] = {
454                                 .base = 0xB000,
455                                 .num_row = 2,
456                                 .num_col = 10,
457                         },
458                         [IQS7222_REG_GRP_GPIO] = {
459                                 .base = 0xC000,
460                                 .num_row = 3,
461                                 .num_col = 3,
462                         },
463                         [IQS7222_REG_GRP_SYS] = {
464                                 .base = IQS7222_SYS_SETUP,
465                                 .num_row = 1,
466                                 .num_col = 12,
467                         },
468                 },
469         },
470         {
471                 .prod_num = IQS7222_PROD_NUM_C,
472                 .fw_major = 1,
473                 .fw_minor = 13,
474                 .sldr_res = U16_MAX,
475                 .touch_link = 1674,
476                 .wheel_enable = BIT(3),
477                 .event_offset = 9,
478                 .comms_offset = 10,
479                 .reg_grps = {
480                         [IQS7222_REG_GRP_STAT] = {
481                                 .base = IQS7222_SYS_STATUS,
482                                 .num_row = 1,
483                                 .num_col = 6,
484                         },
485                         [IQS7222_REG_GRP_CYCLE] = {
486                                 .base = 0x8000,
487                                 .num_row = 5,
488                                 .num_col = 3,
489                         },
490                         [IQS7222_REG_GRP_GLBL] = {
491                                 .base = 0x8500,
492                                 .num_row = 1,
493                                 .num_col = 3,
494                         },
495                         [IQS7222_REG_GRP_BTN] = {
496                                 .base = 0x9000,
497                                 .num_row = 10,
498                                 .num_col = 3,
499                         },
500                         [IQS7222_REG_GRP_CHAN] = {
501                                 .base = 0xA000,
502                                 .num_row = 10,
503                                 .num_col = 6,
504                         },
505                         [IQS7222_REG_GRP_FILT] = {
506                                 .base = 0xAA00,
507                                 .num_row = 1,
508                                 .num_col = 2,
509                         },
510                         [IQS7222_REG_GRP_SLDR] = {
511                                 .base = 0xB000,
512                                 .num_row = 2,
513                                 .num_col = 10,
514                         },
515                         [IQS7222_REG_GRP_GPIO] = {
516                                 .base = 0xC000,
517                                 .num_row = 1,
518                                 .num_col = 3,
519                         },
520                         [IQS7222_REG_GRP_SYS] = {
521                                 .base = IQS7222_SYS_SETUP,
522                                 .num_row = 1,
523                                 .num_col = 11,
524                         },
525                 },
526         },
527 };
528
529 struct iqs7222_prop_desc {
530         const char *name;
531         enum iqs7222_reg_grp_id reg_grp;
532         enum iqs7222_reg_key_id reg_key;
533         int reg_offset;
534         int reg_shift;
535         int reg_width;
536         int val_pitch;
537         int val_min;
538         int val_max;
539         bool invert;
540         const char *label;
541 };
542
543 static const struct iqs7222_prop_desc iqs7222_props[] = {
544         {
545                 .name = "azoteq,conv-period",
546                 .reg_grp = IQS7222_REG_GRP_CYCLE,
547                 .reg_offset = 0,
548                 .reg_shift = 8,
549                 .reg_width = 8,
550                 .label = "conversion period",
551         },
552         {
553                 .name = "azoteq,conv-frac",
554                 .reg_grp = IQS7222_REG_GRP_CYCLE,
555                 .reg_offset = 0,
556                 .reg_shift = 0,
557                 .reg_width = 8,
558                 .label = "conversion frequency fractional divider",
559         },
560         {
561                 .name = "azoteq,rx-float-inactive",
562                 .reg_grp = IQS7222_REG_GRP_CYCLE,
563                 .reg_offset = 1,
564                 .reg_shift = 6,
565                 .reg_width = 1,
566                 .invert = true,
567         },
568         {
569                 .name = "azoteq,dead-time-enable",
570                 .reg_grp = IQS7222_REG_GRP_CYCLE,
571                 .reg_offset = 1,
572                 .reg_shift = 5,
573                 .reg_width = 1,
574         },
575         {
576                 .name = "azoteq,tx-freq-fosc",
577                 .reg_grp = IQS7222_REG_GRP_CYCLE,
578                 .reg_offset = 1,
579                 .reg_shift = 4,
580                 .reg_width = 1,
581         },
582         {
583                 .name = "azoteq,vbias-enable",
584                 .reg_grp = IQS7222_REG_GRP_CYCLE,
585                 .reg_offset = 1,
586                 .reg_shift = 3,
587                 .reg_width = 1,
588         },
589         {
590                 .name = "azoteq,sense-mode",
591                 .reg_grp = IQS7222_REG_GRP_CYCLE,
592                 .reg_offset = 1,
593                 .reg_shift = 0,
594                 .reg_width = 3,
595                 .val_max = 3,
596                 .label = "sensing mode",
597         },
598         {
599                 .name = "azoteq,iref-enable",
600                 .reg_grp = IQS7222_REG_GRP_CYCLE,
601                 .reg_offset = 2,
602                 .reg_shift = 10,
603                 .reg_width = 1,
604         },
605         {
606                 .name = "azoteq,iref-level",
607                 .reg_grp = IQS7222_REG_GRP_CYCLE,
608                 .reg_offset = 2,
609                 .reg_shift = 4,
610                 .reg_width = 4,
611                 .label = "current reference level",
612         },
613         {
614                 .name = "azoteq,iref-trim",
615                 .reg_grp = IQS7222_REG_GRP_CYCLE,
616                 .reg_offset = 2,
617                 .reg_shift = 0,
618                 .reg_width = 4,
619                 .label = "current reference trim",
620         },
621         {
622                 .name = "azoteq,max-counts",
623                 .reg_grp = IQS7222_REG_GRP_GLBL,
624                 .reg_offset = 0,
625                 .reg_shift = 13,
626                 .reg_width = 2,
627                 .label = "maximum counts",
628         },
629         {
630                 .name = "azoteq,auto-mode",
631                 .reg_grp = IQS7222_REG_GRP_GLBL,
632                 .reg_offset = 0,
633                 .reg_shift = 2,
634                 .reg_width = 2,
635                 .label = "number of conversions",
636         },
637         {
638                 .name = "azoteq,ati-frac-div-fine",
639                 .reg_grp = IQS7222_REG_GRP_GLBL,
640                 .reg_offset = 1,
641                 .reg_shift = 9,
642                 .reg_width = 5,
643                 .label = "ATI fine fractional divider",
644         },
645         {
646                 .name = "azoteq,ati-frac-div-coarse",
647                 .reg_grp = IQS7222_REG_GRP_GLBL,
648                 .reg_offset = 1,
649                 .reg_shift = 0,
650                 .reg_width = 5,
651                 .label = "ATI coarse fractional divider",
652         },
653         {
654                 .name = "azoteq,ati-comp-select",
655                 .reg_grp = IQS7222_REG_GRP_GLBL,
656                 .reg_offset = 2,
657                 .reg_shift = 0,
658                 .reg_width = 10,
659                 .label = "ATI compensation selection",
660         },
661         {
662                 .name = "azoteq,ati-band",
663                 .reg_grp = IQS7222_REG_GRP_CHAN,
664                 .reg_offset = 0,
665                 .reg_shift = 12,
666                 .reg_width = 2,
667                 .label = "ATI band",
668         },
669         {
670                 .name = "azoteq,global-halt",
671                 .reg_grp = IQS7222_REG_GRP_CHAN,
672                 .reg_offset = 0,
673                 .reg_shift = 11,
674                 .reg_width = 1,
675         },
676         {
677                 .name = "azoteq,invert-enable",
678                 .reg_grp = IQS7222_REG_GRP_CHAN,
679                 .reg_offset = 0,
680                 .reg_shift = 10,
681                 .reg_width = 1,
682         },
683         {
684                 .name = "azoteq,dual-direction",
685                 .reg_grp = IQS7222_REG_GRP_CHAN,
686                 .reg_offset = 0,
687                 .reg_shift = 9,
688                 .reg_width = 1,
689         },
690         {
691                 .name = "azoteq,samp-cap-double",
692                 .reg_grp = IQS7222_REG_GRP_CHAN,
693                 .reg_offset = 0,
694                 .reg_shift = 3,
695                 .reg_width = 1,
696         },
697         {
698                 .name = "azoteq,vref-half",
699                 .reg_grp = IQS7222_REG_GRP_CHAN,
700                 .reg_offset = 0,
701                 .reg_shift = 2,
702                 .reg_width = 1,
703         },
704         {
705                 .name = "azoteq,proj-bias",
706                 .reg_grp = IQS7222_REG_GRP_CHAN,
707                 .reg_offset = 0,
708                 .reg_shift = 0,
709                 .reg_width = 2,
710                 .label = "projected bias current",
711         },
712         {
713                 .name = "azoteq,ati-target",
714                 .reg_grp = IQS7222_REG_GRP_CHAN,
715                 .reg_offset = 1,
716                 .reg_shift = 8,
717                 .reg_width = 8,
718                 .val_pitch = 8,
719                 .label = "ATI target",
720         },
721         {
722                 .name = "azoteq,ati-base",
723                 .reg_grp = IQS7222_REG_GRP_CHAN,
724                 .reg_offset = 1,
725                 .reg_shift = 3,
726                 .reg_width = 5,
727                 .val_pitch = 16,
728                 .label = "ATI base",
729         },
730         {
731                 .name = "azoteq,ati-mode",
732                 .reg_grp = IQS7222_REG_GRP_CHAN,
733                 .reg_offset = 1,
734                 .reg_shift = 0,
735                 .reg_width = 3,
736                 .val_max = 5,
737                 .label = "ATI mode",
738         },
739         {
740                 .name = "azoteq,ati-frac-div-fine",
741                 .reg_grp = IQS7222_REG_GRP_CHAN,
742                 .reg_offset = 2,
743                 .reg_shift = 9,
744                 .reg_width = 5,
745                 .label = "ATI fine fractional divider",
746         },
747         {
748                 .name = "azoteq,ati-frac-mult-coarse",
749                 .reg_grp = IQS7222_REG_GRP_CHAN,
750                 .reg_offset = 2,
751                 .reg_shift = 5,
752                 .reg_width = 4,
753                 .label = "ATI coarse fractional multiplier",
754         },
755         {
756                 .name = "azoteq,ati-frac-div-coarse",
757                 .reg_grp = IQS7222_REG_GRP_CHAN,
758                 .reg_offset = 2,
759                 .reg_shift = 0,
760                 .reg_width = 5,
761                 .label = "ATI coarse fractional divider",
762         },
763         {
764                 .name = "azoteq,ati-comp-div",
765                 .reg_grp = IQS7222_REG_GRP_CHAN,
766                 .reg_offset = 3,
767                 .reg_shift = 11,
768                 .reg_width = 5,
769                 .label = "ATI compensation divider",
770         },
771         {
772                 .name = "azoteq,ati-comp-select",
773                 .reg_grp = IQS7222_REG_GRP_CHAN,
774                 .reg_offset = 3,
775                 .reg_shift = 0,
776                 .reg_width = 10,
777                 .label = "ATI compensation selection",
778         },
779         {
780                 .name = "azoteq,debounce-exit",
781                 .reg_grp = IQS7222_REG_GRP_BTN,
782                 .reg_key = IQS7222_REG_KEY_DEBOUNCE,
783                 .reg_offset = 0,
784                 .reg_shift = 12,
785                 .reg_width = 4,
786                 .label = "debounce exit factor",
787         },
788         {
789                 .name = "azoteq,debounce-enter",
790                 .reg_grp = IQS7222_REG_GRP_BTN,
791                 .reg_key = IQS7222_REG_KEY_DEBOUNCE,
792                 .reg_offset = 0,
793                 .reg_shift = 8,
794                 .reg_width = 4,
795                 .label = "debounce entrance factor",
796         },
797         {
798                 .name = "azoteq,thresh",
799                 .reg_grp = IQS7222_REG_GRP_BTN,
800                 .reg_key = IQS7222_REG_KEY_PROX,
801                 .reg_offset = 0,
802                 .reg_shift = 0,
803                 .reg_width = 8,
804                 .val_max = 127,
805                 .label = "threshold",
806         },
807         {
808                 .name = "azoteq,thresh",
809                 .reg_grp = IQS7222_REG_GRP_BTN,
810                 .reg_key = IQS7222_REG_KEY_TOUCH,
811                 .reg_offset = 1,
812                 .reg_shift = 0,
813                 .reg_width = 8,
814                 .label = "threshold",
815         },
816         {
817                 .name = "azoteq,hyst",
818                 .reg_grp = IQS7222_REG_GRP_BTN,
819                 .reg_key = IQS7222_REG_KEY_TOUCH,
820                 .reg_offset = 1,
821                 .reg_shift = 8,
822                 .reg_width = 8,
823                 .label = "hysteresis",
824         },
825         {
826                 .name = "azoteq,lta-beta-lp",
827                 .reg_grp = IQS7222_REG_GRP_FILT,
828                 .reg_offset = 0,
829                 .reg_shift = 12,
830                 .reg_width = 4,
831                 .label = "low-power mode long-term average beta",
832         },
833         {
834                 .name = "azoteq,lta-beta-np",
835                 .reg_grp = IQS7222_REG_GRP_FILT,
836                 .reg_offset = 0,
837                 .reg_shift = 8,
838                 .reg_width = 4,
839                 .label = "normal-power mode long-term average beta",
840         },
841         {
842                 .name = "azoteq,counts-beta-lp",
843                 .reg_grp = IQS7222_REG_GRP_FILT,
844                 .reg_offset = 0,
845                 .reg_shift = 4,
846                 .reg_width = 4,
847                 .label = "low-power mode counts beta",
848         },
849         {
850                 .name = "azoteq,counts-beta-np",
851                 .reg_grp = IQS7222_REG_GRP_FILT,
852                 .reg_offset = 0,
853                 .reg_shift = 0,
854                 .reg_width = 4,
855                 .label = "normal-power mode counts beta",
856         },
857         {
858                 .name = "azoteq,lta-fast-beta-lp",
859                 .reg_grp = IQS7222_REG_GRP_FILT,
860                 .reg_offset = 1,
861                 .reg_shift = 4,
862                 .reg_width = 4,
863                 .label = "low-power mode long-term average fast beta",
864         },
865         {
866                 .name = "azoteq,lta-fast-beta-np",
867                 .reg_grp = IQS7222_REG_GRP_FILT,
868                 .reg_offset = 1,
869                 .reg_shift = 0,
870                 .reg_width = 4,
871                 .label = "normal-power mode long-term average fast beta",
872         },
873         {
874                 .name = "azoteq,lower-cal",
875                 .reg_grp = IQS7222_REG_GRP_SLDR,
876                 .reg_offset = 0,
877                 .reg_shift = 8,
878                 .reg_width = 8,
879                 .label = "lower calibration",
880         },
881         {
882                 .name = "azoteq,static-beta",
883                 .reg_grp = IQS7222_REG_GRP_SLDR,
884                 .reg_key = IQS7222_REG_KEY_NO_WHEEL,
885                 .reg_offset = 0,
886                 .reg_shift = 6,
887                 .reg_width = 1,
888         },
889         {
890                 .name = "azoteq,bottom-beta",
891                 .reg_grp = IQS7222_REG_GRP_SLDR,
892                 .reg_key = IQS7222_REG_KEY_NO_WHEEL,
893                 .reg_offset = 0,
894                 .reg_shift = 3,
895                 .reg_width = 3,
896                 .label = "bottom beta",
897         },
898         {
899                 .name = "azoteq,static-beta",
900                 .reg_grp = IQS7222_REG_GRP_SLDR,
901                 .reg_key = IQS7222_REG_KEY_WHEEL,
902                 .reg_offset = 0,
903                 .reg_shift = 7,
904                 .reg_width = 1,
905         },
906         {
907                 .name = "azoteq,bottom-beta",
908                 .reg_grp = IQS7222_REG_GRP_SLDR,
909                 .reg_key = IQS7222_REG_KEY_WHEEL,
910                 .reg_offset = 0,
911                 .reg_shift = 4,
912                 .reg_width = 3,
913                 .label = "bottom beta",
914         },
915         {
916                 .name = "azoteq,bottom-speed",
917                 .reg_grp = IQS7222_REG_GRP_SLDR,
918                 .reg_offset = 1,
919                 .reg_shift = 8,
920                 .reg_width = 8,
921                 .label = "bottom speed",
922         },
923         {
924                 .name = "azoteq,upper-cal",
925                 .reg_grp = IQS7222_REG_GRP_SLDR,
926                 .reg_offset = 1,
927                 .reg_shift = 0,
928                 .reg_width = 8,
929                 .label = "upper calibration",
930         },
931         {
932                 .name = "azoteq,gesture-max-ms",
933                 .reg_grp = IQS7222_REG_GRP_SLDR,
934                 .reg_key = IQS7222_REG_KEY_TAP,
935                 .reg_offset = 9,
936                 .reg_shift = 8,
937                 .reg_width = 8,
938                 .val_pitch = 16,
939                 .label = "maximum gesture time",
940         },
941         {
942                 .name = "azoteq,gesture-max-ms",
943                 .reg_grp = IQS7222_REG_GRP_SLDR,
944                 .reg_key = IQS7222_REG_KEY_TAP_LEGACY,
945                 .reg_offset = 9,
946                 .reg_shift = 8,
947                 .reg_width = 8,
948                 .val_pitch = 4,
949                 .label = "maximum gesture time",
950         },
951         {
952                 .name = "azoteq,gesture-min-ms",
953                 .reg_grp = IQS7222_REG_GRP_SLDR,
954                 .reg_key = IQS7222_REG_KEY_TAP,
955                 .reg_offset = 9,
956                 .reg_shift = 3,
957                 .reg_width = 5,
958                 .val_pitch = 16,
959                 .label = "minimum gesture time",
960         },
961         {
962                 .name = "azoteq,gesture-min-ms",
963                 .reg_grp = IQS7222_REG_GRP_SLDR,
964                 .reg_key = IQS7222_REG_KEY_TAP_LEGACY,
965                 .reg_offset = 9,
966                 .reg_shift = 3,
967                 .reg_width = 5,
968                 .val_pitch = 4,
969                 .label = "minimum gesture time",
970         },
971         {
972                 .name = "azoteq,gesture-dist",
973                 .reg_grp = IQS7222_REG_GRP_SLDR,
974                 .reg_key = IQS7222_REG_KEY_AXIAL,
975                 .reg_offset = 10,
976                 .reg_shift = 8,
977                 .reg_width = 8,
978                 .val_pitch = 16,
979                 .label = "gesture distance",
980         },
981         {
982                 .name = "azoteq,gesture-dist",
983                 .reg_grp = IQS7222_REG_GRP_SLDR,
984                 .reg_key = IQS7222_REG_KEY_AXIAL_LEGACY,
985                 .reg_offset = 10,
986                 .reg_shift = 8,
987                 .reg_width = 8,
988                 .val_pitch = 16,
989                 .label = "gesture distance",
990         },
991         {
992                 .name = "azoteq,gesture-max-ms",
993                 .reg_grp = IQS7222_REG_GRP_SLDR,
994                 .reg_key = IQS7222_REG_KEY_AXIAL,
995                 .reg_offset = 10,
996                 .reg_shift = 0,
997                 .reg_width = 8,
998                 .val_pitch = 16,
999                 .label = "maximum gesture time",
1000         },
1001         {
1002                 .name = "azoteq,gesture-max-ms",
1003                 .reg_grp = IQS7222_REG_GRP_SLDR,
1004                 .reg_key = IQS7222_REG_KEY_AXIAL_LEGACY,
1005                 .reg_offset = 10,
1006                 .reg_shift = 0,
1007                 .reg_width = 8,
1008                 .val_pitch = 4,
1009                 .label = "maximum gesture time",
1010         },
1011         {
1012                 .name = "drive-open-drain",
1013                 .reg_grp = IQS7222_REG_GRP_GPIO,
1014                 .reg_offset = 0,
1015                 .reg_shift = 1,
1016                 .reg_width = 1,
1017         },
1018         {
1019                 .name = "azoteq,timeout-ati-ms",
1020                 .reg_grp = IQS7222_REG_GRP_SYS,
1021                 .reg_offset = 1,
1022                 .reg_shift = 0,
1023                 .reg_width = 16,
1024                 .val_pitch = 500,
1025                 .label = "ATI error timeout",
1026         },
1027         {
1028                 .name = "azoteq,rate-ati-ms",
1029                 .reg_grp = IQS7222_REG_GRP_SYS,
1030                 .reg_offset = 2,
1031                 .reg_shift = 0,
1032                 .reg_width = 16,
1033                 .label = "ATI report rate",
1034         },
1035         {
1036                 .name = "azoteq,timeout-np-ms",
1037                 .reg_grp = IQS7222_REG_GRP_SYS,
1038                 .reg_offset = 3,
1039                 .reg_shift = 0,
1040                 .reg_width = 16,
1041                 .label = "normal-power mode timeout",
1042         },
1043         {
1044                 .name = "azoteq,rate-np-ms",
1045                 .reg_grp = IQS7222_REG_GRP_SYS,
1046                 .reg_offset = 4,
1047                 .reg_shift = 0,
1048                 .reg_width = 16,
1049                 .val_max = 3000,
1050                 .label = "normal-power mode report rate",
1051         },
1052         {
1053                 .name = "azoteq,timeout-lp-ms",
1054                 .reg_grp = IQS7222_REG_GRP_SYS,
1055                 .reg_offset = 5,
1056                 .reg_shift = 0,
1057                 .reg_width = 16,
1058                 .label = "low-power mode timeout",
1059         },
1060         {
1061                 .name = "azoteq,rate-lp-ms",
1062                 .reg_grp = IQS7222_REG_GRP_SYS,
1063                 .reg_offset = 6,
1064                 .reg_shift = 0,
1065                 .reg_width = 16,
1066                 .val_max = 3000,
1067                 .label = "low-power mode report rate",
1068         },
1069         {
1070                 .name = "azoteq,timeout-ulp-ms",
1071                 .reg_grp = IQS7222_REG_GRP_SYS,
1072                 .reg_offset = 7,
1073                 .reg_shift = 0,
1074                 .reg_width = 16,
1075                 .label = "ultra-low-power mode timeout",
1076         },
1077         {
1078                 .name = "azoteq,rate-ulp-ms",
1079                 .reg_grp = IQS7222_REG_GRP_SYS,
1080                 .reg_offset = 8,
1081                 .reg_shift = 0,
1082                 .reg_width = 16,
1083                 .val_max = 3000,
1084                 .label = "ultra-low-power mode report rate",
1085         },
1086 };
1087
1088 struct iqs7222_private {
1089         const struct iqs7222_dev_desc *dev_desc;
1090         struct gpio_desc *reset_gpio;
1091         struct gpio_desc *irq_gpio;
1092         struct i2c_client *client;
1093         struct input_dev *keypad;
1094         unsigned int kp_type[IQS7222_MAX_CHAN][ARRAY_SIZE(iqs7222_kp_events)];
1095         unsigned int kp_code[IQS7222_MAX_CHAN][ARRAY_SIZE(iqs7222_kp_events)];
1096         unsigned int sl_code[IQS7222_MAX_SLDR][ARRAY_SIZE(iqs7222_sl_events)];
1097         unsigned int sl_axis[IQS7222_MAX_SLDR];
1098         u16 cycle_setup[IQS7222_MAX_CHAN / 2][IQS7222_MAX_COLS_CYCLE];
1099         u16 glbl_setup[IQS7222_MAX_COLS_GLBL];
1100         u16 btn_setup[IQS7222_MAX_CHAN][IQS7222_MAX_COLS_BTN];
1101         u16 chan_setup[IQS7222_MAX_CHAN][IQS7222_MAX_COLS_CHAN];
1102         u16 filt_setup[IQS7222_MAX_COLS_FILT];
1103         u16 sldr_setup[IQS7222_MAX_SLDR][IQS7222_MAX_COLS_SLDR];
1104         u16 gpio_setup[ARRAY_SIZE(iqs7222_gpio_links)][IQS7222_MAX_COLS_GPIO];
1105         u16 sys_setup[IQS7222_MAX_COLS_SYS];
1106 };
1107
1108 static u16 *iqs7222_setup(struct iqs7222_private *iqs7222,
1109                           enum iqs7222_reg_grp_id reg_grp, int row)
1110 {
1111         switch (reg_grp) {
1112         case IQS7222_REG_GRP_CYCLE:
1113                 return iqs7222->cycle_setup[row];
1114
1115         case IQS7222_REG_GRP_GLBL:
1116                 return iqs7222->glbl_setup;
1117
1118         case IQS7222_REG_GRP_BTN:
1119                 return iqs7222->btn_setup[row];
1120
1121         case IQS7222_REG_GRP_CHAN:
1122                 return iqs7222->chan_setup[row];
1123
1124         case IQS7222_REG_GRP_FILT:
1125                 return iqs7222->filt_setup;
1126
1127         case IQS7222_REG_GRP_SLDR:
1128                 return iqs7222->sldr_setup[row];
1129
1130         case IQS7222_REG_GRP_GPIO:
1131                 return iqs7222->gpio_setup[row];
1132
1133         case IQS7222_REG_GRP_SYS:
1134                 return iqs7222->sys_setup;
1135
1136         default:
1137                 return NULL;
1138         }
1139 }
1140
1141 static int iqs7222_irq_poll(struct iqs7222_private *iqs7222, u16 timeout_ms)
1142 {
1143         ktime_t irq_timeout = ktime_add_ms(ktime_get(), timeout_ms);
1144         int ret;
1145
1146         do {
1147                 usleep_range(1000, 1100);
1148
1149                 ret = gpiod_get_value_cansleep(iqs7222->irq_gpio);
1150                 if (ret < 0)
1151                         return ret;
1152                 else if (ret > 0)
1153                         return 0;
1154         } while (ktime_compare(ktime_get(), irq_timeout) < 0);
1155
1156         return -EBUSY;
1157 }
1158
1159 static int iqs7222_hard_reset(struct iqs7222_private *iqs7222)
1160 {
1161         struct i2c_client *client = iqs7222->client;
1162         int error;
1163
1164         if (!iqs7222->reset_gpio)
1165                 return 0;
1166
1167         gpiod_set_value_cansleep(iqs7222->reset_gpio, 1);
1168         usleep_range(1000, 1100);
1169
1170         gpiod_set_value_cansleep(iqs7222->reset_gpio, 0);
1171
1172         error = iqs7222_irq_poll(iqs7222, IQS7222_RESET_TIMEOUT_MS);
1173         if (error)
1174                 dev_err(&client->dev, "Failed to reset device: %d\n", error);
1175
1176         return error;
1177 }
1178
1179 static int iqs7222_force_comms(struct iqs7222_private *iqs7222)
1180 {
1181         u8 msg_buf[] = { 0xFF, };
1182         int ret;
1183
1184         /*
1185          * The device cannot communicate until it asserts its interrupt (RDY)
1186          * pin. Attempts to do so while RDY is deasserted return an ACK; how-
1187          * ever all write data is ignored, and all read data returns 0xEE.
1188          *
1189          * Unsolicited communication must be preceded by a special force com-
1190          * munication command, after which the device eventually asserts its
1191          * RDY pin and agrees to communicate.
1192          *
1193          * Regardless of whether communication is forced or the result of an
1194          * interrupt, the device automatically deasserts its RDY pin once it
1195          * detects an I2C stop condition, or a timeout expires.
1196          */
1197         ret = gpiod_get_value_cansleep(iqs7222->irq_gpio);
1198         if (ret < 0)
1199                 return ret;
1200         else if (ret > 0)
1201                 return 0;
1202
1203         ret = i2c_master_send(iqs7222->client, msg_buf, sizeof(msg_buf));
1204         if (ret < (int)sizeof(msg_buf)) {
1205                 if (ret >= 0)
1206                         ret = -EIO;
1207
1208                 /*
1209                  * The datasheet states that the host must wait to retry any
1210                  * failed attempt to communicate over I2C.
1211                  */
1212                 msleep(IQS7222_COMMS_RETRY_MS);
1213                 return ret;
1214         }
1215
1216         return iqs7222_irq_poll(iqs7222, IQS7222_COMMS_TIMEOUT_MS);
1217 }
1218
1219 static int iqs7222_read_burst(struct iqs7222_private *iqs7222,
1220                               u16 reg, void *val, u16 num_val)
1221 {
1222         u8 reg_buf[sizeof(__be16)];
1223         int ret, i;
1224         struct i2c_client *client = iqs7222->client;
1225         struct i2c_msg msg[] = {
1226                 {
1227                         .addr = client->addr,
1228                         .flags = 0,
1229                         .len = reg > U8_MAX ? sizeof(reg) : sizeof(u8),
1230                         .buf = reg_buf,
1231                 },
1232                 {
1233                         .addr = client->addr,
1234                         .flags = I2C_M_RD,
1235                         .len = num_val * sizeof(__le16),
1236                         .buf = (u8 *)val,
1237                 },
1238         };
1239
1240         if (reg > U8_MAX)
1241                 put_unaligned_be16(reg, reg_buf);
1242         else
1243                 *reg_buf = (u8)reg;
1244
1245         /*
1246          * The following loop protects against an edge case in which the RDY
1247          * pin is automatically deasserted just as the read is initiated. In
1248          * that case, the read must be retried using forced communication.
1249          */
1250         for (i = 0; i < IQS7222_NUM_RETRIES; i++) {
1251                 ret = iqs7222_force_comms(iqs7222);
1252                 if (ret < 0)
1253                         continue;
1254
1255                 ret = i2c_transfer(client->adapter, msg, ARRAY_SIZE(msg));
1256                 if (ret < (int)ARRAY_SIZE(msg)) {
1257                         if (ret >= 0)
1258                                 ret = -EIO;
1259
1260                         msleep(IQS7222_COMMS_RETRY_MS);
1261                         continue;
1262                 }
1263
1264                 if (get_unaligned_le16(msg[1].buf) == IQS7222_COMMS_ERROR) {
1265                         ret = -ENODATA;
1266                         continue;
1267                 }
1268
1269                 ret = 0;
1270                 break;
1271         }
1272
1273         /*
1274          * The following delay ensures the device has deasserted the RDY pin
1275          * following the I2C stop condition.
1276          */
1277         usleep_range(50, 100);
1278
1279         if (ret < 0)
1280                 dev_err(&client->dev,
1281                         "Failed to read from address 0x%04X: %d\n", reg, ret);
1282
1283         return ret;
1284 }
1285
1286 static int iqs7222_read_word(struct iqs7222_private *iqs7222, u16 reg, u16 *val)
1287 {
1288         __le16 val_buf;
1289         int error;
1290
1291         error = iqs7222_read_burst(iqs7222, reg, &val_buf, 1);
1292         if (error)
1293                 return error;
1294
1295         *val = le16_to_cpu(val_buf);
1296
1297         return 0;
1298 }
1299
1300 static int iqs7222_write_burst(struct iqs7222_private *iqs7222,
1301                                u16 reg, const void *val, u16 num_val)
1302 {
1303         int reg_len = reg > U8_MAX ? sizeof(reg) : sizeof(u8);
1304         int val_len = num_val * sizeof(__le16);
1305         int msg_len = reg_len + val_len;
1306         int ret, i;
1307         struct i2c_client *client = iqs7222->client;
1308         u8 *msg_buf;
1309
1310         msg_buf = kzalloc(msg_len, GFP_KERNEL);
1311         if (!msg_buf)
1312                 return -ENOMEM;
1313
1314         if (reg > U8_MAX)
1315                 put_unaligned_be16(reg, msg_buf);
1316         else
1317                 *msg_buf = (u8)reg;
1318
1319         memcpy(msg_buf + reg_len, val, val_len);
1320
1321         /*
1322          * The following loop protects against an edge case in which the RDY
1323          * pin is automatically asserted just before the force communication
1324          * command is sent.
1325          *
1326          * In that case, the subsequent I2C stop condition tricks the device
1327          * into preemptively deasserting the RDY pin and the command must be
1328          * sent again.
1329          */
1330         for (i = 0; i < IQS7222_NUM_RETRIES; i++) {
1331                 ret = iqs7222_force_comms(iqs7222);
1332                 if (ret < 0)
1333                         continue;
1334
1335                 ret = i2c_master_send(client, msg_buf, msg_len);
1336                 if (ret < msg_len) {
1337                         if (ret >= 0)
1338                                 ret = -EIO;
1339
1340                         msleep(IQS7222_COMMS_RETRY_MS);
1341                         continue;
1342                 }
1343
1344                 ret = 0;
1345                 break;
1346         }
1347
1348         kfree(msg_buf);
1349
1350         usleep_range(50, 100);
1351
1352         if (ret < 0)
1353                 dev_err(&client->dev,
1354                         "Failed to write to address 0x%04X: %d\n", reg, ret);
1355
1356         return ret;
1357 }
1358
1359 static int iqs7222_write_word(struct iqs7222_private *iqs7222, u16 reg, u16 val)
1360 {
1361         __le16 val_buf = cpu_to_le16(val);
1362
1363         return iqs7222_write_burst(iqs7222, reg, &val_buf, 1);
1364 }
1365
1366 static int iqs7222_ati_trigger(struct iqs7222_private *iqs7222)
1367 {
1368         struct i2c_client *client = iqs7222->client;
1369         ktime_t ati_timeout;
1370         u16 sys_status = 0;
1371         u16 sys_setup;
1372         int error, i;
1373
1374         /*
1375          * The reserved fields of the system setup register may have changed
1376          * as a result of other registers having been written. As such, read
1377          * the register's latest value to avoid unexpected behavior when the
1378          * register is written in the loop that follows.
1379          */
1380         error = iqs7222_read_word(iqs7222, IQS7222_SYS_SETUP, &sys_setup);
1381         if (error)
1382                 return error;
1383
1384         sys_setup &= ~IQS7222_SYS_SETUP_INTF_MODE_MASK;
1385         sys_setup &= ~IQS7222_SYS_SETUP_PWR_MODE_MASK;
1386
1387         for (i = 0; i < IQS7222_NUM_RETRIES; i++) {
1388                 /*
1389                  * Trigger ATI from streaming and normal-power modes so that
1390                  * the RDY pin continues to be asserted during ATI.
1391                  */
1392                 error = iqs7222_write_word(iqs7222, IQS7222_SYS_SETUP,
1393                                            sys_setup |
1394                                            IQS7222_SYS_SETUP_REDO_ATI);
1395                 if (error)
1396                         return error;
1397
1398                 ati_timeout = ktime_add_ms(ktime_get(), IQS7222_ATI_TIMEOUT_MS);
1399
1400                 do {
1401                         error = iqs7222_irq_poll(iqs7222,
1402                                                  IQS7222_COMMS_TIMEOUT_MS);
1403                         if (error)
1404                                 continue;
1405
1406                         error = iqs7222_read_word(iqs7222, IQS7222_SYS_STATUS,
1407                                                   &sys_status);
1408                         if (error)
1409                                 return error;
1410
1411                         if (sys_status & IQS7222_SYS_STATUS_RESET)
1412                                 return 0;
1413
1414                         if (sys_status & IQS7222_SYS_STATUS_ATI_ERROR)
1415                                 break;
1416
1417                         if (sys_status & IQS7222_SYS_STATUS_ATI_ACTIVE)
1418                                 continue;
1419
1420                         /*
1421                          * Use stream-in-touch mode if either slider reports
1422                          * absolute position.
1423                          */
1424                         sys_setup |= test_bit(EV_ABS, iqs7222->keypad->evbit)
1425                                    ? IQS7222_SYS_SETUP_INTF_MODE_TOUCH
1426                                    : IQS7222_SYS_SETUP_INTF_MODE_EVENT;
1427                         sys_setup |= IQS7222_SYS_SETUP_PWR_MODE_AUTO;
1428
1429                         return iqs7222_write_word(iqs7222, IQS7222_SYS_SETUP,
1430                                                   sys_setup);
1431                 } while (ktime_compare(ktime_get(), ati_timeout) < 0);
1432
1433                 dev_err(&client->dev,
1434                         "ATI attempt %d of %d failed with status 0x%02X, %s\n",
1435                         i + 1, IQS7222_NUM_RETRIES, (u8)sys_status,
1436                         i + 1 < IQS7222_NUM_RETRIES ? "retrying" : "stopping");
1437         }
1438
1439         return -ETIMEDOUT;
1440 }
1441
1442 static int iqs7222_dev_init(struct iqs7222_private *iqs7222, int dir)
1443 {
1444         const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc;
1445         int comms_offset = dev_desc->comms_offset;
1446         int error, i, j, k;
1447
1448         /*
1449          * Acknowledge reset before writing any registers in case the device
1450          * suffers a spurious reset during initialization. Because this step
1451          * may change the reserved fields of the second filter beta register,
1452          * its cache must be updated.
1453          *
1454          * Writing the second filter beta register, in turn, may clobber the
1455          * system status register. As such, the filter beta register pair is
1456          * written first to protect against this hazard.
1457          */
1458         if (dir == WRITE) {
1459                 u16 reg = dev_desc->reg_grps[IQS7222_REG_GRP_FILT].base + 1;
1460                 u16 filt_setup;
1461
1462                 error = iqs7222_write_word(iqs7222, IQS7222_SYS_SETUP,
1463                                            iqs7222->sys_setup[0] |
1464                                            IQS7222_SYS_SETUP_ACK_RESET);
1465                 if (error)
1466                         return error;
1467
1468                 error = iqs7222_read_word(iqs7222, reg, &filt_setup);
1469                 if (error)
1470                         return error;
1471
1472                 iqs7222->filt_setup[1] &= GENMASK(7, 0);
1473                 iqs7222->filt_setup[1] |= (filt_setup & ~GENMASK(7, 0));
1474         }
1475
1476         /*
1477          * Take advantage of the stop-bit disable function, if available, to
1478          * save the trouble of having to reopen a communication window after
1479          * each burst read or write.
1480          */
1481         if (comms_offset) {
1482                 u16 comms_setup;
1483
1484                 error = iqs7222_read_word(iqs7222,
1485                                           IQS7222_SYS_SETUP + comms_offset,
1486                                           &comms_setup);
1487                 if (error)
1488                         return error;
1489
1490                 error = iqs7222_write_word(iqs7222,
1491                                            IQS7222_SYS_SETUP + comms_offset,
1492                                            comms_setup | IQS7222_COMMS_HOLD);
1493                 if (error)
1494                         return error;
1495         }
1496
1497         for (i = 0; i < IQS7222_NUM_REG_GRPS; i++) {
1498                 int num_row = dev_desc->reg_grps[i].num_row;
1499                 int num_col = dev_desc->reg_grps[i].num_col;
1500                 u16 reg = dev_desc->reg_grps[i].base;
1501                 __le16 *val_buf;
1502                 u16 *val;
1503
1504                 if (!num_col)
1505                         continue;
1506
1507                 val = iqs7222_setup(iqs7222, i, 0);
1508                 if (!val)
1509                         continue;
1510
1511                 val_buf = kcalloc(num_col, sizeof(__le16), GFP_KERNEL);
1512                 if (!val_buf)
1513                         return -ENOMEM;
1514
1515                 for (j = 0; j < num_row; j++) {
1516                         switch (dir) {
1517                         case READ:
1518                                 error = iqs7222_read_burst(iqs7222, reg,
1519                                                            val_buf, num_col);
1520                                 for (k = 0; k < num_col; k++)
1521                                         val[k] = le16_to_cpu(val_buf[k]);
1522                                 break;
1523
1524                         case WRITE:
1525                                 for (k = 0; k < num_col; k++)
1526                                         val_buf[k] = cpu_to_le16(val[k]);
1527                                 error = iqs7222_write_burst(iqs7222, reg,
1528                                                             val_buf, num_col);
1529                                 break;
1530
1531                         default:
1532                                 error = -EINVAL;
1533                         }
1534
1535                         if (error)
1536                                 break;
1537
1538                         reg += IQS7222_REG_OFFSET;
1539                         val += iqs7222_max_cols[i];
1540                 }
1541
1542                 kfree(val_buf);
1543
1544                 if (error)
1545                         return error;
1546         }
1547
1548         if (comms_offset) {
1549                 u16 comms_setup;
1550
1551                 error = iqs7222_read_word(iqs7222,
1552                                           IQS7222_SYS_SETUP + comms_offset,
1553                                           &comms_setup);
1554                 if (error)
1555                         return error;
1556
1557                 error = iqs7222_write_word(iqs7222,
1558                                            IQS7222_SYS_SETUP + comms_offset,
1559                                            comms_setup & ~IQS7222_COMMS_HOLD);
1560                 if (error)
1561                         return error;
1562         }
1563
1564         if (dir == READ)
1565                 return 0;
1566
1567         return iqs7222_ati_trigger(iqs7222);
1568 }
1569
1570 static int iqs7222_dev_info(struct iqs7222_private *iqs7222)
1571 {
1572         struct i2c_client *client = iqs7222->client;
1573         bool prod_num_valid = false;
1574         __le16 dev_id[3];
1575         int error, i;
1576
1577         error = iqs7222_read_burst(iqs7222, IQS7222_PROD_NUM, dev_id,
1578                                    ARRAY_SIZE(dev_id));
1579         if (error)
1580                 return error;
1581
1582         for (i = 0; i < ARRAY_SIZE(iqs7222_devs); i++) {
1583                 if (le16_to_cpu(dev_id[0]) != iqs7222_devs[i].prod_num)
1584                         continue;
1585
1586                 prod_num_valid = true;
1587
1588                 if (le16_to_cpu(dev_id[1]) < iqs7222_devs[i].fw_major)
1589                         continue;
1590
1591                 if (le16_to_cpu(dev_id[2]) < iqs7222_devs[i].fw_minor)
1592                         continue;
1593
1594                 iqs7222->dev_desc = &iqs7222_devs[i];
1595                 return 0;
1596         }
1597
1598         if (prod_num_valid)
1599                 dev_err(&client->dev, "Unsupported firmware revision: %u.%u\n",
1600                         le16_to_cpu(dev_id[1]), le16_to_cpu(dev_id[2]));
1601         else
1602                 dev_err(&client->dev, "Unrecognized product number: %u\n",
1603                         le16_to_cpu(dev_id[0]));
1604
1605         return -EINVAL;
1606 }
1607
1608 static int iqs7222_gpio_select(struct iqs7222_private *iqs7222,
1609                                struct fwnode_handle *child_node,
1610                                int child_enable, u16 child_link)
1611 {
1612         const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc;
1613         struct i2c_client *client = iqs7222->client;
1614         int num_gpio = dev_desc->reg_grps[IQS7222_REG_GRP_GPIO].num_row;
1615         int error, count, i;
1616         unsigned int gpio_sel[ARRAY_SIZE(iqs7222_gpio_links)];
1617
1618         if (!num_gpio)
1619                 return 0;
1620
1621         if (!fwnode_property_present(child_node, "azoteq,gpio-select"))
1622                 return 0;
1623
1624         count = fwnode_property_count_u32(child_node, "azoteq,gpio-select");
1625         if (count > num_gpio) {
1626                 dev_err(&client->dev, "Invalid number of %s GPIOs\n",
1627                         fwnode_get_name(child_node));
1628                 return -EINVAL;
1629         } else if (count < 0) {
1630                 dev_err(&client->dev, "Failed to count %s GPIOs: %d\n",
1631                         fwnode_get_name(child_node), count);
1632                 return count;
1633         }
1634
1635         error = fwnode_property_read_u32_array(child_node,
1636                                                "azoteq,gpio-select",
1637                                                gpio_sel, count);
1638         if (error) {
1639                 dev_err(&client->dev, "Failed to read %s GPIOs: %d\n",
1640                         fwnode_get_name(child_node), error);
1641                 return error;
1642         }
1643
1644         for (i = 0; i < count; i++) {
1645                 u16 *gpio_setup;
1646
1647                 if (gpio_sel[i] >= num_gpio) {
1648                         dev_err(&client->dev, "Invalid %s GPIO: %u\n",
1649                                 fwnode_get_name(child_node), gpio_sel[i]);
1650                         return -EINVAL;
1651                 }
1652
1653                 gpio_setup = iqs7222->gpio_setup[gpio_sel[i]];
1654
1655                 if (gpio_setup[2] && child_link != gpio_setup[2]) {
1656                         dev_err(&client->dev,
1657                                 "Conflicting GPIO %u event types\n",
1658                                 gpio_sel[i]);
1659                         return -EINVAL;
1660                 }
1661
1662                 gpio_setup[0] |= IQS7222_GPIO_SETUP_0_GPIO_EN;
1663                 gpio_setup[1] |= child_enable;
1664                 gpio_setup[2] = child_link;
1665         }
1666
1667         return 0;
1668 }
1669
1670 static int iqs7222_parse_props(struct iqs7222_private *iqs7222,
1671                                struct fwnode_handle *reg_grp_node,
1672                                int reg_grp_index,
1673                                enum iqs7222_reg_grp_id reg_grp,
1674                                enum iqs7222_reg_key_id reg_key)
1675 {
1676         u16 *setup = iqs7222_setup(iqs7222, reg_grp, reg_grp_index);
1677         struct i2c_client *client = iqs7222->client;
1678         int i;
1679
1680         if (!setup)
1681                 return 0;
1682
1683         for (i = 0; i < ARRAY_SIZE(iqs7222_props); i++) {
1684                 const char *name = iqs7222_props[i].name;
1685                 int reg_offset = iqs7222_props[i].reg_offset;
1686                 int reg_shift = iqs7222_props[i].reg_shift;
1687                 int reg_width = iqs7222_props[i].reg_width;
1688                 int val_pitch = iqs7222_props[i].val_pitch ? : 1;
1689                 int val_min = iqs7222_props[i].val_min;
1690                 int val_max = iqs7222_props[i].val_max;
1691                 bool invert = iqs7222_props[i].invert;
1692                 const char *label = iqs7222_props[i].label ? : name;
1693                 unsigned int val;
1694                 int error;
1695
1696                 if (iqs7222_props[i].reg_grp != reg_grp ||
1697                     iqs7222_props[i].reg_key != reg_key)
1698                         continue;
1699
1700                 /*
1701                  * Boolean register fields are one bit wide; they are forcibly
1702                  * reset to provide a means to undo changes by a bootloader if
1703                  * necessary.
1704                  *
1705                  * Scalar fields, on the other hand, are left untouched unless
1706                  * their corresponding properties are present.
1707                  */
1708                 if (reg_width == 1) {
1709                         if (invert)
1710                                 setup[reg_offset] |= BIT(reg_shift);
1711                         else
1712                                 setup[reg_offset] &= ~BIT(reg_shift);
1713                 }
1714
1715                 if (!fwnode_property_present(reg_grp_node, name))
1716                         continue;
1717
1718                 if (reg_width == 1) {
1719                         if (invert)
1720                                 setup[reg_offset] &= ~BIT(reg_shift);
1721                         else
1722                                 setup[reg_offset] |= BIT(reg_shift);
1723
1724                         continue;
1725                 }
1726
1727                 error = fwnode_property_read_u32(reg_grp_node, name, &val);
1728                 if (error) {
1729                         dev_err(&client->dev, "Failed to read %s %s: %d\n",
1730                                 fwnode_get_name(reg_grp_node), label, error);
1731                         return error;
1732                 }
1733
1734                 if (!val_max)
1735                         val_max = GENMASK(reg_width - 1, 0) * val_pitch;
1736
1737                 if (val < val_min || val > val_max) {
1738                         dev_err(&client->dev, "Invalid %s %s: %u\n",
1739                                 fwnode_get_name(reg_grp_node), label, val);
1740                         return -EINVAL;
1741                 }
1742
1743                 setup[reg_offset] &= ~GENMASK(reg_shift + reg_width - 1,
1744                                               reg_shift);
1745                 setup[reg_offset] |= (val / val_pitch << reg_shift);
1746         }
1747
1748         return 0;
1749 }
1750
1751 static int iqs7222_parse_event(struct iqs7222_private *iqs7222,
1752                                struct fwnode_handle *event_node,
1753                                int reg_grp_index,
1754                                enum iqs7222_reg_grp_id reg_grp,
1755                                enum iqs7222_reg_key_id reg_key,
1756                                u16 event_enable, u16 event_link,
1757                                unsigned int *event_type,
1758                                unsigned int *event_code)
1759 {
1760         struct i2c_client *client = iqs7222->client;
1761         int error;
1762
1763         error = iqs7222_parse_props(iqs7222, event_node, reg_grp_index,
1764                                     reg_grp, reg_key);
1765         if (error)
1766                 return error;
1767
1768         error = iqs7222_gpio_select(iqs7222, event_node, event_enable,
1769                                     event_link);
1770         if (error)
1771                 return error;
1772
1773         error = fwnode_property_read_u32(event_node, "linux,code", event_code);
1774         if (error == -EINVAL) {
1775                 return 0;
1776         } else if (error) {
1777                 dev_err(&client->dev, "Failed to read %s code: %d\n",
1778                         fwnode_get_name(event_node), error);
1779                 return error;
1780         }
1781
1782         if (!event_type) {
1783                 input_set_capability(iqs7222->keypad, EV_KEY, *event_code);
1784                 return 0;
1785         }
1786
1787         error = fwnode_property_read_u32(event_node, "linux,input-type",
1788                                          event_type);
1789         if (error == -EINVAL) {
1790                 *event_type = EV_KEY;
1791         } else if (error) {
1792                 dev_err(&client->dev, "Failed to read %s input type: %d\n",
1793                         fwnode_get_name(event_node), error);
1794                 return error;
1795         } else if (*event_type != EV_KEY && *event_type != EV_SW) {
1796                 dev_err(&client->dev, "Invalid %s input type: %d\n",
1797                         fwnode_get_name(event_node), *event_type);
1798                 return -EINVAL;
1799         }
1800
1801         input_set_capability(iqs7222->keypad, *event_type, *event_code);
1802
1803         return 0;
1804 }
1805
1806 static int iqs7222_parse_cycle(struct iqs7222_private *iqs7222,
1807                                struct fwnode_handle *cycle_node, int cycle_index)
1808 {
1809         u16 *cycle_setup = iqs7222->cycle_setup[cycle_index];
1810         struct i2c_client *client = iqs7222->client;
1811         unsigned int pins[9];
1812         int error, count, i;
1813
1814         /*
1815          * Each channel shares a cycle with one other channel; the mapping of
1816          * channels to cycles is fixed. Properties defined for a cycle impact
1817          * both channels tied to the cycle.
1818          *
1819          * Unlike channels which are restricted to a select range of CRx pins
1820          * based on channel number, any cycle can claim any of the device's 9
1821          * CTx pins (CTx0-8).
1822          */
1823         if (!fwnode_property_present(cycle_node, "azoteq,tx-enable"))
1824                 return 0;
1825
1826         count = fwnode_property_count_u32(cycle_node, "azoteq,tx-enable");
1827         if (count < 0) {
1828                 dev_err(&client->dev, "Failed to count %s CTx pins: %d\n",
1829                         fwnode_get_name(cycle_node), count);
1830                 return count;
1831         } else if (count > ARRAY_SIZE(pins)) {
1832                 dev_err(&client->dev, "Invalid number of %s CTx pins\n",
1833                         fwnode_get_name(cycle_node));
1834                 return -EINVAL;
1835         }
1836
1837         error = fwnode_property_read_u32_array(cycle_node, "azoteq,tx-enable",
1838                                                pins, count);
1839         if (error) {
1840                 dev_err(&client->dev, "Failed to read %s CTx pins: %d\n",
1841                         fwnode_get_name(cycle_node), error);
1842                 return error;
1843         }
1844
1845         cycle_setup[1] &= ~GENMASK(7 + ARRAY_SIZE(pins) - 1, 7);
1846
1847         for (i = 0; i < count; i++) {
1848                 if (pins[i] > 8) {
1849                         dev_err(&client->dev, "Invalid %s CTx pin: %u\n",
1850                                 fwnode_get_name(cycle_node), pins[i]);
1851                         return -EINVAL;
1852                 }
1853
1854                 cycle_setup[1] |= BIT(pins[i] + 7);
1855         }
1856
1857         return 0;
1858 }
1859
1860 static int iqs7222_parse_chan(struct iqs7222_private *iqs7222,
1861                               struct fwnode_handle *chan_node, int chan_index)
1862 {
1863         const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc;
1864         struct i2c_client *client = iqs7222->client;
1865         int num_chan = dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_row;
1866         int ext_chan = rounddown(num_chan, 10);
1867         int error, i;
1868         u16 *chan_setup = iqs7222->chan_setup[chan_index];
1869         u16 *sys_setup = iqs7222->sys_setup;
1870         unsigned int val;
1871
1872         if (dev_desc->allow_offset &&
1873             fwnode_property_present(chan_node, "azoteq,ulp-allow"))
1874                 sys_setup[dev_desc->allow_offset] &= ~BIT(chan_index);
1875
1876         chan_setup[0] |= IQS7222_CHAN_SETUP_0_CHAN_EN;
1877
1878         /*
1879          * The reference channel function allows for differential measurements
1880          * and is only available in the case of IQS7222A or IQS7222C.
1881          */
1882         if (dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_col > 4 &&
1883             fwnode_property_present(chan_node, "azoteq,ref-select")) {
1884                 u16 *ref_setup;
1885
1886                 error = fwnode_property_read_u32(chan_node, "azoteq,ref-select",
1887                                                  &val);
1888                 if (error) {
1889                         dev_err(&client->dev,
1890                                 "Failed to read %s reference channel: %d\n",
1891                                 fwnode_get_name(chan_node), error);
1892                         return error;
1893                 }
1894
1895                 if (val >= ext_chan) {
1896                         dev_err(&client->dev,
1897                                 "Invalid %s reference channel: %u\n",
1898                                 fwnode_get_name(chan_node), val);
1899                         return -EINVAL;
1900                 }
1901
1902                 ref_setup = iqs7222->chan_setup[val];
1903
1904                 /*
1905                  * Configure the current channel as a follower of the selected
1906                  * reference channel.
1907                  */
1908                 chan_setup[0] |= IQS7222_CHAN_SETUP_0_REF_MODE_FOLLOW;
1909                 chan_setup[4] = val * 42 + 1048;
1910
1911                 error = fwnode_property_read_u32(chan_node, "azoteq,ref-weight",
1912                                                  &val);
1913                 if (!error) {
1914                         if (val > U16_MAX) {
1915                                 dev_err(&client->dev,
1916                                         "Invalid %s reference weight: %u\n",
1917                                         fwnode_get_name(chan_node), val);
1918                                 return -EINVAL;
1919                         }
1920
1921                         chan_setup[5] = val;
1922                 } else if (error != -EINVAL) {
1923                         dev_err(&client->dev,
1924                                 "Failed to read %s reference weight: %d\n",
1925                                 fwnode_get_name(chan_node), error);
1926                         return error;
1927                 }
1928
1929                 /*
1930                  * Configure the selected channel as a reference channel which
1931                  * serves the current channel.
1932                  */
1933                 ref_setup[0] |= IQS7222_CHAN_SETUP_0_REF_MODE_REF;
1934                 ref_setup[5] |= BIT(chan_index);
1935
1936                 ref_setup[4] = dev_desc->touch_link;
1937                 if (fwnode_property_present(chan_node, "azoteq,use-prox"))
1938                         ref_setup[4] -= 2;
1939         }
1940
1941         if (fwnode_property_present(chan_node, "azoteq,rx-enable")) {
1942                 /*
1943                  * Each channel can claim up to 4 CRx pins. The first half of
1944                  * the channels can use CRx0-3, while the second half can use
1945                  * CRx4-7.
1946                  */
1947                 unsigned int pins[4];
1948                 int count;
1949
1950                 count = fwnode_property_count_u32(chan_node,
1951                                                   "azoteq,rx-enable");
1952                 if (count < 0) {
1953                         dev_err(&client->dev,
1954                                 "Failed to count %s CRx pins: %d\n",
1955                                 fwnode_get_name(chan_node), count);
1956                         return count;
1957                 } else if (count > ARRAY_SIZE(pins)) {
1958                         dev_err(&client->dev,
1959                                 "Invalid number of %s CRx pins\n",
1960                                 fwnode_get_name(chan_node));
1961                         return -EINVAL;
1962                 }
1963
1964                 error = fwnode_property_read_u32_array(chan_node,
1965                                                        "azoteq,rx-enable",
1966                                                        pins, count);
1967                 if (error) {
1968                         dev_err(&client->dev,
1969                                 "Failed to read %s CRx pins: %d\n",
1970                                 fwnode_get_name(chan_node), error);
1971                         return error;
1972                 }
1973
1974                 chan_setup[0] &= ~GENMASK(4 + ARRAY_SIZE(pins) - 1, 4);
1975
1976                 for (i = 0; i < count; i++) {
1977                         int min_crx = chan_index < ext_chan / 2 ? 0 : 4;
1978
1979                         if (pins[i] < min_crx || pins[i] > min_crx + 3) {
1980                                 dev_err(&client->dev,
1981                                         "Invalid %s CRx pin: %u\n",
1982                                         fwnode_get_name(chan_node), pins[i]);
1983                                 return -EINVAL;
1984                         }
1985
1986                         chan_setup[0] |= BIT(pins[i] + 4 - min_crx);
1987                 }
1988         }
1989
1990         for (i = 0; i < ARRAY_SIZE(iqs7222_kp_events); i++) {
1991                 const char *event_name = iqs7222_kp_events[i].name;
1992                 u16 event_enable = iqs7222_kp_events[i].enable;
1993                 struct fwnode_handle *event_node;
1994
1995                 event_node = fwnode_get_named_child_node(chan_node, event_name);
1996                 if (!event_node)
1997                         continue;
1998
1999                 error = fwnode_property_read_u32(event_node,
2000                                                  "azoteq,timeout-press-ms",
2001                                                  &val);
2002                 if (!error) {
2003                         /*
2004                          * The IQS7222B employs a global pair of press timeout
2005                          * registers as opposed to channel-specific registers.
2006                          */
2007                         u16 *setup = dev_desc->reg_grps
2008                                      [IQS7222_REG_GRP_BTN].num_col > 2 ?
2009                                      &iqs7222->btn_setup[chan_index][2] :
2010                                      &sys_setup[9];
2011
2012                         if (val > U8_MAX * 500) {
2013                                 dev_err(&client->dev,
2014                                         "Invalid %s press timeout: %u\n",
2015                                         fwnode_get_name(event_node), val);
2016                                 fwnode_handle_put(event_node);
2017                                 return -EINVAL;
2018                         }
2019
2020                         *setup &= ~(U8_MAX << i * 8);
2021                         *setup |= (val / 500 << i * 8);
2022                 } else if (error != -EINVAL) {
2023                         dev_err(&client->dev,
2024                                 "Failed to read %s press timeout: %d\n",
2025                                 fwnode_get_name(event_node), error);
2026                         fwnode_handle_put(event_node);
2027                         return error;
2028                 }
2029
2030                 error = iqs7222_parse_event(iqs7222, event_node, chan_index,
2031                                             IQS7222_REG_GRP_BTN,
2032                                             iqs7222_kp_events[i].reg_key,
2033                                             BIT(chan_index),
2034                                             dev_desc->touch_link - (i ? 0 : 2),
2035                                             &iqs7222->kp_type[chan_index][i],
2036                                             &iqs7222->kp_code[chan_index][i]);
2037                 fwnode_handle_put(event_node);
2038                 if (error)
2039                         return error;
2040
2041                 if (!dev_desc->event_offset)
2042                         continue;
2043
2044                 sys_setup[dev_desc->event_offset] |= event_enable;
2045         }
2046
2047         /*
2048          * The following call handles a special pair of properties that apply
2049          * to a channel node, but reside within the button (event) group.
2050          */
2051         return iqs7222_parse_props(iqs7222, chan_node, chan_index,
2052                                    IQS7222_REG_GRP_BTN,
2053                                    IQS7222_REG_KEY_DEBOUNCE);
2054 }
2055
2056 static int iqs7222_parse_sldr(struct iqs7222_private *iqs7222,
2057                               struct fwnode_handle *sldr_node, int sldr_index)
2058 {
2059         const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc;
2060         struct i2c_client *client = iqs7222->client;
2061         int num_chan = dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_row;
2062         int ext_chan = rounddown(num_chan, 10);
2063         int count, error, reg_offset, i;
2064         u16 *event_mask = &iqs7222->sys_setup[dev_desc->event_offset];
2065         u16 *sldr_setup = iqs7222->sldr_setup[sldr_index];
2066         unsigned int chan_sel[4], val;
2067
2068         /*
2069          * Each slider can be spread across 3 to 4 channels. It is possible to
2070          * select only 2 channels, but doing so prevents the slider from using
2071          * the specified resolution.
2072          */
2073         count = fwnode_property_count_u32(sldr_node, "azoteq,channel-select");
2074         if (count < 0) {
2075                 dev_err(&client->dev, "Failed to count %s channels: %d\n",
2076                         fwnode_get_name(sldr_node), count);
2077                 return count;
2078         } else if (count < 3 || count > ARRAY_SIZE(chan_sel)) {
2079                 dev_err(&client->dev, "Invalid number of %s channels\n",
2080                         fwnode_get_name(sldr_node));
2081                 return -EINVAL;
2082         }
2083
2084         error = fwnode_property_read_u32_array(sldr_node,
2085                                                "azoteq,channel-select",
2086                                                chan_sel, count);
2087         if (error) {
2088                 dev_err(&client->dev, "Failed to read %s channels: %d\n",
2089                         fwnode_get_name(sldr_node), error);
2090                 return error;
2091         }
2092
2093         /*
2094          * Resolution and top speed, if small enough, are packed into a single
2095          * register. Otherwise, each occupies its own register and the rest of
2096          * the slider-related register addresses are offset by one.
2097          */
2098         reg_offset = dev_desc->sldr_res < U16_MAX ? 0 : 1;
2099
2100         sldr_setup[0] |= count;
2101         sldr_setup[3 + reg_offset] &= ~GENMASK(ext_chan - 1, 0);
2102
2103         for (i = 0; i < ARRAY_SIZE(chan_sel); i++) {
2104                 sldr_setup[5 + reg_offset + i] = 0;
2105                 if (i >= count)
2106                         continue;
2107
2108                 if (chan_sel[i] >= ext_chan) {
2109                         dev_err(&client->dev, "Invalid %s channel: %u\n",
2110                                 fwnode_get_name(sldr_node), chan_sel[i]);
2111                         return -EINVAL;
2112                 }
2113
2114                 /*
2115                  * The following fields indicate which channels participate in
2116                  * the slider, as well as each channel's relative placement.
2117                  */
2118                 sldr_setup[3 + reg_offset] |= BIT(chan_sel[i]);
2119                 sldr_setup[5 + reg_offset + i] = chan_sel[i] * 42 + 1080;
2120         }
2121
2122         sldr_setup[4 + reg_offset] = dev_desc->touch_link;
2123         if (fwnode_property_present(sldr_node, "azoteq,use-prox"))
2124                 sldr_setup[4 + reg_offset] -= 2;
2125
2126         error = fwnode_property_read_u32(sldr_node, "azoteq,slider-size", &val);
2127         if (!error) {
2128                 if (val > dev_desc->sldr_res) {
2129                         dev_err(&client->dev, "Invalid %s size: %u\n",
2130                                 fwnode_get_name(sldr_node), val);
2131                         return -EINVAL;
2132                 }
2133
2134                 if (reg_offset) {
2135                         sldr_setup[3] = val;
2136                 } else {
2137                         sldr_setup[2] &= ~IQS7222_SLDR_SETUP_2_RES_MASK;
2138                         sldr_setup[2] |= (val / 16 <<
2139                                           IQS7222_SLDR_SETUP_2_RES_SHIFT);
2140                 }
2141         } else if (error != -EINVAL) {
2142                 dev_err(&client->dev, "Failed to read %s size: %d\n",
2143                         fwnode_get_name(sldr_node), error);
2144                 return error;
2145         }
2146
2147         if (!(reg_offset ? sldr_setup[3]
2148                          : sldr_setup[2] & IQS7222_SLDR_SETUP_2_RES_MASK)) {
2149                 dev_err(&client->dev, "Undefined %s size\n",
2150                         fwnode_get_name(sldr_node));
2151                 return -EINVAL;
2152         }
2153
2154         error = fwnode_property_read_u32(sldr_node, "azoteq,top-speed", &val);
2155         if (!error) {
2156                 if (val > (reg_offset ? U16_MAX : U8_MAX * 4)) {
2157                         dev_err(&client->dev, "Invalid %s top speed: %u\n",
2158                                 fwnode_get_name(sldr_node), val);
2159                         return -EINVAL;
2160                 }
2161
2162                 if (reg_offset) {
2163                         sldr_setup[2] = val;
2164                 } else {
2165                         sldr_setup[2] &= ~IQS7222_SLDR_SETUP_2_TOP_SPEED_MASK;
2166                         sldr_setup[2] |= (val / 4);
2167                 }
2168         } else if (error != -EINVAL) {
2169                 dev_err(&client->dev, "Failed to read %s top speed: %d\n",
2170                         fwnode_get_name(sldr_node), error);
2171                 return error;
2172         }
2173
2174         error = fwnode_property_read_u32(sldr_node, "linux,axis", &val);
2175         if (!error) {
2176                 u16 sldr_max = sldr_setup[3] - 1;
2177
2178                 if (!reg_offset) {
2179                         sldr_max = sldr_setup[2];
2180
2181                         sldr_max &= IQS7222_SLDR_SETUP_2_RES_MASK;
2182                         sldr_max >>= IQS7222_SLDR_SETUP_2_RES_SHIFT;
2183
2184                         sldr_max = sldr_max * 16 - 1;
2185                 }
2186
2187                 input_set_abs_params(iqs7222->keypad, val, 0, sldr_max, 0, 0);
2188                 iqs7222->sl_axis[sldr_index] = val;
2189         } else if (error != -EINVAL) {
2190                 dev_err(&client->dev, "Failed to read %s axis: %d\n",
2191                         fwnode_get_name(sldr_node), error);
2192                 return error;
2193         }
2194
2195         if (dev_desc->wheel_enable) {
2196                 sldr_setup[0] &= ~dev_desc->wheel_enable;
2197                 if (iqs7222->sl_axis[sldr_index] == ABS_WHEEL)
2198                         sldr_setup[0] |= dev_desc->wheel_enable;
2199         }
2200
2201         /*
2202          * The absence of a register offset makes it safe to assume the device
2203          * supports gestures, each of which is first disabled until explicitly
2204          * enabled.
2205          */
2206         if (!reg_offset)
2207                 for (i = 0; i < ARRAY_SIZE(iqs7222_sl_events); i++)
2208                         sldr_setup[9] &= ~iqs7222_sl_events[i].enable;
2209
2210         for (i = 0; i < ARRAY_SIZE(iqs7222_sl_events); i++) {
2211                 const char *event_name = iqs7222_sl_events[i].name;
2212                 struct fwnode_handle *event_node;
2213                 enum iqs7222_reg_key_id reg_key;
2214
2215                 event_node = fwnode_get_named_child_node(sldr_node, event_name);
2216                 if (!event_node)
2217                         continue;
2218
2219                 /*
2220                  * Depending on the device, gestures are either offered using
2221                  * one of two timing resolutions, or are not supported at all.
2222                  */
2223                 if (reg_offset)
2224                         reg_key = IQS7222_REG_KEY_RESERVED;
2225                 else if (dev_desc->legacy_gesture &&
2226                          iqs7222_sl_events[i].reg_key == IQS7222_REG_KEY_TAP)
2227                         reg_key = IQS7222_REG_KEY_TAP_LEGACY;
2228                 else if (dev_desc->legacy_gesture &&
2229                          iqs7222_sl_events[i].reg_key == IQS7222_REG_KEY_AXIAL)
2230                         reg_key = IQS7222_REG_KEY_AXIAL_LEGACY;
2231                 else
2232                         reg_key = iqs7222_sl_events[i].reg_key;
2233
2234                 /*
2235                  * The press/release event does not expose a direct GPIO link,
2236                  * but one can be emulated by tying each of the participating
2237                  * channels to the same GPIO.
2238                  */
2239                 error = iqs7222_parse_event(iqs7222, event_node, sldr_index,
2240                                             IQS7222_REG_GRP_SLDR, reg_key,
2241                                             i ? iqs7222_sl_events[i].enable
2242                                               : sldr_setup[3 + reg_offset],
2243                                             i ? 1568 + sldr_index * 30
2244                                               : sldr_setup[4 + reg_offset],
2245                                             NULL,
2246                                             &iqs7222->sl_code[sldr_index][i]);
2247                 fwnode_handle_put(event_node);
2248                 if (error)
2249                         return error;
2250
2251                 if (!reg_offset)
2252                         sldr_setup[9] |= iqs7222_sl_events[i].enable;
2253
2254                 if (!dev_desc->event_offset)
2255                         continue;
2256
2257                 /*
2258                  * The press/release event is determined based on whether the
2259                  * coordinate field reports 0xFFFF and solely relies on touch
2260                  * or proximity interrupts to be unmasked.
2261                  */
2262                 if (i && !reg_offset)
2263                         *event_mask |= (IQS7222_EVENT_MASK_SLDR << sldr_index);
2264                 else if (sldr_setup[4 + reg_offset] == dev_desc->touch_link)
2265                         *event_mask |= IQS7222_EVENT_MASK_TOUCH;
2266                 else
2267                         *event_mask |= IQS7222_EVENT_MASK_PROX;
2268         }
2269
2270         /*
2271          * The following call handles a special pair of properties that shift
2272          * to make room for a wheel enable control in the case of IQS7222C.
2273          */
2274         return iqs7222_parse_props(iqs7222, sldr_node, sldr_index,
2275                                    IQS7222_REG_GRP_SLDR,
2276                                    dev_desc->wheel_enable ?
2277                                    IQS7222_REG_KEY_WHEEL :
2278                                    IQS7222_REG_KEY_NO_WHEEL);
2279 }
2280
2281 static int (*iqs7222_parse_extra[IQS7222_NUM_REG_GRPS])
2282                                 (struct iqs7222_private *iqs7222,
2283                                  struct fwnode_handle *reg_grp_node,
2284                                  int reg_grp_index) = {
2285         [IQS7222_REG_GRP_CYCLE] = iqs7222_parse_cycle,
2286         [IQS7222_REG_GRP_CHAN] = iqs7222_parse_chan,
2287         [IQS7222_REG_GRP_SLDR] = iqs7222_parse_sldr,
2288 };
2289
2290 static int iqs7222_parse_reg_grp(struct iqs7222_private *iqs7222,
2291                                  enum iqs7222_reg_grp_id reg_grp,
2292                                  int reg_grp_index)
2293 {
2294         struct i2c_client *client = iqs7222->client;
2295         struct fwnode_handle *reg_grp_node;
2296         int error;
2297
2298         if (iqs7222_reg_grp_names[reg_grp]) {
2299                 char reg_grp_name[16];
2300
2301                 snprintf(reg_grp_name, sizeof(reg_grp_name), "%s-%d",
2302                          iqs7222_reg_grp_names[reg_grp], reg_grp_index);
2303
2304                 reg_grp_node = device_get_named_child_node(&client->dev,
2305                                                            reg_grp_name);
2306         } else {
2307                 reg_grp_node = fwnode_handle_get(dev_fwnode(&client->dev));
2308         }
2309
2310         if (!reg_grp_node)
2311                 return 0;
2312
2313         error = iqs7222_parse_props(iqs7222, reg_grp_node, reg_grp_index,
2314                                     reg_grp, IQS7222_REG_KEY_NONE);
2315
2316         if (!error && iqs7222_parse_extra[reg_grp])
2317                 error = iqs7222_parse_extra[reg_grp](iqs7222, reg_grp_node,
2318                                                      reg_grp_index);
2319
2320         fwnode_handle_put(reg_grp_node);
2321
2322         return error;
2323 }
2324
2325 static int iqs7222_parse_all(struct iqs7222_private *iqs7222)
2326 {
2327         const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc;
2328         const struct iqs7222_reg_grp_desc *reg_grps = dev_desc->reg_grps;
2329         u16 *sys_setup = iqs7222->sys_setup;
2330         int error, i, j;
2331
2332         if (dev_desc->allow_offset)
2333                 sys_setup[dev_desc->allow_offset] = U16_MAX;
2334
2335         if (dev_desc->event_offset)
2336                 sys_setup[dev_desc->event_offset] = IQS7222_EVENT_MASK_ATI;
2337
2338         for (i = 0; i < reg_grps[IQS7222_REG_GRP_GPIO].num_row; i++) {
2339                 u16 *gpio_setup = iqs7222->gpio_setup[i];
2340
2341                 gpio_setup[0] &= ~IQS7222_GPIO_SETUP_0_GPIO_EN;
2342                 gpio_setup[1] = 0;
2343                 gpio_setup[2] = 0;
2344
2345                 if (reg_grps[IQS7222_REG_GRP_GPIO].num_row == 1)
2346                         continue;
2347
2348                 /*
2349                  * The IQS7222C exposes multiple GPIO and must be informed
2350                  * as to which GPIO this group represents.
2351                  */
2352                 for (j = 0; j < ARRAY_SIZE(iqs7222_gpio_links); j++)
2353                         gpio_setup[0] &= ~BIT(iqs7222_gpio_links[j]);
2354
2355                 gpio_setup[0] |= BIT(iqs7222_gpio_links[i]);
2356         }
2357
2358         for (i = 0; i < reg_grps[IQS7222_REG_GRP_CHAN].num_row; i++) {
2359                 u16 *chan_setup = iqs7222->chan_setup[i];
2360
2361                 chan_setup[0] &= ~IQS7222_CHAN_SETUP_0_REF_MODE_MASK;
2362                 chan_setup[0] &= ~IQS7222_CHAN_SETUP_0_CHAN_EN;
2363
2364                 chan_setup[5] = 0;
2365         }
2366
2367         for (i = 0; i < reg_grps[IQS7222_REG_GRP_SLDR].num_row; i++) {
2368                 u16 *sldr_setup = iqs7222->sldr_setup[i];
2369
2370                 sldr_setup[0] &= ~IQS7222_SLDR_SETUP_0_CHAN_CNT_MASK;
2371         }
2372
2373         for (i = 0; i < IQS7222_NUM_REG_GRPS; i++) {
2374                 for (j = 0; j < reg_grps[i].num_row; j++) {
2375                         error = iqs7222_parse_reg_grp(iqs7222, i, j);
2376                         if (error)
2377                                 return error;
2378                 }
2379         }
2380
2381         return 0;
2382 }
2383
2384 static int iqs7222_report(struct iqs7222_private *iqs7222)
2385 {
2386         const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc;
2387         struct i2c_client *client = iqs7222->client;
2388         int num_chan = dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_row;
2389         int num_stat = dev_desc->reg_grps[IQS7222_REG_GRP_STAT].num_col;
2390         int error, i, j;
2391         __le16 status[IQS7222_MAX_COLS_STAT];
2392
2393         error = iqs7222_read_burst(iqs7222, IQS7222_SYS_STATUS, status,
2394                                    num_stat);
2395         if (error)
2396                 return error;
2397
2398         if (le16_to_cpu(status[0]) & IQS7222_SYS_STATUS_RESET) {
2399                 dev_err(&client->dev, "Unexpected device reset\n");
2400                 return iqs7222_dev_init(iqs7222, WRITE);
2401         }
2402
2403         if (le16_to_cpu(status[0]) & IQS7222_SYS_STATUS_ATI_ERROR) {
2404                 dev_err(&client->dev, "Unexpected ATI error\n");
2405                 return iqs7222_ati_trigger(iqs7222);
2406         }
2407
2408         if (le16_to_cpu(status[0]) & IQS7222_SYS_STATUS_ATI_ACTIVE)
2409                 return 0;
2410
2411         for (i = 0; i < num_chan; i++) {
2412                 u16 *chan_setup = iqs7222->chan_setup[i];
2413
2414                 if (!(chan_setup[0] & IQS7222_CHAN_SETUP_0_CHAN_EN))
2415                         continue;
2416
2417                 for (j = 0; j < ARRAY_SIZE(iqs7222_kp_events); j++) {
2418                         /*
2419                          * Proximity state begins at offset 2 and spills into
2420                          * offset 3 for devices with more than 16 channels.
2421                          *
2422                          * Touch state begins at the first offset immediately
2423                          * following proximity state.
2424                          */
2425                         int k = 2 + j * (num_chan > 16 ? 2 : 1);
2426                         u16 state = le16_to_cpu(status[k + i / 16]);
2427
2428                         if (!iqs7222->kp_type[i][j])
2429                                 continue;
2430
2431                         input_event(iqs7222->keypad,
2432                                     iqs7222->kp_type[i][j],
2433                                     iqs7222->kp_code[i][j],
2434                                     !!(state & BIT(i % 16)));
2435                 }
2436         }
2437
2438         for (i = 0; i < dev_desc->reg_grps[IQS7222_REG_GRP_SLDR].num_row; i++) {
2439                 u16 *sldr_setup = iqs7222->sldr_setup[i];
2440                 u16 sldr_pos = le16_to_cpu(status[4 + i]);
2441                 u16 state = le16_to_cpu(status[6 + i]);
2442
2443                 if (!(sldr_setup[0] & IQS7222_SLDR_SETUP_0_CHAN_CNT_MASK))
2444                         continue;
2445
2446                 if (sldr_pos < dev_desc->sldr_res)
2447                         input_report_abs(iqs7222->keypad, iqs7222->sl_axis[i],
2448                                          sldr_pos);
2449
2450                 input_report_key(iqs7222->keypad, iqs7222->sl_code[i][0],
2451                                  sldr_pos < dev_desc->sldr_res);
2452
2453                 /*
2454                  * A maximum resolution indicates the device does not support
2455                  * gestures, in which case the remaining fields are ignored.
2456                  */
2457                 if (dev_desc->sldr_res == U16_MAX)
2458                         continue;
2459
2460                 if (!(le16_to_cpu(status[1]) & IQS7222_EVENT_MASK_SLDR << i))
2461                         continue;
2462
2463                 /*
2464                  * Skip the press/release event, as it does not have separate
2465                  * status fields and is handled separately.
2466                  */
2467                 for (j = 1; j < ARRAY_SIZE(iqs7222_sl_events); j++) {
2468                         u16 mask = iqs7222_sl_events[j].mask;
2469                         u16 val = iqs7222_sl_events[j].val;
2470
2471                         input_report_key(iqs7222->keypad,
2472                                          iqs7222->sl_code[i][j],
2473                                          (state & mask) == val);
2474                 }
2475
2476                 input_sync(iqs7222->keypad);
2477
2478                 for (j = 1; j < ARRAY_SIZE(iqs7222_sl_events); j++)
2479                         input_report_key(iqs7222->keypad,
2480                                          iqs7222->sl_code[i][j], 0);
2481         }
2482
2483         input_sync(iqs7222->keypad);
2484
2485         return 0;
2486 }
2487
2488 static irqreturn_t iqs7222_irq(int irq, void *context)
2489 {
2490         struct iqs7222_private *iqs7222 = context;
2491
2492         return iqs7222_report(iqs7222) ? IRQ_NONE : IRQ_HANDLED;
2493 }
2494
2495 static int iqs7222_probe(struct i2c_client *client)
2496 {
2497         struct iqs7222_private *iqs7222;
2498         unsigned long irq_flags;
2499         int error, irq;
2500
2501         iqs7222 = devm_kzalloc(&client->dev, sizeof(*iqs7222), GFP_KERNEL);
2502         if (!iqs7222)
2503                 return -ENOMEM;
2504
2505         i2c_set_clientdata(client, iqs7222);
2506         iqs7222->client = client;
2507
2508         iqs7222->keypad = devm_input_allocate_device(&client->dev);
2509         if (!iqs7222->keypad)
2510                 return -ENOMEM;
2511
2512         iqs7222->keypad->name = client->name;
2513         iqs7222->keypad->id.bustype = BUS_I2C;
2514
2515         /*
2516          * The RDY pin behaves as an interrupt, but must also be polled ahead
2517          * of unsolicited I2C communication. As such, it is first opened as a
2518          * GPIO and then passed to gpiod_to_irq() to register the interrupt.
2519          */
2520         iqs7222->irq_gpio = devm_gpiod_get(&client->dev, "irq", GPIOD_IN);
2521         if (IS_ERR(iqs7222->irq_gpio)) {
2522                 error = PTR_ERR(iqs7222->irq_gpio);
2523                 dev_err(&client->dev, "Failed to request IRQ GPIO: %d\n",
2524                         error);
2525                 return error;
2526         }
2527
2528         iqs7222->reset_gpio = devm_gpiod_get_optional(&client->dev, "reset",
2529                                                       GPIOD_OUT_HIGH);
2530         if (IS_ERR(iqs7222->reset_gpio)) {
2531                 error = PTR_ERR(iqs7222->reset_gpio);
2532                 dev_err(&client->dev, "Failed to request reset GPIO: %d\n",
2533                         error);
2534                 return error;
2535         }
2536
2537         error = iqs7222_hard_reset(iqs7222);
2538         if (error)
2539                 return error;
2540
2541         error = iqs7222_dev_info(iqs7222);
2542         if (error)
2543                 return error;
2544
2545         error = iqs7222_dev_init(iqs7222, READ);
2546         if (error)
2547                 return error;
2548
2549         error = iqs7222_parse_all(iqs7222);
2550         if (error)
2551                 return error;
2552
2553         error = iqs7222_dev_init(iqs7222, WRITE);
2554         if (error)
2555                 return error;
2556
2557         error = iqs7222_report(iqs7222);
2558         if (error)
2559                 return error;
2560
2561         error = input_register_device(iqs7222->keypad);
2562         if (error) {
2563                 dev_err(&client->dev, "Failed to register device: %d\n", error);
2564                 return error;
2565         }
2566
2567         irq = gpiod_to_irq(iqs7222->irq_gpio);
2568         if (irq < 0)
2569                 return irq;
2570
2571         irq_flags = gpiod_is_active_low(iqs7222->irq_gpio) ? IRQF_TRIGGER_LOW
2572                                                            : IRQF_TRIGGER_HIGH;
2573         irq_flags |= IRQF_ONESHOT;
2574
2575         error = devm_request_threaded_irq(&client->dev, irq, NULL, iqs7222_irq,
2576                                           irq_flags, client->name, iqs7222);
2577         if (error)
2578                 dev_err(&client->dev, "Failed to request IRQ: %d\n", error);
2579
2580         return error;
2581 }
2582
2583 static const struct of_device_id iqs7222_of_match[] = {
2584         { .compatible = "azoteq,iqs7222a" },
2585         { .compatible = "azoteq,iqs7222b" },
2586         { .compatible = "azoteq,iqs7222c" },
2587         { }
2588 };
2589 MODULE_DEVICE_TABLE(of, iqs7222_of_match);
2590
2591 static struct i2c_driver iqs7222_i2c_driver = {
2592         .driver = {
2593                 .name = "iqs7222",
2594                 .of_match_table = iqs7222_of_match,
2595         },
2596         .probe = iqs7222_probe,
2597 };
2598 module_i2c_driver(iqs7222_i2c_driver);
2599
2600 MODULE_AUTHOR("Jeff LaBundy <jeff@labundy.com>");
2601 MODULE_DESCRIPTION("Azoteq IQS7222A/B/C Capacitive Touch Controller");
2602 MODULE_LICENSE("GPL");