summaryrefslogtreecommitdiff
path: root/Documentation/devicetree/bindings/pinctrl/microchip,sparx5-sgpio.yaml
blob: 4fe35e650909ce8c606d60d7006781240bbc2f95 (plain)
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 OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/pinctrl/microchip,sparx5-sgpio.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Microsemi/Microchip Serial GPIO controller

maintainers:
  - Lars Povlsen <lars.povlsen@microchip.com>

description: |
  By using a serial interface, the SIO controller significantly extend
  the number of available GPIOs with a minimum number of additional
  pins on the device. The primary purpose of the SIO controllers is to
  connect control signals from SFP modules and to act as an LED
  controller.

properties:
  $nodename:
    pattern: "^gpio@[0-9a-f]+$"

  compatible:
    enum:
      - microchip,sparx5-sgpio
      - mscc,ocelot-sgpio
      - mscc,luton-sgpio

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  reg:
    maxItems: 1

  clocks:
    maxItems: 1

  microchip,sgpio-port-ranges:
    description: This is a sequence of tuples, defining intervals of
      enabled ports in the serial input stream. The enabled ports must
      match the hardware configuration in order for signals to be
      properly written/read to/from the controller holding
      registers. Being tuples, then number of arguments must be
      even. The tuples mast be ordered (low, high) and are
      inclusive.
    $ref: /schemas/types.yaml#/definitions/uint32-matrix
    items:
      items:
        - description: |
            "low" indicates start bit number of range
          minimum: 0
          maximum: 31
        - description: |
            "high" indicates end bit number of range
          minimum: 0
          maximum: 31
    minItems: 1
    maxItems: 32

  bus-frequency:
    description: The sgpio controller frequency (Hz). This dictates
      the serial bitstream speed, which again affects the latency in
      getting control signals back and forth between external shift
      registers. The speed must be no larger than half the system
      clock, and larger than zero.
    default: 12500000

patternProperties:
  "^gpio@[0-1]$":
    type: object
    properties:
      compatible:
        const: microchip,sparx5-sgpio-bank

      reg:
        description: |
          The GPIO bank number. "0" is designates the input pin bank,
          "1" the output bank.
        maxItems: 1

      gpio-controller: true

      '#gpio-cells':
        description: |
         Specifies the pin (port and bit) and flags. Note that the
         SGIO pin is defined by *2* numbers, a port number between 0
         and 31, and a bit index, 0 to 3. The maximum bit number is
         controlled indirectly by the "ngpios" property: (ngpios/32).
        const: 3

      interrupts:
        description: Specifies the sgpio IRQ (in parent controller)
        maxItems: 1

      interrupt-controller: true

      '#interrupt-cells':
        description:
          Specifies the pin (port and bit) and flags, as defined in
          defined in include/dt-bindings/interrupt-controller/irq.h
        const: 3

      ngpios:
        description: The numbers of GPIO's exposed. This must be a
          multiple of 32.
        minimum: 32
        maximum: 128

    required:
      - compatible
      - reg
      - gpio-controller
      - '#gpio-cells'
      - ngpios

    additionalProperties: false

additionalProperties: false

required:
  - compatible
  - reg
  - clocks
  - microchip,sgpio-port-ranges
  - "#address-cells"
  - "#size-cells"

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    sgpio2: gpio@1101059c {
      #address-cells = <1>;
      #size-cells = <0>;
      compatible = "microchip,sparx5-sgpio";
      clocks = <&sys_clk>;
      pinctrl-0 = <&sgpio2_pins>;
      pinctrl-names = "default";
      reg = <0x1101059c 0x100>;
      microchip,sgpio-port-ranges = <0 0>, <16 18>, <28 31>;
      bus-frequency = <25000000>;
      sgpio_in2: gpio@0 {
        reg = <0>;
        compatible = "microchip,sparx5-sgpio-bank";
        gpio-controller;
        #gpio-cells = <3>;
        ngpios = <96>;
        interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
        interrupt-controller;
        #interrupt-cells = <3>;
      };
      sgpio_out2: gpio@1 {
        compatible = "microchip,sparx5-sgpio-bank";
        reg = <1>;
        gpio-controller;
        #gpio-cells = <3>;
        ngpios = <96>;
      };
    };