Statistics
| Branch: | Revision:

root / hw / audio / hda-codec-common.h @ 2690e61e

History | View | Annotate | Download (13.6 kB)

1 7953793c Bandan Das
/*
2 7953793c Bandan Das
 * Common code to disable/enable mixer emulation at run time
3 7953793c Bandan Das
 *
4 7953793c Bandan Das
 * Copyright (C) 2013 Red Hat, Inc.
5 7953793c Bandan Das
 *
6 7953793c Bandan Das
 * Written by Bandan Das <bsd@redhat.com>
7 7953793c Bandan Das
 * with important bits picked up from hda-codec.c
8 7953793c Bandan Das
 *
9 7953793c Bandan Das
 * This program is free software; you can redistribute it and/or
10 7953793c Bandan Das
 * modify it under the terms of the GNU General Public License as
11 7953793c Bandan Das
 * published by the Free Software Foundation; either version 2 or
12 7953793c Bandan Das
 * (at your option) version 3 of the License.
13 7953793c Bandan Das
 *
14 7953793c Bandan Das
 * This program is distributed in the hope that it will be useful,
15 7953793c Bandan Das
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 7953793c Bandan Das
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 7953793c Bandan Das
 * GNU General Public License for more details.
18 7953793c Bandan Das
 *
19 7953793c Bandan Das
 * You should have received a copy of the GNU General Public License
20 7953793c Bandan Das
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
21 7953793c Bandan Das
 */
22 7953793c Bandan Das
23 7953793c Bandan Das
/*
24 7953793c Bandan Das
 * HDA codec descriptions
25 7953793c Bandan Das
 */
26 7953793c Bandan Das
27 2690e61e Bandan Das
#ifdef HDA_MIXER
28 7953793c Bandan Das
#define QEMU_HDA_ID_OUTPUT  ((QEMU_HDA_ID_VENDOR << 16) | 0x12)
29 7953793c Bandan Das
#define QEMU_HDA_ID_DUPLEX  ((QEMU_HDA_ID_VENDOR << 16) | 0x22)
30 7953793c Bandan Das
#define QEMU_HDA_ID_MICRO   ((QEMU_HDA_ID_VENDOR << 16) | 0x32)
31 7953793c Bandan Das
#define QEMU_HDA_AMP_CAPS                                               \
32 7953793c Bandan Das
    (AC_AMPCAP_MUTE |                                                   \
33 7953793c Bandan Das
     (QEMU_HDA_AMP_STEPS << AC_AMPCAP_OFFSET_SHIFT)    |                \
34 7953793c Bandan Das
     (QEMU_HDA_AMP_STEPS << AC_AMPCAP_NUM_STEPS_SHIFT) |                \
35 7953793c Bandan Das
     (3                  << AC_AMPCAP_STEP_SIZE_SHIFT))
