1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
# 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>;
};
};
|