1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Azoteq IQS7222A/B/C Capacitive Touch Controller
8 #include <linux/bits.h>
9 #include <linux/delay.h>
10 #include <linux/device.h>
11 #include <linux/err.h>
12 #include <linux/gpio/consumer.h>
13 #include <linux/i2c.h>
14 #include <linux/input.h>
15 #include <linux/interrupt.h>
16 #include <linux/kernel.h>
17 #include <linux/ktime.h>
18 #include <linux/module.h>
19 #include <linux/of_device.h>
20 #include <linux/property.h>
21 #include <linux/slab.h>
22 #include <asm/unaligned.h>
24 #define IQS7222_PROD_NUM 0x00
25 #define IQS7222_PROD_NUM_A 840
26 #define IQS7222_PROD_NUM_B 698
27 #define IQS7222_PROD_NUM_C 863
29 #define IQS7222_SYS_STATUS 0x10
30 #define IQS7222_SYS_STATUS_RESET BIT(3)
31 #define IQS7222_SYS_STATUS_ATI_ERROR BIT(1)
32 #define IQS7222_SYS_STATUS_ATI_ACTIVE BIT(0)
34 #define IQS7222_CHAN_SETUP_0_REF_MODE_MASK GENMASK(15, 14)
35 #define IQS7222_CHAN_SETUP_0_REF_MODE_FOLLOW BIT(15)
36 #define IQS7222_CHAN_SETUP_0_REF_MODE_REF BIT(14)
37 #define IQS7222_CHAN_SETUP_0_CHAN_EN BIT(8)
39 #define IQS7222_SLDR_SETUP_0_CHAN_CNT_MASK GENMASK(2, 0)
40 #define IQS7222_SLDR_SETUP_2_RES_MASK GENMASK(15, 8)
41 #define IQS7222_SLDR_SETUP_2_RES_SHIFT 8
42 #define IQS7222_SLDR_SETUP_2_TOP_SPEED_MASK GENMASK(7, 0)
44 #define IQS7222_GPIO_SETUP_0_GPIO_EN BIT(0)
46 #define IQS7222_SYS_SETUP 0xD0
47 #define IQS7222_SYS_SETUP_INTF_MODE_MASK GENMASK(7, 6)
48 #define IQS7222_SYS_SETUP_INTF_MODE_TOUCH BIT(7)
49 #define IQS7222_SYS_SETUP_INTF_MODE_EVENT BIT(6)
50 #define IQS7222_SYS_SETUP_PWR_MODE_MASK GENMASK(5, 4)
51 #define IQS7222_SYS_SETUP_PWR_MODE_AUTO IQS7222_SYS_SETUP_PWR_MODE_MASK
52 #define IQS7222_SYS_SETUP_REDO_ATI BIT(2)
53 #define IQS7222_SYS_SETUP_ACK_RESET BIT(0)
55 #define IQS7222_EVENT_MASK_ATI BIT(12)
56 #define IQS7222_EVENT_MASK_SLDR BIT(10)
57 #define IQS7222_EVENT_MASK_TOUCH BIT(1)
58 #define IQS7222_EVENT_MASK_PROX BIT(0)
60 #define IQS7222_COMMS_HOLD BIT(0)
61 #define IQS7222_COMMS_ERROR 0xEEEE
62 #define IQS7222_COMMS_RETRY_MS 50
63 #define IQS7222_COMMS_TIMEOUT_MS 100
64 #define IQS7222_RESET_TIMEOUT_MS 250
65 #define IQS7222_ATI_TIMEOUT_MS 2000
67 #define IQS7222_MAX_COLS_STAT 8
68 #define IQS7222_MAX_COLS_CYCLE 3
69 #define IQS7222_MAX_COLS_GLBL 3
70 #define IQS7222_MAX_COLS_BTN 3
71 #define IQS7222_MAX_COLS_CHAN 6
72 #define IQS7222_MAX_COLS_FILT 2
73 #define IQS7222_MAX_COLS_SLDR 11
74 #define IQS7222_MAX_COLS_GPIO 3
75 #define IQS7222_MAX_COLS_SYS 13
77 #define IQS7222_MAX_CHAN 20
78 #define IQS7222_MAX_SLDR 2
80 #define IQS7222_NUM_RETRIES 5
81 #define IQS7222_REG_OFFSET 0x100
83 enum iqs7222_reg_key_id {
86 IQS7222_REG_KEY_TOUCH,
87 IQS7222_REG_KEY_DEBOUNCE,
89 IQS7222_REG_KEY_TAP_LEGACY,
90 IQS7222_REG_KEY_AXIAL,
91 IQS7222_REG_KEY_AXIAL_LEGACY,
92 IQS7222_REG_KEY_WHEEL,
93 IQS7222_REG_KEY_NO_WHEEL,
94 IQS7222_REG_KEY_RESERVED
97 enum iqs7222_reg_grp_id {
100 IQS7222_REG_GRP_CYCLE,
101 IQS7222_REG_GRP_GLBL,
103 IQS7222_REG_GRP_CHAN,
104 IQS7222_REG_GRP_SLDR,
105 IQS7222_REG_GRP_GPIO,
110 static const char * const iqs7222_reg_grp_names[IQS7222_NUM_REG_GRPS] = {
111 [IQS7222_REG_GRP_CYCLE] = "cycle",
112 [IQS7222_REG_GRP_CHAN] = "channel",
113 [IQS7222_REG_GRP_SLDR] = "slider",
114 [IQS7222_REG_GRP_GPIO] = "gpio",
117 static const unsigned int iqs7222_max_cols[IQS7222_NUM_REG_GRPS] = {
118 [IQS7222_REG_GRP_STAT] = IQS7222_MAX_COLS_STAT,
119 [IQS7222_REG_GRP_CYCLE] = IQS7222_MAX_COLS_CYCLE,
120 [IQS7222_REG_GRP_GLBL] = IQS7222_MAX_COLS_GLBL,
121 [IQS7222_REG_GRP_BTN] = IQS7222_MAX_COLS_BTN,
122 [IQS7222_REG_GRP_CHAN] = IQS7222_MAX_COLS_CHAN,
123 [IQS7222_REG_GRP_FILT] = IQS7222_MAX_COLS_FILT,
124 [IQS7222_REG_GRP_SLDR] = IQS7222_MAX_COLS_SLDR,
125 [IQS7222_REG_GRP_GPIO] = IQS7222_MAX_COLS_GPIO,
126 [IQS7222_REG_GRP_SYS] = IQS7222_MAX_COLS_SYS,
129 static const unsigned int iqs7222_gpio_links[] = { 2, 5, 6, };
131 struct iqs7222_event_desc {
136 enum iqs7222_reg_key_id reg_key;
139 static const struct iqs7222_event_desc iqs7222_kp_events[] = {
141 .name = "event-prox",
142 .enable = IQS7222_EVENT_MASK_PROX,
143 .reg_key = IQS7222_REG_KEY_PROX,
146 .name = "event-touch",
147 .enable = IQS7222_EVENT_MASK_TOUCH,
148 .reg_key = IQS7222_REG_KEY_TOUCH,
152 static const struct iqs7222_event_desc iqs7222_sl_events[] = {
153 { .name = "event-press", },
159 .reg_key = IQS7222_REG_KEY_TAP,
162 .name = "event-swipe-pos",
163 .mask = BIT(5) | BIT(1),
166 .reg_key = IQS7222_REG_KEY_AXIAL,
169 .name = "event-swipe-neg",
170 .mask = BIT(5) | BIT(1),
171 .val = BIT(5) | BIT(1),
173 .reg_key = IQS7222_REG_KEY_AXIAL,
176 .name = "event-flick-pos",
177 .mask = BIT(5) | BIT(2),
180 .reg_key = IQS7222_REG_KEY_AXIAL,
183 .name = "event-flick-neg",
184 .mask = BIT(5) | BIT(2),
185 .val = BIT(5) | BIT(2),
187 .reg_key = IQS7222_REG_KEY_AXIAL,
191 struct iqs7222_reg_grp_desc {
197 struct iqs7222_dev_desc {
208 struct iqs7222_reg_grp_desc reg_grps[IQS7222_NUM_REG_GRPS];
211 static const struct iqs7222_dev_desc iqs7222_devs[] = {
213 .prod_num = IQS7222_PROD_NUM_A,
216 .sldr_res = U8_MAX * 16,
222 [IQS7222_REG_GRP_STAT] = {
223 .base = IQS7222_SYS_STATUS,
227 [IQS7222_REG_GRP_CYCLE] = {
232 [IQS7222_REG_GRP_GLBL] = {
237 [IQS7222_REG_GRP_BTN] = {
242 [IQS7222_REG_GRP_CHAN] = {
247 [IQS7222_REG_GRP_FILT] = {
252 [IQS7222_REG_GRP_SLDR] = {
257 [IQS7222_REG_GRP_GPIO] = {
262 [IQS7222_REG_GRP_SYS] = {
263 .base = IQS7222_SYS_SETUP,
270 .prod_num = IQS7222_PROD_NUM_A,
273 .sldr_res = U8_MAX * 16,
278 .legacy_gesture = true,
280 [IQS7222_REG_GRP_STAT] = {
281 .base = IQS7222_SYS_STATUS,
285 [IQS7222_REG_GRP_CYCLE] = {
290 [IQS7222_REG_GRP_GLBL] = {
295 [IQS7222_REG_GRP_BTN] = {
300 [IQS7222_REG_GRP_CHAN] = {
305 [IQS7222_REG_GRP_FILT] = {
310 [IQS7222_REG_GRP_SLDR] = {
315 [IQS7222_REG_GRP_GPIO] = {
320 [IQS7222_REG_GRP_SYS] = {
321 .base = IQS7222_SYS_SETUP,
328 .prod_num = IQS7222_PROD_NUM_B,
334 [IQS7222_REG_GRP_STAT] = {
335 .base = IQS7222_SYS_STATUS,
339 [IQS7222_REG_GRP_CYCLE] = {
344 [IQS7222_REG_GRP_GLBL] = {
349 [IQS7222_REG_GRP_BTN] = {
354 [IQS7222_REG_GRP_CHAN] = {
359 [IQS7222_REG_GRP_FILT] = {
364 [IQS7222_REG_GRP_SYS] = {
365 .base = IQS7222_SYS_SETUP,
372 .prod_num = IQS7222_PROD_NUM_B,
376 [IQS7222_REG_GRP_STAT] = {
377 .base = IQS7222_SYS_STATUS,
381 [IQS7222_REG_GRP_CYCLE] = {
386 [IQS7222_REG_GRP_GLBL] = {
391 [IQS7222_REG_GRP_BTN] = {
396 [IQS7222_REG_GRP_CHAN] = {
401 [IQS7222_REG_GRP_FILT] = {
406 [IQS7222_REG_GRP_SYS] = {
407 .base = IQS7222_SYS_SETUP,
414 .prod_num = IQS7222_PROD_NUM_C,
419 .wheel_enable = BIT(3),
423 [IQS7222_REG_GRP_STAT] = {
424 .base = IQS7222_SYS_STATUS,
428 [IQS7222_REG_GRP_CYCLE] = {
433 [IQS7222_REG_GRP_GLBL] = {
438 [IQS7222_REG_GRP_BTN] = {
443 [IQS7222_REG_GRP_CHAN] = {
448 [IQS7222_REG_GRP_FILT] = {
453 [IQS7222_REG_GRP_SLDR] = {
458 [IQS7222_REG_GRP_GPIO] = {
463 [IQS7222_REG_GRP_SYS] = {
464 .base = IQS7222_SYS_SETUP,
471 .prod_num = IQS7222_PROD_NUM_C,
476 .wheel_enable = BIT(3),
480 [IQS7222_REG_GRP_STAT] = {
481 .base = IQS7222_SYS_STATUS,
485 [IQS7222_REG_GRP_CYCLE] = {
490 [IQS7222_REG_GRP_GLBL] = {
495 [IQS7222_REG_GRP_BTN] = {
500 [IQS7222_REG_GRP_CHAN] = {
505 [IQS7222_REG_GRP_FILT] = {
510 [IQS7222_REG_GRP_SLDR] = {
515 [IQS7222_REG_GRP_GPIO] = {
520 [IQS7222_REG_GRP_SYS] = {
521 .base = IQS7222_SYS_SETUP,
529 struct iqs7222_prop_desc {
531 enum iqs7222_reg_grp_id reg_grp;
532 enum iqs7222_reg_key_id reg_key;
543 static const struct iqs7222_prop_desc iqs7222_props[] = {
545 .name = "azoteq,conv-period",
546 .reg_grp = IQS7222_REG_GRP_CYCLE,
550 .label = "conversion period",
553 .name = "azoteq,conv-frac",
554 .reg_grp = IQS7222_REG_GRP_CYCLE,
558 .label = "conversion frequency fractional divider",
561 .name = "azoteq,rx-float-inactive",
562 .reg_grp = IQS7222_REG_GRP_CYCLE,
569 .name = "azoteq,dead-time-enable",
570 .reg_grp = IQS7222_REG_GRP_CYCLE,
576 .name = "azoteq,tx-freq-fosc",
577 .reg_grp = IQS7222_REG_GRP_CYCLE,
583 .name = "azoteq,vbias-enable",
584 .reg_grp = IQS7222_REG_GRP_CYCLE,
590 .name = "azoteq,sense-mode",
591 .reg_grp = IQS7222_REG_GRP_CYCLE,
596 .label = "sensing mode",
599 .name = "azoteq,iref-enable",
600 .reg_grp = IQS7222_REG_GRP_CYCLE,
606 .name = "azoteq,iref-level",
607 .reg_grp = IQS7222_REG_GRP_CYCLE,
611 .label = "current reference level",
614 .name = "azoteq,iref-trim",
615 .reg_grp = IQS7222_REG_GRP_CYCLE,
619 .label = "current reference trim",
622 .name = "azoteq,max-counts",
623 .reg_grp = IQS7222_REG_GRP_GLBL,
627 .label = "maximum counts",
630 .name = "azoteq,auto-mode",
631 .reg_grp = IQS7222_REG_GRP_GLBL,
635 .label = "number of conversions",
638 .name = "azoteq,ati-frac-div-fine",
639 .reg_grp = IQS7222_REG_GRP_GLBL,
643 .label = "ATI fine fractional divider",
646 .name = "azoteq,ati-frac-div-coarse",
647 .reg_grp = IQS7222_REG_GRP_GLBL,
651 .label = "ATI coarse fractional divider",
654 .name = "azoteq,ati-comp-select",
655 .reg_grp = IQS7222_REG_GRP_GLBL,
659 .label = "ATI compensation selection",
662 .name = "azoteq,ati-band",
663 .reg_grp = IQS7222_REG_GRP_CHAN,
670 .name = "azoteq,global-halt",
671 .reg_grp = IQS7222_REG_GRP_CHAN,
677 .name = "azoteq,invert-enable",
678 .reg_grp = IQS7222_REG_GRP_CHAN,
684 .name = "azoteq,dual-direction",
685 .reg_grp = IQS7222_REG_GRP_CHAN,
691 .name = "azoteq,samp-cap-double",
692 .reg_grp = IQS7222_REG_GRP_CHAN,
698 .name = "azoteq,vref-half",
699 .reg_grp = IQS7222_REG_GRP_CHAN,
705 .name = "azoteq,proj-bias",
706 .reg_grp = IQS7222_REG_GRP_CHAN,
710 .label = "projected bias current",
713 .name = "azoteq,ati-target",
714 .reg_grp = IQS7222_REG_GRP_CHAN,
719 .label = "ATI target",
722 .name = "azoteq,ati-base",
723 .reg_grp = IQS7222_REG_GRP_CHAN,
731 .name = "azoteq,ati-mode",
732 .reg_grp = IQS7222_REG_GRP_CHAN,
740 .name = "azoteq,ati-frac-div-fine",
741 .reg_grp = IQS7222_REG_GRP_CHAN,
745 .label = "ATI fine fractional divider",
748 .name = "azoteq,ati-frac-mult-coarse",
749 .reg_grp = IQS7222_REG_GRP_CHAN,
753 .label = "ATI coarse fractional multiplier",
756 .name = "azoteq,ati-frac-div-coarse",
757 .reg_grp = IQS7222_REG_GRP_CHAN,
761 .label = "ATI coarse fractional divider",
764 .name = "azoteq,ati-comp-div",
765 .reg_grp = IQS7222_REG_GRP_CHAN,
769 .label = "ATI compensation divider",
772 .name = "azoteq,ati-comp-select",
773 .reg_grp = IQS7222_REG_GRP_CHAN,
777 .label = "ATI compensation selection",
780 .name = "azoteq,debounce-exit",
781 .reg_grp = IQS7222_REG_GRP_BTN,
782 .reg_key = IQS7222_REG_KEY_DEBOUNCE,
786 .label = "debounce exit factor",
789 .name = "azoteq,debounce-enter",
790 .reg_grp = IQS7222_REG_GRP_BTN,
791 .reg_key = IQS7222_REG_KEY_DEBOUNCE,
795 .label = "debounce entrance factor",
798 .name = "azoteq,thresh",
799 .reg_grp = IQS7222_REG_GRP_BTN,
800 .reg_key = IQS7222_REG_KEY_PROX,
805 .label = "threshold",
808 .name = "azoteq,thresh",
809 .reg_grp = IQS7222_REG_GRP_BTN,
810 .reg_key = IQS7222_REG_KEY_TOUCH,
814 .label = "threshold",
817 .name = "azoteq,hyst",
818 .reg_grp = IQS7222_REG_GRP_BTN,
819 .reg_key = IQS7222_REG_KEY_TOUCH,
823 .label = "hysteresis",
826 .name = "azoteq,lta-beta-lp",
827 .reg_grp = IQS7222_REG_GRP_FILT,
831 .label = "low-power mode long-term average beta",
834 .name = "azoteq,lta-beta-np",
835 .reg_grp = IQS7222_REG_GRP_FILT,
839 .label = "normal-power mode long-term average beta",
842 .name = "azoteq,counts-beta-lp",
843 .reg_grp = IQS7222_REG_GRP_FILT,
847 .label = "low-power mode counts beta",
850 .name = "azoteq,counts-beta-np",
851 .reg_grp = IQS7222_REG_GRP_FILT,
855 .label = "normal-power mode counts beta",
858 .name = "azoteq,lta-fast-beta-lp",
859 .reg_grp = IQS7222_REG_GRP_FILT,
863 .label = "low-power mode long-term average fast beta",
866 .name = "azoteq,lta-fast-beta-np",
867 .reg_grp = IQS7222_REG_GRP_FILT,
871 .label = "normal-power mode long-term average fast beta",
874 .name = "azoteq,lower-cal",
875 .reg_grp = IQS7222_REG_GRP_SLDR,
879 .label = "lower calibration",
882 .name = "azoteq,static-beta",
883 .reg_grp = IQS7222_REG_GRP_SLDR,
884 .reg_key = IQS7222_REG_KEY_NO_WHEEL,
890 .name = "azoteq,bottom-beta",
891 .reg_grp = IQS7222_REG_GRP_SLDR,
892 .reg_key = IQS7222_REG_KEY_NO_WHEEL,
896 .label = "bottom beta",
899 .name = "azoteq,static-beta",
900 .reg_grp = IQS7222_REG_GRP_SLDR,
901 .reg_key = IQS7222_REG_KEY_WHEEL,
907 .name = "azoteq,bottom-beta",
908 .reg_grp = IQS7222_REG_GRP_SLDR,
909 .reg_key = IQS7222_REG_KEY_WHEEL,
913 .label = "bottom beta",
916 .name = "azoteq,bottom-speed",
917 .reg_grp = IQS7222_REG_GRP_SLDR,
921 .label = "bottom speed",
924 .name = "azoteq,upper-cal",
925 .reg_grp = IQS7222_REG_GRP_SLDR,
929 .label = "upper calibration",
932 .name = "azoteq,gesture-max-ms",
933 .reg_grp = IQS7222_REG_GRP_SLDR,
934 .reg_key = IQS7222_REG_KEY_TAP,
939 .label = "maximum gesture time",
942 .name = "azoteq,gesture-max-ms",
943 .reg_grp = IQS7222_REG_GRP_SLDR,
944 .reg_key = IQS7222_REG_KEY_TAP_LEGACY,
949 .label = "maximum gesture time",
952 .name = "azoteq,gesture-min-ms",
953 .reg_grp = IQS7222_REG_GRP_SLDR,
954 .reg_key = IQS7222_REG_KEY_TAP,
959 .label = "minimum gesture time",
962 .name = "azoteq,gesture-min-ms",
963 .reg_grp = IQS7222_REG_GRP_SLDR,
964 .reg_key = IQS7222_REG_KEY_TAP_LEGACY,
969 .label = "minimum gesture time",
972 .name = "azoteq,gesture-dist",
973 .reg_grp = IQS7222_REG_GRP_SLDR,
974 .reg_key = IQS7222_REG_KEY_AXIAL,
979 .label = "gesture distance",
982 .name = "azoteq,gesture-dist",
983 .reg_grp = IQS7222_REG_GRP_SLDR,
984 .reg_key = IQS7222_REG_KEY_AXIAL_LEGACY,
989 .label = "gesture distance",
992 .name = "azoteq,gesture-max-ms",
993 .reg_grp = IQS7222_REG_GRP_SLDR,
994 .reg_key = IQS7222_REG_KEY_AXIAL,
999 .label = "maximum gesture time",
1002 .name = "azoteq,gesture-max-ms",
1003 .reg_grp = IQS7222_REG_GRP_SLDR,
1004 .reg_key = IQS7222_REG_KEY_AXIAL_LEGACY,
1009 .label = "maximum gesture time",
1012 .name = "drive-open-drain",
1013 .reg_grp = IQS7222_REG_GRP_GPIO,
1019 .name = "azoteq,timeout-ati-ms",
1020 .reg_grp = IQS7222_REG_GRP_SYS,
1025 .label = "ATI error timeout",
1028 .name = "azoteq,rate-ati-ms",
1029 .reg_grp = IQS7222_REG_GRP_SYS,
1033 .label = "ATI report rate",
1036 .name = "azoteq,timeout-np-ms",
1037 .reg_grp = IQS7222_REG_GRP_SYS,
1041 .label = "normal-power mode timeout",
1044 .name = "azoteq,rate-np-ms",
1045 .reg_grp = IQS7222_REG_GRP_SYS,
1050 .label = "normal-power mode report rate",
1053 .name = "azoteq,timeout-lp-ms",
1054 .reg_grp = IQS7222_REG_GRP_SYS,
1058 .label = "low-power mode timeout",
1061 .name = "azoteq,rate-lp-ms",
1062 .reg_grp = IQS7222_REG_GRP_SYS,
1067 .label = "low-power mode report rate",
1070 .name = "azoteq,timeout-ulp-ms",
1071 .reg_grp = IQS7222_REG_GRP_SYS,
1075 .label = "ultra-low-power mode timeout",
1078 .name = "azoteq,rate-ulp-ms",
1079 .reg_grp = IQS7222_REG_GRP_SYS,
1084 .label = "ultra-low-power mode report rate",
1088 struct iqs7222_private {
1089 const struct iqs7222_dev_desc *dev_desc;
1090 struct gpio_desc *reset_gpio;
1091 struct gpio_desc *irq_gpio;
1092 struct i2c_client *client;
1093 struct input_dev *keypad;
1094 unsigned int kp_type[IQS7222_MAX_CHAN][ARRAY_SIZE(iqs7222_kp_events)];
1095 unsigned int kp_code[IQS7222_MAX_CHAN][ARRAY_SIZE(iqs7222_kp_events)];
1096 unsigned int sl_code[IQS7222_MAX_SLDR][ARRAY_SIZE(iqs7222_sl_events)];
1097 unsigned int sl_axis[IQS7222_MAX_SLDR];
1098 u16 cycle_setup[IQS7222_MAX_CHAN / 2][IQS7222_MAX_COLS_CYCLE];
1099 u16 glbl_setup[IQS7222_MAX_COLS_GLBL];
1100 u16 btn_setup[IQS7222_MAX_CHAN][IQS7222_MAX_COLS_BTN];
1101 u16 chan_setup[IQS7222_MAX_CHAN][IQS7222_MAX_COLS_CHAN];
1102 u16 filt_setup[IQS7222_MAX_COLS_FILT];
1103 u16 sldr_setup[IQS7222_MAX_SLDR][IQS7222_MAX_COLS_SLDR];
1104 u16 gpio_setup[ARRAY_SIZE(iqs7222_gpio_links)][IQS7222_MAX_COLS_GPIO];
1105 u16 sys_setup[IQS7222_MAX_COLS_SYS];
1108 static u16 *iqs7222_setup(struct iqs7222_private *iqs7222,
1109 enum iqs7222_reg_grp_id reg_grp, int row)
1112 case IQS7222_REG_GRP_CYCLE:
1113 return iqs7222->cycle_setup[row];
1115 case IQS7222_REG_GRP_GLBL:
1116 return iqs7222->glbl_setup;
1118 case IQS7222_REG_GRP_BTN:
1119 return iqs7222->btn_setup[row];
1121 case IQS7222_REG_GRP_CHAN:
1122 return iqs7222->chan_setup[row];
1124 case IQS7222_REG_GRP_FILT:
1125 return iqs7222->filt_setup;
1127 case IQS7222_REG_GRP_SLDR:
1128 return iqs7222->sldr_setup[row];
1130 case IQS7222_REG_GRP_GPIO:
1131 return iqs7222->gpio_setup[row];
1133 case IQS7222_REG_GRP_SYS:
1134 return iqs7222->sys_setup;
1141 static int iqs7222_irq_poll(struct iqs7222_private *iqs7222, u16 timeout_ms)
1143 ktime_t irq_timeout = ktime_add_ms(ktime_get(), timeout_ms);
1147 usleep_range(1000, 1100);
1149 ret = gpiod_get_value_cansleep(iqs7222->irq_gpio);
1154 } while (ktime_compare(ktime_get(), irq_timeout) < 0);
1159 static int iqs7222_hard_reset(struct iqs7222_private *iqs7222)
1161 struct i2c_client *client = iqs7222->client;
1164 if (!iqs7222->reset_gpio)
1167 gpiod_set_value_cansleep(iqs7222->reset_gpio, 1);
1168 usleep_range(1000, 1100);
1170 gpiod_set_value_cansleep(iqs7222->reset_gpio, 0);
1172 error = iqs7222_irq_poll(iqs7222, IQS7222_RESET_TIMEOUT_MS);
1174 dev_err(&client->dev, "Failed to reset device: %d\n", error);
1179 static int iqs7222_force_comms(struct iqs7222_private *iqs7222)
1181 u8 msg_buf[] = { 0xFF, };
1185 * The device cannot communicate until it asserts its interrupt (RDY)
1186 * pin. Attempts to do so while RDY is deasserted return an ACK; how-
1187 * ever all write data is ignored, and all read data returns 0xEE.
1189 * Unsolicited communication must be preceded by a special force com-
1190 * munication command, after which the device eventually asserts its
1191 * RDY pin and agrees to communicate.
1193 * Regardless of whether communication is forced or the result of an
1194 * interrupt, the device automatically deasserts its RDY pin once it
1195 * detects an I2C stop condition, or a timeout expires.
1197 ret = gpiod_get_value_cansleep(iqs7222->irq_gpio);
1203 ret = i2c_master_send(iqs7222->client, msg_buf, sizeof(msg_buf));
1204 if (ret < (int)sizeof(msg_buf)) {
1209 * The datasheet states that the host must wait to retry any
1210 * failed attempt to communicate over I2C.
1212 msleep(IQS7222_COMMS_RETRY_MS);
1216 return iqs7222_irq_poll(iqs7222, IQS7222_COMMS_TIMEOUT_MS);
1219 static int iqs7222_read_burst(struct iqs7222_private *iqs7222,
1220 u16 reg, void *val, u16 num_val)
1222 u8 reg_buf[sizeof(__be16)];
1224 struct i2c_client *client = iqs7222->client;
1225 struct i2c_msg msg[] = {
1227 .addr = client->addr,
1229 .len = reg > U8_MAX ? sizeof(reg) : sizeof(u8),
1233 .addr = client->addr,
1235 .len = num_val * sizeof(__le16),
1241 put_unaligned_be16(reg, reg_buf);
1246 * The following loop protects against an edge case in which the RDY
1247 * pin is automatically deasserted just as the read is initiated. In
1248 * that case, the read must be retried using forced communication.
1250 for (i = 0; i < IQS7222_NUM_RETRIES; i++) {
1251 ret = iqs7222_force_comms(iqs7222);
1255 ret = i2c_transfer(client->adapter, msg, ARRAY_SIZE(msg));
1256 if (ret < (int)ARRAY_SIZE(msg)) {
1260 msleep(IQS7222_COMMS_RETRY_MS);
1264 if (get_unaligned_le16(msg[1].buf) == IQS7222_COMMS_ERROR) {
1274 * The following delay ensures the device has deasserted the RDY pin
1275 * following the I2C stop condition.
1277 usleep_range(50, 100);
1280 dev_err(&client->dev,
1281 "Failed to read from address 0x%04X: %d\n", reg, ret);
1286 static int iqs7222_read_word(struct iqs7222_private *iqs7222, u16 reg, u16 *val)
1291 error = iqs7222_read_burst(iqs7222, reg, &val_buf, 1);
1295 *val = le16_to_cpu(val_buf);
1300 static int iqs7222_write_burst(struct iqs7222_private *iqs7222,
1301 u16 reg, const void *val, u16 num_val)
1303 int reg_len = reg > U8_MAX ? sizeof(reg) : sizeof(u8);
1304 int val_len = num_val * sizeof(__le16);
1305 int msg_len = reg_len + val_len;
1307 struct i2c_client *client = iqs7222->client;
1310 msg_buf = kzalloc(msg_len, GFP_KERNEL);
1315 put_unaligned_be16(reg, msg_buf);
1319 memcpy(msg_buf + reg_len, val, val_len);
1322 * The following loop protects against an edge case in which the RDY
1323 * pin is automatically asserted just before the force communication
1326 * In that case, the subsequent I2C stop condition tricks the device
1327 * into preemptively deasserting the RDY pin and the command must be
1330 for (i = 0; i < IQS7222_NUM_RETRIES; i++) {
1331 ret = iqs7222_force_comms(iqs7222);
1335 ret = i2c_master_send(client, msg_buf, msg_len);
1336 if (ret < msg_len) {
1340 msleep(IQS7222_COMMS_RETRY_MS);
1350 usleep_range(50, 100);
1353 dev_err(&client->dev,
1354 "Failed to write to address 0x%04X: %d\n", reg, ret);
1359 static int iqs7222_write_word(struct iqs7222_private *iqs7222, u16 reg, u16 val)
1361 __le16 val_buf = cpu_to_le16(val);
1363 return iqs7222_write_burst(iqs7222, reg, &val_buf, 1);
1366 static int iqs7222_ati_trigger(struct iqs7222_private *iqs7222)
1368 struct i2c_client *client = iqs7222->client;
1369 ktime_t ati_timeout;
1375 * The reserved fields of the system setup register may have changed
1376 * as a result of other registers having been written. As such, read
1377 * the register's latest value to avoid unexpected behavior when the
1378 * register is written in the loop that follows.
1380 error = iqs7222_read_word(iqs7222, IQS7222_SYS_SETUP, &sys_setup);
1384 sys_setup &= ~IQS7222_SYS_SETUP_INTF_MODE_MASK;
1385 sys_setup &= ~IQS7222_SYS_SETUP_PWR_MODE_MASK;
1387 for (i = 0; i < IQS7222_NUM_RETRIES; i++) {
1389 * Trigger ATI from streaming and normal-power modes so that
1390 * the RDY pin continues to be asserted during ATI.
1392 error = iqs7222_write_word(iqs7222, IQS7222_SYS_SETUP,
1394 IQS7222_SYS_SETUP_REDO_ATI);
1398 ati_timeout = ktime_add_ms(ktime_get(), IQS7222_ATI_TIMEOUT_MS);
1401 error = iqs7222_irq_poll(iqs7222,
1402 IQS7222_COMMS_TIMEOUT_MS);
1406 error = iqs7222_read_word(iqs7222, IQS7222_SYS_STATUS,
1411 if (sys_status & IQS7222_SYS_STATUS_RESET)
1414 if (sys_status & IQS7222_SYS_STATUS_ATI_ERROR)
1417 if (sys_status & IQS7222_SYS_STATUS_ATI_ACTIVE)
1421 * Use stream-in-touch mode if either slider reports
1422 * absolute position.
1424 sys_setup |= test_bit(EV_ABS, iqs7222->keypad->evbit)
1425 ? IQS7222_SYS_SETUP_INTF_MODE_TOUCH
1426 : IQS7222_SYS_SETUP_INTF_MODE_EVENT;
1427 sys_setup |= IQS7222_SYS_SETUP_PWR_MODE_AUTO;
1429 return iqs7222_write_word(iqs7222, IQS7222_SYS_SETUP,
1431 } while (ktime_compare(ktime_get(), ati_timeout) < 0);
1433 dev_err(&client->dev,
1434 "ATI attempt %d of %d failed with status 0x%02X, %s\n",
1435 i + 1, IQS7222_NUM_RETRIES, (u8)sys_status,
1436 i + 1 < IQS7222_NUM_RETRIES ? "retrying" : "stopping");
1442 static int iqs7222_dev_init(struct iqs7222_private *iqs7222, int dir)
1444 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc;
1445 int comms_offset = dev_desc->comms_offset;
1449 * Acknowledge reset before writing any registers in case the device
1450 * suffers a spurious reset during initialization. Because this step
1451 * may change the reserved fields of the second filter beta register,
1452 * its cache must be updated.
1454 * Writing the second filter beta register, in turn, may clobber the
1455 * system status register. As such, the filter beta register pair is
1456 * written first to protect against this hazard.
1459 u16 reg = dev_desc->reg_grps[IQS7222_REG_GRP_FILT].base + 1;
1462 error = iqs7222_write_word(iqs7222, IQS7222_SYS_SETUP,
1463 iqs7222->sys_setup[0] |
1464 IQS7222_SYS_SETUP_ACK_RESET);
1468 error = iqs7222_read_word(iqs7222, reg, &filt_setup);
1472 iqs7222->filt_setup[1] &= GENMASK(7, 0);
1473 iqs7222->filt_setup[1] |= (filt_setup & ~GENMASK(7, 0));
1477 * Take advantage of the stop-bit disable function, if available, to
1478 * save the trouble of having to reopen a communication window after
1479 * each burst read or write.
1484 error = iqs7222_read_word(iqs7222,
1485 IQS7222_SYS_SETUP + comms_offset,
1490 error = iqs7222_write_word(iqs7222,
1491 IQS7222_SYS_SETUP + comms_offset,
1492 comms_setup | IQS7222_COMMS_HOLD);
1497 for (i = 0; i < IQS7222_NUM_REG_GRPS; i++) {
1498 int num_row = dev_desc->reg_grps[i].num_row;
1499 int num_col = dev_desc->reg_grps[i].num_col;
1500 u16 reg = dev_desc->reg_grps[i].base;
1507 val = iqs7222_setup(iqs7222, i, 0);
1511 val_buf = kcalloc(num_col, sizeof(__le16), GFP_KERNEL);
1515 for (j = 0; j < num_row; j++) {
1518 error = iqs7222_read_burst(iqs7222, reg,
1520 for (k = 0; k < num_col; k++)
1521 val[k] = le16_to_cpu(val_buf[k]);
1525 for (k = 0; k < num_col; k++)
1526 val_buf[k] = cpu_to_le16(val[k]);
1527 error = iqs7222_write_burst(iqs7222, reg,
1538 reg += IQS7222_REG_OFFSET;
1539 val += iqs7222_max_cols[i];
1551 error = iqs7222_read_word(iqs7222,
1552 IQS7222_SYS_SETUP + comms_offset,
1557 error = iqs7222_write_word(iqs7222,
1558 IQS7222_SYS_SETUP + comms_offset,
1559 comms_setup & ~IQS7222_COMMS_HOLD);
1567 return iqs7222_ati_trigger(iqs7222);
1570 static int iqs7222_dev_info(struct iqs7222_private *iqs7222)
1572 struct i2c_client *client = iqs7222->client;
1573 bool prod_num_valid = false;
1577 error = iqs7222_read_burst(iqs7222, IQS7222_PROD_NUM, dev_id,
1578 ARRAY_SIZE(dev_id));
1582 for (i = 0; i < ARRAY_SIZE(iqs7222_devs); i++) {
1583 if (le16_to_cpu(dev_id[0]) != iqs7222_devs[i].prod_num)
1586 prod_num_valid = true;
1588 if (le16_to_cpu(dev_id[1]) < iqs7222_devs[i].fw_major)
1591 if (le16_to_cpu(dev_id[2]) < iqs7222_devs[i].fw_minor)
1594 iqs7222->dev_desc = &iqs7222_devs[i];
1599 dev_err(&client->dev, "Unsupported firmware revision: %u.%u\n",
1600 le16_to_cpu(dev_id[1]), le16_to_cpu(dev_id[2]));
1602 dev_err(&client->dev, "Unrecognized product number: %u\n",
1603 le16_to_cpu(dev_id[0]));
1608 static int iqs7222_gpio_select(struct iqs7222_private *iqs7222,
1609 struct fwnode_handle *child_node,
1610 int child_enable, u16 child_link)
1612 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc;
1613 struct i2c_client *client = iqs7222->client;
1614 int num_gpio = dev_desc->reg_grps[IQS7222_REG_GRP_GPIO].num_row;
1615 int error, count, i;
1616 unsigned int gpio_sel[ARRAY_SIZE(iqs7222_gpio_links)];
1621 if (!fwnode_property_present(child_node, "azoteq,gpio-select"))
1624 count = fwnode_property_count_u32(child_node, "azoteq,gpio-select");
1625 if (count > num_gpio) {
1626 dev_err(&client->dev, "Invalid number of %s GPIOs\n",
1627 fwnode_get_name(child_node));
1629 } else if (count < 0) {
1630 dev_err(&client->dev, "Failed to count %s GPIOs: %d\n",
1631 fwnode_get_name(child_node), count);
1635 error = fwnode_property_read_u32_array(child_node,
1636 "azoteq,gpio-select",
1639 dev_err(&client->dev, "Failed to read %s GPIOs: %d\n",
1640 fwnode_get_name(child_node), error);
1644 for (i = 0; i < count; i++) {
1647 if (gpio_sel[i] >= num_gpio) {
1648 dev_err(&client->dev, "Invalid %s GPIO: %u\n",
1649 fwnode_get_name(child_node), gpio_sel[i]);
1653 gpio_setup = iqs7222->gpio_setup[gpio_sel[i]];
1655 if (gpio_setup[2] && child_link != gpio_setup[2]) {
1656 dev_err(&client->dev,
1657 "Conflicting GPIO %u event types\n",
1662 gpio_setup[0] |= IQS7222_GPIO_SETUP_0_GPIO_EN;
1663 gpio_setup[1] |= child_enable;
1664 gpio_setup[2] = child_link;
1670 static int iqs7222_parse_props(struct iqs7222_private *iqs7222,
1671 struct fwnode_handle *reg_grp_node,
1673 enum iqs7222_reg_grp_id reg_grp,
1674 enum iqs7222_reg_key_id reg_key)
1676 u16 *setup = iqs7222_setup(iqs7222, reg_grp, reg_grp_index);
1677 struct i2c_client *client = iqs7222->client;
1683 for (i = 0; i < ARRAY_SIZE(iqs7222_props); i++) {
1684 const char *name = iqs7222_props[i].name;
1685 int reg_offset = iqs7222_props[i].reg_offset;
1686 int reg_shift = iqs7222_props[i].reg_shift;
1687 int reg_width = iqs7222_props[i].reg_width;
1688 int val_pitch = iqs7222_props[i].val_pitch ? : 1;
1689 int val_min = iqs7222_props[i].val_min;
1690 int val_max = iqs7222_props[i].val_max;
1691 bool invert = iqs7222_props[i].invert;
1692 const char *label = iqs7222_props[i].label ? : name;
1696 if (iqs7222_props[i].reg_grp != reg_grp ||
1697 iqs7222_props[i].reg_key != reg_key)
1701 * Boolean register fields are one bit wide; they are forcibly
1702 * reset to provide a means to undo changes by a bootloader if
1705 * Scalar fields, on the other hand, are left untouched unless
1706 * their corresponding properties are present.
1708 if (reg_width == 1) {
1710 setup[reg_offset] |= BIT(reg_shift);
1712 setup[reg_offset] &= ~BIT(reg_shift);
1715 if (!fwnode_property_present(reg_grp_node, name))
1718 if (reg_width == 1) {
1720 setup[reg_offset] &= ~BIT(reg_shift);
1722 setup[reg_offset] |= BIT(reg_shift);
1727 error = fwnode_property_read_u32(reg_grp_node, name, &val);
1729 dev_err(&client->dev, "Failed to read %s %s: %d\n",
1730 fwnode_get_name(reg_grp_node), label, error);
1735 val_max = GENMASK(reg_width - 1, 0) * val_pitch;
1737 if (val < val_min || val > val_max) {
1738 dev_err(&client->dev, "Invalid %s %s: %u\n",
1739 fwnode_get_name(reg_grp_node), label, val);
1743 setup[reg_offset] &= ~GENMASK(reg_shift + reg_width - 1,
1745 setup[reg_offset] |= (val / val_pitch << reg_shift);
1751 static int iqs7222_parse_event(struct iqs7222_private *iqs7222,
1752 struct fwnode_handle *event_node,
1754 enum iqs7222_reg_grp_id reg_grp,
1755 enum iqs7222_reg_key_id reg_key,
1756 u16 event_enable, u16 event_link,
1757 unsigned int *event_type,
1758 unsigned int *event_code)
1760 struct i2c_client *client = iqs7222->client;
1763 error = iqs7222_parse_props(iqs7222, event_node, reg_grp_index,
1768 error = iqs7222_gpio_select(iqs7222, event_node, event_enable,
1773 error = fwnode_property_read_u32(event_node, "linux,code", event_code);
1774 if (error == -EINVAL) {
1777 dev_err(&client->dev, "Failed to read %s code: %d\n",
1778 fwnode_get_name(event_node), error);
1783 input_set_capability(iqs7222->keypad, EV_KEY, *event_code);
1787 error = fwnode_property_read_u32(event_node, "linux,input-type",
1789 if (error == -EINVAL) {
1790 *event_type = EV_KEY;
1792 dev_err(&client->dev, "Failed to read %s input type: %d\n",
1793 fwnode_get_name(event_node), error);
1795 } else if (*event_type != EV_KEY && *event_type != EV_SW) {
1796 dev_err(&client->dev, "Invalid %s input type: %d\n",
1797 fwnode_get_name(event_node), *event_type);
1801 input_set_capability(iqs7222->keypad, *event_type, *event_code);
1806 static int iqs7222_parse_cycle(struct iqs7222_private *iqs7222,
1807 struct fwnode_handle *cycle_node, int cycle_index)
1809 u16 *cycle_setup = iqs7222->cycle_setup[cycle_index];
1810 struct i2c_client *client = iqs7222->client;
1811 unsigned int pins[9];
1812 int error, count, i;
1815 * Each channel shares a cycle with one other channel; the mapping of
1816 * channels to cycles is fixed. Properties defined for a cycle impact
1817 * both channels tied to the cycle.
1819 * Unlike channels which are restricted to a select range of CRx pins
1820 * based on channel number, any cycle can claim any of the device's 9
1821 * CTx pins (CTx0-8).
1823 if (!fwnode_property_present(cycle_node, "azoteq,tx-enable"))
1826 count = fwnode_property_count_u32(cycle_node, "azoteq,tx-enable");
1828 dev_err(&client->dev, "Failed to count %s CTx pins: %d\n",
1829 fwnode_get_name(cycle_node), count);
1831 } else if (count > ARRAY_SIZE(pins)) {
1832 dev_err(&client->dev, "Invalid number of %s CTx pins\n",
1833 fwnode_get_name(cycle_node));
1837 error = fwnode_property_read_u32_array(cycle_node, "azoteq,tx-enable",
1840 dev_err(&client->dev, "Failed to read %s CTx pins: %d\n",
1841 fwnode_get_name(cycle_node), error);
1845 cycle_setup[1] &= ~GENMASK(7 + ARRAY_SIZE(pins) - 1, 7);
1847 for (i = 0; i < count; i++) {
1849 dev_err(&client->dev, "Invalid %s CTx pin: %u\n",
1850 fwnode_get_name(cycle_node), pins[i]);
1854 cycle_setup[1] |= BIT(pins[i] + 7);
1860 static int iqs7222_parse_chan(struct iqs7222_private *iqs7222,
1861 struct fwnode_handle *chan_node, int chan_index)
1863 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc;
1864 struct i2c_client *client = iqs7222->client;
1865 int num_chan = dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_row;
1866 int ext_chan = rounddown(num_chan, 10);
1868 u16 *chan_setup = iqs7222->chan_setup[chan_index];
1869 u16 *sys_setup = iqs7222->sys_setup;
1872 if (dev_desc->allow_offset &&
1873 fwnode_property_present(chan_node, "azoteq,ulp-allow"))
1874 sys_setup[dev_desc->allow_offset] &= ~BIT(chan_index);
1876 chan_setup[0] |= IQS7222_CHAN_SETUP_0_CHAN_EN;
1879 * The reference channel function allows for differential measurements
1880 * and is only available in the case of IQS7222A or IQS7222C.
1882 if (dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_col > 4 &&
1883 fwnode_property_present(chan_node, "azoteq,ref-select")) {
1886 error = fwnode_property_read_u32(chan_node, "azoteq,ref-select",
1889 dev_err(&client->dev,
1890 "Failed to read %s reference channel: %d\n",
1891 fwnode_get_name(chan_node), error);
1895 if (val >= ext_chan) {
1896 dev_err(&client->dev,
1897 "Invalid %s reference channel: %u\n",
1898 fwnode_get_name(chan_node), val);
1902 ref_setup = iqs7222->chan_setup[val];
1905 * Configure the current channel as a follower of the selected
1906 * reference channel.
1908 chan_setup[0] |= IQS7222_CHAN_SETUP_0_REF_MODE_FOLLOW;
1909 chan_setup[4] = val * 42 + 1048;
1911 error = fwnode_property_read_u32(chan_node, "azoteq,ref-weight",
1914 if (val > U16_MAX) {
1915 dev_err(&client->dev,
1916 "Invalid %s reference weight: %u\n",
1917 fwnode_get_name(chan_node), val);
1921 chan_setup[5] = val;
1922 } else if (error != -EINVAL) {
1923 dev_err(&client->dev,
1924 "Failed to read %s reference weight: %d\n",
1925 fwnode_get_name(chan_node), error);
1930 * Configure the selected channel as a reference channel which
1931 * serves the current channel.
1933 ref_setup[0] |= IQS7222_CHAN_SETUP_0_REF_MODE_REF;
1934 ref_setup[5] |= BIT(chan_index);
1936 ref_setup[4] = dev_desc->touch_link;
1937 if (fwnode_property_present(chan_node, "azoteq,use-prox"))
1941 if (fwnode_property_present(chan_node, "azoteq,rx-enable")) {
1943 * Each channel can claim up to 4 CRx pins. The first half of
1944 * the channels can use CRx0-3, while the second half can use
1947 unsigned int pins[4];
1950 count = fwnode_property_count_u32(chan_node,
1951 "azoteq,rx-enable");
1953 dev_err(&client->dev,
1954 "Failed to count %s CRx pins: %d\n",
1955 fwnode_get_name(chan_node), count);
1957 } else if (count > ARRAY_SIZE(pins)) {
1958 dev_err(&client->dev,
1959 "Invalid number of %s CRx pins\n",
1960 fwnode_get_name(chan_node));
1964 error = fwnode_property_read_u32_array(chan_node,
1968 dev_err(&client->dev,
1969 "Failed to read %s CRx pins: %d\n",
1970 fwnode_get_name(chan_node), error);
1974 chan_setup[0] &= ~GENMASK(4 + ARRAY_SIZE(pins) - 1, 4);
1976 for (i = 0; i < count; i++) {
1977 int min_crx = chan_index < ext_chan / 2 ? 0 : 4;
1979 if (pins[i] < min_crx || pins[i] > min_crx + 3) {
1980 dev_err(&client->dev,
1981 "Invalid %s CRx pin: %u\n",
1982 fwnode_get_name(chan_node), pins[i]);
1986 chan_setup[0] |= BIT(pins[i] + 4 - min_crx);
1990 for (i = 0; i < ARRAY_SIZE(iqs7222_kp_events); i++) {
1991 const char *event_name = iqs7222_kp_events[i].name;
1992 u16 event_enable = iqs7222_kp_events[i].enable;
1993 struct fwnode_handle *event_node;
1995 event_node = fwnode_get_named_child_node(chan_node, event_name);
1999 error = fwnode_property_read_u32(event_node,
2000 "azoteq,timeout-press-ms",
2004 * The IQS7222B employs a global pair of press timeout
2005 * registers as opposed to channel-specific registers.
2007 u16 *setup = dev_desc->reg_grps
2008 [IQS7222_REG_GRP_BTN].num_col > 2 ?
2009 &iqs7222->btn_setup[chan_index][2] :
2012 if (val > U8_MAX * 500) {
2013 dev_err(&client->dev,
2014 "Invalid %s press timeout: %u\n",
2015 fwnode_get_name(event_node), val);
2016 fwnode_handle_put(event_node);
2020 *setup &= ~(U8_MAX << i * 8);
2021 *setup |= (val / 500 << i * 8);
2022 } else if (error != -EINVAL) {
2023 dev_err(&client->dev,
2024 "Failed to read %s press timeout: %d\n",
2025 fwnode_get_name(event_node), error);
2026 fwnode_handle_put(event_node);
2030 error = iqs7222_parse_event(iqs7222, event_node, chan_index,
2031 IQS7222_REG_GRP_BTN,
2032 iqs7222_kp_events[i].reg_key,
2034 dev_desc->touch_link - (i ? 0 : 2),
2035 &iqs7222->kp_type[chan_index][i],
2036 &iqs7222->kp_code[chan_index][i]);
2037 fwnode_handle_put(event_node);
2041 if (!dev_desc->event_offset)
2044 sys_setup[dev_desc->event_offset] |= event_enable;
2048 * The following call handles a special pair of properties that apply
2049 * to a channel node, but reside within the button (event) group.
2051 return iqs7222_parse_props(iqs7222, chan_node, chan_index,
2052 IQS7222_REG_GRP_BTN,
2053 IQS7222_REG_KEY_DEBOUNCE);
2056 static int iqs7222_parse_sldr(struct iqs7222_private *iqs7222,
2057 struct fwnode_handle *sldr_node, int sldr_index)
2059 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc;
2060 struct i2c_client *client = iqs7222->client;
2061 int num_chan = dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_row;
2062 int ext_chan = rounddown(num_chan, 10);
2063 int count, error, reg_offset, i;
2064 u16 *event_mask = &iqs7222->sys_setup[dev_desc->event_offset];
2065 u16 *sldr_setup = iqs7222->sldr_setup[sldr_index];
2066 unsigned int chan_sel[4], val;
2069 * Each slider can be spread across 3 to 4 channels. It is possible to
2070 * select only 2 channels, but doing so prevents the slider from using
2071 * the specified resolution.
2073 count = fwnode_property_count_u32(sldr_node, "azoteq,channel-select");
2075 dev_err(&client->dev, "Failed to count %s channels: %d\n",
2076 fwnode_get_name(sldr_node), count);
2078 } else if (count < 3 || count > ARRAY_SIZE(chan_sel)) {
2079 dev_err(&client->dev, "Invalid number of %s channels\n",
2080 fwnode_get_name(sldr_node));
2084 error = fwnode_property_read_u32_array(sldr_node,
2085 "azoteq,channel-select",
2088 dev_err(&client->dev, "Failed to read %s channels: %d\n",
2089 fwnode_get_name(sldr_node), error);
2094 * Resolution and top speed, if small enough, are packed into a single
2095 * register. Otherwise, each occupies its own register and the rest of
2096 * the slider-related register addresses are offset by one.
2098 reg_offset = dev_desc->sldr_res < U16_MAX ? 0 : 1;
2100 sldr_setup[0] |= count;
2101 sldr_setup[3 + reg_offset] &= ~GENMASK(ext_chan - 1, 0);
2103 for (i = 0; i < ARRAY_SIZE(chan_sel); i++) {
2104 sldr_setup[5 + reg_offset + i] = 0;
2108 if (chan_sel[i] >= ext_chan) {
2109 dev_err(&client->dev, "Invalid %s channel: %u\n",
2110 fwnode_get_name(sldr_node), chan_sel[i]);
2115 * The following fields indicate which channels participate in
2116 * the slider, as well as each channel's relative placement.
2118 sldr_setup[3 + reg_offset] |= BIT(chan_sel[i]);
2119 sldr_setup[5 + reg_offset + i] = chan_sel[i] * 42 + 1080;
2122 sldr_setup[4 + reg_offset] = dev_desc->touch_link;
2123 if (fwnode_property_present(sldr_node, "azoteq,use-prox"))
2124 sldr_setup[4 + reg_offset] -= 2;
2126 error = fwnode_property_read_u32(sldr_node, "azoteq,slider-size", &val);
2128 if (val > dev_desc->sldr_res) {
2129 dev_err(&client->dev, "Invalid %s size: %u\n",
2130 fwnode_get_name(sldr_node), val);
2135 sldr_setup[3] = val;
2137 sldr_setup[2] &= ~IQS7222_SLDR_SETUP_2_RES_MASK;
2138 sldr_setup[2] |= (val / 16 <<
2139 IQS7222_SLDR_SETUP_2_RES_SHIFT);
2141 } else if (error != -EINVAL) {
2142 dev_err(&client->dev, "Failed to read %s size: %d\n",
2143 fwnode_get_name(sldr_node), error);
2147 if (!(reg_offset ? sldr_setup[3]
2148 : sldr_setup[2] & IQS7222_SLDR_SETUP_2_RES_MASK)) {
2149 dev_err(&client->dev, "Undefined %s size\n",
2150 fwnode_get_name(sldr_node));
2154 error = fwnode_property_read_u32(sldr_node, "azoteq,top-speed", &val);
2156 if (val > (reg_offset ? U16_MAX : U8_MAX * 4)) {
2157 dev_err(&client->dev, "Invalid %s top speed: %u\n",
2158 fwnode_get_name(sldr_node), val);
2163 sldr_setup[2] = val;
2165 sldr_setup[2] &= ~IQS7222_SLDR_SETUP_2_TOP_SPEED_MASK;
2166 sldr_setup[2] |= (val / 4);
2168 } else if (error != -EINVAL) {
2169 dev_err(&client->dev, "Failed to read %s top speed: %d\n",
2170 fwnode_get_name(sldr_node), error);
2174 error = fwnode_property_read_u32(sldr_node, "linux,axis", &val);
2176 u16 sldr_max = sldr_setup[3] - 1;
2179 sldr_max = sldr_setup[2];
2181 sldr_max &= IQS7222_SLDR_SETUP_2_RES_MASK;
2182 sldr_max >>= IQS7222_SLDR_SETUP_2_RES_SHIFT;
2184 sldr_max = sldr_max * 16 - 1;
2187 input_set_abs_params(iqs7222->keypad, val, 0, sldr_max, 0, 0);
2188 iqs7222->sl_axis[sldr_index] = val;
2189 } else if (error != -EINVAL) {
2190 dev_err(&client->dev, "Failed to read %s axis: %d\n",
2191 fwnode_get_name(sldr_node), error);
2195 if (dev_desc->wheel_enable) {
2196 sldr_setup[0] &= ~dev_desc->wheel_enable;
2197 if (iqs7222->sl_axis[sldr_index] == ABS_WHEEL)
2198 sldr_setup[0] |= dev_desc->wheel_enable;
2202 * The absence of a register offset makes it safe to assume the device
2203 * supports gestures, each of which is first disabled until explicitly
2207 for (i = 0; i < ARRAY_SIZE(iqs7222_sl_events); i++)
2208 sldr_setup[9] &= ~iqs7222_sl_events[i].enable;
2210 for (i = 0; i < ARRAY_SIZE(iqs7222_sl_events); i++) {
2211 const char *event_name = iqs7222_sl_events[i].name;
2212 struct fwnode_handle *event_node;
2213 enum iqs7222_reg_key_id reg_key;
2215 event_node = fwnode_get_named_child_node(sldr_node, event_name);
2220 * Depending on the device, gestures are either offered using
2221 * one of two timing resolutions, or are not supported at all.
2224 reg_key = IQS7222_REG_KEY_RESERVED;
2225 else if (dev_desc->legacy_gesture &&
2226 iqs7222_sl_events[i].reg_key == IQS7222_REG_KEY_TAP)
2227 reg_key = IQS7222_REG_KEY_TAP_LEGACY;
2228 else if (dev_desc->legacy_gesture &&
2229 iqs7222_sl_events[i].reg_key == IQS7222_REG_KEY_AXIAL)
2230 reg_key = IQS7222_REG_KEY_AXIAL_LEGACY;
2232 reg_key = iqs7222_sl_events[i].reg_key;
2235 * The press/release event does not expose a direct GPIO link,
2236 * but one can be emulated by tying each of the participating
2237 * channels to the same GPIO.
2239 error = iqs7222_parse_event(iqs7222, event_node, sldr_index,
2240 IQS7222_REG_GRP_SLDR, reg_key,
2241 i ? iqs7222_sl_events[i].enable
2242 : sldr_setup[3 + reg_offset],
2243 i ? 1568 + sldr_index * 30
2244 : sldr_setup[4 + reg_offset],
2246 &iqs7222->sl_code[sldr_index][i]);
2247 fwnode_handle_put(event_node);
2252 sldr_setup[9] |= iqs7222_sl_events[i].enable;
2254 if (!dev_desc->event_offset)
2258 * The press/release event is determined based on whether the
2259 * coordinate field reports 0xFFFF and solely relies on touch
2260 * or proximity interrupts to be unmasked.
2262 if (i && !reg_offset)
2263 *event_mask |= (IQS7222_EVENT_MASK_SLDR << sldr_index);
2264 else if (sldr_setup[4 + reg_offset] == dev_desc->touch_link)
2265 *event_mask |= IQS7222_EVENT_MASK_TOUCH;
2267 *event_mask |= IQS7222_EVENT_MASK_PROX;
2271 * The following call handles a special pair of properties that shift
2272 * to make room for a wheel enable control in the case of IQS7222C.
2274 return iqs7222_parse_props(iqs7222, sldr_node, sldr_index,
2275 IQS7222_REG_GRP_SLDR,
2276 dev_desc->wheel_enable ?
2277 IQS7222_REG_KEY_WHEEL :
2278 IQS7222_REG_KEY_NO_WHEEL);
2281 static int (*iqs7222_parse_extra[IQS7222_NUM_REG_GRPS])
2282 (struct iqs7222_private *iqs7222,
2283 struct fwnode_handle *reg_grp_node,
2284 int reg_grp_index) = {
2285 [IQS7222_REG_GRP_CYCLE] = iqs7222_parse_cycle,
2286 [IQS7222_REG_GRP_CHAN] = iqs7222_parse_chan,
2287 [IQS7222_REG_GRP_SLDR] = iqs7222_parse_sldr,
2290 static int iqs7222_parse_reg_grp(struct iqs7222_private *iqs7222,
2291 enum iqs7222_reg_grp_id reg_grp,
2294 struct i2c_client *client = iqs7222->client;
2295 struct fwnode_handle *reg_grp_node;
2298 if (iqs7222_reg_grp_names[reg_grp]) {
2299 char reg_grp_name[16];
2301 snprintf(reg_grp_name, sizeof(reg_grp_name), "%s-%d",
2302 iqs7222_reg_grp_names[reg_grp], reg_grp_index);
2304 reg_grp_node = device_get_named_child_node(&client->dev,
2307 reg_grp_node = fwnode_handle_get(dev_fwnode(&client->dev));
2313 error = iqs7222_parse_props(iqs7222, reg_grp_node, reg_grp_index,
2314 reg_grp, IQS7222_REG_KEY_NONE);
2316 if (!error && iqs7222_parse_extra[reg_grp])
2317 error = iqs7222_parse_extra[reg_grp](iqs7222, reg_grp_node,
2320 fwnode_handle_put(reg_grp_node);
2325 static int iqs7222_parse_all(struct iqs7222_private *iqs7222)
2327 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc;
2328 const struct iqs7222_reg_grp_desc *reg_grps = dev_desc->reg_grps;
2329 u16 *sys_setup = iqs7222->sys_setup;
2332 if (dev_desc->allow_offset)
2333 sys_setup[dev_desc->allow_offset] = U16_MAX;
2335 if (dev_desc->event_offset)
2336 sys_setup[dev_desc->event_offset] = IQS7222_EVENT_MASK_ATI;
2338 for (i = 0; i < reg_grps[IQS7222_REG_GRP_GPIO].num_row; i++) {
2339 u16 *gpio_setup = iqs7222->gpio_setup[i];
2341 gpio_setup[0] &= ~IQS7222_GPIO_SETUP_0_GPIO_EN;
2345 if (reg_grps[IQS7222_REG_GRP_GPIO].num_row == 1)
2349 * The IQS7222C exposes multiple GPIO and must be informed
2350 * as to which GPIO this group represents.
2352 for (j = 0; j < ARRAY_SIZE(iqs7222_gpio_links); j++)
2353 gpio_setup[0] &= ~BIT(iqs7222_gpio_links[j]);
2355 gpio_setup[0] |= BIT(iqs7222_gpio_links[i]);
2358 for (i = 0; i < reg_grps[IQS7222_REG_GRP_CHAN].num_row; i++) {
2359 u16 *chan_setup = iqs7222->chan_setup[i];
2361 chan_setup[0] &= ~IQS7222_CHAN_SETUP_0_REF_MODE_MASK;
2362 chan_setup[0] &= ~IQS7222_CHAN_SETUP_0_CHAN_EN;
2367 for (i = 0; i < reg_grps[IQS7222_REG_GRP_SLDR].num_row; i++) {
2368 u16 *sldr_setup = iqs7222->sldr_setup[i];
2370 sldr_setup[0] &= ~IQS7222_SLDR_SETUP_0_CHAN_CNT_MASK;
2373 for (i = 0; i < IQS7222_NUM_REG_GRPS; i++) {
2374 for (j = 0; j < reg_grps[i].num_row; j++) {
2375 error = iqs7222_parse_reg_grp(iqs7222, i, j);
2384 static int iqs7222_report(struct iqs7222_private *iqs7222)
2386 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc;
2387 struct i2c_client *client = iqs7222->client;
2388 int num_chan = dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_row;
2389 int num_stat = dev_desc->reg_grps[IQS7222_REG_GRP_STAT].num_col;
2391 __le16 status[IQS7222_MAX_COLS_STAT];
2393 error = iqs7222_read_burst(iqs7222, IQS7222_SYS_STATUS, status,
2398 if (le16_to_cpu(status[0]) & IQS7222_SYS_STATUS_RESET) {
2399 dev_err(&client->dev, "Unexpected device reset\n");
2400 return iqs7222_dev_init(iqs7222, WRITE);
2403 if (le16_to_cpu(status[0]) & IQS7222_SYS_STATUS_ATI_ERROR) {
2404 dev_err(&client->dev, "Unexpected ATI error\n");
2405 return iqs7222_ati_trigger(iqs7222);
2408 if (le16_to_cpu(status[0]) & IQS7222_SYS_STATUS_ATI_ACTIVE)
2411 for (i = 0; i < num_chan; i++) {
2412 u16 *chan_setup = iqs7222->chan_setup[i];
2414 if (!(chan_setup[0] & IQS7222_CHAN_SETUP_0_CHAN_EN))
2417 for (j = 0; j < ARRAY_SIZE(iqs7222_kp_events); j++) {
2419 * Proximity state begins at offset 2 and spills into
2420 * offset 3 for devices with more than 16 channels.
2422 * Touch state begins at the first offset immediately
2423 * following proximity state.
2425 int k = 2 + j * (num_chan > 16 ? 2 : 1);
2426 u16 state = le16_to_cpu(status[k + i / 16]);
2428 if (!iqs7222->kp_type[i][j])
2431 input_event(iqs7222->keypad,
2432 iqs7222->kp_type[i][j],
2433 iqs7222->kp_code[i][j],
2434 !!(state & BIT(i % 16)));
2438 for (i = 0; i < dev_desc->reg_grps[IQS7222_REG_GRP_SLDR].num_row; i++) {
2439 u16 *sldr_setup = iqs7222->sldr_setup[i];
2440 u16 sldr_pos = le16_to_cpu(status[4 + i]);
2441 u16 state = le16_to_cpu(status[6 + i]);
2443 if (!(sldr_setup[0] & IQS7222_SLDR_SETUP_0_CHAN_CNT_MASK))
2446 if (sldr_pos < dev_desc->sldr_res)
2447 input_report_abs(iqs7222->keypad, iqs7222->sl_axis[i],
2450 input_report_key(iqs7222->keypad, iqs7222->sl_code[i][0],
2451 sldr_pos < dev_desc->sldr_res);
2454 * A maximum resolution indicates the device does not support
2455 * gestures, in which case the remaining fields are ignored.
2457 if (dev_desc->sldr_res == U16_MAX)
2460 if (!(le16_to_cpu(status[1]) & IQS7222_EVENT_MASK_SLDR << i))
2464 * Skip the press/release event, as it does not have separate
2465 * status fields and is handled separately.
2467 for (j = 1; j < ARRAY_SIZE(iqs7222_sl_events); j++) {
2468 u16 mask = iqs7222_sl_events[j].mask;
2469 u16 val = iqs7222_sl_events[j].val;
2471 input_report_key(iqs7222->keypad,
2472 iqs7222->sl_code[i][j],
2473 (state & mask) == val);
2476 input_sync(iqs7222->keypad);
2478 for (j = 1; j < ARRAY_SIZE(iqs7222_sl_events); j++)
2479 input_report_key(iqs7222->keypad,
2480 iqs7222->sl_code[i][j], 0);
2483 input_sync(iqs7222->keypad);
2488 static irqreturn_t iqs7222_irq(int irq, void *context)
2490 struct iqs7222_private *iqs7222 = context;
2492 return iqs7222_report(iqs7222) ? IRQ_NONE : IRQ_HANDLED;
2495 static int iqs7222_probe(struct i2c_client *client)
2497 struct iqs7222_private *iqs7222;
2498 unsigned long irq_flags;
2501 iqs7222 = devm_kzalloc(&client->dev, sizeof(*iqs7222), GFP_KERNEL);
2505 i2c_set_clientdata(client, iqs7222);
2506 iqs7222->client = client;
2508 iqs7222->keypad = devm_input_allocate_device(&client->dev);
2509 if (!iqs7222->keypad)
2512 iqs7222->keypad->name = client->name;
2513 iqs7222->keypad->id.bustype = BUS_I2C;
2516 * The RDY pin behaves as an interrupt, but must also be polled ahead
2517 * of unsolicited I2C communication. As such, it is first opened as a
2518 * GPIO and then passed to gpiod_to_irq() to register the interrupt.
2520 iqs7222->irq_gpio = devm_gpiod_get(&client->dev, "irq", GPIOD_IN);
2521 if (IS_ERR(iqs7222->irq_gpio)) {
2522 error = PTR_ERR(iqs7222->irq_gpio);
2523 dev_err(&client->dev, "Failed to request IRQ GPIO: %d\n",
2528 iqs7222->reset_gpio = devm_gpiod_get_optional(&client->dev, "reset",
2530 if (IS_ERR(iqs7222->reset_gpio)) {
2531 error = PTR_ERR(iqs7222->reset_gpio);
2532 dev_err(&client->dev, "Failed to request reset GPIO: %d\n",
2537 error = iqs7222_hard_reset(iqs7222);
2541 error = iqs7222_dev_info(iqs7222);
2545 error = iqs7222_dev_init(iqs7222, READ);
2549 error = iqs7222_parse_all(iqs7222);
2553 error = iqs7222_dev_init(iqs7222, WRITE);
2557 error = iqs7222_report(iqs7222);
2561 error = input_register_device(iqs7222->keypad);
2563 dev_err(&client->dev, "Failed to register device: %d\n", error);
2567 irq = gpiod_to_irq(iqs7222->irq_gpio);
2571 irq_flags = gpiod_is_active_low(iqs7222->irq_gpio) ? IRQF_TRIGGER_LOW
2572 : IRQF_TRIGGER_HIGH;
2573 irq_flags |= IRQF_ONESHOT;
2575 error = devm_request_threaded_irq(&client->dev, irq, NULL, iqs7222_irq,
2576 irq_flags, client->name, iqs7222);
2578 dev_err(&client->dev, "Failed to request IRQ: %d\n", error);
2583 static const struct of_device_id iqs7222_of_match[] = {
2584 { .compatible = "azoteq,iqs7222a" },
2585 { .compatible = "azoteq,iqs7222b" },
2586 { .compatible = "azoteq,iqs7222c" },
2589 MODULE_DEVICE_TABLE(of, iqs7222_of_match);
2591 static struct i2c_driver iqs7222_i2c_driver = {
2594 .of_match_table = iqs7222_of_match,
2596 .probe_new = iqs7222_probe,
2598 module_i2c_driver(iqs7222_i2c_driver);
2601 MODULE_DESCRIPTION("Azoteq IQS7222A/B/C Capacitive Touch Controller");
2602 MODULE_LICENSE("GPL");