36 7953793c Bandan Das
#else
37 7953793c Bandan Das
#define QEMU_HDA_ID_OUTPUT  ((QEMU_HDA_ID_VENDOR << 16) | 0x11)
38 7953793c Bandan Das
#define QEMU_HDA_ID_DUPLEX  ((QEMU_HDA_ID_VENDOR << 16) | 0x21)
39 7953793c Bandan Das
#define QEMU_HDA_ID_MICRO   ((QEMU_HDA_ID_VENDOR << 16) | 0x31)
40 7953793c Bandan Das
#define QEMU_HDA_AMP_CAPS   QEMU_HDA_AMP_NONE
41 7953793c Bandan Das
#endif
42 7953793c Bandan Das
43 7953793c Bandan Das
44 7953793c Bandan Das
/* common: audio output widget */
45 2690e61e Bandan Das
static const desc_param glue(common_params_audio_dac_, PARAM)[] = {
46 7953793c Bandan Das
    {
47 7953793c Bandan Das
        .id  = AC_PAR_AUDIO_WIDGET_CAP,
48 7953793c Bandan Das
        .val = ((AC_WID_AUD_OUT << AC_WCAP_TYPE_SHIFT) |
49 7953793c Bandan Das
                AC_WCAP_FORMAT_OVRD |
50 7953793c Bandan Das
                AC_WCAP_AMP_OVRD |
51 7953793c Bandan Das
                AC_WCAP_OUT_AMP |
52 7953793c Bandan Das
                AC_WCAP_STEREO),
53 7953793c Bandan Das
    },{
54 7953793c Bandan Das
        .id  = AC_PAR_PCM,
55 7953793c Bandan Das
        .val = QEMU_HDA_PCM_FORMATS,
56 7953793c Bandan Das
    },{
57 7953793c Bandan Das
        .id  = AC_PAR_STREAM,
58 7953793c Bandan Das
        .val = AC_SUPFMT_PCM,
59 7953793c Bandan Das
    },{
60 7953793c Bandan Das
        .id  = AC_PAR_AMP_IN_CAP,
61 7953793c Bandan Das
        .val = QEMU_HDA_AMP_NONE,
62 7953793c Bandan Das
    },{
63 7953793c Bandan Das
        .id  = AC_PAR_AMP_OUT_CAP,
64 7953793c Bandan Das
        .val = QEMU_HDA_AMP_CAPS,
65 7953793c Bandan Das
    },
66 7953793c Bandan Das
};
67 7953793c Bandan Das
68 7953793c Bandan Das
/* common: audio input widget */
69 2690e61e Bandan Das
static const desc_param glue(common_params_audio_adc_, PARAM)[] = {
70 7953793c Bandan Das
    {
71 7953793c Bandan Das
        .id  = AC_PAR_AUDIO_WIDGET_CAP,
72 7953793c Bandan Das
        .val = ((AC_WID_AUD_IN << AC_WCAP_TYPE_SHIFT) |
73 7953793c Bandan Das
                AC_WCAP_CONN_LIST |
74 7953793c Bandan Das
                AC_WCAP_FORMAT_OVRD |
75 7953793c Bandan Das
                AC_WCAP_AMP_OVRD |
76 7953793c Bandan Das
                AC_WCAP_IN_AMP |
77 7953793c Bandan Das
                AC_WCAP_STEREO),
78 7953793c Bandan Das
    },{
79 7953793c Bandan Das
        .id  = AC_PAR_CONNLIST_LEN,
80 7953793c Bandan Das
        .val = 1,
81 7953793c Bandan Das
    },{
82 7953793c Bandan Das
        .id  = AC_PAR_PCM,
83 7953793c Bandan Das
        .val = QEMU_HDA_PCM_FORMATS,
84 7953793c Bandan Das
    },{
85 7953793c Bandan Das
        .id  = AC_PAR_STREAM,
86 7953793c Bandan Das
        .val = AC_SUPFMT_PCM,
87 7953793c Bandan Das
    },{
88 7953793c Bandan Das
        .id  = AC_PAR_AMP_IN_CAP,
89 7953793c Bandan Das
        .val = QEMU_HDA_AMP_CAPS,
90 7953793c Bandan Das
    },{
91 7953793c Bandan Das
        .id  = AC_PAR_AMP_OUT_CAP,
92 7953793c Bandan Das
        .val = QEMU_HDA_AMP_NONE,
93 7953793c Bandan Das
    },
94 7953793c Bandan Das
};
95 7953793c Bandan Das
96 7953793c Bandan Das
/* common: pin widget (line-out) */
97 2690e61e Bandan Das
static const desc_param glue(common_params_audio_lineout_, PARAM)[] = {
98 7953793c Bandan Das
    {
99 7953793c Bandan Das
        .id  = AC_PAR_AUDIO_WIDGET_CAP,
100 7953793c Bandan Das
        .val = ((AC_WID_PIN << AC_WCAP_TYPE_SHIFT) |
101 7953793c Bandan Das
                AC_WCAP_CONN_LIST |
102 7953793c Bandan Das
                AC_WCAP_STEREO),
103 7953793c Bandan Das
    },{
104 7953793c Bandan Das
        .id  = AC_PAR_PIN_CAP,
105 7953793c Bandan Das
        .val = AC_PINCAP_OUT,
106 7953793c Bandan Das
    },{
107 7953793c Bandan Das
        .id  = AC_PAR_CONNLIST_LEN,
108 7953793c Bandan Das
        .val = 1,
109 7953793c Bandan Das
    },{
110 7953793c Bandan Das
        .id  = AC_PAR_AMP_IN_CAP,
111 7953793c Bandan Das
        .val = QEMU_HDA_AMP_NONE,
112 7953793c Bandan Das
    },{
113 7953793c Bandan Das
        .id  = AC_PAR_AMP_OUT_CAP,
114 7953793c Bandan Das
        .val = QEMU_HDA_AMP_NONE,
115 7953793c Bandan Das
    },
116 7953793c Bandan Das
};
117 7953793c Bandan Das
118 7953793c Bandan Das
/* common: pin widget (line-in) */
119 2690e61e Bandan Das
static const desc_param glue(common_params_audio_linein_, PARAM)[] = {
120 7953793c Bandan Das
    {
121 7953793c Bandan Das
        .id  = AC_PAR_AUDIO_WIDGET_CAP,
122 7953793c Bandan Das
        .val = ((AC_WID_PIN << AC_WCAP_TYPE_SHIFT) |
123 7953793c Bandan Das
                AC_WCAP_STEREO),
124 7953793c Bandan Das
    },{
125 7953793c Bandan Das
        .id  = AC_PAR_PIN_CAP,
126 7953793c Bandan Das
        .val = AC_PINCAP_IN,
127 7953793c Bandan Das
    },{
128 7953793c Bandan Das
        .id  = AC_PAR_AMP_IN_CAP,
129 7953793c Bandan Das
        .val = QEMU_HDA_AMP_NONE,
130 7953793c Bandan Das
    },{
131 7953793c Bandan Das
        .id  = AC_PAR_AMP_OUT_CAP,
132 7953793c Bandan Das
        .val = QEMU_HDA_AMP_NONE,
133 7953793c Bandan Das
    },
134 7953793c Bandan Das
};
135 7953793c Bandan Das
136 7953793c Bandan Das
/* output: root node */
137 2690e61e Bandan Das
static const desc_param glue(output_params_root_, PARAM)[] = {
138 7953793c Bandan Das
    {
139 7953793c Bandan Das
        .id  = AC_PAR_VENDOR_ID,
140 7953793c Bandan Das
        .val = QEMU_HDA_ID_OUTPUT,
141 7953793c Bandan Das
    },{
142 7953793c Bandan Das
        .id  = AC_PAR_SUBSYSTEM_ID,
143 7953793c Bandan Das
        .val = QEMU_HDA_ID_OUTPUT,
144 7953793c Bandan Das
    },{
145 7953793c Bandan Das
        .id  = AC_PAR_REV_ID,
146 7953793c Bandan Das
        .val = 0x00100101,
147 7953793c Bandan Das
    },{
148 7953793c Bandan Das
        .id  = AC_PAR_NODE_COUNT,
149 7953793c Bandan Das
        .val = 0x00010001,
150 7953793c Bandan Das
    },
151 7953793c Bandan Das
};
152 7953793c Bandan Das
153 7953793c Bandan Das
/* output: audio function */
154 2690e61e Bandan Das
static const desc_param glue(output_params_audio_func_, PARAM)[] = {
155 7953793c Bandan Das
    {
156 7953793c Bandan Das
        .id  = AC_PAR_FUNCTION_TYPE,
157 7953793c Bandan Das
        .val = AC_GRP_AUDIO_FUNCTION,
158 7953793c Bandan Das
    },{
159 7953793c Bandan Das
        .id  = AC_PAR_SUBSYSTEM_ID,
160 7953793c Bandan Das
        .val = QEMU_HDA_ID_OUTPUT,
161 7953793c Bandan Das
    },{
162 7953793c Bandan Das
        .id  = AC_PAR_NODE_COUNT,
163 7953793c Bandan Das
        .val = 0x00020002,
164 7953793c Bandan Das
    },{
165 7953793c Bandan Das
        .id  = AC_PAR_PCM,
166 7953793c Bandan Das
        .val = QEMU_HDA_PCM_FORMATS,
167 7953793c Bandan Das
    },{
168 7953793c Bandan Das
        .id  = AC_PAR_STREAM,
169 7953793c Bandan Das
        .val = AC_SUPFMT_PCM,
170 7953793c Bandan Das
    },{
171 7953793c Bandan Das
        .id  = AC_PAR_AMP_IN_CAP,
172 7953793c Bandan Das
        .val = QEMU_HDA_AMP_NONE,
173 7953793c Bandan Das
    },{
174 7953793c Bandan Das
        .id  = AC_PAR_AMP_OUT_CAP,
175 7953793c Bandan Das
        .val = QEMU_HDA_AMP_NONE,
176 7953793c Bandan Das
    },{
177 7953793c Bandan Das
        .id  = AC_PAR_GPIO_CAP,
178 7953793c Bandan Das
        .val = 0,
179 7953793c Bandan Das
    },{
180 7953793c Bandan Das
        .id  = AC_PAR_AUDIO_FG_CAP,
181 7953793c Bandan Das
        .val = 0x00000808,
182 7953793c Bandan Das
    },{
183 7953793c Bandan Das
        .id  = AC_PAR_POWER_STATE,
184 7953793c Bandan Das
        .val = 0,
185 7953793c Bandan Das
    },
186 7953793c Bandan Das
};
187 7953793c Bandan Das
188 7953793c Bandan Das
/* output: nodes */
189 2690e61e Bandan Das
static const desc_node glue(output_nodes_, PARAM)[] = {
190 7953793c Bandan Das
    {
191 7953793c Bandan Das
        .nid     = AC_NODE_ROOT,
192 7953793c Bandan Das
        .name    = "root",
193 2690e61e Bandan Das
        .params  = glue(output_params_root_, PARAM),
194 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(output_params_root_, PARAM)),
195 7953793c Bandan Das
    },{
196 7953793c Bandan Das
        .nid     = 1,
197 7953793c Bandan Das
        .name    = "func",
198 2690e61e Bandan Das
        .params  = glue(output_params_audio_func_, PARAM),
199 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(output_params_audio_func_, PARAM)),
200 7953793c Bandan Das
    },{
201 7953793c Bandan Das
        .nid     = 2,
202 7953793c Bandan Das
        .name    = "dac",
203 2690e61e Bandan Das
        .params  = glue(common_params_audio_dac_, PARAM),
204 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(common_params_audio_dac_, PARAM)),
205 7953793c Bandan Das
        .stindex = 0,
