xref: /linux/Documentation/driver-api/gpio/pca953x.rst (revision 84318277d6334c6981ab326d4acc87c6a6ddc9b8)
1*5ef5f3c2SLevente Révész============================================
2*5ef5f3c2SLevente RévészPCA953x I²C GPIO expander compatibility list
3*5ef5f3c2SLevente Révész============================================
4*5ef5f3c2SLevente Révész
5*5ef5f3c2SLevente Révész:Author: Levente Révész <levente.revesz@eilabs.com>
6*5ef5f3c2SLevente Révész
7*5ef5f3c2SLevente RévészI went through all the datasheets and created this note listing
8*5ef5f3c2SLevente Révészchip functions and register layouts.
9*5ef5f3c2SLevente Révész
10*5ef5f3c2SLevente RévészOverview of chips
11*5ef5f3c2SLevente Révész=================
12*5ef5f3c2SLevente Révész
13*5ef5f3c2SLevente RévészChips with the basic 4 registers
14*5ef5f3c2SLevente Révész--------------------------------
15*5ef5f3c2SLevente Révész
16*5ef5f3c2SLevente RévészThese chips have 4 register banks: input, output, invert and direction.
17*5ef5f3c2SLevente RévészEach of these banks contains (lines/8) registers, one for each GPIO port.
18*5ef5f3c2SLevente Révész
19*5ef5f3c2SLevente RévészBanks offset is always a power of 2:
20*5ef5f3c2SLevente Révész
21*5ef5f3c2SLevente Révész- 4 lines  -> bank offset is 1
22*5ef5f3c2SLevente Révész- 8 lines  -> bank offset is 1
23*5ef5f3c2SLevente Révész- 16 lines -> bank offset is 2
24*5ef5f3c2SLevente Révész- 24 lines -> bank offset is 4
25*5ef5f3c2SLevente Révész- 32 lines -> bank offset is 4
26*5ef5f3c2SLevente Révész- 40 lines -> bank offset is 8
27*5ef5f3c2SLevente Révész
28*5ef5f3c2SLevente RévészFor example, register layout of GPIO expander with 24 lines:
29*5ef5f3c2SLevente Révész
30*5ef5f3c2SLevente Révész+------+-----------------+--------+
31*5ef5f3c2SLevente Révész| addr | function        | bank   |
32*5ef5f3c2SLevente Révész+======+=================+========+
33*5ef5f3c2SLevente Révész|  00  | input port0     |        |
34*5ef5f3c2SLevente Révész+------+-----------------+        |
35*5ef5f3c2SLevente Révész|  01  | input port1     | bank 0 |
36*5ef5f3c2SLevente Révész+------+-----------------+        |
37*5ef5f3c2SLevente Révész|  02  | input port2     |        |
38*5ef5f3c2SLevente Révész+------+-----------------+--------+
39*5ef5f3c2SLevente Révész|  03  | n/a             |        |
40*5ef5f3c2SLevente Révész+------+-----------------+--------+
41*5ef5f3c2SLevente Révész|  04  | output port0    |        |
42*5ef5f3c2SLevente Révész+------+-----------------+        |
43*5ef5f3c2SLevente Révész|  05  | output port1    | bank 1 |
44*5ef5f3c2SLevente Révész+------+-----------------+        |
45*5ef5f3c2SLevente Révész|  06  | output port2    |        |
46*5ef5f3c2SLevente Révész+------+-----------------+--------+
47*5ef5f3c2SLevente Révész|  07  | n/a             |        |
48*5ef5f3c2SLevente Révész+------+-----------------+--------+
49*5ef5f3c2SLevente Révész|  08  | invert port0    |        |
50*5ef5f3c2SLevente Révész+------+-----------------+        |
51*5ef5f3c2SLevente Révész|  09  | invert port1    | bank 2 |
52*5ef5f3c2SLevente Révész+------+-----------------+        |
53*5ef5f3c2SLevente Révész|  0A  | invert port2    |        |
54*5ef5f3c2SLevente Révész+------+-----------------+--------+
55*5ef5f3c2SLevente Révész|  0B  | n/a             |        |
56*5ef5f3c2SLevente Révész+------+-----------------+--------+
57*5ef5f3c2SLevente Révész|  0C  | direction port0 |        |
58*5ef5f3c2SLevente Révész+------+-----------------+        |
59*5ef5f3c2SLevente Révész|  0D  | direction port1 | bank 3 |
60*5ef5f3c2SLevente Révész+------+-----------------+        |
61*5ef5f3c2SLevente Révész|  0E  | direction port2 |        |
62*5ef5f3c2SLevente Révész+------+-----------------+--------+
63*5ef5f3c2SLevente Révész|  0F  | n/a             |        |
64*5ef5f3c2SLevente Révész+------+-----------------+--------+
65*5ef5f3c2SLevente Révész
66*5ef5f3c2SLevente Révész.. note::
67*5ef5f3c2SLevente Révész     This is followed by all supported chips, except by pcal6534.
68*5ef5f3c2SLevente Révész
69*5ef5f3c2SLevente RévészThe table below shows the offsets for each of the compatible chips:
70*5ef5f3c2SLevente Révész
71*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== =========
72*5ef5f3c2SLevente Révészcompatible lines interrupt input output invert direction
73*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== =========
74*5ef5f3c2SLevente Révészpca9536        4        no    00     01     02        03
75*5ef5f3c2SLevente Révészpca9537        4       yes    00     01     02        03
76*5ef5f3c2SLevente Révészpca6408        8       yes    00     01     02        03
77*5ef5f3c2SLevente Révésztca6408        8       yes    00     01     02        03
78*5ef5f3c2SLevente Révészpca9534        8       yes    00     01     02        03
79*5ef5f3c2SLevente Révészpca9538        8       yes    00     01     02        03
80*5ef5f3c2SLevente Révészpca9554        8       yes    00     01     02        03
81*5ef5f3c2SLevente Révésztca9554        8       yes    00     01     02        03
82*5ef5f3c2SLevente Révészpca9556        8        no    00     01     02        03
83*5ef5f3c2SLevente Révészpca9557        8        no    00     01     02        03
84*5ef5f3c2SLevente Révészpca6107        8       yes    00     01     02        03
85*5ef5f3c2SLevente Révészpca6416       16       yes    00     02     04        06
86*5ef5f3c2SLevente Révésztca6416       16       yes    00     02     04        06
87*5ef5f3c2SLevente Révészpca9535       16       yes    00     02     04        06
88*5ef5f3c2SLevente Révészpca9539       16       yes    00     02     04        06
89*5ef5f3c2SLevente Révésztca9539       16       yes    00     02     04        06
90*5ef5f3c2SLevente Révészpca9555       16       yes    00     02     04        06
91*5ef5f3c2SLevente Révészmax7318       16       yes    00     02     04        06
92*5ef5f3c2SLevente Révésztca6424       24       yes    00     04     08        0C
93*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== =========
94*5ef5f3c2SLevente Révész
95*5ef5f3c2SLevente RévészChips with additional timeout_en register
96*5ef5f3c2SLevente Révész-----------------------------------------
97*5ef5f3c2SLevente Révész
98*5ef5f3c2SLevente RévészThese Maxim chips have a bus timeout function which can be enabled in
99*5ef5f3c2SLevente Révészthe timeout_en register. This is present in only two chips. Defaults to
100*5ef5f3c2SLevente Révésztimeout disabled.
101*5ef5f3c2SLevente Révész
102*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ========= ==========
103*5ef5f3c2SLevente Révészcompatible lines interrupt input output invert direction timeout_en
104*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ========= ==========
105*5ef5f3c2SLevente Révészmax7310        8        no    00     01     02        03         04
106*5ef5f3c2SLevente Révészmax7312       16       yes    00     02     04        06         08
107*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ========= ==========
108*5ef5f3c2SLevente Révész
109*5ef5f3c2SLevente RévészChips with additional int_mask register
110*5ef5f3c2SLevente Révész---------------------------------------
111*5ef5f3c2SLevente Révész
112*5ef5f3c2SLevente RévészThese chips have an interrupt mask register in addition to the 4 basic
113*5ef5f3c2SLevente Révészregisters. The interrupt masks default to all interrupts disabled. To
114*5ef5f3c2SLevente Révészuse interrupts with these chips, the driver has to set the int_mask
115*5ef5f3c2SLevente Révészregister.
116*5ef5f3c2SLevente Révész
117*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ========= ========
118*5ef5f3c2SLevente Révészcompatible lines interrupt input output invert direction int_mask
119*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ========= ========
120*5ef5f3c2SLevente Révészpca9505       40       yes    00     08     10        18       20
121*5ef5f3c2SLevente Révészpca9506       40       yes    00     08     10        18       20
122*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ========= ========
123*5ef5f3c2SLevente Révész
124*5ef5f3c2SLevente RévészChips with additional int_mask and out_conf registers
125*5ef5f3c2SLevente Révész-----------------------------------------------------
126*5ef5f3c2SLevente Révész
127*5ef5f3c2SLevente RévészThis chip has an interrupt mask register, and an output port
128*5ef5f3c2SLevente Révészconfiguration register, which can select between push-pull and
129*5ef5f3c2SLevente Révészopen-drain modes. Each bit controls two lines. Both of these registers
130*5ef5f3c2SLevente Révészare present in PCAL chips as well, albeit the out_conf works
131*5ef5f3c2SLevente Révészdifferently.
132*5ef5f3c2SLevente Révész
133*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ========= ======== ========
134*5ef5f3c2SLevente Révészcompatible lines interrupt input output invert direction int_mask out_conf
135*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ========= ======== ========
136*5ef5f3c2SLevente Révészpca9698       40       yes    00     08     10        18       20       28
137*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ========= ======== ========
138*5ef5f3c2SLevente Révész
139*5ef5f3c2SLevente Révészpca9698 also has a "master output" register for setting all outputs per
140*5ef5f3c2SLevente Révészport to the same value simultaneously, and a chip specific mode register
141*5ef5f3c2SLevente Révészfor various additional chip settings.
142*5ef5f3c2SLevente Révész
143*5ef5f3c2SLevente Révész========== ============= ====
144*5ef5f3c2SLevente Révészcompatible master_output mode
145*5ef5f3c2SLevente Révész========== ============= ====
146*5ef5f3c2SLevente Révészpca9698               29   2A
147*5ef5f3c2SLevente Révész========== ============= ====
148*5ef5f3c2SLevente Révész
149*5ef5f3c2SLevente RévészChips with LED blink and intensity control
150*5ef5f3c2SLevente Révész------------------------------------------
151*5ef5f3c2SLevente Révész
152*5ef5f3c2SLevente RévészThese Maxim chips have no invert register.
153*5ef5f3c2SLevente Révész
154*5ef5f3c2SLevente RévészThey have two sets of output registers (output0 and output1). An internal
155*5ef5f3c2SLevente Révésztimer alternates the effective output between the values set in these
156*5ef5f3c2SLevente Révészregisters, if blink mode is enabled in the blink register. The
157*5ef5f3c2SLevente Révészmaster_intensity register and the intensity registers together define
158*5ef5f3c2SLevente Révészthe PWM intensity value for each pair of outputs.
159*5ef5f3c2SLevente Révész
160*5ef5f3c2SLevente RévészThese chips can be used as simple GPIO expanders if the driver handles the
161*5ef5f3c2SLevente Révészinput, output0 and direction registers.
162*5ef5f3c2SLevente Révész
163*5ef5f3c2SLevente Révész========== ===== ========= ===== ======= ========= ======= ================ ===== =========
164*5ef5f3c2SLevente Révészcompatible lines interrupt input output0 direction output1 master_intensity blink intensity
165*5ef5f3c2SLevente Révész========== ===== ========= ===== ======= ========= ======= ================ ===== =========
166*5ef5f3c2SLevente Révészmax7315        8       yes    00      01        03      09               0E    0F        10
167*5ef5f3c2SLevente Révészmax7313       16       yes    00      02        06      0A               0E    0F        10
168*5ef5f3c2SLevente Révész========== ===== ========= ===== ======= ========= ======= ================ ===== =========
169*5ef5f3c2SLevente Révész
170*5ef5f3c2SLevente RévészBasic PCAL chips
171*5ef5f3c2SLevente Révész----------------
172*5ef5f3c2SLevente Révész
173*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== =========
174*5ef5f3c2SLevente Révészcompatible lines interrupt input output invert direction
175*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== =========
176*5ef5f3c2SLevente Révészpcal6408       8       yes    00     01     02        03
177*5ef5f3c2SLevente Révészpcal9554b      8       yes    00     01     02        03
178*5ef5f3c2SLevente Révészpcal6416      16       yes    00     02     04        06
179*5ef5f3c2SLevente Révészpcal9535      16       yes    00     02     04        06
180*5ef5f3c2SLevente Révészpcal9555a     16       yes    00     02     04        06
181*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== =========
182*5ef5f3c2SLevente Révész
183*5ef5f3c2SLevente RévészThese chips have several additional features:
184*5ef5f3c2SLevente Révész
185*5ef5f3c2SLevente Révész    1. output drive strength setting (out_strength)
186*5ef5f3c2SLevente Révész    2. input latch (in_latch)
187*5ef5f3c2SLevente Révész    3. pull-up/pull-down (pull_in, pull_sel)
188*5ef5f3c2SLevente Révész    4. push-pull/open-drain outputs (out_conf)
189*5ef5f3c2SLevente Révész    5. interrupt mask and interrupt status (int_mask, int_status)
190*5ef5f3c2SLevente Révész
191*5ef5f3c2SLevente Révész========== ============ ======== ======= ======== ======== ========== ========
192*5ef5f3c2SLevente Révészcompatible out_strength in_latch pull_en pull_sel int_mask int_status out_conf
193*5ef5f3c2SLevente Révész========== ============ ======== ======= ======== ======== ========== ========
194*5ef5f3c2SLevente Révészpcal6408             40       42      43       44       45         46       4F
195*5ef5f3c2SLevente Révészpcal9554b            40       42      43       44       45         46       4F
196*5ef5f3c2SLevente Révészpcal6416             40       44      46       48       4A         4C       4F
197*5ef5f3c2SLevente Révészpcal9535             40       44      46       48       4A         4C       4F
198*5ef5f3c2SLevente Révészpcal9555a            40       44      46       48       4A         4C       4F
199*5ef5f3c2SLevente Révész========== ============ ======== ======= ======== ======== ========== ========
200*5ef5f3c2SLevente Révész
201*5ef5f3c2SLevente RévészCurrently the driver has support for the input latch, pull-up/pull-down
202*5ef5f3c2SLevente Révészand uses int_mask and int_status for interrupts.
203*5ef5f3c2SLevente Révész
204*5ef5f3c2SLevente RévészPCAL chips with extended interrupt and output configuration functions
205*5ef5f3c2SLevente Révész---------------------------------------------------------------------
206*5ef5f3c2SLevente Révész
207*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== =========
208*5ef5f3c2SLevente Révészcompatible lines interrupt input output invert direction
209*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== =========
210*5ef5f3c2SLevente Révészpcal6524      24       yes    00     04     08        0C
211*5ef5f3c2SLevente Révészpcal6534      34       yes    00     05     0A        0F
212*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== =========
213*5ef5f3c2SLevente Révész
214*5ef5f3c2SLevente RévészThese chips have the full PCAL register set, plus the following functions:
215*5ef5f3c2SLevente Révész
216*5ef5f3c2SLevente Révész    1. interrupt event selection: level, rising, falling, any edge
217*5ef5f3c2SLevente Révész    2. clear interrupt status per line
218*5ef5f3c2SLevente Révész    3. read input without clearing interrupt status
219*5ef5f3c2SLevente Révész    4. individual output config (push-pull/open-drain) per output line
220*5ef5f3c2SLevente Révész    5. debounce inputs
221*5ef5f3c2SLevente Révész
222*5ef5f3c2SLevente Révész========== ============ ======== ======= ======== ======== ========== ========
223*5ef5f3c2SLevente Révészcompatible out_strength in_latch pull_en pull_sel int_mask int_status out_conf
224*5ef5f3c2SLevente Révész========== ============ ======== ======= ======== ======== ========== ========
225*5ef5f3c2SLevente Révészpcal6524             40       48      4C       50       54       58         5C
226*5ef5f3c2SLevente Révészpcal6534             30       3A      3F       44       49       4E         53
227*5ef5f3c2SLevente Révész========== ============ ======== ======= ======== ======== ========== ========
228*5ef5f3c2SLevente Révész
229*5ef5f3c2SLevente Révész========== ======== ========= ============ ============== ======== ==============
230*5ef5f3c2SLevente Révészcompatible int_edge int_clear input_status indiv_out_conf debounce debounce_count
231*5ef5f3c2SLevente Révész========== ======== ========= ============ ============== ======== ==============
232*5ef5f3c2SLevente Révészpcal6524         60        68           6C             70       74             76
233*5ef5f3c2SLevente Révészpcal6534         54        5E           63             68       6D             6F
234*5ef5f3c2SLevente Révész========== ======== ========= ============ ============== ======== ==============
235*5ef5f3c2SLevente Révész
236*5ef5f3c2SLevente RévészAs can be seen in the table above, pcal6534 does not follow the usual
237*5ef5f3c2SLevente Révészbank spacing rule. Its banks are closely packed instead.
238*5ef5f3c2SLevente Révész
239*5ef5f3c2SLevente RévészPCA957X chips with a completely different register layout
240*5ef5f3c2SLevente Révész---------------------------------------------------------
241*5ef5f3c2SLevente Révész
242*5ef5f3c2SLevente RévészThese chips have the basic 4 registers, but at unusual addresses.
243*5ef5f3c2SLevente Révész
244*5ef5f3c2SLevente RévészAdditionally, they have:
245*5ef5f3c2SLevente Révész
246*5ef5f3c2SLevente Révész    1. pull-up/pull-down (pull_sel)
247*5ef5f3c2SLevente Révész    2. a global pull enable, defaults to disabled (config)
248*5ef5f3c2SLevente Révész    3. interrupt mask, interrupt status (int_mask, int_status)
249*5ef5f3c2SLevente Révész
250*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ======== ========= ====== ======== ==========
251*5ef5f3c2SLevente Révészcompatible lines interrupt input invert config pull_sel direction output int_mask int_status
252*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ======== ========= ====== ======== ==========
253*5ef5f3c2SLevente Révészpca9574        8       yes    00     01     02       03        04     05       06         07
254*5ef5f3c2SLevente Révészpca9575       16       yes    00     02     04       06        08     0A       0C         0E
255*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ======== ========= ====== ======== ==========
256*5ef5f3c2SLevente Révész
257*5ef5f3c2SLevente RévészCurrently the driver supports none of the advanced features.
258*5ef5f3c2SLevente Révész
259*5ef5f3c2SLevente RévészXRA1202
260*5ef5f3c2SLevente Révész-------
261*5ef5f3c2SLevente Révész
262*5ef5f3c2SLevente RévészBasic 4 registers, plus advanced features:
263*5ef5f3c2SLevente Révész
264*5ef5f3c2SLevente Révész    1. interrupt mask, defaults to interrupts disabled
265*5ef5f3c2SLevente Révész    2. interrupt status
266*5ef5f3c2SLevente Révész    3. interrupt event selection, level, rising, falling, any edge
267*5ef5f3c2SLevente Révész       (int_mask, rising_mask, falling_mask)
268*5ef5f3c2SLevente Révész    4. pull-up (no pull-down)
269*5ef5f3c2SLevente Révész    5. tri-state
270*5ef5f3c2SLevente Révész    6. debounce
271*5ef5f3c2SLevente Révész
272*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ========= =========
273*5ef5f3c2SLevente Révészcompatible lines interrupt input output invert direction pullup_en
274*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ========= =========
275*5ef5f3c2SLevente Révészxra1202        8       yes    00     01     02        03        04
276*5ef5f3c2SLevente Révész========== ===== ========= ===== ====== ====== ========= =========
277*5ef5f3c2SLevente Révész
278*5ef5f3c2SLevente Révész========== ======== ======== ========== =========== ============ ========
279*5ef5f3c2SLevente Révészcompatible int_mask tristate int_status rising_mask falling_mask debounce
280*5ef5f3c2SLevente Révész========== ======== ======== ========== =========== ============ ========
281*5ef5f3c2SLevente Révészxra1202          05       06         07          08           09       0A
282*5ef5f3c2SLevente Révész========== ======== ======== ========== =========== ============ ========
283*5ef5f3c2SLevente Révész
284*5ef5f3c2SLevente RévészOverview of functions
285*5ef5f3c2SLevente Révész=====================
286*5ef5f3c2SLevente Révész
287*5ef5f3c2SLevente RévészThis section lists chip functions that are supported by the driver
288*5ef5f3c2SLevente Révészalready, or are at least common in multiple chips.
289*5ef5f3c2SLevente Révész
290*5ef5f3c2SLevente RévészInput, Output, Invert, Direction
291*5ef5f3c2SLevente Révész--------------------------------
292*5ef5f3c2SLevente Révész
293*5ef5f3c2SLevente RévészThe basic 4 GPIO functions are present in all but one chip category, i.e.
294*5ef5f3c2SLevente Révész`Chips with LED blink and intensity control`_ are missing the invert
295*5ef5f3c2SLevente Révészregister.
296*5ef5f3c2SLevente Révész
297*5ef5f3c2SLevente Révész3 different layouts are used for these registers:
298*5ef5f3c2SLevente Révész
299*5ef5f3c2SLevente Révész    1. banks 0, 1, 2, 3 with bank offsets of 2^n
300*5ef5f3c2SLevente Révész        - all other chips
301*5ef5f3c2SLevente Révész
302*5ef5f3c2SLevente Révész    2. banks 0, 1, 2, 3 with closely packed banks
303*5ef5f3c2SLevente Révész        - pcal6534
304*5ef5f3c2SLevente Révész
305*5ef5f3c2SLevente Révész    3. banks 0, 5, 1, 4 with bank offsets of 2^n
306*5ef5f3c2SLevente Révész        - pca9574
307*5ef5f3c2SLevente Révész        - pca9575
308*5ef5f3c2SLevente Révész
309*5ef5f3c2SLevente RévészInterrupts
310*5ef5f3c2SLevente Révész----------
311*5ef5f3c2SLevente Révész
312*5ef5f3c2SLevente RévészOnly an interrupt mask register
313*5ef5f3c2SLevente Révész~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
314*5ef5f3c2SLevente RévészThe same layout is used for all of these:
315*5ef5f3c2SLevente Révész
316*5ef5f3c2SLevente Révész    1. bank 5 with bank offsets of 2^n
317*5ef5f3c2SLevente Révész        - pca9505
318*5ef5f3c2SLevente Révész        - pca9506
319*5ef5f3c2SLevente Révész        - pca9698
320*5ef5f3c2SLevente Révész
321*5ef5f3c2SLevente RévészInterrupt mask and interrupt status registers
322*5ef5f3c2SLevente Révész~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
323*5ef5f3c2SLevente RévészThese work the same way in all of the chips: mask and status have
324*5ef5f3c2SLevente Révészone bit per line, 1 in the mask means interrupt enabled.
325*5ef5f3c2SLevente Révész
326*5ef5f3c2SLevente RévészLayouts:
327*5ef5f3c2SLevente Révész
328*5ef5f3c2SLevente Révész    1. base offset 0x40, bank 5 and bank 6, bank offsets of 2^n
329*5ef5f3c2SLevente Révész        - pcal6408
330*5ef5f3c2SLevente Révész        - pcal6416
331*5ef5f3c2SLevente Révész        - pcal9535
332*5ef5f3c2SLevente Révész        - pcal9554b
333*5ef5f3c2SLevente Révész        - pcal9555a
334*5ef5f3c2SLevente Révész        - pcal6524
335*5ef5f3c2SLevente Révész
336*5ef5f3c2SLevente Révész    2. base offset 0x30, bank 5 and 6, closely packed banks
337*5ef5f3c2SLevente Révész        - pcal6534
338*5ef5f3c2SLevente Révész
339*5ef5f3c2SLevente Révész    3. bank 6 and 7, bank offsets of 2^n
340*5ef5f3c2SLevente Révész        - pca9574
341*5ef5f3c2SLevente Révész        - pca9575
342*5ef5f3c2SLevente Révész
343*5ef5f3c2SLevente Révész    4. bank 5 and 7, bank offsets of 2^n
344*5ef5f3c2SLevente Révész        - xra1202
345*5ef5f3c2SLevente Révész
346*5ef5f3c2SLevente RévészInterrupt on specific edges
347*5ef5f3c2SLevente Révész~~~~~~~~~~~~~~~~~~~~~~~~~~~
348*5ef5f3c2SLevente Révész`PCAL chips with extended interrupt and output configuration functions`_
349*5ef5f3c2SLevente Révészhave an int_edge register. This contains 2 bits per line, one of 4 events
350*5ef5f3c2SLevente Révészcan be selected for each line:
351*5ef5f3c2SLevente Révész
352*5ef5f3c2SLevente Révész    0: level, 1: rising edge, 2: falling edge, 3: any edge
353*5ef5f3c2SLevente Révész
354*5ef5f3c2SLevente RévészLayouts:
355*5ef5f3c2SLevente Révész
356*5ef5f3c2SLevente Révész    1. base offset 0x40, bank 7, bank offsets of 2^n
357*5ef5f3c2SLevente Révész
358*5ef5f3c2SLevente Révész        - pcal6524
359*5ef5f3c2SLevente Révész
360*5ef5f3c2SLevente Révész    2. base offset 0x30, bank 7 + offset 0x01, closely packed banks
361*5ef5f3c2SLevente Révész       (out_conf is 1 byte, not (lines/8) bytes, hence the 0x01 offset)
362*5ef5f3c2SLevente Révész
363*5ef5f3c2SLevente Révész        - pcal6534
364*5ef5f3c2SLevente Révész
365*5ef5f3c2SLevente Révész`XRA1202`_ chips have a different mechanism for the same thing: they have
366*5ef5f3c2SLevente Révésza rising mask and a falling mask, with one bit per line.
367*5ef5f3c2SLevente Révész
368*5ef5f3c2SLevente RévészLayout:
369*5ef5f3c2SLevente Révész
370*5ef5f3c2SLevente Révész    1. bank 5, bank offsets of 2^n
371*5ef5f3c2SLevente Révész
372*5ef5f3c2SLevente RévészInput latch
373*5ef5f3c2SLevente Révész-----------
374*5ef5f3c2SLevente Révész
375*5ef5f3c2SLevente RévészOnly `Basic PCAL chips`_ and
376*5ef5f3c2SLevente Révész`PCAL chips with extended interrupt and output configuration functions`_
377*5ef5f3c2SLevente Révészhave this function. When the latch is enabled, the interrupt is not cleared
378*5ef5f3c2SLevente Révészuntil the input port is read. When the latch is disabled, the interrupt
379*5ef5f3c2SLevente Révészis cleared even if the input register is not read, if the input pin returns
380*5ef5f3c2SLevente Révészto the logic value it had before generating the interrupt. Defaults to latch
381*5ef5f3c2SLevente Révészdisabled.
382*5ef5f3c2SLevente Révész
383*5ef5f3c2SLevente RévészCurrently the driver enables the latch for each line with interrupt
384*5ef5f3c2SLevente Révészenabled.
385*5ef5f3c2SLevente Révész
386*5ef5f3c2SLevente Révész    1. base offset 0x40, bank 2, bank offsets of 2^n
387*5ef5f3c2SLevente Révész        - pcal6408
388*5ef5f3c2SLevente Révész        - pcal6416
389*5ef5f3c2SLevente Révész        - pcal9535
390*5ef5f3c2SLevente Révész        - pcal9554b
391*5ef5f3c2SLevente Révész        - pcal9555a
392*5ef5f3c2SLevente Révész        - pcal6524
393*5ef5f3c2SLevente Révész
394*5ef5f3c2SLevente Révész    2. base offset 0x30, bank 2, closely packed banks
395*5ef5f3c2SLevente Révész        - pcal6534
396*5ef5f3c2SLevente Révész
397*5ef5f3c2SLevente RévészPull-up and pull-down
398*5ef5f3c2SLevente Révész---------------------
399*5ef5f3c2SLevente Révész
400*5ef5f3c2SLevente Révész`Basic PCAL chips`_ and
401*5ef5f3c2SLevente Révész`PCAL chips with extended interrupt and output configuration functions`_
402*5ef5f3c2SLevente Révészuse the same mechanism: their pull_en register enables the pull-up or pull-down
403*5ef5f3c2SLevente Révészfunction, and their pull_sel register chooses the direction. They all use one
404*5ef5f3c2SLevente Révészbit per line.
405*5ef5f3c2SLevente Révész
406*5ef5f3c2SLevente Révész    0: pull-down, 1: pull-up
407*5ef5f3c2SLevente Révész
408*5ef5f3c2SLevente RévészLayouts:
409*5ef5f3c2SLevente Révész
410*5ef5f3c2SLevente Révész    1. base offset 0x40, bank 3 (en) and 4 (sel), bank offsets of 2^n
411*5ef5f3c2SLevente Révész        - pcal6408
412*5ef5f3c2SLevente Révész        - pcal6416
413*5ef5f3c2SLevente Révész        - pcal9535
414*5ef5f3c2SLevente Révész        - pcal9554b
415*5ef5f3c2SLevente Révész        - pcal9555a
416*5ef5f3c2SLevente Révész        - pcal6524
417*5ef5f3c2SLevente Révész
418*5ef5f3c2SLevente Révész    2. base offset 0x30, bank 3 (en) and 4 (sel), closely packed banks
419*5ef5f3c2SLevente Révész        - pcal6534
420*5ef5f3c2SLevente Révész
421*5ef5f3c2SLevente Révész`PCA957X chips with a completely different register layout`_ have a pull_sel
422*5ef5f3c2SLevente Révészregister with one bit per line, and a global pull_en bit in their config
423*5ef5f3c2SLevente Révészregister.
424*5ef5f3c2SLevente Révész
425*5ef5f3c2SLevente RévészLayout:
426*5ef5f3c2SLevente Révész
427*5ef5f3c2SLevente Révész    1. bank 2 (config), bank 3 (sel), bank offsets of 2^n
428*5ef5f3c2SLevente Révész        - pca9574
429*5ef5f3c2SLevente Révész        - pca9575
430*5ef5f3c2SLevente Révész
431*5ef5f3c2SLevente Révész`XRA1202`_ chips can only pull-up. They have a pullup_en register.
432*5ef5f3c2SLevente Révész
433*5ef5f3c2SLevente RévészLayout:
434*5ef5f3c2SLevente Révész
435*5ef5f3c2SLevente Révész    1. bank 4, bank offsets of 2^n
436*5ef5f3c2SLevente Révész        - xra1202
437*5ef5f3c2SLevente Révész
438*5ef5f3c2SLevente RévészPush-pull and open-drain
439*5ef5f3c2SLevente Révész------------------------
440*5ef5f3c2SLevente Révész
441*5ef5f3c2SLevente Révész`Chips with additional int_mask and out_conf registers`_ have this function,
442*5ef5f3c2SLevente Révészbut only for select IO ports. Register has 1 bit per 2 lines. In pca9698,
443*5ef5f3c2SLevente Révészonly port0 and port1 have this function.
444*5ef5f3c2SLevente Révész
445*5ef5f3c2SLevente Révész    0: open-drain, 1: push-pull
446*5ef5f3c2SLevente Révész
447*5ef5f3c2SLevente RévészLayout:
448*5ef5f3c2SLevente Révész
449*5ef5f3c2SLevente Révész    1. base offset 5*bankoffset
450*5ef5f3c2SLevente Révész        - pca9698
451*5ef5f3c2SLevente Révész
452*5ef5f3c2SLevente Révész`Basic PCAL chips`_ have 1 bit per port in one single out_conf register.
453*5ef5f3c2SLevente RévészOnly whole ports can be configured.
454*5ef5f3c2SLevente Révész
455*5ef5f3c2SLevente Révész    0: push-pull, 1: open-drain
456*5ef5f3c2SLevente Révész
457*5ef5f3c2SLevente RévészLayout:
458*5ef5f3c2SLevente Révész
459*5ef5f3c2SLevente Révész    1. base offset 0x4F
460*5ef5f3c2SLevente Révész        - pcal6408
461*5ef5f3c2SLevente Révész        - pcal6416
462*5ef5f3c2SLevente Révész        - pcal9535
463*5ef5f3c2SLevente Révész        - pcal9554b
464*5ef5f3c2SLevente Révész        - pcal9555a
465*5ef5f3c2SLevente Révész
466*5ef5f3c2SLevente Révész`PCAL chips with extended interrupt and output configuration functions`_
467*5ef5f3c2SLevente Révészcan set this for each line individually. They have the same per-port out_conf
468*5ef5f3c2SLevente Révészregister as `Basic PCAL chips`_, but they also have an indiv_out_conf register
469*5ef5f3c2SLevente Révészwith one bit per line, which inverts the effect of the port-wise setting.
470*5ef5f3c2SLevente Révész
471*5ef5f3c2SLevente Révész    0: push-pull, 1: open-drain
472*5ef5f3c2SLevente Révész
473*5ef5f3c2SLevente RévészLayouts:
474*5ef5f3c2SLevente Révész
475*5ef5f3c2SLevente Révész    1. base offset 0x40 + 7*bankoffset (out_conf),
476*5ef5f3c2SLevente Révész       base offset 0x60, bank 4 (indiv_out_conf) with bank offset of 2^n
477*5ef5f3c2SLevente Révész
478*5ef5f3c2SLevente Révész        - pcal6524
479*5ef5f3c2SLevente Révész
480*5ef5f3c2SLevente Révész    2. base offset 0x30 + 7*banksize (out_conf),
481*5ef5f3c2SLevente Révész       base offset 0x54, bank 4 (indiv_out_conf), closely packed banks
482*5ef5f3c2SLevente Révész
483*5ef5f3c2SLevente Révész        - pcal6534
484*5ef5f3c2SLevente Révész
485*5ef5f3c2SLevente RévészThis function is currently not supported by the driver.
486*5ef5f3c2SLevente Révész
487*5ef5f3c2SLevente RévészOutput drive strength
488*5ef5f3c2SLevente Révész---------------------
489*5ef5f3c2SLevente Révész
490*5ef5f3c2SLevente RévészOnly PCAL chips have this function. 2 bits per line.
491*5ef5f3c2SLevente Révész
492*5ef5f3c2SLevente Révész==== ==============
493*5ef5f3c2SLevente Révészbits drive strength
494*5ef5f3c2SLevente Révész==== ==============
495*5ef5f3c2SLevente Révész  00          0.25x
496*5ef5f3c2SLevente Révész  01          0.50x
497*5ef5f3c2SLevente Révész  10          0.75x
498*5ef5f3c2SLevente Révész  11          1.00x
499*5ef5f3c2SLevente Révész==== ==============
500*5ef5f3c2SLevente Révész
501*5ef5f3c2SLevente Révész    1. base offset 0x40, bank 0 and 1, bank offsets of 2^n
502*5ef5f3c2SLevente Révész        - pcal6408
503*5ef5f3c2SLevente Révész        - pcal6416
504*5ef5f3c2SLevente Révész        - pcal9535
505*5ef5f3c2SLevente Révész        - pcal9554b
506*5ef5f3c2SLevente Révész        - pcal9555a
507*5ef5f3c2SLevente Révész        - pcal6524
508*5ef5f3c2SLevente Révész
509*5ef5f3c2SLevente Révész    2. base offset 0x30, bank 0 and 1, closely packed banks
510*5ef5f3c2SLevente Révész        - pcal6534
511*5ef5f3c2SLevente Révész
512*5ef5f3c2SLevente RévészCurrently not supported by the driver.
513*5ef5f3c2SLevente Révész
514*5ef5f3c2SLevente RévészDatasheets
515*5ef5f3c2SLevente Révész==========
516*5ef5f3c2SLevente Révész
517*5ef5f3c2SLevente Révész- MAX7310: https://datasheets.maximintegrated.com/en/ds/MAX7310.pdf
518*5ef5f3c2SLevente Révész- MAX7312: https://datasheets.maximintegrated.com/en/ds/MAX7312.pdf
519*5ef5f3c2SLevente Révész- MAX7313: https://datasheets.maximintegrated.com/en/ds/MAX7313.pdf
520*5ef5f3c2SLevente Révész- MAX7315: https://datasheets.maximintegrated.com/en/ds/MAX7315.pdf
521*5ef5f3c2SLevente Révész- MAX7318: https://datasheets.maximintegrated.com/en/ds/MAX7318.pdf
522*5ef5f3c2SLevente Révész- PCA6107: https://pdf1.alldatasheet.com/datasheet-pdf/view/161780/TI/PCA6107.html
523*5ef5f3c2SLevente Révész- PCA6408A: https://www.nxp.com/docs/en/data-sheet/PCA6408A.pdf
524*5ef5f3c2SLevente Révész- PCA6416A: https://www.nxp.com/docs/en/data-sheet/PCA6416A.pdf
525*5ef5f3c2SLevente Révész- PCA9505: https://www.nxp.com/docs/en/data-sheet/PCA9505_9506.pdf
526*5ef5f3c2SLevente Révész- PCA9505: https://www.nxp.com/docs/en/data-sheet/PCA9505_9506.pdf
527*5ef5f3c2SLevente Révész- PCA9534: https://www.nxp.com/docs/en/data-sheet/PCA9534.pdf
528*5ef5f3c2SLevente Révész- PCA9535: https://www.nxp.com/docs/en/data-sheet/PCA9535_PCA9535C.pdf
529*5ef5f3c2SLevente Révész- PCA9536: https://www.nxp.com/docs/en/data-sheet/PCA9536.pdf
530*5ef5f3c2SLevente Révész- PCA9537: https://www.nxp.com/docs/en/data-sheet/PCA9537.pdf
531*5ef5f3c2SLevente Révész- PCA9538: https://www.nxp.com/docs/en/data-sheet/PCA9538.pdf
532*5ef5f3c2SLevente Révész- PCA9539: https://www.nxp.com/docs/en/data-sheet/PCA9539_PCA9539R.pdf
533*5ef5f3c2SLevente Révész- PCA9554: https://www.nxp.com/docs/en/data-sheet/PCA9554_9554A.pdf
534*5ef5f3c2SLevente Révész- PCA9555: https://www.nxp.com/docs/en/data-sheet/PCA9555.pdf
535*5ef5f3c2SLevente Révész- PCA9556: https://www.nxp.com/docs/en/data-sheet/PCA9556.pdf
536*5ef5f3c2SLevente Révész- PCA9557: https://www.nxp.com/docs/en/data-sheet/PCA9557.pdf
537*5ef5f3c2SLevente Révész- PCA9574: https://www.nxp.com/docs/en/data-sheet/PCA9574.pdf
538*5ef5f3c2SLevente Révész- PCA9575: https://www.nxp.com/docs/en/data-sheet/PCA9575.pdf
539*5ef5f3c2SLevente Révész- PCA9698: https://www.nxp.com/docs/en/data-sheet/PCA9698.pdf
540*5ef5f3c2SLevente Révész- PCAL6408A: https://www.nxp.com/docs/en/data-sheet/PCAL6408A.pdf
541*5ef5f3c2SLevente Révész- PCAL6416A: https://www.nxp.com/docs/en/data-sheet/PCAL6416A.pdf
542*5ef5f3c2SLevente Révész- PCAL6524: https://www.nxp.com/docs/en/data-sheet/PCAL6524.pdf
543*5ef5f3c2SLevente Révész- PCAL6534: https://www.nxp.com/docs/en/data-sheet/PCAL6534.pdf
544*5ef5f3c2SLevente Révész- PCAL9535A: https://www.nxp.com/docs/en/data-sheet/PCAL9535A.pdf
545*5ef5f3c2SLevente Révész- PCAL9554B: https://www.nxp.com/docs/en/data-sheet/PCAL9554B_PCAL9554C.pdf
546*5ef5f3c2SLevente Révész- PCAL9555A: https://www.nxp.com/docs/en/data-sheet/PCAL9555A.pdf
547*5ef5f3c2SLevente Révész- TCA6408A: https://www.ti.com/lit/gpn/tca6408a
548*5ef5f3c2SLevente Révész- TCA6416: https://www.ti.com/lit/gpn/tca6416
549*5ef5f3c2SLevente Révész- TCA6424: https://www.ti.com/lit/gpn/tca6424
550*5ef5f3c2SLevente Révész- TCA9539: https://www.ti.com/lit/gpn/tca9539
551*5ef5f3c2SLevente Révész- TCA9554: https://www.ti.com/lit/gpn/tca9554
552*5ef5f3c2SLevente Révész- XRA1202: https://assets.maxlinear.com/web/documents/xra1202_1202p_101_042213.pdf
553