// Overlay for MCP23S08/17 GPIO Extenders from Microchip Semiconductor // dtparams: // s08-spi--present - 4-bit integer, bitmap indicating MCP23S08 devices present on SPI, CS#. // s17-spi--present - 8-bit integer, bitmap indicating MCP23S17 devices present on SPI, CS#. // s08-spi--int-gpio - integer, enables interrupts on a single MCP23S08 device on SPI, CS#, specifies the GPIO pin to which INT output is connected. // s17-spi--int-gpio - integer, enables mirrored interrupts on a single MCP23S17 device on SPI, CS#, specifies the GPIO pin to which either INTA or INTB output is connected. // // 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. // 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#. // // Example 1: A single MCP23S17 device on SPI0, CS#0 with its SPI addr set to 0 and INTA output connected to GPIO25: // dtoverlay=mcp23s17:s17-spi0-0-present=1,s17-spi0-0-int-gpio=25 // // 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: // dtoverlay=spi1-2cs // dtoverlay=mcp23s17:s08-spi1-0-present=12,s17-spi1-1-present=131 /dts-v1/; /plugin/; / { compatible = "brcm,bcm2835"; // disable spi-dev on spi0.0 fragment@0 { target = <&spidev0>; __dormant__ { status = "disabled"; }; }; // disable spi-dev on spi0.1 fragment@1 { target = <&spidev1>; __dormant__ { status = "disabled"; }; }; // disable spi-dev on spi1.0 fragment@2 { target-path = "spi1/spidev@0"; __dormant__ { status = "disabled"; }; }; // disable spi-dev on spi1.1 fragment@3 { target-path = "spi1/spidev@1"; __dormant__ { status = "disabled"; }; }; // disable spi-dev on spi1.2 fragment@4 { target-path = "spi1/spidev@2"; __dormant__ { status = "disabled"; }; }; // disable spi-dev on spi2.0 fragment@5 { target-path = "spi2/spidev@0"; __dormant__ { status = "disabled"; }; }; // disable spi-dev on spi2.1 fragment@6 { target-path = "spi2/spidev@1"; __dormant__ { status = "disabled"; }; }; // disable spi-dev on spi2.2 fragment@7 { target-path = "spi2/spidev@2"; __dormant__ { status = "disabled"; }; }; // enable one or more mcp23s08s on spi0.0 fragment@8 { target = <&spi0>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s08_00: mcp23s08@0 { compatible = "microchip,mcp23s08"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi0-0-present parameter */ reg = <0>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi0-0-int-gpio parameter */ }; }; }; // enable one or more mcp23s08s on spi0.1 fragment@9 { target = <&spi0>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s08_01: mcp23s08@1 { compatible = "microchip,mcp23s08"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi0-1-present parameter */ reg = <1>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi0-1-int-gpio parameter */ }; }; }; // enable one or more mcp23s08s on spi1.0 fragment@10 { target = <&spi1>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s08_10: mcp23s08@0 { compatible = "microchip,mcp23s08"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi1-0-present parameter */ reg = <0>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi1-0-int-gpio parameter */ }; }; }; // enable one or more mcp23s08s on spi1.1 fragment@11 { target = <&spi1>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s08_11: mcp23s08@1 { compatible = "microchip,mcp23s08"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi1-1-present parameter */ reg = <1>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi1-1-int-gpio parameter */ }; }; }; // enable one or more mcp23s08s on spi1.2 fragment@12 { target = <&spi1>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s08_12: mcp23s08@2 { compatible = "microchip,mcp23s08"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi1-2-present parameter */ reg = <2>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi1-2-int-gpio parameter */ }; }; }; // enable one or more mcp23s08s on spi2.0 fragment@13 { target = <&spi2>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s08_20: mcp23s08@0 { compatible = "microchip,mcp23s08"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi2-0-present parameter */ reg = <0>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi2-0-int-gpio parameter */ }; }; }; // enable one or more mcp23s08s on spi2.1 fragment@14 { target = <&spi2>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s08_21: mcp23s08@1 { compatible = "microchip,mcp23s08"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi2-1-present parameter */ reg = <1>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi2-1-int-gpio parameter */ }; }; }; // enable one or more mcp23s08s on spi2.2 fragment@15 { target = <&spi2>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s08_22: mcp23s08@2 { compatible = "microchip,mcp23s08"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s08-spi2-2-present parameter */ reg = <2>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s08-spi2-2-int-gpio parameter */ }; }; }; // enable one or more mcp23s17s on spi0.0 fragment@16 { target = <&spi0>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s17_00: mcp23s17@0 { compatible = "microchip,mcp23s17"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi0-0-present parameter */ reg = <0>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi0-0-int-gpio parameter */ }; }; }; // enable one or more mcp23s17s on spi0.1 fragment@17 { target = <&spi0>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s17_01: mcp23s17@1 { compatible = "microchip,mcp23s17"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi0-1-present parameter */ reg = <1>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi0-1-int-gpio parameter */ }; }; }; // enable one or more mcp23s17s on spi1.0 fragment@18 { target = <&spi1>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s17_10: mcp23s17@0 { compatible = "microchip,mcp23s17"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi1-0-present parameter */ reg = <0>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi1-0-int-gpio parameter */ }; }; }; // enable one or more mcp23s17s on spi1.1 fragment@19 { target = <&spi1>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s17_11: mcp23s17@1 { compatible = "microchip,mcp23s17"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi1-1-present parameter */ reg = <1>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi1-1-int-gpio parameter */ }; }; }; // enable one or more mcp23s17s on spi1.2 fragment@20 { target = <&spi1>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s17_12: mcp23s17@2 { compatible = "microchip,mcp23s17"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi1-2-present parameter */ reg = <2>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi1-2-int-gpio parameter */ }; }; }; // enable one or more mcp23s17s on spi2.0 fragment@21 { target = <&spi2>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s17_20: mcp23s17@0 { compatible = "microchip,mcp23s17"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi2-0-present parameter */ reg = <0>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi2-0-int-gpio parameter */ }; }; }; // enable one or more mcp23s17s on spi2.1 fragment@22 { target = <&spi2>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s17_21: mcp23s17@1 { compatible = "microchip,mcp23s17"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi2-1-present parameter */ reg = <1>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi2-1-int-gpio parameter */ }; }; }; // enable one or more mcp23s17s on spi2.2 fragment@23 { target = <&spi2>; __dormant__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; mcp23s17_22: mcp23s17@2 { compatible = "microchip,mcp23s17"; gpio-controller; #gpio-cells = <2>; microchip,spi-present-mask = <0x00>; /* overwritten by mcp23s17-spi2-2-present parameter */ reg = <2>; spi-max-frequency = <500000>; status = "okay"; #interrupt-cells=<2>; interrupts = <0 2>; /* 1st word overwritten by mcp23s17-spi2-2-int-gpio parameter */ }; }; }; // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi0.0 as a input with no pull-up/down fragment@24 { target = <&gpio>; __dormant__ { spi0_0_int_pins: spi0_0_int_pins { brcm,pins = <0>; /* overwritten by mcp23s08/17-spi0-0-int-gpio parameter */ brcm,function = <0>; brcm,pull = <0>; }; }; }; // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi0.1 as a input with no pull-up/down fragment@25 { target = <&gpio>; __dormant__ { spi0_1_int_pins: spi0_1_int_pins { brcm,pins = <0>; /* overwritten by mcp23s08/17-spi0-1-int-gpio parameter */ brcm,function = <0>; brcm,pull = <0>; }; }; }; // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi1.0 as a input with no pull-up/down fragment@26 { target = <&gpio>; __dormant__ { spi1_0_int_pins: spi1_0_int_pins { brcm,pins = <0>; /* overwritten by mcp23s08/17-spi1-0-int-gpio parameter */ brcm,function = <0>; brcm,pull = <0>; }; }; }; // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi1.1 as a input with no pull-up/down fragment@27 { target = <&gpio>; __dormant__ { spi1_1_int_pins: spi1_1_int_pins { brcm,pins = <0>; /* overwritten by mcp23s08/17-spi1-1-int-gpio parameter */ brcm,function = <0>; brcm,pull = <0>; }; }; }; // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi1.2 as a input with no pull-up/down fragment@28 { target = <&gpio>; __dormant__ { spi1_2_int_pins: spi1_2_int_pins { brcm,pins = <0>; /* overwritten by mcp23s08/17-spi1-2-int-gpio parameter */ brcm,function = <0>; brcm,pull = <0>; }; }; }; // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi2.0 as a input with no pull-up/down fragment@29 { target = <&gpio>; __dormant__ { spi2_0_int_pins: spi2_0_int_pins { brcm,pins = <0>; /* overwritten by mcp23s08/17-spi2-0-int-gpio parameter */ brcm,function = <0>; brcm,pull = <0>; }; }; }; // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi2.1 as a input with no pull-up/down fragment@30 { target = <&gpio>; __dormant__ { spi2_1_int_pins: spi2_1_int_pins { brcm,pins = <0>; /* overwritten by mcp23s08/17-spi2-1-int-gpio parameter */ brcm,function = <0>; brcm,pull = <0>; }; }; }; // Configure GPIO pin connected to INT(A/B) output of mcp23s08/17 on spi2.2 as a input with no pull-up/down fragment@31 { target = <&gpio>; __dormant__ { spi2_2_int_pins: spi2_2_int_pins { brcm,pins = <0>; /* overwritten by mcp23s08/17-spi2-2-int-gpio parameter */ brcm,function = <0>; brcm,pull = <0>; }; }; }; // Enable interrupts for a mcp23s08 on spi0.0. // Use default active low interrupt signalling. fragment@32 { target = <&mcp23s08_00>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; }; }; // Enable interrupts for a mcp23s08 on spi0.1. // Use default active low interrupt signalling. fragment@33 { target = <&mcp23s08_01>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; }; }; // Enable interrupts for a mcp23s08 on spi1.0. // Use default active low interrupt signalling. fragment@34 { target = <&mcp23s08_10>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; }; }; // Enable interrupts for a mcp23s08 on spi1.1. // Use default active low interrupt signalling. fragment@35 { target = <&mcp23s08_11>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; }; }; // Enable interrupts for a mcp23s08 on spi1.2. // Use default active low interrupt signalling. fragment@36 { target = <&mcp23s08_12>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; }; }; // Enable interrupts for a mcp23s08 on spi2.0. // Use default active low interrupt signalling. fragment@37 { target = <&mcp23s08_20>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; }; }; // Enable interrupts for a mcp23s08 on spi2.1. // Use default active low interrupt signalling. fragment@38 { target = <&mcp23s08_21>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; }; }; // Enable interrupts for a mcp23s08 on spi2.2. // Use default active low interrupt signalling. fragment@39 { target = <&mcp23s08_22>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; }; }; // Enable interrupts for a mcp23s17 on spi0.0. // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin. // Use default active low interrupt signalling. fragment@40 { target = <&mcp23s17_00>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; microchip,irq-mirror; }; }; // Enable interrupts for a mcp23s17 on spi0.1. // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin. // Configure INTA/B outputs of mcp23s08/17 as active low. fragment@41 { target = <&mcp23s17_01>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; microchip,irq-mirror; }; }; // Enable interrupts for a mcp23s17 on spi1.0. // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin. // Configure INTA/B outputs of mcp23s08/17 as active low. fragment@42 { target = <&mcp23s17_10>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; microchip,irq-mirror; }; }; // Enable interrupts for a mcp23s17 on spi1.1. // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin. // Configure INTA/B outputs of mcp23s08/17 as active low. fragment@43 { target = <&mcp23s17_11>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; microchip,irq-mirror; }; }; // Enable interrupts for a mcp23s17 on spi1.2. // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin. // Configure INTA/B outputs of mcp23s08/17 as active low. fragment@44 { target = <&mcp23s17_12>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; microchip,irq-mirror; }; }; // Enable interrupts for a mcp23s17 on spi2.0. // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin. // Configure INTA/B outputs of mcp23s08/17 as active low. fragment@45 { target = <&mcp23s17_20>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; microchip,irq-mirror; }; }; // Enable interrupts for a mcp23s17 on spi2.1. // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin. // Configure INTA/B outputs of mcp23s08/17 as active low. fragment@46 { target = <&mcp23s17_21>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; microchip,irq-mirror; }; }; // Enable interrupts for a mcp23s17 on spi2.2. // Enable mirroring so that either INTA or INTB output of mcp23s17 can be connected to the GPIO pin. // Configure INTA/B outputs of mcp23s08/17 as active low. fragment@47 { target = <&mcp23s17_22>; __dormant__ { interrupt-parent = <&gpio>; interrupt-controller; microchip,irq-mirror; }; }; __overrides__ { s08-spi0-0-present = <0>,"+0+8", <&mcp23s08_00>,"microchip,spi-present-mask:0"; s08-spi0-1-present = <0>,"+1+9", <&mcp23s08_01>,"microchip,spi-present-mask:0"; s08-spi1-0-present = <0>,"+2+10", <&mcp23s08_10>,"microchip,spi-present-mask:0"; s08-spi1-1-present = <0>,"+3+11", <&mcp23s08_11>,"microchip,spi-present-mask:0"; s08-spi1-2-present = <0>,"+4+12", <&mcp23s08_12>,"microchip,spi-present-mask:0"; s08-spi2-0-present = <0>,"+5+13", <&mcp23s08_20>,"microchip,spi-present-mask:0"; s08-spi2-1-present = <0>,"+6+14", <&mcp23s08_21>,"microchip,spi-present-mask:0"; s08-spi2-2-present = <0>,"+7+15", <&mcp23s08_22>,"microchip,spi-present-mask:0"; s17-spi0-0-present = <0>,"+0+16", <&mcp23s17_00>,"microchip,spi-present-mask:0"; s17-spi0-1-present = <0>,"+1+17", <&mcp23s17_01>,"microchip,spi-present-mask:0"; s17-spi1-0-present = <0>,"+2+18", <&mcp23s17_10>,"microchip,spi-present-mask:0"; s17-spi1-1-present = <0>,"+3+19", <&mcp23s17_11>,"microchip,spi-present-mask:0"; s17-spi1-2-present = <0>,"+4+20", <&mcp23s17_12>,"microchip,spi-present-mask:0"; s17-spi2-0-present = <0>,"+5+21", <&mcp23s17_20>,"microchip,spi-present-mask:0"; s17-spi2-1-present = <0>,"+6+22", <&mcp23s17_21>,"microchip,spi-present-mask:0"; s17-spi2-2-present = <0>,"+7+23", <&mcp23s17_22>,"microchip,spi-present-mask:0"; s08-spi0-0-int-gpio = <0>,"+24+32", <&spi0_0_int_pins>,"brcm,pins:0", <&mcp23s08_00>,"interrupts:0"; s08-spi0-1-int-gpio = <0>,"+25+33", <&spi0_1_int_pins>,"brcm,pins:0", <&mcp23s08_01>,"interrupts:0"; s08-spi1-0-int-gpio = <0>,"+26+34", <&spi1_0_int_pins>,"brcm,pins:0", <&mcp23s08_10>,"interrupts:0"; s08-spi1-1-int-gpio = <0>,"+27+35", <&spi1_1_int_pins>,"brcm,pins:0", <&mcp23s08_11>,"interrupts:0"; s08-spi1-2-int-gpio = <0>,"+28+36", <&spi1_2_int_pins>,"brcm,pins:0", <&mcp23s08_12>,"interrupts:0"; s08-spi2-0-int-gpio = <0>,"+29+37", <&spi2_0_int_pins>,"brcm,pins:0", <&mcp23s08_20>,"interrupts:0"; s08-spi2-1-int-gpio = <0>,"+30+38", <&spi2_1_int_pins>,"brcm,pins:0", <&mcp23s08_21>,"interrupts:0"; s08-spi2-2-int-gpio = <0>,"+31+39", <&spi2_2_int_pins>,"brcm,pins:0", <&mcp23s08_22>,"interrupts:0"; s17-spi0-0-int-gpio = <0>,"+24+40", <&spi0_0_int_pins>,"brcm,pins:0", <&mcp23s17_00>,"interrupts:0"; s17-spi0-1-int-gpio = <0>,"+25+41", <&spi0_1_int_pins>,"brcm,pins:0", <&mcp23s17_01>,"interrupts:0"; s17-spi1-0-int-gpio = <0>,"+26+42", <&spi1_0_int_pins>,"brcm,pins:0", <&mcp23s17_10>,"interrupts:0"; s17-spi1-1-int-gpio = <0>,"+27+43", <&spi1_1_int_pins>,"brcm,pins:0", <&mcp23s17_11>,"interrupts:0"; s17-spi1-2-int-gpio = <0>,"+28+44", <&spi1_2_int_pins>,"brcm,pins:0", <&mcp23s17_12>,"interrupts:0"; s17-spi2-0-int-gpio = <0>,"+29+45", <&spi2_0_int_pins>,"brcm,pins:0", <&mcp23s17_20>,"interrupts:0"; s17-spi2-1-int-gpio = <0>,"+30+46", <&spi2_1_int_pins>,"brcm,pins:0", <&mcp23s17_21>,"interrupts:0"; s17-spi2-2-int-gpio = <0>,"+31+47", <&spi2_2_int_pins>,"brcm,pins:0", <&mcp23s17_22>,"interrupts:0"; }; };