206 7953793c Bandan Das
    },{
207 7953793c Bandan Das
        .nid     = 3,
208 7953793c Bandan Das
        .name    = "out",
209 2690e61e Bandan Das
        .params  = glue(common_params_audio_lineout_, PARAM),
210 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(common_params_audio_lineout_, PARAM)),
211 7953793c Bandan Das
        .config  = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) |
212 7953793c Bandan Das
                    (AC_JACK_LINE_OUT     << AC_DEFCFG_DEVICE_SHIFT)    |
213 7953793c Bandan Das
                    (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) |
214 7953793c Bandan Das
                    (AC_JACK_COLOR_GREEN  << AC_DEFCFG_COLOR_SHIFT)     |
215 7953793c Bandan Das
                    0x10),
216 7953793c Bandan Das
        .pinctl  = AC_PINCTL_OUT_EN,
217 7953793c Bandan Das
        .conn    = (uint32_t[]) { 2 },
218 7953793c Bandan Das
    }
219 7953793c Bandan Das
};
220 7953793c Bandan Das
221 7953793c Bandan Das
/* output: codec */
222 2690e61e Bandan Das
static const desc_codec glue(output_, PARAM) = {
223 7953793c Bandan Das
    .name   = "output",
224 7953793c Bandan Das
    .iid    = QEMU_HDA_ID_OUTPUT,
225 2690e61e Bandan Das
    .nodes  = glue(output_nodes_, PARAM),
226 2690e61e Bandan Das
    .nnodes = ARRAY_SIZE(glue(output_nodes_, PARAM)),
227 7953793c Bandan Das
};
228 7953793c Bandan Das
229 7953793c Bandan Das
/* duplex: root node */
230 2690e61e Bandan Das
static const desc_param glue(duplex_params_root_, PARAM)[] = {
231 7953793c Bandan Das
    {
232 7953793c Bandan Das
        .id  = AC_PAR_VENDOR_ID,
233 7953793c Bandan Das
        .val = QEMU_HDA_ID_DUPLEX,
234 7953793c Bandan Das
    },{
235 7953793c Bandan Das
        .id  = AC_PAR_SUBSYSTEM_ID,
236 7953793c Bandan Das
        .val = QEMU_HDA_ID_DUPLEX,
237 7953793c Bandan Das
    },{
238 7953793c Bandan Das
        .id  = AC_PAR_REV_ID,
239 7953793c Bandan Das
        .val = 0x00100101,
240 7953793c Bandan Das
    },{
241 7953793c Bandan Das
        .id  = AC_PAR_NODE_COUNT,
242 7953793c Bandan Das
        .val = 0x00010001,
243 7953793c Bandan Das
    },
244 7953793c Bandan Das
};
245 7953793c Bandan Das
246 7953793c Bandan Das
/* duplex: audio function */
247 2690e61e Bandan Das
static const desc_param glue(duplex_params_audio_func_, PARAM)[] = {
248 7953793c Bandan Das
    {
249 7953793c Bandan Das
        .id  = AC_PAR_FUNCTION_TYPE,
250 7953793c Bandan Das
        .val = AC_GRP_AUDIO_FUNCTION,
251 7953793c Bandan Das
    },{
252 7953793c Bandan Das
        .id  = AC_PAR_SUBSYSTEM_ID,
253 7953793c Bandan Das
        .val = QEMU_HDA_ID_DUPLEX,
254 7953793c Bandan Das
    },{
255 7953793c Bandan Das
        .id  = AC_PAR_NODE_COUNT,
256 7953793c Bandan Das
        .val = 0x00020004,
257 7953793c Bandan Das
    },{
258 7953793c Bandan Das
        .id  = AC_PAR_PCM,
259 7953793c Bandan Das
        .val = QEMU_HDA_PCM_FORMATS,
260 7953793c Bandan Das
    },{
261 7953793c Bandan Das
        .id  = AC_PAR_STREAM,
262 7953793c Bandan Das
        .val = AC_SUPFMT_PCM,
263 7953793c Bandan Das
    },{
264 7953793c Bandan Das
        .id  = AC_PAR_AMP_IN_CAP,
265 7953793c Bandan Das
        .val = QEMU_HDA_AMP_NONE,
266 7953793c Bandan Das
    },{
267 7953793c Bandan Das
        .id  = AC_PAR_AMP_OUT_CAP,
268 7953793c Bandan Das
        .val = QEMU_HDA_AMP_NONE,
269 7953793c Bandan Das
    },{
270 7953793c Bandan Das
        .id  = AC_PAR_GPIO_CAP,
271 7953793c Bandan Das
        .val = 0,
272 7953793c Bandan Das
    },{
273 7953793c Bandan Das
        .id  = AC_PAR_AUDIO_FG_CAP,
274 7953793c Bandan Das
        .val = 0x00000808,
275 7953793c Bandan Das
    },{
276 7953793c Bandan Das
        .id  = AC_PAR_POWER_STATE,
277 7953793c Bandan Das
        .val = 0,
278 7953793c Bandan Das
    },
279 7953793c Bandan Das
};
280 7953793c Bandan Das
281 7953793c Bandan Das
/* duplex: nodes */
282 2690e61e Bandan Das
static const desc_node glue(duplex_nodes_, PARAM)[] = {
283 7953793c Bandan Das
    {
284 7953793c Bandan Das
        .nid     = AC_NODE_ROOT,
285 7953793c Bandan Das
        .name    = "root",
286 2690e61e Bandan Das
        .params  = glue(duplex_params_root_, PARAM),
287 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(duplex_params_root_, PARAM)),
288 7953793c Bandan Das
    },{
289 7953793c Bandan Das
        .nid     = 1,
290 7953793c Bandan Das
        .name    = "func",
291 2690e61e Bandan Das
        .params  = glue(duplex_params_audio_func_, PARAM),
292 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(duplex_params_audio_func_, PARAM)),
293 7953793c Bandan Das
    },{
294 7953793c Bandan Das
        .nid     = 2,
295 7953793c Bandan Das
        .name    = "dac",
296 2690e61e Bandan Das
        .params  = glue(common_params_audio_dac_, PARAM),
297 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(common_params_audio_dac_, PARAM)),
298 7953793c Bandan Das
        .stindex = 0,
