xref: /linux/Documentation/devicetree/bindings/sound/amlogic,axg-sound-card.yaml (revision 3a39d672e7f48b8d6b91a09afa4b55352773b4b5)
1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/sound/amlogic,axg-sound-card.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Amlogic AXG sound card
8
9maintainers:
10  - Jerome Brunet <jbrunet@baylibre.com>
11
12allOf:
13  - $ref: sound-card-common.yaml#
14
15properties:
16  compatible:
17    const: amlogic,axg-sound-card
18
19  audio-aux-devs:
20    $ref: /schemas/types.yaml#/definitions/phandle-array
21    description: list of auxiliary devices
22
23  audio-widgets:
24    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
25    description:
26      A list off component DAPM widget. Each entry is a pair of strings,
27      the first being the widget type, the second being the widget name
28
29  clocks:
30    minItems: 1
31    maxItems: 3
32    description:
33      Base PLL clocks of audio susbsytem, used to configure base clock
34      frequencies for different audio use-cases.
35
36patternProperties:
37  "^dai-link-[0-9]+$":
38    type: object
39    additionalProperties: false
40    description:
41      Container for dai-link level properties and the CODEC sub-nodes.
42      There should be at least one (and probably more) subnode of this type
43
44    properties:
45      dai-format:
46        $ref: /schemas/types.yaml#/definitions/string
47        enum: [ i2s, left-j, dsp_a ]
48
49      dai-tdm-slot-num:
50        $ref: /schemas/types.yaml#/definitions/uint32
51        description:
52          Number of slots in use. If omitted, slot number is set to
53          accommodate the largest mask provided.
54        maximum: 32
55
56      dai-tdm-slot-width:
57        $ref: /schemas/types.yaml#/definitions/uint32
58        description: Width in bits for each slot
59        enum: [ 8, 16, 20, 24, 32 ]
60        default: 32
61
62      mclk-fs:
63        $ref: /schemas/types.yaml#/definitions/uint32
64        description:
65          Multiplication factor between the frame rate and master clock
66          rate
67
68      sound-dai:
69        maxItems: 1
70        description: phandle of the CPU DAI
71
72    patternProperties:
73      "^dai-tdm-slot-(t|r)x-mask-[0-3]$":
74        $ref: /schemas/types.yaml#/definitions/uint32-array
75        minItems: 1
76        maxItems: 32
77        description:
78          Transmit and receive cpu slot masks of each TDM lane
79          When omitted, mask is assumed to have to no slots. A valid
80          interface must have at least one slot, so at least one these
81          mask should be provided with an enabled slot.
82
83      "^codec(-[0-9]+)?$":
84        type: object
85        additionalProperties: false
86        description:
87          dai-link representing backend links should have at least one subnode.
88          One subnode for each codec of the dai-link. dai-link representing
89          frontend links have no codec, therefore have no subnodes
90
91        properties:
92          sound-dai:
93            maxItems: 1
94            description: phandle of the codec DAI
95
96        patternProperties:
97          "^dai-tdm-slot-(t|r)x-mask$":
98            $ref: /schemas/types.yaml#/definitions/uint32-array
99            minItems: 1
100            maxItems: 32
101            description: Transmit and receive codec slot masks
102
103        required:
104          - sound-dai
105
106    required:
107      - sound-dai
108
109required:
110  - dai-link-0
111
112unevaluatedProperties: false
113
114examples:
115  - |
116    sound {
117        compatible = "amlogic,axg-sound-card";
118        model = "AXG-S420";
119        audio-aux-devs = <&tdmin_a>, <&tdmout_c>;
120        audio-widgets = "Line", "Lineout",
121                        "Line", "Linein",
122                        "Speaker", "Speaker1 Left",
123                        "Speaker", "Speaker1 Right",
124                        "Speaker", "Speaker2 Left",
125                        "Speaker", "Speaker2 Right";
126        audio-routing = "TDMOUT_C IN 0", "FRDDR_A OUT 2",
127                        "SPDIFOUT IN 0", "FRDDR_A OUT 3",
128                        "TDM_C Playback", "TDMOUT_C OUT",
129                        "TDMIN_A IN 2", "TDM_C Capture",
130                        "TDMIN_A IN 5", "TDM_C Loopback",
131                        "TODDR_A IN 0", "TDMIN_A OUT",
132                        "Lineout", "Lineout AOUTL",
133                        "Lineout", "Lineout AOUTR",
134                        "Speaker1 Left", "SPK1 OUT_A",
135                        "Speaker2 Left", "SPK2 OUT_A",
136                        "Speaker1 Right", "SPK1 OUT_B",
137                        "Speaker2 Right", "SPK2 OUT_B",
138                        "Linein AINL", "Linein",
139                        "Linein AINR", "Linein";
140
141        dai-link-0 {
142            sound-dai = <&frddr_a>;
143        };
144
145        dai-link-1 {
146            sound-dai = <&toddr_a>;
147        };
148
149        dai-link-2 {
150            sound-dai = <&tdmif_c>;
151            dai-format = "i2s";
152            dai-tdm-slot-tx-mask-2 = <1 1>;
153            dai-tdm-slot-tx-mask-3 = <1 1>;
154            dai-tdm-slot-rx-mask-1 = <1 1>;
155            mclk-fs = <256>;
156
157            codec-0 {
158                sound-dai = <&lineout>;
159            };
160
161            codec-1 {
162                sound-dai = <&speaker_amp1>;
163            };
164
165            codec-2 {
166                sound-dai = <&speaker_amp2>;
167            };
168
169            codec-3 {
170                sound-dai = <&linein>;
171            };
172        };
173
174        dai-link-3 {
175            sound-dai = <&spdifout>;
176
177            codec {
178                sound-dai = <&spdif_dit>;
179            };
180        };
181    };
182