1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3 * Azoteq IQS269A Capacitive Touch Controller
4 *
5 * Copyright (C) 2020 Jeff LaBundy <jeff@labundy.com>
6 *
7 * This driver registers up to 3 input devices: one representing capacitive or
8 * inductive keys as well as Hall-effect switches, and one for each of the two
9 * axial sliders presented by the device.
10 */
11
12 #include <linux/bits.h>
13 #include <linux/completion.h>
14 #include <linux/delay.h>
15 #include <linux/device.h>
16 #include <linux/err.h>
17 #include <linux/i2c.h>
18 #include <linux/input.h>
19 #include <linux/interrupt.h>
20 #include <linux/kernel.h>
21 #include <linux/module.h>
22 #include <linux/mutex.h>
23 #include <linux/property.h>
24 #include <linux/regmap.h>
25 #include <linux/slab.h>
26
27 #define IQS269_VER_INFO 0x00
28 #define IQS269_VER_INFO_PROD_NUM 0x4F
29 #define IQS269_VER_INFO_FW_NUM_2 0x03
30 #define IQS269_VER_INFO_FW_NUM_3 0x10
31
32 #define IQS269_SYS_FLAGS 0x02
33 #define IQS269_SYS_FLAGS_SHOW_RESET BIT(15)
34 #define IQS269_SYS_FLAGS_PWR_MODE_MASK GENMASK(12, 11)
35 #define IQS269_SYS_FLAGS_PWR_MODE_SHIFT 11
36 #define IQS269_SYS_FLAGS_IN_ATI BIT(10)
37
38 #define IQS269_CHx_COUNTS 0x08
39
40 #define IQS269_SLIDER_X 0x30
41
42 #define IQS269_CAL_DATA_A 0x35
43 #define IQS269_CAL_DATA_A_HALL_BIN_L_MASK GENMASK(15, 12)
44 #define IQS269_CAL_DATA_A_HALL_BIN_L_SHIFT 12
45 #define IQS269_CAL_DATA_A_HALL_BIN_R_MASK GENMASK(11, 8)
46 #define IQS269_CAL_DATA_A_HALL_BIN_R_SHIFT 8
47
48 #define IQS269_SYS_SETTINGS 0x80
49 #define IQS269_SYS_SETTINGS_CLK_DIV BIT(15)
50 #define IQS269_SYS_SETTINGS_ULP_AUTO BIT(14)
51 #define IQS269_SYS_SETTINGS_DIS_AUTO BIT(13)
52 #define IQS269_SYS_SETTINGS_PWR_MODE_MASK GENMASK(12, 11)
53 #define IQS269_SYS_SETTINGS_PWR_MODE_SHIFT 11
54 #define IQS269_SYS_SETTINGS_PWR_MODE_MAX 3
55 #define IQS269_SYS_SETTINGS_ULP_UPDATE_MASK GENMASK(10, 8)
56 #define IQS269_SYS_SETTINGS_ULP_UPDATE_SHIFT 8
57 #define IQS269_SYS_SETTINGS_ULP_UPDATE_MAX 7
58 #define IQS269_SYS_SETTINGS_SLIDER_SWIPE BIT(7)
59 #define IQS269_SYS_SETTINGS_RESEED_OFFSET BIT(6)
60 #define IQS269_SYS_SETTINGS_EVENT_MODE BIT(5)
61 #define IQS269_SYS_SETTINGS_EVENT_MODE_LP BIT(4)
62 #define IQS269_SYS_SETTINGS_REDO_ATI BIT(2)
63 #define IQS269_SYS_SETTINGS_ACK_RESET BIT(0)
64
65 #define IQS269_FILT_STR_LP_LTA_MASK GENMASK(7, 6)
66 #define IQS269_FILT_STR_LP_LTA_SHIFT 6
67 #define IQS269_FILT_STR_LP_CNT_MASK GENMASK(5, 4)
68 #define IQS269_FILT_STR_LP_CNT_SHIFT 4
69 #define IQS269_FILT_STR_NP_LTA_MASK GENMASK(3, 2)
70 #define IQS269_FILT_STR_NP_LTA_SHIFT 2
71 #define IQS269_FILT_STR_NP_CNT_MASK GENMASK(1, 0)
72 #define IQS269_FILT_STR_MAX 3
73
74 #define IQS269_EVENT_MASK_SYS BIT(6)
75 #define IQS269_EVENT_MASK_GESTURE BIT(3)
76 #define IQS269_EVENT_MASK_DEEP BIT(2)
77 #define IQS269_EVENT_MASK_TOUCH BIT(1)
78 #define IQS269_EVENT_MASK_PROX BIT(0)
79
80 #define IQS269_RATE_NP_MS_MAX 255
81 #define IQS269_RATE_LP_MS_MAX 255
82 #define IQS269_RATE_ULP_MS_MAX 4080
83 #define IQS269_TIMEOUT_PWR_MS_MAX 130560
84 #define IQS269_TIMEOUT_LTA_MS_MAX 130560
85
86 #define IQS269_MISC_A_ATI_BAND_DISABLE BIT(15)
87 #define IQS269_MISC_A_ATI_LP_ONLY BIT(14)
88 #define IQS269_MISC_A_ATI_BAND_TIGHTEN BIT(13)
89 #define IQS269_MISC_A_FILT_DISABLE BIT(12)
90 #define IQS269_MISC_A_GPIO3_SELECT_MASK GENMASK(10, 8)
91 #define IQS269_MISC_A_GPIO3_SELECT_SHIFT 8
92 #define IQS269_MISC_A_DUAL_DIR BIT(6)
93 #define IQS269_MISC_A_TX_FREQ_MASK GENMASK(5, 4)
94 #define IQS269_MISC_A_TX_FREQ_SHIFT 4
95 #define IQS269_MISC_A_TX_FREQ_MAX 3
96 #define IQS269_MISC_A_GLOBAL_CAP_SIZE BIT(0)
97
98 #define IQS269_MISC_B_RESEED_UI_SEL_MASK GENMASK(7, 6)
99 #define IQS269_MISC_B_RESEED_UI_SEL_SHIFT 6
100 #define IQS269_MISC_B_RESEED_UI_SEL_MAX 3
101 #define IQS269_MISC_B_TRACKING_UI_ENABLE BIT(4)
102 #define IQS269_MISC_B_FILT_STR_SLIDER GENMASK(1, 0)
103
104 #define IQS269_TOUCH_HOLD_SLIDER_SEL 0x89
105 #define IQS269_TOUCH_HOLD_DEFAULT 0x14
106 #define IQS269_TOUCH_HOLD_MS_MIN 256
107 #define IQS269_TOUCH_HOLD_MS_MAX 65280
108
109 #define IQS269_TIMEOUT_TAP_MS_MAX 4080
110 #define IQS269_TIMEOUT_SWIPE_MS_MAX 4080
111 #define IQS269_THRESH_SWIPE_MAX 255
112
113 #define IQS269_CHx_ENG_A_MEAS_CAP_SIZE BIT(15)
114 #define IQS269_CHx_ENG_A_RX_GND_INACTIVE BIT(13)
115 #define IQS269_CHx_ENG_A_LOCAL_CAP_SIZE BIT(12)
116 #define IQS269_CHx_ENG_A_ATI_MODE_MASK GENMASK(9, 8)
117 #define IQS269_CHx_ENG_A_ATI_MODE_SHIFT 8
118 #define IQS269_CHx_ENG_A_ATI_MODE_MAX 3
119 #define IQS269_CHx_ENG_A_INV_LOGIC BIT(7)
120 #define IQS269_CHx_ENG_A_PROJ_BIAS_MASK GENMASK(6, 5)
121 #define IQS269_CHx_ENG_A_PROJ_BIAS_SHIFT 5
122 #define IQS269_CHx_ENG_A_PROJ_BIAS_MAX 3
123 #define IQS269_CHx_ENG_A_SENSE_MODE_MASK GENMASK(3, 0)
124 #define IQS269_CHx_ENG_A_SENSE_MODE_MAX 15
125
126 #define IQS269_CHx_ENG_B_LOCAL_CAP_ENABLE BIT(13)
127 #define IQS269_CHx_ENG_B_SENSE_FREQ_MASK GENMASK(10, 9)
128 #define IQS269_CHx_ENG_B_SENSE_FREQ_SHIFT 9
129 #define IQS269_CHx_ENG_B_SENSE_FREQ_MAX 3
130 #define IQS269_CHx_ENG_B_STATIC_ENABLE BIT(8)
131 #define IQS269_CHx_ENG_B_ATI_BASE_MASK GENMASK(7, 6)
132 #define IQS269_CHx_ENG_B_ATI_BASE_75 0x00
133 #define IQS269_CHx_ENG_B_ATI_BASE_100 0x40
134 #define IQS269_CHx_ENG_B_ATI_BASE_150 0x80
135 #define IQS269_CHx_ENG_B_ATI_BASE_200 0xC0
136 #define IQS269_CHx_ENG_B_ATI_TARGET_MASK GENMASK(5, 0)
137 #define IQS269_CHx_ENG_B_ATI_TARGET_MAX 2016
138
139 #define IQS269_CHx_WEIGHT_MAX 255
140 #define IQS269_CHx_THRESH_MAX 255
141 #define IQS269_CHx_HYST_DEEP_MASK GENMASK(7, 4)
142 #define IQS269_CHx_HYST_DEEP_SHIFT 4
143 #define IQS269_CHx_HYST_TOUCH_MASK GENMASK(3, 0)
144 #define IQS269_CHx_HYST_MAX 15
145
146 #define IQS269_CHx_HALL_INACTIVE 6
147 #define IQS269_CHx_HALL_ACTIVE 7
148
149 #define IQS269_HALL_PAD_R BIT(0)
150 #define IQS269_HALL_PAD_L BIT(1)
151 #define IQS269_HALL_PAD_INV BIT(6)
152
153 #define IQS269_HALL_UI 0xF5
154 #define IQS269_HALL_UI_ENABLE BIT(15)
155
156 #define IQS269_MAX_REG 0xFF
157
158 #define IQS269_OTP_OPTION_DEFAULT 0x00
159 #define IQS269_OTP_OPTION_TWS 0xD0
160 #define IQS269_OTP_OPTION_HOLD BIT(7)
161
162 #define IQS269_NUM_CH 8
163 #define IQS269_NUM_SL 2
164
165 #define iqs269_irq_wait() usleep_range(200, 250)
166
167 enum iqs269_local_cap_size {
168 IQS269_LOCAL_CAP_SIZE_0,
169 IQS269_LOCAL_CAP_SIZE_GLOBAL_ONLY,
170 IQS269_LOCAL_CAP_SIZE_GLOBAL_0pF5,
171 };
172
173 enum iqs269_st_offs {
174 IQS269_ST_OFFS_PROX,
175 IQS269_ST_OFFS_DIR,
176 IQS269_ST_OFFS_TOUCH,
177 IQS269_ST_OFFS_DEEP,
178 };
179
180 enum iqs269_th_offs {
181 IQS269_TH_OFFS_PROX,
182 IQS269_TH_OFFS_TOUCH,
183 IQS269_TH_OFFS_DEEP,
184 };
185
186 enum iqs269_event_id {
187 IQS269_EVENT_PROX_DN,
188 IQS269_EVENT_PROX_UP,
189 IQS269_EVENT_TOUCH_DN,
190 IQS269_EVENT_TOUCH_UP,
191 IQS269_EVENT_DEEP_DN,
192 IQS269_EVENT_DEEP_UP,
193 };
194
195 enum iqs269_slider_id {
196 IQS269_SLIDER_NONE,
197 IQS269_SLIDER_KEY,
198 IQS269_SLIDER_RAW,
199 };
200
201 enum iqs269_gesture_id {
202 IQS269_GESTURE_TAP,
203 IQS269_GESTURE_HOLD,
204 IQS269_GESTURE_FLICK_POS,
205 IQS269_GESTURE_FLICK_NEG,
206 IQS269_NUM_GESTURES,
207 };
208
209 struct iqs269_switch_desc {
210 unsigned int code;
211 bool enabled;
212 };
213
214 struct iqs269_event_desc {
215 const char *name;
216 enum iqs269_st_offs st_offs;
217 enum iqs269_th_offs th_offs;
218 bool dir_up;
219 u8 mask;
220 };
221
222 static const struct iqs269_event_desc iqs269_events[] = {
223 [IQS269_EVENT_PROX_DN] = {
224 .name = "event-prox",
225 .st_offs = IQS269_ST_OFFS_PROX,
226 .th_offs = IQS269_TH_OFFS_PROX,
227 .mask = IQS269_EVENT_MASK_PROX,
228 },
229 [IQS269_EVENT_PROX_UP] = {
230 .name = "event-prox-alt",
231 .st_offs = IQS269_ST_OFFS_PROX,
232 .th_offs = IQS269_TH_OFFS_PROX,
233 .dir_up = true,
234 .mask = IQS269_EVENT_MASK_PROX,
235 },
236 [IQS269_EVENT_TOUCH_DN] = {
237 .name = "event-touch",
238 .st_offs = IQS269_ST_OFFS_TOUCH,
239 .th_offs = IQS269_TH_OFFS_TOUCH,
240 .mask = IQS269_EVENT_MASK_TOUCH,
241 },
242 [IQS269_EVENT_TOUCH_UP] = {
243 .name = "event-touch-alt",
244 .st_offs = IQS269_ST_OFFS_TOUCH,
245 .th_offs = IQS269_TH_OFFS_TOUCH,
246 .dir_up = true,
247 .mask = IQS269_EVENT_MASK_TOUCH,
248 },
249 [IQS269_EVENT_DEEP_DN] = {
250 .name = "event-deep",
251 .st_offs = IQS269_ST_OFFS_DEEP,
252 .th_offs = IQS269_TH_OFFS_DEEP,
253 .mask = IQS269_EVENT_MASK_DEEP,
254 },
255 [IQS269_EVENT_DEEP_UP] = {
256 .name = "event-deep-alt",
257 .st_offs = IQS269_ST_OFFS_DEEP,
258 .th_offs = IQS269_TH_OFFS_DEEP,
259 .dir_up = true,
260 .mask = IQS269_EVENT_MASK_DEEP,
261 },
262 };
263
264 struct iqs269_ver_info {
265 u8 prod_num;
266 u8 sw_num;
267 u8 hw_num;
268 u8 fw_num;
269 } __packed;
270
271 struct iqs269_ch_reg {
272 u8 rx_enable;
273 u8 tx_enable;
274 __be16 engine_a;
275 __be16 engine_b;
276 __be16 ati_comp;
277 u8 thresh[3];
278 u8 hyst;
279 u8 assoc_select;
280 u8 assoc_weight;
281 } __packed;
282
283 struct iqs269_sys_reg {
284 __be16 general;
285 u8 active;
286 u8 filter;
287 u8 reseed;
288 u8 event_mask;
289 u8 rate_np;
290 u8 rate_lp;
291 u8 rate_ulp;
292 u8 timeout_pwr;
293 u8 timeout_rdy;
294 u8 timeout_lta;
295 __be16 misc_a;
296 __be16 misc_b;
297 u8 blocking;
298 u8 padding;
299 u8 slider_select[IQS269_NUM_SL];
300 u8 timeout_tap;
301 u8 timeout_swipe;
302 u8 thresh_swipe;
303 u8 redo_ati;
304 struct iqs269_ch_reg ch_reg[IQS269_NUM_CH];
305 } __packed;
306
307 struct iqs269_flags {
308 __be16 system;
309 u8 gesture;
310 u8 padding;
311 u8 states[4];
312 } __packed;
313
314 struct iqs269_private {
315 struct i2c_client *client;
316 struct regmap *regmap;
317 struct mutex lock;
318 struct iqs269_switch_desc switches[ARRAY_SIZE(iqs269_events)];
319 struct iqs269_ver_info ver_info;
320 struct iqs269_sys_reg sys_reg;
321 struct completion ati_done;
322 struct input_dev *keypad;
323 struct input_dev *slider[IQS269_NUM_SL];
324 unsigned int keycode[ARRAY_SIZE(iqs269_events) * IQS269_NUM_CH];
325 unsigned int sl_code[IQS269_NUM_SL][IQS269_NUM_GESTURES];
326 unsigned int otp_option;
327 unsigned int ch_num;
328 bool hall_enable;
329 bool ati_current;
330 };
331
iqs269_slider_type(struct iqs269_private * iqs269,int slider_num)332 static enum iqs269_slider_id iqs269_slider_type(struct iqs269_private *iqs269,
333 int slider_num)
334 {
335 int i;
336
337 /*
338 * Slider 1 is unavailable if the touch-and-hold option is enabled via
339 * OTP. In that case, the channel selection register is repurposed for
340 * the touch-and-hold timer ceiling.
341 */
342 if (slider_num && (iqs269->otp_option & IQS269_OTP_OPTION_HOLD))
343 return IQS269_SLIDER_NONE;
344
345 if (!iqs269->sys_reg.slider_select[slider_num])
346 return IQS269_SLIDER_NONE;
347
348 for (i = 0; i < IQS269_NUM_GESTURES; i++)
349 if (iqs269->sl_code[slider_num][i] != KEY_RESERVED)
350 return IQS269_SLIDER_KEY;
351
352 return IQS269_SLIDER_RAW;
353 }
354
iqs269_ati_mode_set(struct iqs269_private * iqs269,unsigned int ch_num,unsigned int mode)355 static int iqs269_ati_mode_set(struct iqs269_private *iqs269,
356 unsigned int ch_num, unsigned int mode)
357 {
358 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
359 u16 engine_a;
360
361 if (ch_num >= IQS269_NUM_CH)
362 return -EINVAL;
363
364 if (mode > IQS269_CHx_ENG_A_ATI_MODE_MAX)
365 return -EINVAL;
366
367 guard(mutex)(&iqs269->lock);
368
369 engine_a = be16_to_cpu(ch_reg[ch_num].engine_a);
370
371 engine_a &= ~IQS269_CHx_ENG_A_ATI_MODE_MASK;
372 engine_a |= (mode << IQS269_CHx_ENG_A_ATI_MODE_SHIFT);
373
374 ch_reg[ch_num].engine_a = cpu_to_be16(engine_a);
375 iqs269->ati_current = false;
376
377 return 0;
378 }
379
iqs269_ati_mode_get(struct iqs269_private * iqs269,unsigned int ch_num,unsigned int * mode)380 static int iqs269_ati_mode_get(struct iqs269_private *iqs269,
381 unsigned int ch_num, unsigned int *mode)
382 {
383 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
384 u16 engine_a;
385
386 if (ch_num >= IQS269_NUM_CH)
387 return -EINVAL;
388
389 guard(mutex)(&iqs269->lock);
390
391 engine_a = be16_to_cpu(ch_reg[ch_num].engine_a);
392
393 engine_a &= IQS269_CHx_ENG_A_ATI_MODE_MASK;
394 *mode = (engine_a >> IQS269_CHx_ENG_A_ATI_MODE_SHIFT);
395
396 return 0;
397 }
398
iqs269_ati_base_set(struct iqs269_private * iqs269,unsigned int ch_num,unsigned int base)399 static int iqs269_ati_base_set(struct iqs269_private *iqs269,
400 unsigned int ch_num, unsigned int base)
401 {
402 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
403 u16 engine_b;
404
405 if (ch_num >= IQS269_NUM_CH)
406 return -EINVAL;
407
408 switch (base) {
409 case 75:
410 base = IQS269_CHx_ENG_B_ATI_BASE_75;
411 break;
412
413 case 100:
414 base = IQS269_CHx_ENG_B_ATI_BASE_100;
415 break;
416
417 case 150:
418 base = IQS269_CHx_ENG_B_ATI_BASE_150;
419 break;
420
421 case 200:
422 base = IQS269_CHx_ENG_B_ATI_BASE_200;
423 break;
424
425 default:
426 return -EINVAL;
427 }
428
429 guard(mutex)(&iqs269->lock);
430
431 engine_b = be16_to_cpu(ch_reg[ch_num].engine_b);
432
433 engine_b &= ~IQS269_CHx_ENG_B_ATI_BASE_MASK;
434 engine_b |= base;
435
436 ch_reg[ch_num].engine_b = cpu_to_be16(engine_b);
437 iqs269->ati_current = false;
438
439 return 0;
440 }
441
iqs269_ati_base_get(struct iqs269_private * iqs269,unsigned int ch_num,unsigned int * base)442 static int iqs269_ati_base_get(struct iqs269_private *iqs269,
443 unsigned int ch_num, unsigned int *base)
444 {
445 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
446 u16 engine_b;
447
448 if (ch_num >= IQS269_NUM_CH)
449 return -EINVAL;
450
451 guard(mutex)(&iqs269->lock);
452
453 engine_b = be16_to_cpu(ch_reg[ch_num].engine_b);
454
455 switch (engine_b & IQS269_CHx_ENG_B_ATI_BASE_MASK) {
456 case IQS269_CHx_ENG_B_ATI_BASE_75:
457 *base = 75;
458 return 0;
459
460 case IQS269_CHx_ENG_B_ATI_BASE_100:
461 *base = 100;
462 return 0;
463
464 case IQS269_CHx_ENG_B_ATI_BASE_150:
465 *base = 150;
466 return 0;
467
468 case IQS269_CHx_ENG_B_ATI_BASE_200:
469 *base = 200;
470 return 0;
471
472 default:
473 return -EINVAL;
474 }
475 }
476
iqs269_ati_target_set(struct iqs269_private * iqs269,unsigned int ch_num,unsigned int target)477 static int iqs269_ati_target_set(struct iqs269_private *iqs269,
478 unsigned int ch_num, unsigned int target)
479 {
480 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
481 u16 engine_b;
482
483 if (ch_num >= IQS269_NUM_CH)
484 return -EINVAL;
485
486 if (target > IQS269_CHx_ENG_B_ATI_TARGET_MAX)
487 return -EINVAL;
488
489 guard(mutex)(&iqs269->lock);
490
491 engine_b = be16_to_cpu(ch_reg[ch_num].engine_b);
492
493 engine_b &= ~IQS269_CHx_ENG_B_ATI_TARGET_MASK;
494 engine_b |= target / 32;
495
496 ch_reg[ch_num].engine_b = cpu_to_be16(engine_b);
497 iqs269->ati_current = false;
498
499 return 0;
500 }
501
iqs269_ati_target_get(struct iqs269_private * iqs269,unsigned int ch_num,unsigned int * target)502 static int iqs269_ati_target_get(struct iqs269_private *iqs269,
503 unsigned int ch_num, unsigned int *target)
504 {
505 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
506 u16 engine_b;
507
508 if (ch_num >= IQS269_NUM_CH)
509 return -EINVAL;
510
511 guard(mutex)(&iqs269->lock);
512
513 engine_b = be16_to_cpu(ch_reg[ch_num].engine_b);
514 *target = (engine_b & IQS269_CHx_ENG_B_ATI_TARGET_MASK) * 32;
515
516 return 0;
517 }
518
iqs269_parse_mask(const struct fwnode_handle * fwnode,const char * propname,u8 * mask)519 static int iqs269_parse_mask(const struct fwnode_handle *fwnode,
520 const char *propname, u8 *mask)
521 {
522 unsigned int val[IQS269_NUM_CH];
523 int count, error, i;
524
525 count = fwnode_property_count_u32(fwnode, propname);
526 if (count < 0)
527 return 0;
528
529 if (count > IQS269_NUM_CH)
530 return -EINVAL;
531
532 error = fwnode_property_read_u32_array(fwnode, propname, val, count);
533 if (error)
534 return error;
535
536 *mask = 0;
537
538 for (i = 0; i < count; i++) {
539 if (val[i] >= IQS269_NUM_CH)
540 return -EINVAL;
541
542 *mask |= BIT(val[i]);
543 }
544
545 return 0;
546 }
547
iqs269_parse_chan(struct iqs269_private * iqs269,const struct fwnode_handle * ch_node)548 static int iqs269_parse_chan(struct iqs269_private *iqs269,
549 const struct fwnode_handle *ch_node)
550 {
551 struct i2c_client *client = iqs269->client;
552 struct iqs269_ch_reg *ch_reg;
553 u16 engine_a, engine_b;
554 unsigned int reg, val;
555 int error, i;
556
557 error = fwnode_property_read_u32(ch_node, "reg", ®);
558 if (error) {
559 dev_err(&client->dev, "Failed to read channel number: %d\n",
560 error);
561 return error;
562 } else if (reg >= IQS269_NUM_CH) {
563 dev_err(&client->dev, "Invalid channel number: %u\n", reg);
564 return -EINVAL;
565 }
566
567 iqs269->sys_reg.active |= BIT(reg);
568 if (!fwnode_property_present(ch_node, "azoteq,reseed-disable"))
569 iqs269->sys_reg.reseed |= BIT(reg);
570
571 if (fwnode_property_present(ch_node, "azoteq,blocking-enable"))
572 iqs269->sys_reg.blocking |= BIT(reg);
573
574 if (fwnode_property_present(ch_node, "azoteq,slider0-select"))
575 iqs269->sys_reg.slider_select[0] |= BIT(reg);
576
577 if (fwnode_property_present(ch_node, "azoteq,slider1-select") &&
578 !(iqs269->otp_option & IQS269_OTP_OPTION_HOLD))
579 iqs269->sys_reg.slider_select[1] |= BIT(reg);
580
581 ch_reg = &iqs269->sys_reg.ch_reg[reg];
582
583 error = iqs269_parse_mask(ch_node, "azoteq,rx-enable",
584 &ch_reg->rx_enable);
585 if (error) {
586 dev_err(&client->dev, "Invalid channel %u RX enable mask: %d\n",
587 reg, error);
588 return error;
589 }
590
591 error = iqs269_parse_mask(ch_node, "azoteq,tx-enable",
592 &ch_reg->tx_enable);
593 if (error) {
594 dev_err(&client->dev, "Invalid channel %u TX enable mask: %d\n",
595 reg, error);
596 return error;
597 }
598
599 engine_a = be16_to_cpu(ch_reg->engine_a);
600 engine_b = be16_to_cpu(ch_reg->engine_b);
601
602 engine_a |= IQS269_CHx_ENG_A_MEAS_CAP_SIZE;
603 if (fwnode_property_present(ch_node, "azoteq,meas-cap-decrease"))
604 engine_a &= ~IQS269_CHx_ENG_A_MEAS_CAP_SIZE;
605
606 engine_a |= IQS269_CHx_ENG_A_RX_GND_INACTIVE;
607 if (fwnode_property_present(ch_node, "azoteq,rx-float-inactive"))
608 engine_a &= ~IQS269_CHx_ENG_A_RX_GND_INACTIVE;
609
610 engine_a &= ~IQS269_CHx_ENG_A_LOCAL_CAP_SIZE;
611 engine_b &= ~IQS269_CHx_ENG_B_LOCAL_CAP_ENABLE;
612 if (!fwnode_property_read_u32(ch_node, "azoteq,local-cap-size", &val)) {
613 switch (val) {
614 case IQS269_LOCAL_CAP_SIZE_0:
615 break;
616
617 case IQS269_LOCAL_CAP_SIZE_GLOBAL_0pF5:
618 engine_a |= IQS269_CHx_ENG_A_LOCAL_CAP_SIZE;
619 fallthrough;
620
621 case IQS269_LOCAL_CAP_SIZE_GLOBAL_ONLY:
622 engine_b |= IQS269_CHx_ENG_B_LOCAL_CAP_ENABLE;
623 break;
624
625 default:
626 dev_err(&client->dev,
627 "Invalid channel %u local cap. size: %u\n", reg,
628 val);
629 return -EINVAL;
630 }
631 }
632
633 engine_a &= ~IQS269_CHx_ENG_A_INV_LOGIC;
634 if (fwnode_property_present(ch_node, "azoteq,invert-enable"))
635 engine_a |= IQS269_CHx_ENG_A_INV_LOGIC;
636
637 if (!fwnode_property_read_u32(ch_node, "azoteq,proj-bias", &val)) {
638 if (val > IQS269_CHx_ENG_A_PROJ_BIAS_MAX) {
639 dev_err(&client->dev,
640 "Invalid channel %u bias current: %u\n", reg,
641 val);
642 return -EINVAL;
643 }
644
645 engine_a &= ~IQS269_CHx_ENG_A_PROJ_BIAS_MASK;
646 engine_a |= (val << IQS269_CHx_ENG_A_PROJ_BIAS_SHIFT);
647 }
648
649 if (!fwnode_property_read_u32(ch_node, "azoteq,sense-mode", &val)) {
650 if (val > IQS269_CHx_ENG_A_SENSE_MODE_MAX) {
651 dev_err(&client->dev,
652 "Invalid channel %u sensing mode: %u\n", reg,
653 val);
654 return -EINVAL;
655 }
656
657 engine_a &= ~IQS269_CHx_ENG_A_SENSE_MODE_MASK;
658 engine_a |= val;
659 }
660
661 if (!fwnode_property_read_u32(ch_node, "azoteq,sense-freq", &val)) {
662 if (val > IQS269_CHx_ENG_B_SENSE_FREQ_MAX) {
663 dev_err(&client->dev,
664 "Invalid channel %u sensing frequency: %u\n",
665 reg, val);
666 return -EINVAL;
667 }
668
669 engine_b &= ~IQS269_CHx_ENG_B_SENSE_FREQ_MASK;
670 engine_b |= (val << IQS269_CHx_ENG_B_SENSE_FREQ_SHIFT);
671 }
672
673 engine_b &= ~IQS269_CHx_ENG_B_STATIC_ENABLE;
674 if (fwnode_property_present(ch_node, "azoteq,static-enable"))
675 engine_b |= IQS269_CHx_ENG_B_STATIC_ENABLE;
676
677 ch_reg->engine_a = cpu_to_be16(engine_a);
678 ch_reg->engine_b = cpu_to_be16(engine_b);
679
680 if (!fwnode_property_read_u32(ch_node, "azoteq,ati-mode", &val)) {
681 error = iqs269_ati_mode_set(iqs269, reg, val);
682 if (error) {
683 dev_err(&client->dev,
684 "Invalid channel %u ATI mode: %u\n", reg, val);
685 return error;
686 }
687 }
688
689 if (!fwnode_property_read_u32(ch_node, "azoteq,ati-base", &val)) {
690 error = iqs269_ati_base_set(iqs269, reg, val);
691 if (error) {
692 dev_err(&client->dev,
693 "Invalid channel %u ATI base: %u\n", reg, val);
694 return error;
695 }
696 }
697
698 if (!fwnode_property_read_u32(ch_node, "azoteq,ati-target", &val)) {
699 error = iqs269_ati_target_set(iqs269, reg, val);
700 if (error) {
701 dev_err(&client->dev,
702 "Invalid channel %u ATI target: %u\n", reg,
703 val);
704 return error;
705 }
706 }
707
708 error = iqs269_parse_mask(ch_node, "azoteq,assoc-select",
709 &ch_reg->assoc_select);
710 if (error) {
711 dev_err(&client->dev, "Invalid channel %u association: %d\n",
712 reg, error);
713 return error;
714 }
715
716 if (!fwnode_property_read_u32(ch_node, "azoteq,assoc-weight", &val)) {
717 if (val > IQS269_CHx_WEIGHT_MAX) {
718 dev_err(&client->dev,
719 "Invalid channel %u associated weight: %u\n",
720 reg, val);
721 return -EINVAL;
722 }
723
724 ch_reg->assoc_weight = val;
725 }
726
727 for (i = 0; i < ARRAY_SIZE(iqs269_events); i++) {
728 struct fwnode_handle *ev_node __free(fwnode_handle) =
729 fwnode_get_named_child_node(ch_node,
730 iqs269_events[i].name);
731 if (!ev_node)
732 continue;
733
734 if (!fwnode_property_read_u32(ev_node, "azoteq,thresh", &val)) {
735 if (val > IQS269_CHx_THRESH_MAX) {
736 dev_err(&client->dev,
737 "Invalid channel %u threshold: %u\n",
738 reg, val);
739 return -EINVAL;
740 }
741
742 ch_reg->thresh[iqs269_events[i].th_offs] = val;
743 }
744
745 if (!fwnode_property_read_u32(ev_node, "azoteq,hyst", &val)) {
746 u8 *hyst = &ch_reg->hyst;
747
748 if (val > IQS269_CHx_HYST_MAX) {
749 dev_err(&client->dev,
750 "Invalid channel %u hysteresis: %u\n",
751 reg, val);
752 return -EINVAL;
753 }
754
755 if (i == IQS269_EVENT_DEEP_DN ||
756 i == IQS269_EVENT_DEEP_UP) {
757 *hyst &= ~IQS269_CHx_HYST_DEEP_MASK;
758 *hyst |= (val << IQS269_CHx_HYST_DEEP_SHIFT);
759 } else if (i == IQS269_EVENT_TOUCH_DN ||
760 i == IQS269_EVENT_TOUCH_UP) {
761 *hyst &= ~IQS269_CHx_HYST_TOUCH_MASK;
762 *hyst |= val;
763 }
764 }
765
766 error = fwnode_property_read_u32(ev_node, "linux,code", &val);
767 if (error == -EINVAL) {
768 continue;
769 } else if (error) {
770 dev_err(&client->dev,
771 "Failed to read channel %u code: %d\n", reg,
772 error);
773 return error;
774 }
775
776 switch (reg) {
777 case IQS269_CHx_HALL_ACTIVE:
778 if (iqs269->hall_enable) {
779 iqs269->switches[i].code = val;
780 iqs269->switches[i].enabled = true;
781 }
782 fallthrough;
783
784 case IQS269_CHx_HALL_INACTIVE:
785 if (iqs269->hall_enable)
786 break;
787 fallthrough;
788
789 default:
790 iqs269->keycode[i * IQS269_NUM_CH + reg] = val;
791 }
792
793 iqs269->sys_reg.event_mask &= ~iqs269_events[i].mask;
794 }
795
796 return 0;
797 }
798
iqs269_parse_prop(struct iqs269_private * iqs269)799 static int iqs269_parse_prop(struct iqs269_private *iqs269)
800 {
801 struct iqs269_sys_reg *sys_reg = &iqs269->sys_reg;
802 struct i2c_client *client = iqs269->client;
803 u16 general, misc_a, misc_b;
804 unsigned int val;
805 int error;
806
807 iqs269->hall_enable = device_property_present(&client->dev,
808 "azoteq,hall-enable");
809
810 error = regmap_raw_read(iqs269->regmap, IQS269_SYS_SETTINGS, sys_reg,
811 sizeof(*sys_reg));
812 if (error)
813 return error;
814
815 if (!device_property_read_u32(&client->dev, "azoteq,filt-str-lp-lta",
816 &val)) {
817 if (val > IQS269_FILT_STR_MAX) {
818 dev_err(&client->dev, "Invalid filter strength: %u\n",
819 val);
820 return -EINVAL;
821 }
822
823 sys_reg->filter &= ~IQS269_FILT_STR_LP_LTA_MASK;
824 sys_reg->filter |= (val << IQS269_FILT_STR_LP_LTA_SHIFT);
825 }
826
827 if (!device_property_read_u32(&client->dev, "azoteq,filt-str-lp-cnt",
828 &val)) {
829 if (val > IQS269_FILT_STR_MAX) {
830 dev_err(&client->dev, "Invalid filter strength: %u\n",
831 val);
832 return -EINVAL;
833 }
834
835 sys_reg->filter &= ~IQS269_FILT_STR_LP_CNT_MASK;
836 sys_reg->filter |= (val << IQS269_FILT_STR_LP_CNT_SHIFT);
837 }
838
839 if (!device_property_read_u32(&client->dev, "azoteq,filt-str-np-lta",
840 &val)) {
841 if (val > IQS269_FILT_STR_MAX) {
842 dev_err(&client->dev, "Invalid filter strength: %u\n",
843 val);
844 return -EINVAL;
845 }
846
847 sys_reg->filter &= ~IQS269_FILT_STR_NP_LTA_MASK;
848 sys_reg->filter |= (val << IQS269_FILT_STR_NP_LTA_SHIFT);
849 }
850
851 if (!device_property_read_u32(&client->dev, "azoteq,filt-str-np-cnt",
852 &val)) {
853 if (val > IQS269_FILT_STR_MAX) {
854 dev_err(&client->dev, "Invalid filter strength: %u\n",
855 val);
856 return -EINVAL;
857 }
858
859 sys_reg->filter &= ~IQS269_FILT_STR_NP_CNT_MASK;
860 sys_reg->filter |= val;
861 }
862
863 if (!device_property_read_u32(&client->dev, "azoteq,rate-np-ms",
864 &val)) {
865 if (val > IQS269_RATE_NP_MS_MAX) {
866 dev_err(&client->dev, "Invalid report rate: %u\n", val);
867 return -EINVAL;
868 }
869
870 sys_reg->rate_np = val;
871 }
872
873 if (!device_property_read_u32(&client->dev, "azoteq,rate-lp-ms",
874 &val)) {
875 if (val > IQS269_RATE_LP_MS_MAX) {
876 dev_err(&client->dev, "Invalid report rate: %u\n", val);
877 return -EINVAL;
878 }
879
880 sys_reg->rate_lp = val;
881 }
882
883 if (!device_property_read_u32(&client->dev, "azoteq,rate-ulp-ms",
884 &val)) {
885 if (val > IQS269_RATE_ULP_MS_MAX) {
886 dev_err(&client->dev, "Invalid report rate: %u\n", val);
887 return -EINVAL;
888 }
889
890 sys_reg->rate_ulp = val / 16;
891 }
892
893 if (!device_property_read_u32(&client->dev, "azoteq,timeout-pwr-ms",
894 &val)) {
895 if (val > IQS269_TIMEOUT_PWR_MS_MAX) {
896 dev_err(&client->dev, "Invalid timeout: %u\n", val);
897 return -EINVAL;
898 }
899
900 sys_reg->timeout_pwr = val / 512;
901 }
902
903 if (!device_property_read_u32(&client->dev, "azoteq,timeout-lta-ms",
904 &val)) {
905 if (val > IQS269_TIMEOUT_LTA_MS_MAX) {
906 dev_err(&client->dev, "Invalid timeout: %u\n", val);
907 return -EINVAL;
908 }
909
910 sys_reg->timeout_lta = val / 512;
911 }
912
913 misc_a = be16_to_cpu(sys_reg->misc_a);
914 misc_b = be16_to_cpu(sys_reg->misc_b);
915
916 misc_a &= ~IQS269_MISC_A_ATI_BAND_DISABLE;
917 if (device_property_present(&client->dev, "azoteq,ati-band-disable"))
918 misc_a |= IQS269_MISC_A_ATI_BAND_DISABLE;
919
920 misc_a &= ~IQS269_MISC_A_ATI_LP_ONLY;
921 if (device_property_present(&client->dev, "azoteq,ati-lp-only"))
922 misc_a |= IQS269_MISC_A_ATI_LP_ONLY;
923
924 misc_a &= ~IQS269_MISC_A_ATI_BAND_TIGHTEN;
925 if (device_property_present(&client->dev, "azoteq,ati-band-tighten"))
926 misc_a |= IQS269_MISC_A_ATI_BAND_TIGHTEN;
927
928 misc_a &= ~IQS269_MISC_A_FILT_DISABLE;
929 if (device_property_present(&client->dev, "azoteq,filt-disable"))
930 misc_a |= IQS269_MISC_A_FILT_DISABLE;
931
932 if (!device_property_read_u32(&client->dev, "azoteq,gpio3-select",
933 &val)) {
934 if (val >= IQS269_NUM_CH) {
935 dev_err(&client->dev, "Invalid GPIO3 selection: %u\n",
936 val);
937 return -EINVAL;
938 }
939
940 misc_a &= ~IQS269_MISC_A_GPIO3_SELECT_MASK;
941 misc_a |= (val << IQS269_MISC_A_GPIO3_SELECT_SHIFT);
942 }
943
944 misc_a &= ~IQS269_MISC_A_DUAL_DIR;
945 if (device_property_present(&client->dev, "azoteq,dual-direction"))
946 misc_a |= IQS269_MISC_A_DUAL_DIR;
947
948 if (!device_property_read_u32(&client->dev, "azoteq,tx-freq", &val)) {
949 if (val > IQS269_MISC_A_TX_FREQ_MAX) {
950 dev_err(&client->dev,
951 "Invalid excitation frequency: %u\n", val);
952 return -EINVAL;
953 }
954
955 misc_a &= ~IQS269_MISC_A_TX_FREQ_MASK;
956 misc_a |= (val << IQS269_MISC_A_TX_FREQ_SHIFT);
957 }
958
959 misc_a &= ~IQS269_MISC_A_GLOBAL_CAP_SIZE;
960 if (device_property_present(&client->dev, "azoteq,global-cap-increase"))
961 misc_a |= IQS269_MISC_A_GLOBAL_CAP_SIZE;
962
963 if (!device_property_read_u32(&client->dev, "azoteq,reseed-select",
964 &val)) {
965 if (val > IQS269_MISC_B_RESEED_UI_SEL_MAX) {
966 dev_err(&client->dev, "Invalid reseed selection: %u\n",
967 val);
968 return -EINVAL;
969 }
970
971 misc_b &= ~IQS269_MISC_B_RESEED_UI_SEL_MASK;
972 misc_b |= (val << IQS269_MISC_B_RESEED_UI_SEL_SHIFT);
973 }
974
975 misc_b &= ~IQS269_MISC_B_TRACKING_UI_ENABLE;
976 if (device_property_present(&client->dev, "azoteq,tracking-enable"))
977 misc_b |= IQS269_MISC_B_TRACKING_UI_ENABLE;
978
979 if (!device_property_read_u32(&client->dev, "azoteq,filt-str-slider",
980 &val)) {
981 if (val > IQS269_FILT_STR_MAX) {
982 dev_err(&client->dev, "Invalid filter strength: %u\n",
983 val);
984 return -EINVAL;
985 }
986
987 misc_b &= ~IQS269_MISC_B_FILT_STR_SLIDER;
988 misc_b |= val;
989 }
990
991 sys_reg->misc_a = cpu_to_be16(misc_a);
992 sys_reg->misc_b = cpu_to_be16(misc_b);
993
994 sys_reg->active = 0;
995 sys_reg->reseed = 0;
996
997 sys_reg->blocking = 0;
998
999 sys_reg->slider_select[0] = 0;
1000
1001 /*
1002 * If configured via OTP to do so, the device asserts a pulse on the
1003 * GPIO4 pin for approximately 60 ms once a selected channel is held
1004 * in a state of touch for a configurable length of time.
1005 *
1006 * In that case, the register used for slider 1 channel selection is
1007 * repurposed for the touch-and-hold timer ceiling.
1008 */
1009 if (iqs269->otp_option & IQS269_OTP_OPTION_HOLD) {
1010 if (!device_property_read_u32(&client->dev,
1011 "azoteq,touch-hold-ms", &val)) {
1012 if (val < IQS269_TOUCH_HOLD_MS_MIN ||
1013 val > IQS269_TOUCH_HOLD_MS_MAX) {
1014 dev_err(&client->dev,
1015 "Invalid touch-and-hold ceiling: %u\n",
1016 val);
1017 return -EINVAL;
1018 }
1019
1020 sys_reg->slider_select[1] = val / 256;
1021 } else if (iqs269->ver_info.fw_num < IQS269_VER_INFO_FW_NUM_3) {
1022 /*
1023 * The default touch-and-hold timer ceiling initially
1024 * read from early revisions of silicon is invalid if
1025 * the device experienced a soft reset between power-
1026 * on and the read operation.
1027 *
1028 * To protect against this case, explicitly cache the
1029 * default value so that it is restored each time the
1030 * device is re-initialized.
1031 */
1032 sys_reg->slider_select[1] = IQS269_TOUCH_HOLD_DEFAULT;
1033 }
1034 } else {
1035 sys_reg->slider_select[1] = 0;
1036 }
1037
1038 sys_reg->event_mask = ~((u8)IQS269_EVENT_MASK_SYS);
1039
1040 device_for_each_child_node_scoped(&client->dev, ch_node) {
1041 error = iqs269_parse_chan(iqs269, ch_node);
1042 if (error)
1043 return error;
1044 }
1045
1046 /*
1047 * Volunteer all active channels to participate in ATI when REDO-ATI is
1048 * manually triggered.
1049 */
1050 sys_reg->redo_ati = sys_reg->active;
1051
1052 general = be16_to_cpu(sys_reg->general);
1053
1054 if (device_property_present(&client->dev, "azoteq,clk-div"))
1055 general |= IQS269_SYS_SETTINGS_CLK_DIV;
1056
1057 /*
1058 * Configure the device to automatically switch between normal and low-
1059 * power modes as a function of sensing activity. Ultra-low-power mode,
1060 * if enabled, is reserved for suspend.
1061 */
1062 general &= ~IQS269_SYS_SETTINGS_ULP_AUTO;
1063 general &= ~IQS269_SYS_SETTINGS_DIS_AUTO;
1064 general &= ~IQS269_SYS_SETTINGS_PWR_MODE_MASK;
1065
1066 if (!device_property_read_u32(&client->dev, "azoteq,suspend-mode",
1067 &val)) {
1068 if (val > IQS269_SYS_SETTINGS_PWR_MODE_MAX) {
1069 dev_err(&client->dev, "Invalid suspend mode: %u\n",
1070 val);
1071 return -EINVAL;
1072 }
1073
1074 general |= (val << IQS269_SYS_SETTINGS_PWR_MODE_SHIFT);
1075 }
1076
1077 if (!device_property_read_u32(&client->dev, "azoteq,ulp-update",
1078 &val)) {
1079 if (val > IQS269_SYS_SETTINGS_ULP_UPDATE_MAX) {
1080 dev_err(&client->dev, "Invalid update rate: %u\n", val);
1081 return -EINVAL;
1082 }
1083
1084 general &= ~IQS269_SYS_SETTINGS_ULP_UPDATE_MASK;
1085 general |= (val << IQS269_SYS_SETTINGS_ULP_UPDATE_SHIFT);
1086 }
1087
1088 if (device_property_present(&client->dev, "linux,keycodes")) {
1089 int scale = 1;
1090 int count = device_property_count_u32(&client->dev,
1091 "linux,keycodes");
1092 if (count > IQS269_NUM_GESTURES * IQS269_NUM_SL) {
1093 dev_err(&client->dev, "Too many keycodes present\n");
1094 return -EINVAL;
1095 } else if (count < 0) {
1096 dev_err(&client->dev, "Failed to count keycodes: %d\n",
1097 count);
1098 return count;
1099 }
1100
1101 error = device_property_read_u32_array(&client->dev,
1102 "linux,keycodes",
1103 *iqs269->sl_code, count);
1104 if (error) {
1105 dev_err(&client->dev, "Failed to read keycodes: %d\n",
1106 error);
1107 return error;
1108 }
1109
1110 if (device_property_present(&client->dev,
1111 "azoteq,gesture-swipe"))
1112 general |= IQS269_SYS_SETTINGS_SLIDER_SWIPE;
1113
1114 /*
1115 * Early revisions of silicon use a more granular step size for
1116 * tap and swipe gesture timeouts; scale them appropriately.
1117 */
1118 if (iqs269->ver_info.fw_num < IQS269_VER_INFO_FW_NUM_3)
1119 scale = 4;
1120
1121 if (!device_property_read_u32(&client->dev,
1122 "azoteq,timeout-tap-ms", &val)) {
1123 if (val > IQS269_TIMEOUT_TAP_MS_MAX / scale) {
1124 dev_err(&client->dev, "Invalid timeout: %u\n",
1125 val);
1126 return -EINVAL;
1127 }
1128
1129 sys_reg->timeout_tap = val / (16 / scale);
1130 }
1131
1132 if (!device_property_read_u32(&client->dev,
1133 "azoteq,timeout-swipe-ms",
1134 &val)) {
1135 if (val > IQS269_TIMEOUT_SWIPE_MS_MAX / scale) {
1136 dev_err(&client->dev, "Invalid timeout: %u\n",
1137 val);
1138 return -EINVAL;
1139 }
1140
1141 sys_reg->timeout_swipe = val / (16 / scale);
1142 }
1143
1144 if (!device_property_read_u32(&client->dev,
1145 "azoteq,thresh-swipe", &val)) {
1146 if (val > IQS269_THRESH_SWIPE_MAX) {
1147 dev_err(&client->dev, "Invalid threshold: %u\n",
1148 val);
1149 return -EINVAL;
1150 }
1151
1152 sys_reg->thresh_swipe = val;
1153 }
1154
1155 sys_reg->event_mask &= ~IQS269_EVENT_MASK_GESTURE;
1156 }
1157
1158 general &= ~IQS269_SYS_SETTINGS_RESEED_OFFSET;
1159 if (device_property_present(&client->dev, "azoteq,reseed-offset"))
1160 general |= IQS269_SYS_SETTINGS_RESEED_OFFSET;
1161
1162 general |= IQS269_SYS_SETTINGS_EVENT_MODE;
1163
1164 /*
1165 * As per the datasheet, enable streaming during normal-power mode if
1166 * raw coordinates will be read from either slider. In that case, the
1167 * device returns to event mode during low-power mode.
1168 */
1169 if (iqs269_slider_type(iqs269, 0) == IQS269_SLIDER_RAW ||
1170 iqs269_slider_type(iqs269, 1) == IQS269_SLIDER_RAW)
1171 general |= IQS269_SYS_SETTINGS_EVENT_MODE_LP;
1172
1173 general |= IQS269_SYS_SETTINGS_REDO_ATI;
1174 general |= IQS269_SYS_SETTINGS_ACK_RESET;
1175
1176 sys_reg->general = cpu_to_be16(general);
1177
1178 return 0;
1179 }
1180
1181 static const struct reg_sequence iqs269_tws_init[] = {
1182 { IQS269_TOUCH_HOLD_SLIDER_SEL, IQS269_TOUCH_HOLD_DEFAULT },
1183 { 0xF0, 0x580F },
1184 { 0xF0, 0x59EF },
1185 };
1186
iqs269_dev_init(struct iqs269_private * iqs269)1187 static int iqs269_dev_init(struct iqs269_private *iqs269)
1188 {
1189 int error;
1190
1191 guard(mutex)(&iqs269->lock);
1192
1193 /*
1194 * Early revisions of silicon require the following workaround in order
1195 * to restore any OTP-enabled functionality after a soft reset.
1196 */
1197 if (iqs269->otp_option == IQS269_OTP_OPTION_TWS &&
1198 iqs269->ver_info.fw_num < IQS269_VER_INFO_FW_NUM_3) {
1199 error = regmap_multi_reg_write(iqs269->regmap, iqs269_tws_init,
1200 ARRAY_SIZE(iqs269_tws_init));
1201 if (error)
1202 return error;
1203 }
1204
1205 error = regmap_update_bits(iqs269->regmap, IQS269_HALL_UI,
1206 IQS269_HALL_UI_ENABLE,
1207 iqs269->hall_enable ? ~0 : 0);
1208 if (error)
1209 return error;
1210
1211 error = regmap_raw_write(iqs269->regmap, IQS269_SYS_SETTINGS,
1212 &iqs269->sys_reg, sizeof(iqs269->sys_reg));
1213 if (error)
1214 return error;
1215
1216 /*
1217 * The following delay gives the device time to deassert its RDY output
1218 * so as to prevent an interrupt from being serviced prematurely.
1219 */
1220 usleep_range(2000, 2100);
1221
1222 iqs269->ati_current = true;
1223
1224 return 0;
1225 }
1226
iqs269_input_init(struct iqs269_private * iqs269)1227 static int iqs269_input_init(struct iqs269_private *iqs269)
1228 {
1229 struct i2c_client *client = iqs269->client;
1230 unsigned int sw_code, keycode;
1231 int error, i, j;
1232
1233 iqs269->keypad = devm_input_allocate_device(&client->dev);
1234 if (!iqs269->keypad)
1235 return -ENOMEM;
1236
1237 iqs269->keypad->keycodemax = ARRAY_SIZE(iqs269->keycode);
1238 iqs269->keypad->keycode = iqs269->keycode;
1239 iqs269->keypad->keycodesize = sizeof(*iqs269->keycode);
1240
1241 iqs269->keypad->name = "iqs269a_keypad";
1242 iqs269->keypad->id.bustype = BUS_I2C;
1243
1244 for (i = 0; i < ARRAY_SIZE(iqs269_events); i++) {
1245 sw_code = iqs269->switches[i].code;
1246
1247 for (j = 0; j < IQS269_NUM_CH; j++) {
1248 keycode = iqs269->keycode[i * IQS269_NUM_CH + j];
1249
1250 /*
1251 * Hall-effect sensing repurposes a pair of dedicated
1252 * channels, only one of which reports events.
1253 */
1254 switch (j) {
1255 case IQS269_CHx_HALL_ACTIVE:
1256 if (iqs269->hall_enable &&
1257 iqs269->switches[i].enabled)
1258 input_set_capability(iqs269->keypad,
1259 EV_SW, sw_code);
1260 fallthrough;
1261
1262 case IQS269_CHx_HALL_INACTIVE:
1263 if (iqs269->hall_enable)
1264 continue;
1265 fallthrough;
1266
1267 default:
1268 if (keycode != KEY_RESERVED)
1269 input_set_capability(iqs269->keypad,
1270 EV_KEY, keycode);
1271 }
1272 }
1273 }
1274
1275 for (i = 0; i < IQS269_NUM_SL; i++) {
1276 if (iqs269_slider_type(iqs269, i) == IQS269_SLIDER_NONE)
1277 continue;
1278
1279 iqs269->slider[i] = devm_input_allocate_device(&client->dev);
1280 if (!iqs269->slider[i])
1281 return -ENOMEM;
1282
1283 iqs269->slider[i]->keycodemax = ARRAY_SIZE(iqs269->sl_code[i]);
1284 iqs269->slider[i]->keycode = iqs269->sl_code[i];
1285 iqs269->slider[i]->keycodesize = sizeof(**iqs269->sl_code);
1286
1287 iqs269->slider[i]->name = i ? "iqs269a_slider_1"
1288 : "iqs269a_slider_0";
1289 iqs269->slider[i]->id.bustype = BUS_I2C;
1290
1291 for (j = 0; j < IQS269_NUM_GESTURES; j++)
1292 if (iqs269->sl_code[i][j] != KEY_RESERVED)
1293 input_set_capability(iqs269->slider[i], EV_KEY,
1294 iqs269->sl_code[i][j]);
1295
1296 /*
1297 * Present the slider as a narrow trackpad if one or more chan-
1298 * nels have been selected to participate, but no gestures have
1299 * been mapped to a keycode.
1300 */
1301 if (iqs269_slider_type(iqs269, i) == IQS269_SLIDER_RAW) {
1302 input_set_capability(iqs269->slider[i],
1303 EV_KEY, BTN_TOUCH);
1304 input_set_abs_params(iqs269->slider[i],
1305 ABS_X, 0, 255, 0, 0);
1306 }
1307
1308 error = input_register_device(iqs269->slider[i]);
1309 if (error) {
1310 dev_err(&client->dev,
1311 "Failed to register slider %d: %d\n", i, error);
1312 return error;
1313 }
1314 }
1315
1316 return 0;
1317 }
1318
iqs269_report(struct iqs269_private * iqs269)1319 static int iqs269_report(struct iqs269_private *iqs269)
1320 {
1321 struct i2c_client *client = iqs269->client;
1322 struct iqs269_flags flags;
1323 unsigned int sw_code, keycode;
1324 int error, i, j;
1325 u8 slider_x[IQS269_NUM_SL];
1326 u8 dir_mask, state;
1327
1328 error = regmap_raw_read(iqs269->regmap, IQS269_SYS_FLAGS, &flags,
1329 sizeof(flags));
1330 if (error) {
1331 dev_err(&client->dev, "Failed to read device status: %d\n",
1332 error);
1333 return error;
1334 }
1335
1336 /*
1337 * The device resets itself if its own watchdog bites, which can happen
1338 * in the event of an I2C communication error. In this case, the device
1339 * asserts a SHOW_RESET interrupt and all registers must be restored.
1340 */
1341 if (be16_to_cpu(flags.system) & IQS269_SYS_FLAGS_SHOW_RESET) {
1342 dev_err(&client->dev, "Unexpected device reset\n");
1343
1344 error = iqs269_dev_init(iqs269);
1345 if (error)
1346 dev_err(&client->dev,
1347 "Failed to re-initialize device: %d\n", error);
1348
1349 return error;
1350 }
1351
1352 if (be16_to_cpu(flags.system) & IQS269_SYS_FLAGS_IN_ATI)
1353 return 0;
1354
1355 if (iqs269_slider_type(iqs269, 0) == IQS269_SLIDER_RAW ||
1356 iqs269_slider_type(iqs269, 1) == IQS269_SLIDER_RAW) {
1357 error = regmap_raw_read(iqs269->regmap, IQS269_SLIDER_X,
1358 slider_x, sizeof(slider_x));
1359 if (error) {
1360 dev_err(&client->dev,
1361 "Failed to read slider position: %d\n", error);
1362 return error;
1363 }
1364 }
1365
1366 for (i = 0; i < IQS269_NUM_SL; i++) {
1367 flags.gesture >>= (i * IQS269_NUM_GESTURES);
1368
1369 switch (iqs269_slider_type(iqs269, i)) {
1370 case IQS269_SLIDER_NONE:
1371 continue;
1372
1373 case IQS269_SLIDER_KEY:
1374 for (j = 0; j < IQS269_NUM_GESTURES; j++)
1375 input_report_key(iqs269->slider[i],
1376 iqs269->sl_code[i][j],
1377 flags.gesture & BIT(j));
1378
1379 if (!(flags.gesture & (BIT(IQS269_GESTURE_FLICK_NEG) |
1380 BIT(IQS269_GESTURE_FLICK_POS) |
1381 BIT(IQS269_GESTURE_TAP))))
1382 break;
1383
1384 input_sync(iqs269->slider[i]);
1385
1386 /*
1387 * Momentary gestures are followed by a complementary
1388 * release cycle so as to emulate a full keystroke.
1389 */
1390 for (j = 0; j < IQS269_NUM_GESTURES; j++)
1391 if (j != IQS269_GESTURE_HOLD)
1392 input_report_key(iqs269->slider[i],
1393 iqs269->sl_code[i][j],
1394 0);
1395 break;
1396
1397 case IQS269_SLIDER_RAW:
1398 /*
1399 * The slider is considered to be in a state of touch
1400 * if any selected channels are in a state of touch.
1401 */
1402 state = flags.states[IQS269_ST_OFFS_TOUCH];
1403 state &= iqs269->sys_reg.slider_select[i];
1404
1405 input_report_key(iqs269->slider[i], BTN_TOUCH, state);
1406
1407 if (state)
1408 input_report_abs(iqs269->slider[i],
1409 ABS_X, slider_x[i]);
1410 break;
1411 }
1412
1413 input_sync(iqs269->slider[i]);
1414 }
1415
1416 for (i = 0; i < ARRAY_SIZE(iqs269_events); i++) {
1417 dir_mask = flags.states[IQS269_ST_OFFS_DIR];
1418 if (!iqs269_events[i].dir_up)
1419 dir_mask = ~dir_mask;
1420
1421 state = flags.states[iqs269_events[i].st_offs] & dir_mask;
1422
1423 sw_code = iqs269->switches[i].code;
1424
1425 for (j = 0; j < IQS269_NUM_CH; j++) {
1426 keycode = iqs269->keycode[i * IQS269_NUM_CH + j];
1427
1428 switch (j) {
1429 case IQS269_CHx_HALL_ACTIVE:
1430 if (iqs269->hall_enable &&
1431 iqs269->switches[i].enabled)
1432 input_report_switch(iqs269->keypad,
1433 sw_code,
1434 state & BIT(j));
1435 fallthrough;
1436
1437 case IQS269_CHx_HALL_INACTIVE:
1438 if (iqs269->hall_enable)
1439 continue;
1440 fallthrough;
1441
1442 default:
1443 input_report_key(iqs269->keypad, keycode,
1444 state & BIT(j));
1445 }
1446 }
1447 }
1448
1449 input_sync(iqs269->keypad);
1450
1451 /*
1452 * The following completion signals that ATI has finished, any initial
1453 * switch states have been reported and the keypad can be registered.
1454 */
1455 complete_all(&iqs269->ati_done);
1456
1457 return 0;
1458 }
1459
iqs269_irq(int irq,void * context)1460 static irqreturn_t iqs269_irq(int irq, void *context)
1461 {
1462 struct iqs269_private *iqs269 = context;
1463
1464 if (iqs269_report(iqs269))
1465 return IRQ_NONE;
1466
1467 /*
1468 * The device does not deassert its interrupt (RDY) pin until shortly
1469 * after receiving an I2C stop condition; the following delay ensures
1470 * the interrupt handler does not return before this time.
1471 */
1472 iqs269_irq_wait();
1473
1474 return IRQ_HANDLED;
1475 }
1476
counts_show(struct device * dev,struct device_attribute * attr,char * buf)1477 static ssize_t counts_show(struct device *dev,
1478 struct device_attribute *attr, char *buf)
1479 {
1480 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1481 struct i2c_client *client = iqs269->client;
1482 __le16 counts;
1483 int error;
1484
1485 if (!iqs269->ati_current || iqs269->hall_enable)
1486 return -EPERM;
1487
1488 if (!completion_done(&iqs269->ati_done))
1489 return -EBUSY;
1490
1491 /*
1492 * Unsolicited I2C communication prompts the device to assert its RDY
1493 * pin, so disable the interrupt line until the operation is finished
1494 * and RDY has been deasserted.
1495 */
1496 disable_irq(client->irq);
1497
1498 error = regmap_raw_read(iqs269->regmap,
1499 IQS269_CHx_COUNTS + iqs269->ch_num * 2,
1500 &counts, sizeof(counts));
1501
1502 iqs269_irq_wait();
1503 enable_irq(client->irq);
1504
1505 if (error)
1506 return error;
1507
1508 return sysfs_emit(buf, "%u\n", le16_to_cpu(counts));
1509 }
1510
hall_bin_show(struct device * dev,struct device_attribute * attr,char * buf)1511 static ssize_t hall_bin_show(struct device *dev,
1512 struct device_attribute *attr, char *buf)
1513 {
1514 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1515 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
1516 struct i2c_client *client = iqs269->client;
1517 unsigned int val;
1518 int error;
1519
1520 disable_irq(client->irq);
1521
1522 error = regmap_read(iqs269->regmap, IQS269_CAL_DATA_A, &val);
1523
1524 iqs269_irq_wait();
1525 enable_irq(client->irq);
1526
1527 if (error)
1528 return error;
1529
1530 switch (ch_reg[IQS269_CHx_HALL_ACTIVE].rx_enable &
1531 ch_reg[IQS269_CHx_HALL_INACTIVE].rx_enable) {
1532 case IQS269_HALL_PAD_R:
1533 val &= IQS269_CAL_DATA_A_HALL_BIN_R_MASK;
1534 val >>= IQS269_CAL_DATA_A_HALL_BIN_R_SHIFT;
1535 break;
1536
1537 case IQS269_HALL_PAD_L:
1538 val &= IQS269_CAL_DATA_A_HALL_BIN_L_MASK;
1539 val >>= IQS269_CAL_DATA_A_HALL_BIN_L_SHIFT;
1540 break;
1541
1542 default:
1543 return -EINVAL;
1544 }
1545
1546 return sysfs_emit(buf, "%u\n", val);
1547 }
1548
hall_enable_show(struct device * dev,struct device_attribute * attr,char * buf)1549 static ssize_t hall_enable_show(struct device *dev,
1550 struct device_attribute *attr, char *buf)
1551 {
1552 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1553
1554 return sysfs_emit(buf, "%u\n", iqs269->hall_enable);
1555 }
1556
hall_enable_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)1557 static ssize_t hall_enable_store(struct device *dev,
1558 struct device_attribute *attr, const char *buf,
1559 size_t count)
1560 {
1561 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1562 unsigned int val;
1563 int error;
1564
1565 error = kstrtouint(buf, 10, &val);
1566 if (error)
1567 return error;
1568
1569 guard(mutex)(&iqs269->lock);
1570
1571 iqs269->hall_enable = val;
1572 iqs269->ati_current = false;
1573
1574 return count;
1575 }
1576
ch_number_show(struct device * dev,struct device_attribute * attr,char * buf)1577 static ssize_t ch_number_show(struct device *dev,
1578 struct device_attribute *attr, char *buf)
1579 {
1580 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1581
1582 return sysfs_emit(buf, "%u\n", iqs269->ch_num);
1583 }
1584
ch_number_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)1585 static ssize_t ch_number_store(struct device *dev,
1586 struct device_attribute *attr, const char *buf,
1587 size_t count)
1588 {
1589 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1590 unsigned int val;
1591 int error;
1592
1593 error = kstrtouint(buf, 10, &val);
1594 if (error)
1595 return error;
1596
1597 if (val >= IQS269_NUM_CH)
1598 return -EINVAL;
1599
1600 iqs269->ch_num = val;
1601
1602 return count;
1603 }
1604
rx_enable_show(struct device * dev,struct device_attribute * attr,char * buf)1605 static ssize_t rx_enable_show(struct device *dev,
1606 struct device_attribute *attr, char *buf)
1607 {
1608 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1609 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
1610
1611 return sysfs_emit(buf, "%u\n", ch_reg[iqs269->ch_num].rx_enable);
1612 }
1613
rx_enable_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)1614 static ssize_t rx_enable_store(struct device *dev,
1615 struct device_attribute *attr, const char *buf,
1616 size_t count)
1617 {
1618 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1619 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
1620 unsigned int val;
1621 int error;
1622
1623 error = kstrtouint(buf, 10, &val);
1624 if (error)
1625 return error;
1626
1627 if (val > 0xFF)
1628 return -EINVAL;
1629
1630 guard(mutex)(&iqs269->lock);
1631
1632 ch_reg[iqs269->ch_num].rx_enable = val;
1633 iqs269->ati_current = false;
1634
1635 return count;
1636 }
1637
ati_mode_show(struct device * dev,struct device_attribute * attr,char * buf)1638 static ssize_t ati_mode_show(struct device *dev,
1639 struct device_attribute *attr, char *buf)
1640 {
1641 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1642 unsigned int val;
1643 int error;
1644
1645 error = iqs269_ati_mode_get(iqs269, iqs269->ch_num, &val);
1646 if (error)
1647 return error;
1648
1649 return sysfs_emit(buf, "%u\n", val);
1650 }
1651
ati_mode_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)1652 static ssize_t ati_mode_store(struct device *dev,
1653 struct device_attribute *attr, const char *buf,
1654 size_t count)
1655 {
1656 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1657 unsigned int val;
1658 int error;
1659
1660 error = kstrtouint(buf, 10, &val);
1661 if (error)
1662 return error;
1663
1664 error = iqs269_ati_mode_set(iqs269, iqs269->ch_num, val);
1665 if (error)
1666 return error;
1667
1668 return count;
1669 }
1670
ati_base_show(struct device * dev,struct device_attribute * attr,char * buf)1671 static ssize_t ati_base_show(struct device *dev,
1672 struct device_attribute *attr, char *buf)
1673 {
1674 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1675 unsigned int val;
1676 int error;
1677
1678 error = iqs269_ati_base_get(iqs269, iqs269->ch_num, &val);
1679 if (error)
1680 return error;
1681
1682 return sysfs_emit(buf, "%u\n", val);
1683 }
1684
ati_base_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)1685 static ssize_t ati_base_store(struct device *dev,
1686 struct device_attribute *attr, const char *buf,
1687 size_t count)
1688 {
1689 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1690 unsigned int val;
1691 int error;
1692
1693 error = kstrtouint(buf, 10, &val);
1694 if (error)
1695 return error;
1696
1697 error = iqs269_ati_base_set(iqs269, iqs269->ch_num, val);
1698 if (error)
1699 return error;
1700
1701 return count;
1702 }
1703
ati_target_show(struct device * dev,struct device_attribute * attr,char * buf)1704 static ssize_t ati_target_show(struct device *dev,
1705 struct device_attribute *attr, char *buf)
1706 {
1707 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1708 unsigned int val;
1709 int error;
1710
1711 error = iqs269_ati_target_get(iqs269, iqs269->ch_num, &val);
1712 if (error)
1713 return error;
1714
1715 return sysfs_emit(buf, "%u\n", val);
1716 }
1717
ati_target_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)1718 static ssize_t ati_target_store(struct device *dev,
1719 struct device_attribute *attr, const char *buf,
1720 size_t count)
1721 {
1722 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1723 unsigned int val;
1724 int error;
1725
1726 error = kstrtouint(buf, 10, &val);
1727 if (error)
1728 return error;
1729
1730 error = iqs269_ati_target_set(iqs269, iqs269->ch_num, val);
1731 if (error)
1732 return error;
1733
1734 return count;
1735 }
1736
ati_trigger_show(struct device * dev,struct device_attribute * attr,char * buf)1737 static ssize_t ati_trigger_show(struct device *dev,
1738 struct device_attribute *attr, char *buf)
1739 {
1740 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1741
1742 return sysfs_emit(buf, "%u\n",
1743 iqs269->ati_current &&
1744 completion_done(&iqs269->ati_done));
1745 }
1746
ati_trigger_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)1747 static ssize_t ati_trigger_store(struct device *dev,
1748 struct device_attribute *attr, const char *buf,
1749 size_t count)
1750 {
1751 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1752 struct i2c_client *client = iqs269->client;
1753 unsigned int val;
1754 int error;
1755
1756 error = kstrtouint(buf, 10, &val);
1757 if (error)
1758 return error;
1759
1760 if (!val)
1761 return count;
1762
1763 disable_irq(client->irq);
1764 reinit_completion(&iqs269->ati_done);
1765
1766 error = iqs269_dev_init(iqs269);
1767
1768 iqs269_irq_wait();
1769 enable_irq(client->irq);
1770
1771 if (error)
1772 return error;
1773
1774 if (!wait_for_completion_timeout(&iqs269->ati_done,
1775 msecs_to_jiffies(2000)))
1776 return -ETIMEDOUT;
1777
1778 return count;
1779 }
1780
1781 static DEVICE_ATTR_RO(counts);
1782 static DEVICE_ATTR_RO(hall_bin);
1783 static DEVICE_ATTR_RW(hall_enable);
1784 static DEVICE_ATTR_RW(ch_number);
1785 static DEVICE_ATTR_RW(rx_enable);
1786 static DEVICE_ATTR_RW(ati_mode);
1787 static DEVICE_ATTR_RW(ati_base);
1788 static DEVICE_ATTR_RW(ati_target);
1789 static DEVICE_ATTR_RW(ati_trigger);
1790
1791 static struct attribute *iqs269_attrs[] = {
1792 &dev_attr_counts.attr,
1793 &dev_attr_hall_bin.attr,
1794 &dev_attr_hall_enable.attr,
1795 &dev_attr_ch_number.attr,
1796 &dev_attr_rx_enable.attr,
1797 &dev_attr_ati_mode.attr,
1798 &dev_attr_ati_base.attr,
1799 &dev_attr_ati_target.attr,
1800 &dev_attr_ati_trigger.attr,
1801 NULL,
1802 };
1803 ATTRIBUTE_GROUPS(iqs269);
1804
1805 static const struct regmap_config iqs269_regmap_config = {
1806 .reg_bits = 8,
1807 .val_bits = 16,
1808 .max_register = IQS269_MAX_REG,
1809 };
1810
iqs269_probe(struct i2c_client * client)1811 static int iqs269_probe(struct i2c_client *client)
1812 {
1813 struct iqs269_private *iqs269;
1814 int error;
1815
1816 iqs269 = devm_kzalloc(&client->dev, sizeof(*iqs269), GFP_KERNEL);
1817 if (!iqs269)
1818 return -ENOMEM;
1819
1820 i2c_set_clientdata(client, iqs269);
1821 iqs269->client = client;
1822
1823 iqs269->regmap = devm_regmap_init_i2c(client, &iqs269_regmap_config);
1824 if (IS_ERR(iqs269->regmap)) {
1825 error = PTR_ERR(iqs269->regmap);
1826 dev_err(&client->dev, "Failed to initialize register map: %d\n",
1827 error);
1828 return error;
1829 }
1830
1831 mutex_init(&iqs269->lock);
1832 init_completion(&iqs269->ati_done);
1833
1834 iqs269->otp_option = (uintptr_t)device_get_match_data(&client->dev);
1835
1836 error = regmap_raw_read(iqs269->regmap, IQS269_VER_INFO,
1837 &iqs269->ver_info, sizeof(iqs269->ver_info));
1838 if (error)
1839 return error;
1840
1841 if (iqs269->ver_info.prod_num != IQS269_VER_INFO_PROD_NUM) {
1842 dev_err(&client->dev, "Unrecognized product number: 0x%02X\n",
1843 iqs269->ver_info.prod_num);
1844 return -EINVAL;
1845 }
1846
1847 error = iqs269_parse_prop(iqs269);
1848 if (error)
1849 return error;
1850
1851 error = iqs269_dev_init(iqs269);
1852 if (error) {
1853 dev_err(&client->dev, "Failed to initialize device: %d\n",
1854 error);
1855 return error;
1856 }
1857
1858 error = iqs269_input_init(iqs269);
1859 if (error)
1860 return error;
1861
1862 error = devm_request_threaded_irq(&client->dev, client->irq,
1863 NULL, iqs269_irq, IRQF_ONESHOT,
1864 client->name, iqs269);
1865 if (error) {
1866 dev_err(&client->dev, "Failed to request IRQ: %d\n", error);
1867 return error;
1868 }
1869
1870 if (!wait_for_completion_timeout(&iqs269->ati_done,
1871 msecs_to_jiffies(2000))) {
1872 dev_err(&client->dev, "Failed to complete ATI\n");
1873 return -ETIMEDOUT;
1874 }
1875
1876 /*
1877 * The keypad may include one or more switches and is not registered
1878 * until ATI is complete and the initial switch states are read.
1879 */
1880 error = input_register_device(iqs269->keypad);
1881 if (error) {
1882 dev_err(&client->dev, "Failed to register keypad: %d\n", error);
1883 return error;
1884 }
1885
1886 return error;
1887 }
1888
iqs269_general_get(struct iqs269_private * iqs269)1889 static u16 iqs269_general_get(struct iqs269_private *iqs269)
1890 {
1891 u16 general = be16_to_cpu(iqs269->sys_reg.general);
1892
1893 general &= ~IQS269_SYS_SETTINGS_REDO_ATI;
1894 general &= ~IQS269_SYS_SETTINGS_ACK_RESET;
1895
1896 return general | IQS269_SYS_SETTINGS_DIS_AUTO;
1897 }
1898
iqs269_suspend(struct device * dev)1899 static int iqs269_suspend(struct device *dev)
1900 {
1901 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1902 struct i2c_client *client = iqs269->client;
1903 int error;
1904 u16 general = iqs269_general_get(iqs269);
1905
1906 if (!(general & IQS269_SYS_SETTINGS_PWR_MODE_MASK))
1907 return 0;
1908
1909 disable_irq(client->irq);
1910
1911 error = regmap_write(iqs269->regmap, IQS269_SYS_SETTINGS, general);
1912
1913 iqs269_irq_wait();
1914 enable_irq(client->irq);
1915
1916 return error;
1917 }
1918
iqs269_resume(struct device * dev)1919 static int iqs269_resume(struct device *dev)
1920 {
1921 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1922 struct i2c_client *client = iqs269->client;
1923 int error;
1924 u16 general = iqs269_general_get(iqs269);
1925
1926 if (!(general & IQS269_SYS_SETTINGS_PWR_MODE_MASK))
1927 return 0;
1928
1929 disable_irq(client->irq);
1930
1931 error = regmap_write(iqs269->regmap, IQS269_SYS_SETTINGS,
1932 general & ~IQS269_SYS_SETTINGS_PWR_MODE_MASK);
1933 if (!error)
1934 error = regmap_write(iqs269->regmap, IQS269_SYS_SETTINGS,
1935 general & ~IQS269_SYS_SETTINGS_DIS_AUTO);
1936
1937 iqs269_irq_wait();
1938 enable_irq(client->irq);
1939
1940 return error;
1941 }
1942
1943 static DEFINE_SIMPLE_DEV_PM_OPS(iqs269_pm, iqs269_suspend, iqs269_resume);
1944
1945 static const struct of_device_id iqs269_of_match[] = {
1946 {
1947 .compatible = "azoteq,iqs269a",
1948 .data = (void *)IQS269_OTP_OPTION_DEFAULT,
1949 },
1950 {
1951 .compatible = "azoteq,iqs269a-00",
1952 .data = (void *)IQS269_OTP_OPTION_DEFAULT,
1953 },
1954 {
1955 .compatible = "azoteq,iqs269a-d0",
1956 .data = (void *)IQS269_OTP_OPTION_TWS,
1957 },
1958 { }
1959 };
1960 MODULE_DEVICE_TABLE(of, iqs269_of_match);
1961
1962 static struct i2c_driver iqs269_i2c_driver = {
1963 .driver = {
1964 .name = "iqs269a",
1965 .dev_groups = iqs269_groups,
1966 .of_match_table = iqs269_of_match,
1967 .pm = pm_sleep_ptr(&iqs269_pm),
1968 },
1969 .probe = iqs269_probe,
1970 };
1971 module_i2c_driver(iqs269_i2c_driver);
1972
1973 MODULE_AUTHOR("Jeff LaBundy <jeff@labundy.com>");
1974 MODULE_DESCRIPTION("Azoteq IQS269A Capacitive Touch Controller");
1975 MODULE_LICENSE("GPL");
1976