299 7953793c Bandan Das
    },{
300 7953793c Bandan Das
        .nid     = 3,
301 7953793c Bandan Das
        .name    = "out",
302 2690e61e Bandan Das
        .params  = glue(common_params_audio_lineout_, PARAM),
303 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(common_params_audio_lineout_, PARAM)),
304 7953793c Bandan Das
        .config  = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) |
305 7953793c Bandan Das
                    (AC_JACK_LINE_OUT     << AC_DEFCFG_DEVICE_SHIFT)    |
306 7953793c Bandan Das
                    (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) |
307 7953793c Bandan Das
                    (AC_JACK_COLOR_GREEN  << AC_DEFCFG_COLOR_SHIFT)     |
308 7953793c Bandan Das
                    0x10),
309 7953793c Bandan Das
        .pinctl  = AC_PINCTL_OUT_EN,
310 7953793c Bandan Das
        .conn    = (uint32_t[]) { 2 },
311 7953793c Bandan Das
    },{
312 7953793c Bandan Das
        .nid     = 4,
313 7953793c Bandan Das
        .name    = "adc",
314 2690e61e Bandan Das
        .params  = glue(common_params_audio_adc_, PARAM),
315 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(common_params_audio_adc_, PARAM)),
316 7953793c Bandan Das
        .stindex = 1,
