1# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/pinctrl/microchip,sparx5-sgpio.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Microsemi/Microchip Serial GPIO controller
8
9maintainers:
10  - Lars Povlsen <lars.povlsen@microchip.com>
11
12description: |
13  By using a serial interface, the SIO controller significantly extend
14  the number of available GPIOs with a minimum number of additional
15  pins on the device. The primary purpose of the SIO controllers is to
16  connect control signals from SFP modules and to act as an LED
17  controller.
18
19properties:
20  $nodename:
21    pattern: "^gpio@[0-9a-f]+$"
22
23  compatible:
24    enum:
25      - microchip,sparx5-sgpio
26      - mscc,ocelot-sgpio
27      - mscc,luton-sgpio
28
29  "#address-cells":
30    const: 1
31
32  "#size-cells":
33    const: 0
34
35  reg:
36    maxItems: 1
37
38  clocks:
39    maxItems: 1
40
41  microchip,sgpio-port-ranges:
42    description: This is a sequence of tuples, defining intervals of
43      enabled ports in the serial input stream. The enabled ports must
44      match the hardware configuration in order for signals to be
45      properly written/read to/from the controller holding
46      registers. Being tuples, then number of arguments must be
47      even. The tuples mast be ordered (low, high) and are
48      inclusive.
49    $ref: /schemas/types.yaml#/definitions/uint32-matrix
50    items:
51      items:
52        - description: |
53            "low" indicates start bit number of range
54          minimum: 0
55          maximum: 31
56        - description: |
57            "high" indicates end bit number of range
58          minimum: 0
59          maximum: 31
60    minItems: 1
61    maxItems: 32
62
63  bus-frequency:
64    description: The sgpio controller frequency (Hz). This dictates
65      the serial bitstream speed, which again affects the latency in
66      getting control signals back and forth between external shift
67      registers. The speed must be no larger than half the system
68      clock, and larger than zero.
69    default: 12500000
70
71patternProperties:
72  "^gpio@[0-1]$":
73    type: object
74    properties:
75      compatible:
76        const: microchip,sparx5-sgpio-bank
77
78      reg:
79        description: |
80          The GPIO bank number. "0" is designates the input pin bank,
81          "1" the output bank.
82        maxItems: 1
83
84      gpio-controller: true
85
86      '#gpio-cells':
87        description: |
88         Specifies the pin (port and bit) and flags. Note that the
89         SGIO pin is defined by *2* numbers, a port number between 0
90         and 31, and a bit index, 0 to 3. The maximum bit number is
91         controlled indirectly by the "ngpios" property: (ngpios/32).
92        const: 3
93
94      interrupts:
95        description: Specifies the sgpio IRQ (in parent controller)
96        maxItems: 1
97
98      interrupt-controller: true
99
100      '#interrupt-cells':
101        description:
102          Specifies the pin (port and bit) and flags, as defined in
103          defined in include/dt-bindings/interrupt-controller/irq.h
104        const: 3
105
106      ngpios:
107        description: The numbers of GPIO's exposed. This must be a
108          multiple of 32.
109        minimum: 32
110        maximum: 128
111
112    required:
113      - compatible
114      - reg
115      - gpio-controller
116      - '#gpio-cells'
117      - ngpios
118
119    additionalProperties: false
120
121additionalProperties: false
122
123required:
124  - compatible
125  - reg
126  - clocks
127  - microchip,sgpio-port-ranges
128  - "#address-cells"
129  - "#size-cells"
130
131examples:
132  - |
133    #include <dt-bindings/interrupt-controller/arm-gic.h>
134    sgpio2: gpio@1101059c {
135      #address-cells = <1>;
136      #size-cells = <0>;
137      compatible = "microchip,sparx5-sgpio";
138      clocks = <&sys_clk>;
139      pinctrl-0 = <&sgpio2_pins>;
140      pinctrl-names = "default";
141      reg = <0x1101059c 0x100>;
142      microchip,sgpio-port-ranges = <0 0>, <16 18>, <28 31>;
143      bus-frequency = <25000000>;
144      sgpio_in2: gpio@0 {
145        reg = <0>;
146        compatible = "microchip,sparx5-sgpio-bank";
147        gpio-controller;
148        #gpio-cells = <3>;
149        ngpios = <96>;
150        interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
151        interrupt-controller;
152        #interrupt-cells = <3>;
153      };
154      sgpio_out2: gpio@1 {
155        compatible = "microchip,sparx5-sgpio-bank";
156        reg = <1>;
157        gpio-controller;
158        #gpio-cells = <3>;
159        ngpios = <96>;
160      };
161    };
162