1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/pinctrl/actions,s500-pinctrl.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Actions Semi S500 SoC pinmux & GPIO controller
8
9maintainers:
10  - Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
11  - Cristian Ciocaltea <cristian.ciocaltea@gmail.com>
12
13description: |
14  Pinmux & GPIO controller manages pin multiplexing & configuration including
15  GPIO function selection & GPIO attributes configuration. Please refer to
16  pinctrl-bindings.txt in this directory for common binding part and usage.
17
18properties:
19  compatible:
20    const: actions,s500-pinctrl
21
22  reg:
23    items:
24      - description: GPIO Output + GPIO Input + GPIO Data
25      - description: Multiplexing Control
26      - description: PAD Pull Control + PAD Schmitt Trigger Enable + PAD Control
27      - description: PAD Drive Capacity Select
28    minItems: 1
29
30  clocks:
31    maxItems: 1
32
33  gpio-controller: true
34
35  gpio-ranges:
36    maxItems: 1
37
38  '#gpio-cells':
39    description:
40      Specifies the pin number and flags, as defined in
41      include/dt-bindings/gpio/gpio.h
42    const: 2
43
44  interrupt-controller: true
45
46  '#interrupt-cells':
47    description:
48      Specifies the pin number and flags, as defined in
49      include/dt-bindings/interrupt-controller/irq.h
50    const: 2
51
52  interrupts:
53    description:
54      One interrupt per each of the 5 GPIO ports supported by the controller,
55      sorted by port number ascending order.
56    minItems: 5
57    maxItems: 5
58
59patternProperties:
60  '-pins$':
61    type: object
62    patternProperties:
63      '^(.*-)?pinmux$':
64        type: object
65        description:
66          Pinctrl node's client devices specify pin muxes using subnodes,
67          which in turn use the standard properties below.
68        $ref: pinmux-node.yaml#
69
70        properties:
71          groups:
72            description:
73              List of gpio pin groups affected by the functions specified in
74              this subnode.
75            items:
76              oneOf:
77                - enum: [lcd0_d18_mfp, rmii_crs_dv_mfp, rmii_txd0_mfp,
78                         rmii_txd1_mfp, rmii_txen_mfp, rmii_rxen_mfp, rmii_rxd1_mfp,
79                         rmii_rxd0_mfp, rmii_ref_clk_mfp, i2s_d0_mfp, i2s_pcm1_mfp,
80                         i2s0_pcm0_mfp, i2s1_pcm0_mfp, i2s_d1_mfp, ks_in2_mfp,
81                         ks_in1_mfp, ks_in0_mfp, ks_in3_mfp, ks_out0_mfp,
82                         ks_out1_mfp, ks_out2_mfp, lvds_o_pn_mfp, dsi_dn0_mfp,
83                         dsi_dp2_mfp, lcd0_d17_mfp, dsi_dp3_mfp, dsi_dn3_mfp,
84                         dsi_dp0_mfp, lvds_ee_pn_mfp, spi0_i2c_pcm_mfp,
85                         spi0_i2s_pcm_mfp, dsi_dnp1_cp_mfp, lvds_e_pn_mfp,
86                         dsi_dn2_mfp, uart2_rtsb_mfp, uart2_ctsb_mfp, uart3_rtsb_mfp,
87                         uart3_ctsb_mfp, sd0_d0_mfp, sd0_d1_mfp, sd0_d2_d3_mfp,
88                         sd1_d0_d3_mfp, sd0_cmd_mfp, sd0_clk_mfp, sd1_cmd_mfp,
89                         uart0_rx_mfp, clko_25m_mfp, csi_cn_cp_mfp, sens0_ckout_mfp,
90                         uart0_tx_mfp, i2c0_mfp, csi_dn_dp_mfp, sen0_pclk_mfp,
91                         pcm1_in_mfp, pcm1_clk_mfp, pcm1_sync_mfp, pcm1_out_mfp,
92                         dnand_data_wr_mfp, dnand_acle_ce0_mfp, nand_ceb2_mfp,
93                         nand_ceb3_mfp]
94            minItems: 1
95            maxItems: 32
96
97          function:
98            description:
99              Specify the alternative function to be configured for the
100              given gpio pin groups.
101            enum: [nor, eth_rmii, eth_smii, spi0, spi1, spi2, spi3, sens0,
102                   sens1, uart0, uart1, uart2, uart3, uart4, uart5, uart6, i2s0,
103                   i2s1, pcm1, pcm0, ks, jtag, pwm0, pwm1, pwm2, pwm3, pwm4, pwm5,
104                   p0, sd0, sd1, sd2, i2c0, i2c1, i2c3, dsi, lvds, usb30, clko_25m,
105                   mipi_csi, nand, spdif, ts, lcd0]
106
107        required:
108          - groups
109          - function
110
111        additionalProperties: false
112
113      '^(.*-)?pinconf$':
114        type: object
115        description:
116          Pinctrl node's client devices specify pin configurations using
117          subnodes, which in turn use the standard properties below.
118        $ref: pincfg-node.yaml#
119
120        properties:
121          groups:
122            description:
123              List of gpio pin groups affected by the drive-strength property
124              specified in this subnode.
125            items:
126              oneOf:
127                - enum: [sirq_drv, rmii_txd01_txen_drv, rmii_rxer_drv,
128                         rmii_crs_drv, rmii_rxd10_drv, rmii_ref_clk_drv,
129                         smi_mdc_mdio_drv, i2s_d0_drv, i2s_bclk0_drv, i2s3_drv,
130                         i2s13_drv, pcm1_drv, ks_in_drv, ks_out_drv, lvds_all_drv,
131                         lcd_dsi_drv, dsi_drv, sd0_d0_d3_drv, sd1_d0_d3_drv,
132                         sd0_cmd_drv, sd0_clk_drv, sd1_cmd_drv, sd1_clk_drv,
133                         spi0_all_drv, uart0_rx_drv, uart0_tx_drv, uart2_all_drv,
134                         i2c0_all_drv, i2c12_all_drv, sens0_pclk_drv,
135                         sens0_ckout_drv, uart3_all_drv]
136            minItems: 1
137            maxItems: 32
138
139          pins:
140            description:
141              List of gpio pins affected by the bias-pull-* and
142              input-schmitt-* properties specified in this subnode.
143            items:
144              oneOf:
145                - enum: [dnand_dqs, dnand_dqsn, eth_txd0, eth_txd1, eth_txen,
146                         eth_rxer, eth_crs_dv, eth_rxd1, eth_rxd0, eth_ref_clk,
147                         eth_mdc, eth_mdio, sirq0, sirq1, sirq2, i2s_d0, i2s_bclk0,
148                         i2s_lrclk0, i2s_mclk0, i2s_d1, i2s_bclk1, i2s_lrclk1,
149                         i2s_mclk1, ks_in0, ks_in1, ks_in2, ks_in3, ks_out0, ks_out1,
150                         ks_out2, lvds_oep, lvds_oen, lvds_odp, lvds_odn, lvds_ocp,
151                         lvds_ocn, lvds_obp, lvds_obn, lvds_oap, lvds_oan, lvds_eep,
152                         lvds_een, lvds_edp, lvds_edn, lvds_ecp, lvds_ecn, lvds_ebp,
153                         lvds_ebn, lvds_eap, lvds_ean, lcd0_d18, lcd0_d17, dsi_dp3,
154                         dsi_dn3, dsi_dp1, dsi_dn1, dsi_cp, dsi_cn, dsi_dp0, dsi_dn0,
155                         dsi_dp2, dsi_dn2, sd0_d0, sd0_d1, sd0_d2, sd0_d3, sd1_d0,
156                         sd1_d1, sd1_d2, sd1_d3, sd0_cmd, sd0_clk, sd1_cmd, sd1_clk,
157                         spi0_sclk, spi0_ss, spi0_miso, spi0_mosi, uart0_rx,
158                         uart0_tx, i2c0_sclk, i2c0_sdata, sensor0_pclk,
159                         sensor0_ckout, dnand_ale, dnand_cle, dnand_ceb0, dnand_ceb1,
160                         dnand_ceb2, dnand_ceb3, uart2_rx, uart2_tx, uart2_rtsb,
161                         uart2_ctsb, uart3_rx, uart3_tx, uart3_rtsb, uart3_ctsb,
162                         pcm1_in, pcm1_clk, pcm1_sync, pcm1_out, i2c1_sclk,
163                         i2c1_sdata, i2c2_sclk, i2c2_sdata, csi_dn0, csi_dp0,
164                         csi_dn1, csi_dp1, csi_dn2, csi_dp2, csi_dn3, csi_dp3,
165                         csi_cn, csi_cp, dnand_d0, dnand_d1, dnand_d2, dnand_d3,
166                         dnand_d4, dnand_d5, dnand_d6, dnand_d7, dnand_rb, dnand_rdb,
167                         dnand_rdbn, dnand_wrb, porb, clko_25m, bsel, pkg0, pkg1,
168                         pkg2, pkg3]
169            minItems: 1
170            maxItems: 64
171
172          bias-pull-up: true
173          bias-pull-down: true
174
175          drive-strength:
176            description:
177              Selects the drive strength for the specified pins, in mA.
178            enum: [2, 4, 8, 12]
179
180          input-schmitt-enable: true
181          input-schmitt-disable: true
182
183        additionalProperties: false
184
185    additionalProperties: false
186
187allOf:
188  - $ref: pinctrl.yaml#
189
190required:
191  - compatible
192  - reg
193  - clocks
194  - gpio-controller
195  - gpio-ranges
196  - '#gpio-cells'
197  - interrupt-controller
198  - '#interrupt-cells'
199  - interrupts
200
201additionalProperties: false
202
203examples:
204  - |
205    #include <dt-bindings/interrupt-controller/arm-gic.h>
206    pinctrl: pinctrl@b01b0000 {
207        compatible = "actions,s500-pinctrl";
208        reg = <0xb01b0000 0x40>, <0xb01b0040 0x10>,
209              <0xb01b0060 0x18>, <0xb01b0080 0xc>;
210        clocks = <&cmu 55>;
211        gpio-controller;
212        gpio-ranges = <&pinctrl 0 0 132>;
213        #gpio-cells = <2>;
214        interrupt-controller;
215        #interrupt-cells = <2>;
216        interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
217                     <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>,
218                     <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
219                     <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
220                     <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
221
222        mmc0_pins: mmc0-pins {
223            pinmux {
224                groups = "sd0_d0_mfp", "sd0_d1_mfp", "sd0_d2_d3_mfp",
225                         "sd0_cmd_mfp", "sd0_clk_mfp";
226                function = "sd0";
227            };
228
229            drv-pinconf {
230                groups = "sd0_d0_d3_drv", "sd0_cmd_drv", "sd0_clk_drv";
231                drive-strength = <8>;
232            };
233
234            bias-pinconf {
235                pins = "sd0_d0", "sd0_d1", "sd0_d2",
236                       "sd0_d3", "sd0_cmd";
237                bias-pull-up;
238            };
239        };
240    };
241
242...
243