317 7953793c Bandan Das
        .conn    = (uint32_t[]) { 5 },
318 7953793c Bandan Das
    },{
319 7953793c Bandan Das
        .nid     = 5,
320 7953793c Bandan Das
        .name    = "in",
321 2690e61e Bandan Das
        .params  = glue(common_params_audio_linein_, PARAM),
322 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(common_params_audio_linein_, PARAM)),
323 7953793c Bandan Das
        .config  = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) |
324 7953793c Bandan Das
                    (AC_JACK_LINE_IN      << AC_DEFCFG_DEVICE_SHIFT)    |
325 7953793c Bandan Das
                    (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) |
326 7953793c Bandan Das
                    (AC_JACK_COLOR_RED    << AC_DEFCFG_COLOR_SHIFT)     |
327 7953793c Bandan Das
                    0x20),
328 7953793c Bandan Das
        .pinctl  = AC_PINCTL_IN_EN,
329 7953793c Bandan Das
    }
330 7953793c Bandan Das
};
331 7953793c Bandan Das
332 7953793c Bandan Das
/* duplex: codec */
333 2690e61e Bandan Das
static const desc_codec glue(duplex_, PARAM) = {
334 7953793c Bandan Das
    .name   = "duplex",
335 7953793c Bandan Das
    .iid    = QEMU_HDA_ID_DUPLEX,
336 2690e61e Bandan Das
    .nodes  = glue(duplex_nodes_, PARAM),
337 2690e61e Bandan Das
    .nnodes = ARRAY_SIZE(glue(duplex_nodes_, PARAM)),
338 7953793c Bandan Das
};
339 7953793c Bandan Das
340 7953793c Bandan Das
/* micro: root node */
341 2690e61e Bandan Das
static const desc_param glue(micro_params_root_, PARAM)[] = {
342 7953793c Bandan Das
    {
343 7953793c Bandan Das
        .id  = AC_PAR_VENDOR_ID,
344 7953793c Bandan Das
        .val = QEMU_HDA_ID_MICRO,
345 7953793c Bandan Das
    },{
346 7953793c Bandan Das
        .id  = AC_PAR_SUBSYSTEM_ID,
347 7953793c Bandan Das
        .val = QEMU_HDA_ID_MICRO,
348 7953793c Bandan Das
    },{
349 7953793c Bandan Das
        .id  = AC_PAR_REV_ID,
350 7953793c Bandan Das
        .val = 0x00100101,
351 7953793c Bandan Das
    },{
352 7953793c Bandan Das
        .id  = AC_PAR_NODE_COUNT,
353 7953793c Bandan Das
        .val = 0x00010001,
354 7953793c Bandan Das
    },
355 7953793c Bandan Das
};
356 7953793c Bandan Das
357 7953793c Bandan Das
/* micro: audio function */
358 2690e61e Bandan Das
static const desc_param glue(micro_params_audio_func_, PARAM)[] = {
359 7953793c Bandan Das
    {
360 7953793c Bandan Das
        .id  = AC_PAR_FUNCTION_TYPE,
361 7953793c Bandan Das
        .val = AC_GRP_AUDIO_FUNCTION,
362 7953793c Bandan Das
    },{
363 7953793c Bandan Das
        .id  = AC_PAR_SUBSYSTEM_ID,
364 7953793c Bandan Das
        .val = QEMU_HDA_ID_MICRO,
365 7953793c Bandan Das
    },{
366 7953793c Bandan Das
        .id  = AC_PAR_NODE_COUNT,
367 7953793c Bandan Das
        .val = 0x00020004,
368 7953793c Bandan Das
    },{
369 7953793c Bandan Das
        .id  = AC_PAR_PCM,
370 7953793c Bandan Das
        .val = QEMU_HDA_PCM_FORMATS,
371 7953793c Bandan Das
    },{
372 7953793c Bandan Das
        .id  = AC_PAR_STREAM,
373 7953793c Bandan Das
        .val = AC_SUPFMT_PCM,
374 7953793c Bandan Das
    },{
375 7953793c Bandan Das
        .id  = AC_PAR_AMP_IN_CAP,
376 7953793c Bandan Das
        .val = QEMU_HDA_AMP_NONE,
377 7953793c Bandan Das
    },{
378 7953793c Bandan Das
        .id  = AC_PAR_AMP_OUT_CAP,
379 7953793c Bandan Das
        .val = QEMU_HDA_AMP_NONE,
380 7953793c Bandan Das
    },{
381 7953793c Bandan Das
        .id  = AC_PAR_GPIO_CAP,
382 7953793c Bandan Das
        .val = 0,
383 7953793c Bandan Das
    },{
384 7953793c Bandan Das
        .id  = AC_PAR_AUDIO_FG_CAP,
385 7953793c Bandan Das
        .val = 0x00000808,
386 7953793c Bandan Das
    },{
387 7953793c Bandan Das
        .id  = AC_PAR_POWER_STATE,
388 7953793c Bandan Das
        .val = 0,
389 7953793c Bandan Das
    },
390 7953793c Bandan Das
};
391 7953793c Bandan Das
392 7953793c Bandan Das
/* micro: nodes */
393 2690e61e Bandan Das
static const desc_node glue(micro_nodes_, PARAM)[] = {
394 7953793c Bandan Das
    {
395 7953793c Bandan Das
        .nid     = AC_NODE_ROOT,
396 7953793c Bandan Das
        .name    = "root",
397 2690e61e Bandan Das
        .params  = glue(micro_params_root_, PARAM),
398 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(micro_params_root_, PARAM)),
399 7953793c Bandan Das
    },{
400 7953793c Bandan Das
        .nid     = 1,
401 7953793c Bandan Das
        .name    = "func",
402 2690e61e Bandan Das
        .params  = glue(micro_params_audio_func_, PARAM),
403 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(micro_params_audio_func_, PARAM)),
404 7953793c Bandan Das
    },{
405 7953793c Bandan Das
        .nid     = 2,
406 7953793c Bandan Das
        .name    = "dac",
407 2690e61e Bandan Das
        .params  = glue(common_params_audio_dac_, PARAM),
408 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(common_params_audio_dac_, PARAM)),
409 7953793c Bandan Das
        .stindex = 0,
