1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/pinctrl/canaan,k210-fpioa.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Canaan Kendryte K210 FPIOA Device Tree Bindings
8
9maintainers:
10  - Damien Le Moal <damien.lemoal@wdc.com>
11
12description:
13  The Canaan Kendryte K210 SoC Fully Programmable IO Array (FPIOA)
14  controller allows assiging any of 256 possible functions to any of
15  48 IO pins of the SoC. Pin function configuration is performed on
16  a per-pin basis.
17
18properties:
19  compatible:
20    const: canaan,k210-fpioa
21
22  reg:
23    maxItems: 1
24    description:
25      Address and length of the register set for the FPIOA controller.
26
27  clocks:
28    items:
29      - description: Controller reference clock source
30      - description: APB interface clock source
31
32  clock-names:
33    items:
34      - const: ref
35      - const: pclk
36
37  resets:
38    maxItems: 1
39
40  canaan,k210-sysctl-power:
41    $ref: /schemas/types.yaml#/definitions/phandle-array
42    description: |
43      phandle of the K210 system controller node and offset of its
44      power domain control register.
45
46patternProperties:
47  '-pinmux$':
48    type: object
49    $ref: /schemas/pinctrl/pinmux-node.yaml
50    description:
51      FPIOA client devices use sub-nodes to define the desired pin
52      configuration. Client device sub-nodes use the pinux property
53      below.
54
55    properties:
56      pinmux:
57        description:
58          List of IO pins alternate functions. The values for each IO
59          pin is a combination of an IO pin number (0 to 47) with the
60          desired function for the IO pin. Functions are defined as
61          macros in include/dt-bindings/pinctrl/k210-fpioa.h.
62          The K210_FPIOA(IO pin, function) macro is provided to
63          facilitate the combination of IO pin numbers and functions.
64
65    required:
66      - pinmux
67
68    additionalProperties: false
69
70  '-pins$':
71    type: object
72    $ref: /schemas/pinctrl/pincfg-node.yaml
73    description:
74      FPIOA client devices use sub-nodes to define the desired
75      configuration of pins. Client device sub-nodes use the
76      properties below.
77
78    properties:
79      pins:
80        description:
81          List of IO pins affected by the properties specified in this
82          subnode. IO pins are identified using the pin names "IO_xx".
83          Pin configuration nodes can also define the power domain to
84          be used for the SoC pin groups A0 (IO pins 0-5),
85          A1 (IO pins 6-11), A2 (IO pins 12-17), B0 (IO pins 18-23),
86          B1 (IO pins 24-29), B2 (IO pins 30-35), B3 (IO pins 30-35),
87          C0 (IO pins 36-41) and C1 (IO pins 42-47) using the
88          power-source property.
89        items:
90          anyOf:
91            - pattern: "^(IO_([0-9]*))|(A[0-2])|(B[3-5])|(C[6-7])$"
92            - enum: [ IO_0, IO_1, IO_2, IO_3, IO_4, IO_5, IO_6, IO_7,
93                      IO_8, IO_9, IO_10, IO_11, IO_12, IO_13, IO_14,
94                      IO_15, IO_16, IO_17, IO_18, IO_19, IO_20, IO_21,
95                      IO_22, IO_23, IO_24, IO_25, IO_26, IO_27, IO_28,
96                      IO_29, IO_30, IO_31, IO_32, IO_33, IO_34, IO_35,
97                      IO_36, IO_37, IO_38, IO_39, IO_40, IO_41, IO_42,
98                      IO_43, IO_44, IO_45, IO_46, IO_47,
99                      A0, A1, A2, B3, B4, B5, C6, C7 ]
100      bias-disable: true
101
102      bias-pull-down: true
103
104      bias-pull-up: true
105
106      drive-strength: true
107
108      drive-strength-microamp: true
109
110      input-enable: true
111
112      input-disable: true
113
114      input-schmitt-enable: true
115
116      input-schmitt-disable: true
117
118      input-polarity-invert:
119        description:
120          Enable or disable pin input polarity inversion.
121
122      output-enable: true
123
124      output-disable: true
125
126      output-high: true
127
128      output-low: true
129
130      output-polarity-invert:
131        description:
132          Enable or disable pin output polarity inversion.
133
134      slew-rate: true
135
136      power-source: true
137
138    additionalProperties: false
139
140allOf:
141  - $ref: "pinctrl.yaml#"
142
143required:
144  - compatible
145  - reg
146  - clocks
147  - canaan,k210-sysctl-power
148
149additionalProperties: false
150
151examples:
152  - |
153    #include <dt-bindings/pinctrl/k210-fpioa.h>
154    #include <dt-bindings/clock/k210-clk.h>
155    #include <dt-bindings/reset/k210-rst.h>
156
157    fpioa: pinmux@502b0000 {
158      compatible = "canaan,k210-fpioa";
159      reg = <0x502b0000 0x100>;
160      clocks = <&sysclk K210_CLK_FPIOA>,
161               <&sysclk K210_CLK_APB0>;
162      clock-names = "ref", "pclk";
163      resets = <&sysrst K210_RST_FPIOA>;
164      canaan,k210-sysctl-power = <&sysctl 108>;
165      pinctrl-0 = <&jtag_pinctrl>;
166      pinctrl-names = "default";
167
168      jtag_pinctrl: jtag-pinmux {
169        pinmux = <K210_FPIOA(0, K210_PCF_JTAG_TCLK)>,
170                 <K210_FPIOA(1, K210_PCF_JTAG_TDI)>,
171                 <K210_FPIOA(2, K210_PCF_JTAG_TMS)>,
172                 <K210_FPIOA(3, K210_PCF_JTAG_TDO)>;
173      };
174    };
175