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