1# SPDX-License-Identifier: GPL-2.0
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/spi/spi-pl022.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: ARM PL022 SPI controller
8
9maintainers:
10  - Linus Walleij <linus.walleij@linaro.org>
11
12allOf:
13  - $ref: "spi-controller.yaml#"
14
15# We need a select here so we don't match all nodes with 'arm,primecell'
16select:
17  properties:
18    compatible:
19      contains:
20        const: arm,pl022
21  required:
22    - compatible
23
24properties:
25  compatible:
26    items:
27      - const: arm,pl022
28      - const: arm,primecell
29
30  reg:
31    maxItems: 1
32
33  interrupts:
34    maxItems: 1
35
36  clocks:
37    maxItems: 2
38
39  clock-names:
40    items:
41      - enum:
42          - SSPCLK
43          - sspclk
44      - const: apb_pclk
45
46  pl022,autosuspend-delay:
47    description: delay in ms following transfer completion before the
48      runtime power management system suspends the device. A setting of 0
49      indicates no delay and the device will be suspended immediately.
50    $ref: "/schemas/types.yaml#/definitions/uint32"
51
52  pl022,rt:
53    description: indicates the controller should run the message pump with realtime
54               priority to minimise the transfer latency on the bus (boolean)
55    type: boolean
56
57  dmas:
58    description:
59      Two or more DMA channel specifiers following the convention outlined
60      in bindings/dma/dma.txt
61    minItems: 2
62    maxItems: 32
63
64  dma-names:
65    description:
66      There must be at least one channel named "tx" for transmit and named "rx"
67      for receive.
68    minItems: 2
69    maxItems: 32
70    additionalItems: true
71    items:
72      - const: rx
73      - const: tx
74
75patternProperties:
76  "^[a-zA-Z][a-zA-Z0-9,+\\-._]{0,63}@[0-9a-f]+$":
77    type: object
78    # SPI slave nodes must be children of the SPI master node and can
79    # contain the following properties.
80    properties:
81      pl022,interface:
82        description: SPI interface type
83        allOf:
84          - $ref: "/schemas/types.yaml#/definitions/uint32"
85          - enum:
86              - 0  # SPI
87              - 1  # Texas Instruments Synchronous Serial Frame Format
88              - 2  # Microwire (Half Duplex)
89
90      pl022,com-mode:
91        description: Specifies the transfer mode
92        allOf:
93          - $ref: "/schemas/types.yaml#/definitions/uint32"
94          - enum:
95              - 0  # interrupt mode
96              - 1  # polling mode
97              - 2  # DMA mode
98            default: 1
99
100      pl022,rx-level-trig:
101        description: Rx FIFO watermark level
102        allOf:
103          - $ref: "/schemas/types.yaml#/definitions/uint32"
104          - minimum: 0
105            maximum: 4
106
107      pl022,tx-level-trig:
108        description: Tx FIFO watermark level
109        allOf:
110          - $ref: "/schemas/types.yaml#/definitions/uint32"
111          - minimum: 0
112            maximum: 4
113
114      pl022,ctrl-len:
115        description: Microwire interface - Control length
116        allOf:
117          - $ref: "/schemas/types.yaml#/definitions/uint32"
118          - minimum: 0x03
119            maximum: 0x1f
120
121      pl022,wait-state:
122        description: Microwire interface - Wait state
123        allOf:
124          - $ref: "/schemas/types.yaml#/definitions/uint32"
125          - enum: [ 0, 1 ]
126
127      pl022,duplex:
128        description: Microwire interface - Full/Half duplex
129        allOf:
130          - $ref: "/schemas/types.yaml#/definitions/uint32"
131          - enum: [ 0, 1 ]
132
133required:
134  - compatible
135  - reg
136  - interrupts
137
138examples:
139  - |
140    spi@e0100000 {
141      compatible = "arm,pl022", "arm,primecell";
142      reg = <0xe0100000 0x1000>;
143      #address-cells = <1>;
144      #size-cells = <0>;
145      interrupts = <0 31 0x4>;
146      dmas = <&dma_controller 23 1>,
147        <&dma_controller 24 0>;
148      dma-names = "rx", "tx";
149
150      m25p80@1 {
151        compatible = "st,m25p80";
152        reg = <1>;
153        spi-max-frequency = <12000000>;
154        spi-cpol;
155        spi-cpha;
156        pl022,interface = <0>;
157        pl022,com-mode = <0x2>;
158        pl022,rx-level-trig = <0>;
159        pl022,tx-level-trig = <0>;
160        pl022,ctrl-len = <0x11>;
161        pl022,wait-state = <0>;
162        pl022,duplex = <0>;
163      };
164    };
165...
166