GNU Linux-libre 5.15.137-gnu
[releases.git] / Documentation / devicetree / bindings / mmc / arm,pl18x.yaml
1 # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/mmc/arm,pl18x.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: ARM PrimeCell MultiMedia Card Interface (MMCI) PL180 and PL181
8
9 maintainers:
10   - Linus Walleij <linus.walleij@linaro.org>
11   - Ulf Hansson <ulf.hansson@linaro.org>
12
13 description:
14   The ARM PrimeCells MMCI PL180 and PL181 provides an interface for
15   reading and writing to MultiMedia and SD cards alike. Over the years
16   vendors have use the VHDL code from ARM to create derivative MMC/SD/SDIO
17   host controllers with very similar characteristics.
18
19 allOf:
20   - $ref: /schemas/arm/primecell.yaml#
21   - $ref: mmc-controller.yaml#
22
23 # We need a select here so we don't match all nodes with 'arm,primecell'
24 select:
25   properties:
26     compatible:
27       contains:
28         enum:
29           - arm,pl180
30           - arm,pl181
31           - arm,pl18x
32   required:
33     - compatible
34
35 properties:
36   compatible:
37     oneOf:
38       - description: The first version of the block, simply called
39           PL180 and found in the ARM Integrator IM/PD1 logic module.
40         items:
41           - const: arm,pl180
42           - const: arm,primecell
43       - description: The improved version of the block, found in the
44           ARM Versatile and later reference designs. Further revisions
45           exist but get detected at runtime by reading some magic numbers
46           in the PrimeCell ID registers.
47         items:
48           - const: arm,pl181
49           - const: arm,primecell
50       - description: Wildcard entry that will let the operating system
51           inspect the PrimeCell ID registers to determine which hardware
52           variant of PL180 or PL181 this is.
53         items:
54           - const: arm,pl18x
55           - const: arm,primecell
56
57   clocks:
58     description: One or two clocks, the "apb_pclk" and the "MCLK"
59       which is the core block clock. The names are not compulsory.
60     minItems: 1
61     maxItems: 2
62
63   power-domains: true
64
65   resets:
66     maxItems: 1
67
68   reg:
69     description: the MMIO memory window must be exactly 4KB (0x1000) and the
70       layout should provide the PrimeCell ID registers so that the device can
71       be discovered. On ST Micro variants, a second register window may be
72       defined if a delay block is present and used for tuning.
73
74   interrupts:
75     description: The first interrupt is the command interrupt and corresponds
76       to the event at the end of a command. The second interrupt is the
77       PIO (polled I/O) interrupt and occurs when the FIFO needs to be
78       emptied as part of a bulk read from the card. Some variants have these
79       two interrupts wired into the same line (logic OR) and in that case
80       only one interrupt may be provided.
81     minItems: 1
82     maxItems: 2
83
84   st,sig-dir-dat0:
85     $ref: /schemas/types.yaml#/definitions/flag
86     description: ST Micro-specific property, bus signal direction pins used for
87       DAT[0].
88
89   st,sig-dir-dat2:
90     $ref: /schemas/types.yaml#/definitions/flag
91     description: ST Micro-specific property, bus signal direction pins used for
92       DAT[2].
93
94   st,sig-dir-dat31:
95     $ref: /schemas/types.yaml#/definitions/flag
96     description: ST Micro-specific property, bus signal direction pins used for
97       DAT[3] and DAT[1].
98
99   st,sig-dir-dat74:
100     $ref: /schemas/types.yaml#/definitions/flag
101     description: ST Micro-specific property, bus signal direction pins used for
102       DAT[7] and DAT[4].
103
104   st,sig-dir-cmd:
105     $ref: /schemas/types.yaml#/definitions/flag
106     description: ST Micro-specific property, CMD signal direction used for
107       pin CMD.
108
109   st,sig-pin-fbclk:
110     $ref: /schemas/types.yaml#/definitions/flag
111     description: ST Micro-specific property, feedback clock FBCLK signal pin
112       in use.
113
114   st,sig-dir:
115     $ref: /schemas/types.yaml#/definitions/flag
116     description: ST Micro-specific property, signal direction polarity used for
117       pins CMD, DAT[0], DAT[1], DAT[2] and DAT[3].
118
119   st,neg-edge:
120     $ref: /schemas/types.yaml#/definitions/flag
121     description: ST Micro-specific property, data and command phase relation,
122       generated on the sd clock falling edge.
123
124   st,use-ckin:
125     $ref: /schemas/types.yaml#/definitions/flag
126     description: ST Micro-specific property, use CKIN pin from an external
127       driver to sample the receive data (for example with a voltage switch
128       transceiver).
129
130   st,cmd-gpios:
131     maxItems: 1
132     description:
133       The GPIO matching the CMD pin.
134
135   st,ck-gpios:
136     maxItems: 1
137     description:
138       The GPIO matching the CK pin.
139
140   st,ckin-gpios:
141     maxItems: 1
142     description:
143       The GPIO matching the CKIN pin.
144
145 dependencies:
146   st,cmd-gpios: [ "st,use-ckin" ]
147   st,ck-gpios: [ "st,use-ckin" ]
148   st,ckin-gpios: [ "st,use-ckin" ]
149
150 unevaluatedProperties: false
151
152 required:
153   - compatible
154   - reg
155   - interrupts
156
157 examples:
158   - |
159     #include <dt-bindings/interrupt-controller/irq.h>
160     #include <dt-bindings/gpio/gpio.h>
161
162     mmc@5000 {
163       compatible = "arm,pl180", "arm,primecell";
164       reg = <0x5000 0x1000>;
165       interrupts-extended = <&vic 22 &sic 1>;
166       clocks = <&xtal24mhz>, <&pclk>;
167       clock-names = "mclk", "apb_pclk";
168     };
169
170     mmc@80126000 {
171       compatible = "arm,pl18x", "arm,primecell";
172       reg = <0x80126000 0x1000>;
173       interrupts = <0 60 IRQ_TYPE_LEVEL_HIGH>;
174       dmas = <&dma 29 0 0x2>, <&dma 29 0 0x0>;
175       dma-names = "rx", "tx";
176       clocks = <&prcc_kclk 1 5>, <&prcc_pclk 1 5>;
177       clock-names = "sdi", "apb_pclk";
178       max-frequency = <100000000>;
179       bus-width = <4>;
180       cap-sd-highspeed;
181       cap-mmc-highspeed;
182       cd-gpios  = <&gpio2 31 0x4>;
183       st,sig-dir-dat0;
184       st,sig-dir-dat2;
185       st,sig-dir-cmd;
186       st,sig-pin-fbclk;
187       vmmc-supply = <&ab8500_ldo_aux3_reg>;
188       vqmmc-supply = <&vmmci>;
189     };
190
191     mmc@101f6000 {
192       compatible = "arm,pl18x", "arm,primecell";
193       reg = <0x101f6000 0x1000>;
194       clocks = <&sdiclk>, <&pclksdi>;
195       clock-names = "mclk", "apb_pclk";
196       interrupt-parent = <&vica>;
197       interrupts = <22>;
198       max-frequency = <400000>;
199       bus-width = <4>;
200       cap-mmc-highspeed;
201       cap-sd-highspeed;
202       full-pwr-cycle;
203       st,sig-dir-dat0;
204       st,sig-dir-dat2;
205       st,sig-dir-dat31;
206       st,sig-dir-cmd;
207       st,sig-pin-fbclk;
208       vmmc-supply = <&vmmc_regulator>;
209     };
210
211     mmc@52007000 {
212       compatible = "arm,pl18x", "arm,primecell";
213       arm,primecell-periphid = <0x10153180>;
214       reg = <0x52007000 0x1000>;
215       interrupts = <49>;
216       interrupt-names = "cmd_irq";
217       clocks = <&rcc 0>;
218       clock-names = "apb_pclk";
219       resets = <&rcc 1>;
220       cap-sd-highspeed;
221       cap-mmc-highspeed;
222       max-frequency = <120000000>;
223     };