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 bindings
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
26  reg:
27    maxItems: 2
28    description: LPAIF core registers
29  reg-names:
30     maxItems: 2
31  clocks:
32    minItems: 3
33    maxItems: 6
34
35  clock-names:
36    minItems: 3
37    maxItems: 6
38
39  interrupts:
40    maxItems: 2
41    description: LPAIF DMA buffer interrupt
42  interrupt-names:
43    maxItems: 2
44  qcom,adsp:
45    $ref: /schemas/types.yaml#/definitions/phandle
46    description: Phandle for the audio DSP node
47
48  iommus:
49    maxItems: 2
50    description: Phandle to apps_smmu node with sid mask
51
52  power-domains:
53    maxItems: 1
54
55  '#sound-dai-cells':
56    const: 1
57
58  '#address-cells':
59    const: 1
60
61  '#size-cells':
62    const: 0
63
64patternProperties:
65  "^dai-link@[0-9a-f]$":
66    type: object
67    description: |
68      LPASS CPU dai node for each I2S device. Bindings of each node
69      depends on the specific driver providing the functionality and
70      properties.
71    properties:
72      reg:
73        maxItems: 1
74        description: Must be one of the DAI ID
75
76      qcom,playback-sd-lines:
77        $ref: /schemas/types.yaml#/definitions/uint32-array
78        description: list of MI2S data lines for playback
79
80      qcom,capture-sd-lines:
81        $ref: /schemas/types.yaml#/definitions/uint32-array
82        description: list of MI2S data lines for capture
83
84    required:
85      - reg
86
87    additionalProperties: false
88
89required:
90  - compatible
91  - reg
92  - reg-names
93  - clocks
94  - clock-names
95  - interrupts
96  - interrupt-names
97  - '#sound-dai-cells'
98
99additionalProperties: false
100
101allOf:
102  - if:
103      properties:
104        compatible:
105          contains:
106            const: qcom,lpass-cpu
107
108    then:
109      properties:
110        clock-names:
111          items:
112            - const: ahbix-clk
113            - const: mi2s-osr-clk
114            - const: mi2s-bit-clk
115
116  - if:
117      properties:
118        compatible:
119          contains:
120            const: qcom,apq8016-lpass-cpu
121
122    then:
123      properties:
124        clock-names:
125          items:
126            - const: ahbix-clk
127            - const: mi2s-bit-clk0
128            - const: mi2s-bit-clk1
129            - const: mi2s-bit-clk2
130            - const: mi2s-bit-clk3
131            - const: pcnoc-mport-clk
132            - const: pcnoc-sway-clk
133
134  - if:
135      properties:
136        compatible:
137          contains:
138            const: qcom,sc7180-lpass-cpu
139
140    then:
141      properties:
142        clock-names:
143          oneOf:
144           - items:   #for I2S
145              - const: pcnoc-sway-clk
146              - const: audio-core
147              - const: mclk0
148              - const: pcnoc-mport-clk
149              - const: mi2s-bit-clk0
150              - const: mi2s-bit-clk1
151           - items:   #for HDMI
152              - const: pcnoc-sway-clk
153              - const: audio-core
154              - const: pcnoc-mport-clk
155        reg-names:
156          anyOf:
157            - items:   #for I2S
158              - const: lpass-lpaif
159            - items:   #for I2S and HDMI
160              - const: lpass-hdmiif
161              - const: lpass-lpaif
162        interrupt-names:
163          anyOf:
164            - items:   #for I2S
165              - const: lpass-irq-lpaif
166            - items:   #for I2S and HDMI
167              - const: lpass-irq-lpaif
168              - const: lpass-irq-hdmi
169      required:
170        - iommus
171        - power-domains
172
173examples:
174  - |
175    #include <dt-bindings/sound/sc7180-lpass.h>
176
177    soc {
178        #address-cells = <2>;
179        #size-cells = <2>;
180        lpass@62d80000 {
181            compatible = "qcom,sc7180-lpass-cpu";
182
183            reg = <0 0x62d87000 0 0x68000>,
184                  <0 0x62f00000 0 0x29000>;
185            reg-names = "lpass-hdmiif",
186                        "lpass-lpaif";
187            iommus = <&apps_smmu 0x1020 0>,
188                     <&apps_smmu 0x1032 0>;
189            power-domains = <&lpass_hm 0>;
190
191            clocks = <&gcc 131>,
192                 <&lpasscorecc 6>,
193                 <&lpasscorecc 7>,
194                 <&lpasscorecc 10>,
195                 <&lpasscorecc 8>,
196                 <&lpasscorecc 9>;
197
198            clock-names = "pcnoc-sway-clk", "audio-core",
199                          "mclk0", "pcnoc-mport-clk",
200                          "mi2s-bit-clk0", "mi2s-bit-clk1";
201
202            interrupts = <0 160 1>,
203                         <0 268 1>;
204            interrupt-names = "lpass-irq-lpaif",
205                              "lpass-irq-hdmi";
206            #sound-dai-cells = <1>;
207
208            #address-cells = <1>;
209            #size-cells = <0>;
210            /* Optional to set different MI2S SD lines */
211            dai-link@0 {
212                reg = <MI2S_PRIMARY>;
213                qcom,playback-sd-lines = <1>;
214                qcom,capture-sd-lines = <0>;
215            };
216        };
217    };
218
219...
220