1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/sound/qcom,lpass-cpu.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm Technologies Inc. LPASS CPU dai driver
8
9maintainers:
10  - Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
11  - Rohit kumar <rohitkr@codeaurora.org>
12
13description: |
14  Qualcomm Technologies Inc. SOC Low-Power Audio SubSystem (LPASS) that consist
15  of MI2S interface for audio data transfer on external codecs. LPASS cpu driver
16  is a module to configure Low-Power Audio Interface(LPAIF) core registers
17  across different IP versions.
18
19properties:
20  compatible:
21    enum:
22      - qcom,lpass-cpu
23      - qcom,apq8016-lpass-cpu
24      - qcom,sc7180-lpass-cpu
25      - qcom,sc7280-lpass-cpu
26
27  reg:
28    minItems: 1
29    maxItems: 6
30    description: LPAIF core registers
31
32  reg-names:
33    minItems: 1
34    maxItems: 6
35
36  clocks:
37    minItems: 3
38    maxItems: 10
39
40  clock-names:
41    minItems: 1
42    maxItems: 10
43
44  interrupts:
45    minItems: 1
46    maxItems: 4
47    description: LPAIF DMA buffer interrupt
48
49  interrupt-names:
50    minItems: 1
51    maxItems: 4
52
53  qcom,adsp:
54    $ref: /schemas/types.yaml#/definitions/phandle
55    description: Phandle for the audio DSP node
56
57  iommus:
58    minItems: 2
59    maxItems: 3
60    description: Phandle to apps_smmu node with sid mask
61
62  power-domains:
63    maxItems: 1
64
65  power-domain-names:
66    maxItems: 1
67
68  required-opps:
69    maxItems: 1
70
71  '#sound-dai-cells':
72    const: 1
73
74  '#address-cells':
75    const: 1
76
77  '#size-cells':
78    const: 0
79
80patternProperties:
81  "^dai-link@[0-9a-f]+$":
82    type: object
83    description: |
84      LPASS CPU dai node for each I2S device or Soundwire device. Bindings of each node
85      depends on the specific driver providing the functionality and
86      properties.
87    properties:
88      reg:
89        maxItems: 1
90        description: Must be one of the DAI ID
91
92      qcom,playback-sd-lines:
93        $ref: /schemas/types.yaml#/definitions/uint32-array
94        description: list of MI2S data lines for playback
95
96      qcom,capture-sd-lines:
97        $ref: /schemas/types.yaml#/definitions/uint32-array
98        description: list of MI2S data lines for capture
99
100    required:
101      - reg
102
103    additionalProperties: false
104
105required:
106  - compatible
107  - reg
108  - reg-names
109  - clocks
110  - clock-names
111  - interrupts
112  - interrupt-names
113  - '#sound-dai-cells'
114
115unevaluatedProperties: false
116
117allOf:
118  - $ref: dai-common.yaml#
119  - if:
120      properties:
121        compatible:
122          contains:
123            const: qcom,lpass-cpu
124
125    then:
126      properties:
127        clocks:
128          maxItems: 3
129        clock-names:
130          items:
131            - const: ahbix-clk
132            - const: mi2s-osr-clk
133            - const: mi2s-bit-clk
134
135  - if:
136      properties:
137        compatible:
138          contains:
139            const: qcom,apq8016-lpass-cpu
140
141    then:
142      properties:
143        clocks:
144          minItems: 7
145          maxItems: 7
146        clock-names:
147          items:
148            - const: ahbix-clk
149            - const: mi2s-bit-clk0
150            - const: mi2s-bit-clk1
151            - const: mi2s-bit-clk2
152            - const: mi2s-bit-clk3
153            - const: pcnoc-mport-clk
154            - const: pcnoc-sway-clk
155
156  - if:
157      properties:
158        compatible:
159          contains:
160            const: qcom,sc7180-lpass-cpu
161
162    then:
163      properties:
164        clocks:
165          minItems: 6
166          maxItems: 6
167        clock-names:
168          items:
169            - const: pcnoc-sway-clk
170            - const: audio-core
171            - const: mclk0
172            - const: pcnoc-mport-clk
173            - const: mi2s-bit-clk0
174            - const: mi2s-bit-clk1
175        reg:
176          minItems: 2
177          maxItems: 2
178        reg-names:
179          items:
180            - const: lpass-hdmiif
181            - const: lpass-lpaif
182        interrupts:
183          minItems: 2
184          maxItems: 2
185        interrupt-names:
186          items:
187            - const: lpass-irq-lpaif
188            - const: lpass-irq-hdmi
189      required:
190        - iommus
191        - power-domains
192
193  - if:
194      properties:
195        compatible:
196          contains:
197            const: qcom,sc7280-lpass-cpu
198
199    then:
200      properties:
201        clocks:
202          minItems: 10
203          maxItems: 10
204        clock-names:
205          items:
206            - const: aon_cc_audio_hm_h
207            - const: audio_cc_ext_mclk0
208            - const: core_cc_sysnoc_mport_core
209            - const: core_cc_ext_if0_ibit
210            - const: core_cc_ext_if1_ibit
211            - const: audio_cc_codec_mem
212            - const: audio_cc_codec_mem0
213            - const: audio_cc_codec_mem1
214            - const: audio_cc_codec_mem2
215            - const: aon_cc_va_mem0
216        reg:
217          minItems: 6
218          maxItems: 6
219        reg-names:
220          items:
221            - const: lpass-hdmiif
222            - const: lpass-lpaif
223            - const: lpass-rxtx-cdc-dma-lpm
224            - const: lpass-rxtx-lpaif
225            - const: lpass-va-lpaif
226            - const: lpass-va-cdc-dma-lpm
227        interrupts:
228          minItems: 4
229          maxItems: 4
230        interrupt-names:
231          items:
232            - const: lpass-irq-lpaif
233            - const: lpass-irq-hdmi
234            - const: lpass-irq-vaif
235            - const: lpass-irq-rxtxif
236        power-domain-names:
237          items:
238            - const: lcx
239
240      required:
241        - iommus
242        - power-domains
243
244examples:
245  - |
246    #include <dt-bindings/sound/sc7180-lpass.h>
247
248    soc {
249        #address-cells = <2>;
250        #size-cells = <2>;
251        lpass@62d80000 {
252            compatible = "qcom,sc7180-lpass-cpu";
253
254            reg = <0 0x62d87000 0 0x68000>,
255                  <0 0x62f00000 0 0x29000>;
256            reg-names = "lpass-hdmiif",
257                        "lpass-lpaif";
258            iommus = <&apps_smmu 0x1020 0>,
259                     <&apps_smmu 0x1032 0>;
260            power-domains = <&lpass_hm 0>;
261
262            clocks = <&gcc 131>,
263                 <&lpasscorecc 6>,
264                 <&lpasscorecc 7>,
265                 <&lpasscorecc 10>,
266                 <&lpasscorecc 8>,
267                 <&lpasscorecc 9>;
268
269            clock-names = "pcnoc-sway-clk", "audio-core",
270                          "mclk0", "pcnoc-mport-clk",
271                          "mi2s-bit-clk0", "mi2s-bit-clk1";
272
273            interrupts = <0 160 1>,
274                         <0 268 1>;
275            interrupt-names = "lpass-irq-lpaif",
276                              "lpass-irq-hdmi";
277            #sound-dai-cells = <1>;
278
279            #address-cells = <1>;
280            #size-cells = <0>;
281            /* Optional to set different MI2S SD lines */
282            dai-link@0 {
283                reg = <MI2S_PRIMARY>;
284                qcom,playback-sd-lines = <1>;
285                qcom,capture-sd-lines = <0>;
286            };
287        };
288    };
289
290...
291