| # SPDX-License-Identifier: GPL-2.0-only |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/pinctrl/microchip,mcp23s08.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Microchip I/O expander with serial interface (I2C/SPI) |
| |
| maintainers: |
| - Himanshu Bhavani <himanshu.bhavani@siliconsignals.io> |
| |
| description: |
| Microchip MCP23008, MCP23017, MCP23S08, MCP23S17, MCP23S18 GPIO expander |
| chips.These chips provide 8 or 16 GPIO pins with either I2C or SPI interface. |
| |
| allOf: |
| - $ref: /schemas/spi/spi-peripheral-props.yaml# |
| |
| properties: |
| compatible: |
| enum: |
| - microchip,mcp23s08 |
| - microchip,mcp23s17 |
| - microchip,mcp23s18 |
| - microchip,mcp23008 |
| - microchip,mcp23017 |
| - microchip,mcp23018 |
| |
| reg: |
| maxItems: 1 |
| |
| gpio-controller: true |
| |
| '#gpio-cells': |
| const: 2 |
| |
| interrupt-controller: true |
| |
| '#interrupt-cells': |
| const: 2 |
| |
| interrupts: |
| maxItems: 1 |
| |
| reset-gpios: |
| description: GPIO specifier for active-low reset pin. |
| maxItems: 1 |
| |
| microchip,spi-present-mask: |
| description: |
| Multiple SPI chips can share the same SPI chipselect. Set a bit in |
| bit0-7 in this mask to 1 if there is a chip connected with the |
| corresponding spi address set. For example if you have a chip with |
| address 3 connected, you have to set bit3 to 1, which is 0x08. mcp23s08 |
| chip variant only supports bits 0-3. It is not possible to mix mcp23s08 |
| and mcp23s17 on the same chipselect. Set at least one bit to 1 for SPI |
| chips. |
| $ref: /schemas/types.yaml#/definitions/uint8 |
| |
| microchip,irq-mirror: |
| type: boolean |
| description: |
| Sets the mirror flag in the IOCON register. Devices with two interrupt |
| outputs (these are the devices ending with 17 and those that have 16 IOs) |
| have two IO banks IO 0-7 form bank 1 and IO 8-15 are bank 2. These chips |
| have two different interrupt outputs One for bank 1 and another for |
| bank 2. If irq-mirror is set, both interrupts are generated regardless of |
| the bank that an input change occurred on. If it is not set,the interrupt |
| are only generated for the bank they belong to. |
| |
| microchip,irq-active-high: |
| type: boolean |
| description: |
| Sets the INTPOL flag in the IOCON register.This configures the IRQ output |
| polarity as active high. |
| |
| drive-open-drain: |
| type: boolean |
| description: |
| Sets the ODR flag in the IOCON register. This configures the IRQ output as |
| open drain active low. |
| |
| pinmux: |
| type: object |
| properties: |
| pins: |
| description: |
| The list of GPIO pins controlled by this node. Each pin name |
| corresponds to a physical pin on the GPIO expander. |
| items: |
| pattern: '^gpio([0-9]|[1][0-5])$' |
| maxItems: 16 |
| |
| bias-pull-up: |
| type: boolean |
| description: |
| Configures pull-up resistors for the GPIO pins. Absence of this |
| property will leave the configuration in its default state. |
| |
| required: |
| - pins |
| |
| additionalProperties: false |
| |
| required: |
| - compatible |
| - reg |
| - gpio-controller |
| - '#gpio-cells' |
| |
| unevaluatedProperties: false |
| |
| examples: |
| - | |
| #include <dt-bindings/interrupt-controller/irq.h> |
| #include <dt-bindings/gpio/gpio.h> |
| |
| i2c { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| gpio@21 { |
| compatible = "microchip,mcp23017"; |
| reg = <0x21>; |
| gpio-controller; |
| #gpio-cells = <2>; |
| |
| interrupt-parent = <&gpio1>; |
| interrupts = <17 IRQ_TYPE_LEVEL_LOW>; |
| interrupt-controller; |
| #interrupt-cells = <2>; |
| |
| microchip,irq-mirror; |
| pinctrl-names = "default"; |
| pinctrl-0 = <&pinctrl_i2c_gpio0>, <&gpiopullups>; |
| reset-gpios = <&gpio6 15 GPIO_ACTIVE_LOW>; |
| |
| gpiopullups: pinmux { |
| pins = "gpio0", "gpio1", "gpio2", "gpio3", |
| "gpio4", "gpio5", "gpio6", "gpio7", |
| "gpio8", "gpio9", "gpio10", "gpio11", |
| "gpio12", "gpio13", "gpio14", "gpio15"; |
| bias-pull-up; |
| }; |
| }; |
| }; |
| |
| - | |
| spi { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| gpio@0 { |
| compatible = "microchip,mcp23s17"; |
| reg = <0>; |
| gpio-controller; |
| #gpio-cells = <2>; |
| spi-max-frequency = <1000000>; |
| microchip,spi-present-mask = /bits/ 8 <0x01>; |
| }; |
| }; |