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