1# SPDX-License-Identifier: GPL-2.0-only 2%YAML 1.2 3--- 4$id: http://devicetree.org/schemas/pinctrl/microchip,mcp23s08.yaml# 5$schema: http://devicetree.org/meta-schemas/core.yaml# 6 7title: Microchip I/O expander with serial interface (I2C/SPI) 8 9maintainers: 10 - Himanshu Bhavani <himanshu.bhavani@siliconsignals.io> 11 12description: 13 Microchip MCP23008, MCP23017, MCP23S08, MCP23S17, MCP23S18 GPIO expander 14 chips.These chips provide 8 or 16 GPIO pins with either I2C or SPI interface. 15 16allOf: 17 - $ref: /schemas/spi/spi-peripheral-props.yaml# 18 19properties: 20 compatible: 21 enum: 22 - microchip,mcp23s08 23 - microchip,mcp23s17 24 - microchip,mcp23s18 25 - microchip,mcp23008 26 - microchip,mcp23017 27 - microchip,mcp23018 28 29 reg: 30 maxItems: 1 31 32 gpio-controller: true 33 34 '#gpio-cells': 35 const: 2 36 37 interrupt-controller: true 38 39 '#interrupt-cells': 40 const: 2 41 42 interrupts: 43 maxItems: 1 44 45 reset-gpios: 46 description: GPIO specifier for active-low reset pin. 47 maxItems: 1 48 49 microchip,spi-present-mask: 50 description: 51 Multiple SPI chips can share the same SPI chipselect. Set a bit in 52 bit0-7 in this mask to 1 if there is a chip connected with the 53 corresponding spi address set. For example if you have a chip with 54 address 3 connected, you have to set bit3 to 1, which is 0x08. mcp23s08 55 chip variant only supports bits 0-3. It is not possible to mix mcp23s08 56 and mcp23s17 on the same chipselect. Set at least one bit to 1 for SPI 57 chips. 58 $ref: /schemas/types.yaml#/definitions/uint8 59 60 microchip,irq-mirror: 61 type: boolean 62 description: 63 Sets the mirror flag in the IOCON register. Devices with two interrupt 64 outputs (these are the devices ending with 17 and those that have 16 IOs) 65 have two IO banks IO 0-7 form bank 1 and IO 8-15 are bank 2. These chips 66 have two different interrupt outputs One for bank 1 and another for 67 bank 2. If irq-mirror is set, both interrupts are generated regardless of 68 the bank that an input change occurred on. If it is not set,the interrupt 69 are only generated for the bank they belong to. 70 71 microchip,irq-active-high: 72 type: boolean 73 description: 74 Sets the INTPOL flag in the IOCON register.This configures the IRQ output 75 polarity as active high. 76 77 drive-open-drain: 78 type: boolean 79 description: 80 Sets the ODR flag in the IOCON register. This configures the IRQ output as 81 open drain active low. 82 83 pinmux: 84 type: object 85 properties: 86 pins: 87 description: 88 The list of GPIO pins controlled by this node. Each pin name 89 corresponds to a physical pin on the GPIO expander. 90 items: 91 pattern: '^gpio([0-9]|[1][0-5])$' 92 maxItems: 16 93 94 bias-pull-up: 95 type: boolean 96 description: 97 Configures pull-up resistors for the GPIO pins. Absence of this 98 property will leave the configuration in its default state. 99 100 required: 101 - pins 102 103 additionalProperties: false 104 105required: 106 - compatible 107 - reg 108 - gpio-controller 109 - '#gpio-cells' 110 111unevaluatedProperties: false 112 113examples: 114 - | 115 #include <dt-bindings/interrupt-controller/irq.h> 116 #include <dt-bindings/gpio/gpio.h> 117 118 i2c { 119 #address-cells = <1>; 120 #size-cells = <0>; 121 122 gpio@21 { 123 compatible = "microchip,mcp23017"; 124 reg = <0x21>; 125 gpio-controller; 126 #gpio-cells = <2>; 127 128 interrupt-parent = <&gpio1>; 129 interrupts = <17 IRQ_TYPE_LEVEL_LOW>; 130 interrupt-controller; 131 #interrupt-cells = <2>; 132 133 microchip,irq-mirror; 134 pinctrl-names = "default"; 135 pinctrl-0 = <&pinctrl_i2c_gpio0>, <&gpiopullups>; 136 reset-gpios = <&gpio6 15 GPIO_ACTIVE_LOW>; 137 138 gpiopullups: pinmux { 139 pins = "gpio0", "gpio1", "gpio2", "gpio3", 140 "gpio4", "gpio5", "gpio6", "gpio7", 141 "gpio8", "gpio9", "gpio10", "gpio11", 142 "gpio12", "gpio13", "gpio14", "gpio15"; 143 bias-pull-up; 144 }; 145 }; 146 }; 147 148 - | 149 spi { 150 #address-cells = <1>; 151 #size-cells = <0>; 152 153 gpio@0 { 154 compatible = "microchip,mcp23s17"; 155 reg = <0>; 156 gpio-controller; 157 #gpio-cells = <2>; 158 spi-max-frequency = <1000000>; 159 microchip,spi-present-mask = /bits/ 8 <0x01>; 160 }; 161 }; 162