410 7953793c Bandan Das
    },{
411 7953793c Bandan Das
        .nid     = 3,
412 7953793c Bandan Das
        .name    = "out",
413 2690e61e Bandan Das
        .params  = glue(common_params_audio_lineout_, PARAM),
414 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(common_params_audio_lineout_, PARAM)),
415 7953793c Bandan Das
        .config  = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) |
416 7953793c Bandan Das
                    (AC_JACK_SPEAKER      << AC_DEFCFG_DEVICE_SHIFT)    |
417 7953793c Bandan Das
                    (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) |
418 7953793c Bandan Das
                    (AC_JACK_COLOR_GREEN  << AC_DEFCFG_COLOR_SHIFT)     |
419 7953793c Bandan Das
                    0x10),
420 7953793c Bandan Das
        .pinctl  = AC_PINCTL_OUT_EN,
421 7953793c Bandan Das
        .conn    = (uint32_t[]) { 2 },
422 7953793c Bandan Das
    },{
423 7953793c Bandan Das
        .nid     = 4,
424 7953793c Bandan Das
        .name    = "adc",
425 2690e61e Bandan Das
        .params  = glue(common_params_audio_adc_, PARAM),
426 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(common_params_audio_adc_, PARAM)),
427 7953793c Bandan Das
        .stindex = 1,
