1 // Overlay for MCP23S08/17 GPIO Extenders from Microchip Semiconductor
4 // s08-spi<n>-<m>-present - 4-bit integer, bitmap indicating MCP23S08 devices present on SPI<n>, CS#<m>.
5 // s17-spi<n>-<m>-present - 8-bit integer, bitmap indicating MCP23S17 devices present on SPI<n>, CS#<m>.
6 // s08-spi<n>-<m>-int-gpio - integer, enables interrupts on a single MCP23S08 device on SPI<n>, CS#<m>, specifies the GPIO pin to which INT output is connected.
7 // s17-spi<n>-<m>-int-gpio - integer, enables mirrored interrupts on a single MCP23S17 device on SPI<n>, CS#<m>, specifies the GPIO pin to which either INTA or INTB output is connected.
9 // If devices are present on SPI1 or SPI2, those interfaces must be enabled with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
10 // If interrupts are enabled for a device on a given CS# on a SPI bus, that device must be the only one present on that SPI bus/CS#.
12 // Example 1: A single MCP23S17 device on SPI0, CS#0 with its SPI addr set to 0 and INTA output connected to GPIO25:
13 // dtoverlay=mcp23s17:s17-spi0-0-present=1,s17-spi0-0-int-gpio=25
15 // Example 2: Two MCP23S08 devices on SPI1, CS#0 with their addrs set to 2 and 3. Three MCP23S17 devices on SPI1, CS#1 with their addrs set to 0, 1 and 7:
17 // dtoverlay=mcp23s17:s08-spi1-0-present=12,s17-spi1-1-present=131
23 compatible = "brcm,bcm2835";
25 // disable spi-dev on spi0.0
33 // disable spi-dev on spi0.1
41 // disable spi-dev on spi1.0
43 target-path = "spi1/spidev@0";
49 // disable spi-dev on spi1.1
51 target-path = "spi1/spidev@1";
57 // disable spi-dev on spi1.2
59 target-path = "spi1/spidev@2";
65 // disable spi-dev on spi2.0
67 target-path = "spi2/spidev@0";
73 // disable spi-dev on spi2.1
75 target-path = "spi2/spidev@1";
81 // disable spi-dev on spi2.2
83 target-path = "spi2/spidev@2";
89 // enable one or more mcp23s08s on spi0.0
96 mcp23s08_00: mcp23s08@0 {
97 compatible = "microchip,mcp23s08";
100 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi0-0-present parameter */
102 spi-max-frequency = <500000>;
104 #interrupt-cells=<2>;
105 interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi0-0-int-gpio parameter */
110 // enable one or more mcp23s08s on spi0.1
115 #address-cells = <1>;
117 mcp23s08_01: mcp23s08@1 {
118 compatible = "microchip,mcp23s08";
121 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi0-1-present parameter */
123 spi-max-frequency = <500000>;
125 #interrupt-cells=<2>;
126 interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi0-1-int-gpio parameter */
131 // enable one or more mcp23s08s on spi1.0
136 #address-cells = <1>;
138 mcp23s08_10: mcp23s08@0 {
139 compatible = "microchip,mcp23s08";
142 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi1-0-present parameter */
144 spi-max-frequency = <500000>;
146 #interrupt-cells=<2>;
147 interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi1-0-int-gpio parameter */
152 // enable one or more mcp23s08s on spi1.1
157 #address-cells = <1>;
159 mcp23s08_11: mcp23s08@1 {
160 compatible = "microchip,mcp23s08";
163 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi1-1-present parameter */
165 spi-max-frequency = <500000>;
167 #interrupt-cells=<2>;
168 interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi1-1-int-gpio parameter */
173 // enable one or more mcp23s08s on spi1.2
178 #address-cells = <1>;
180 mcp23s08_12: mcp23s08@2 {
181 compatible = "microchip,mcp23s08";
184 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi1-2-present parameter */
186 spi-max-frequency = <500000>;
188 #interrupt-cells=<2>;
189 interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi1-2-int-gpio parameter */
194 // enable one or more mcp23s08s on spi2.0
199 #address-cells = <1>;
201 mcp23s08_20: mcp23s08@0 {
202 compatible = "microchip,mcp23s08";
205 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi2-0-present parameter */
207 spi-max-frequency = <500000>;
209 #interrupt-cells=<2>;
210 interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi2-0-int-gpio parameter */
215 // enable one or more mcp23s08s on spi2.1
220 #address-cells = <1>;
222 mcp23s08_21: mcp23s08@1 {
223 compatible = "microchip,mcp23s08";
226 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi2-1-present parameter */
228 spi-max-frequency = <500000>;
230 #interrupt-cells=<2>;
231 interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi2-1-int-gpio parameter */
236 // enable one or more mcp23s08s on spi2.2
241 #address-cells = <1>;
243 mcp23s08_22: mcp23s08@2 {
244 compatible = "microchip,mcp23s08";
247 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi2-2-present parameter */
249 spi-max-frequency = <500000>;
251 #interrupt-cells=<2>;
252 interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi2-2-int-gpio parameter */
257 // enable one or more mcp23s17s on spi0.0
262 #address-cells = <1>;
264 mcp23s17_00: mcp23s17@0 {
265 compatible = "microchip,mcp23s17";
268 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi0-0-present parameter */
270 spi-max-frequency = <500000>;
272 #interrupt-cells=<2>;
273 interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi0-0-int-gpio parameter */
278 // enable one or more mcp23s17s on spi0.1
283 #address-cells = <1>;
285 mcp23s17_01: mcp23s17@1 {
286 compatible = "microchip,mcp23s17";
289 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi0-1-present parameter */
291 spi-max-frequency = <500000>;
293 #interrupt-cells=<2>;
294 interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi0-1-int-gpio parameter */
299 // enable one or more mcp23s17s on spi1.0
304 #address-cells = <1>;
306 mcp23s17_10: mcp23s17@0 {
307 compatible = "microchip,mcp23s17";
310 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi1-0-present parameter */
312 spi-max-frequency = <500000>;
314 #interrupt-cells=<2>;
315 interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi1-0-int-gpio parameter */
320 // enable one or more mcp23s17s on spi1.1
325 #address-cells = <1>;
327 mcp23s17_11: mcp23s17@1 {
328 compatible = "microchip,mcp23s17";
331 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi1-1-present parameter */
333 spi-max-frequency = <500000>;
335 #interrupt-cells=<2>;
336 interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi1-1-int-gpio parameter */
341 // enable one or more mcp23s17s on spi1.2
346 #address-cells = <1>;
348 mcp23s17_12: mcp23s17@2 {
349 compatible = "microchip,mcp23s17";
352 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi1-2-present parameter */
354 spi-max-frequency = <500000>;
356 #interrupt-cells=<2>;
357 interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi1-2-int-gpio parameter */
362 // enable one or more mcp23s17s on spi2.0
367 #address-cells = <1>;
369 mcp23s17_20: mcp23s17@0 {
370 compatible = "microchip,mcp23s17";
373 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi2-0-present parameter */
375 spi-max-frequency = <500000>;
377 #interrupt-cells=<2>;
378 interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi2-0-int-gpio parameter */
383 // enable one or more mcp23s17s on spi2.1
388 #address-cells = <1>;
390 mcp23s17_21: mcp23s17@1 {
391 compatible = "microchip,mcp23s17";
394 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi2-1-present parameter */
396 spi-max-frequency = <500000>;
398 #interrupt-cells=<2>;
399 interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi2-1-int-gpio parameter */
404 // enable one or more mcp23s17s on spi2.2
409 #address-cells = <1>;
411 mcp23s17_22: mcp23s17@2 {
412 compatible = "microchip,mcp23s17";
415 microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi2-2-present parameter */
417 spi-max-frequency = <500000>;
419 #interrupt-cells=<2>;
420 interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi2-2-int-gpio parameter */
425 // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi0.0 as a input with no pull-up/down
429 spi0_0_int_pins: spi0_0_int_pins {
430 brcm,pins = <0>; /* overwritten by mcp23s08/17-spi0-0-int-gpio parameter */
437 // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi0.1 as a input with no pull-up/down
441 spi0_1_int_pins: spi0_1_int_pins {
442 brcm,pins = <0>; /* overwritten by mcp23s08/17-spi0-1-int-gpio parameter */
449 // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi1.0 as a input with no pull-up/down
453 spi1_0_int_pins: spi1_0_int_pins {
454 brcm,pins = <0>; /* overwritten by mcp23s08/17-spi1-0-int-gpio parameter */
461 // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi1.1 as a input with no pull-up/down
465 spi1_1_int_pins: spi1_1_int_pins {
466 brcm,pins = <0>; /* overwritten by mcp23s08/17-spi1-1-int-gpio parameter */
473 // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi1.2 as a input with no pull-up/down
477 spi1_2_int_pins: spi1_2_int_pins {
478 brcm,pins = <0>; /* overwritten by mcp23s08/17-spi1-2-int-gpio parameter */
485 // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi2.0 as a input with no pull-up/down
489 spi2_0_int_pins: spi2_0_int_pins {
490 brcm,pins = <0>; /* overwritten by mcp23s08/17-spi2-0-int-gpio parameter */
497 // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi2.1 as a input with no pull-up/down
501 spi2_1_int_pins: spi2_1_int_pins {
502 brcm,pins = <0>; /* overwritten by mcp23s08/17-spi2-1-int-gpio parameter */
509 // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi2.2 as a input with no pull-up/down
513 spi2_2_int_pins: spi2_2_int_pins {
514 brcm,pins = <0>; /* overwritten by mcp23s08/17-spi2-2-int-gpio parameter */
521 // Enable interrupts for a mcp23s08 on spi0.0.
522 // Use default active low interrupt signalling.
524 target = <&mcp23s08_00>;
526 interrupt-parent = <&gpio>;
527 interrupt-controller;
531 // Enable interrupts for a mcp23s08 on spi0.1.
532 // Use default active low interrupt signalling.
534 target = <&mcp23s08_01>;
536 interrupt-parent = <&gpio>;
537 interrupt-controller;
541 // Enable interrupts for a mcp23s08 on spi1.0.
542 // Use default active low interrupt signalling.
544 target = <&mcp23s08_10>;
546 interrupt-parent = <&gpio>;
547 interrupt-controller;
551 // Enable interrupts for a mcp23s08 on spi1.1.
552 // Use default active low interrupt signalling.
554 target = <&mcp23s08_11>;
556 interrupt-parent = <&gpio>;
557 interrupt-controller;
561 // Enable interrupts for a mcp23s08 on spi1.2.
562 // Use default active low interrupt signalling.
564 target = <&mcp23s08_12>;
566 interrupt-parent = <&gpio>;
567 interrupt-controller;
571 // Enable interrupts for a mcp23s08 on spi2.0.
572 // Use default active low interrupt signalling.
574 target = <&mcp23s08_20>;
576 interrupt-parent = <&gpio>;
577 interrupt-controller;
581 // Enable interrupts for a mcp23s08 on spi2.1.
582 // Use default active low interrupt signalling.
584 target = <&mcp23s08_21>;
586 interrupt-parent = <&gpio>;
587 interrupt-controller;
591 // Enable interrupts for a mcp23s08 on spi2.2.
592 // Use default active low interrupt signalling.
594 target = <&mcp23s08_22>;
596 interrupt-parent = <&gpio>;
597 interrupt-controller;
601 // Enable interrupts for a mcp23s17 on spi0.0.
602 // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
603 // Use default active low interrupt signalling.
605 target = <&mcp23s17_00>;
607 interrupt-parent = <&gpio>;
608 interrupt-controller;
609 microchip,irq-mirror;
613 // Enable interrupts for a mcp23s17 on spi0.1.
614 // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
615 // Configure INTA/B outputs of mcp23s08/17 as active low.
617 target = <&mcp23s17_01>;
619 interrupt-parent = <&gpio>;
620 interrupt-controller;
621 microchip,irq-mirror;
625 // Enable interrupts for a mcp23s17 on spi1.0.
626 // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
627 // Configure INTA/B outputs of mcp23s08/17 as active low.
629 target = <&mcp23s17_10>;
631 interrupt-parent = <&gpio>;
632 interrupt-controller;
633 microchip,irq-mirror;
637 // Enable interrupts for a mcp23s17 on spi1.1.
638 // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
639 // Configure INTA/B outputs of mcp23s08/17 as active low.
641 target = <&mcp23s17_11>;
643 interrupt-parent = <&gpio>;
644 interrupt-controller;
645 microchip,irq-mirror;
649 // Enable interrupts for a mcp23s17 on spi1.2.
650 // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
651 // Configure INTA/B outputs of mcp23s08/17 as active low.
653 target = <&mcp23s17_12>;
655 interrupt-parent = <&gpio>;
656 interrupt-controller;
657 microchip,irq-mirror;
661 // Enable interrupts for a mcp23s17 on spi2.0.
662 // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
663 // Configure INTA/B outputs of mcp23s08/17 as active low.
665 target = <&mcp23s17_20>;
667 interrupt-parent = <&gpio>;
668 interrupt-controller;
669 microchip,irq-mirror;
673 // Enable interrupts for a mcp23s17 on spi2.1.
674 // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
675 // Configure INTA/B outputs of mcp23s08/17 as active low.
677 target = <&mcp23s17_21>;
679 interrupt-parent = <&gpio>;
680 interrupt-controller;
681 microchip,irq-mirror;
685 // Enable interrupts for a mcp23s17 on spi2.2.
686 // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin.
687 // Configure INTA/B outputs of mcp23s08/17 as active low.
689 target = <&mcp23s17_22>;
691 interrupt-parent = <&gpio>;
692 interrupt-controller;
693 microchip,irq-mirror;
698 s08-spi0-0-present = <0>,"+0+8", <&mcp23s08_00>,"microchip,spi-present-mask:0";
699 s08-spi0-1-present = <0>,"+1+9", <&mcp23s08_01>,"microchip,spi-present-mask:0";
700 s08-spi1-0-present = <0>,"+2+10", <&mcp23s08_10>,"microchip,spi-present-mask:0";
701 s08-spi1-1-present = <0>,"+3+11", <&mcp23s08_11>,"microchip,spi-present-mask:0";
702 s08-spi1-2-present = <0>,"+4+12", <&mcp23s08_12>,"microchip,spi-present-mask:0";
703 s08-spi2-0-present = <0>,"+5+13", <&mcp23s08_20>,"microchip,spi-present-mask:0";
704 s08-spi2-1-present = <0>,"+6+14", <&mcp23s08_21>,"microchip,spi-present-mask:0";
705 s08-spi2-2-present = <0>,"+7+15", <&mcp23s08_22>,"microchip,spi-present-mask:0";
706 s17-spi0-0-present = <0>,"+0+16", <&mcp23s17_00>,"microchip,spi-present-mask:0";
707 s17-spi0-1-present = <0>,"+1+17", <&mcp23s17_01>,"microchip,spi-present-mask:0";
708 s17-spi1-0-present = <0>,"+2+18", <&mcp23s17_10>,"microchip,spi-present-mask:0";
709 s17-spi1-1-present = <0>,"+3+19", <&mcp23s17_11>,"microchip,spi-present-mask:0";
710 s17-spi1-2-present = <0>,"+4+20", <&mcp23s17_12>,"microchip,spi-present-mask:0";
711 s17-spi2-0-present = <0>,"+5+21", <&mcp23s17_20>,"microchip,spi-present-mask:0";
712 s17-spi2-1-present = <0>,"+6+22", <&mcp23s17_21>,"microchip,spi-present-mask:0";
713 s17-spi2-2-present = <0>,"+7+23", <&mcp23s17_22>,"microchip,spi-present-mask:0";
714 s08-spi0-0-int-gpio = <0>,"+24+32", <&spi0_0_int_pins>,"brcm,pins:0", <&mcp23s08_00>,"interrupts:0";
715 s08-spi0-1-int-gpio = <0>,"+25+33", <&spi0_1_int_pins>,"brcm,pins:0", <&mcp23s08_01>,"interrupts:0";
716 s08-spi1-0-int-gpio = <0>,"+26+34", <&spi1_0_int_pins>,"brcm,pins:0", <&mcp23s08_10>,"interrupts:0";
717 s08-spi1-1-int-gpio = <0>,"+27+35", <&spi1_1_int_pins>,"brcm,pins:0", <&mcp23s08_11>,"interrupts:0";
718 s08-spi1-2-int-gpio = <0>,"+28+36", <&spi1_2_int_pins>,"brcm,pins:0", <&mcp23s08_12>,"interrupts:0";
719 s08-spi2-0-int-gpio = <0>,"+29+37", <&spi2_0_int_pins>,"brcm,pins:0", <&mcp23s08_20>,"interrupts:0";
720 s08-spi2-1-int-gpio = <0>,"+30+38", <&spi2_1_int_pins>,"brcm,pins:0", <&mcp23s08_21>,"interrupts:0";
721 s08-spi2-2-int-gpio = <0>,"+31+39", <&spi2_2_int_pins>,"brcm,pins:0", <&mcp23s08_22>,"interrupts:0";
722 s17-spi0-0-int-gpio = <0>,"+24+40", <&spi0_0_int_pins>,"brcm,pins:0", <&mcp23s17_00>,"interrupts:0";
723 s17-spi0-1-int-gpio = <0>,"+25+41", <&spi0_1_int_pins>,"brcm,pins:0", <&mcp23s17_01>,"interrupts:0";
724 s17-spi1-0-int-gpio = <0>,"+26+42", <&spi1_0_int_pins>,"brcm,pins:0", <&mcp23s17_10>,"interrupts:0";
725 s17-spi1-1-int-gpio = <0>,"+27+43", <&spi1_1_int_pins>,"brcm,pins:0", <&mcp23s17_11>,"interrupts:0";
726 s17-spi1-2-int-gpio = <0>,"+28+44", <&spi1_2_int_pins>,"brcm,pins:0", <&mcp23s17_12>,"interrupts:0";
727 s17-spi2-0-int-gpio = <0>,"+29+45", <&spi2_0_int_pins>,"brcm,pins:0", <&mcp23s17_20>,"interrupts:0";
728 s17-spi2-1-int-gpio = <0>,"+30+46", <&spi2_1_int_pins>,"brcm,pins:0", <&mcp23s17_21>,"interrupts:0";
729 s17-spi2-2-int-gpio = <0>,"+31+47", <&spi2_2_int_pins>,"brcm,pins:0", <&mcp23s17_22>,"interrupts:0";