428 7953793c Bandan Das
        .conn    = (uint32_t[]) { 5 },
429 7953793c Bandan Das
    },{
430 7953793c Bandan Das
        .nid     = 5,
431 7953793c Bandan Das
        .name    = "in",
432 2690e61e Bandan Das
        .params  = glue(common_params_audio_linein_, PARAM),
433 2690e61e Bandan Das
        .nparams = ARRAY_SIZE(glue(common_params_audio_linein_, PARAM)),
434 7953793c Bandan Das
        .config  = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) |
435 7953793c Bandan Das
                    (AC_JACK_MIC_IN       << AC_DEFCFG_DEVICE_SHIFT)    |
436 7953793c Bandan Das
                    (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) |
437 7953793c Bandan Das
                    (AC_JACK_COLOR_RED    << AC_DEFCFG_COLOR_SHIFT)     |
438 7953793c Bandan Das
                    0x20),
439 7953793c Bandan Das
        .pinctl  = AC_PINCTL_IN_EN,
440 7953793c Bandan Das
    }
441 7953793c Bandan Das
};
442 7953793c Bandan Das
443 7953793c Bandan Das
/* micro: codec */
444 2690e61e Bandan Das
static const desc_codec glue(micro_, PARAM) = {
445 7953793c Bandan Das
    .name   = "micro",
446 7953793c Bandan Das
    .iid    = QEMU_HDA_ID_MICRO,
447 2690e61e Bandan Das
    .nodes  = glue(micro_nodes_, PARAM),
448 2690e61e Bandan Das
    .nnodes = ARRAY_SIZE(glue(micro_nodes_, PARAM)),
449 7953793c Bandan Das
};
450 2690e61e Bandan Das
451 2690e61e Bandan Das
#undef PARAM
452 2690e61e Bandan Das
#undef HDA_MIXER
453 2690e61e Bandan Das
#undef QEMU_HDA_ID_OUTPUT
454 2690e61e Bandan Das
#undef QEMU_HDA_ID_DUPLEX
455 2690e61e Bandan Das
#undef QEMU_HDA_ID_MICRO
456 2690e61e Bandan Das
#undef QEMU_HDA_AMP_CAPS