Revision 2690e61e hw/audio/hda-codec-common.h
b/hw/audio/hda-codec-common.h | ||
---|---|---|
24 | 24 |
* HDA codec descriptions |
25 | 25 |
*/ |
26 | 26 |
|
27 |
#ifdef CONFIG_MIXEMU
|
|
27 |
#ifdef HDA_MIXER
|
|
28 | 28 |
#define QEMU_HDA_ID_OUTPUT ((QEMU_HDA_ID_VENDOR << 16) | 0x12) |
29 | 29 |
#define QEMU_HDA_ID_DUPLEX ((QEMU_HDA_ID_VENDOR << 16) | 0x22) |
30 | 30 |
#define QEMU_HDA_ID_MICRO ((QEMU_HDA_ID_VENDOR << 16) | 0x32) |
... | ... | |
42 | 42 |
|
43 | 43 |
|
44 | 44 |
/* common: audio output widget */ |
45 |
static const desc_param common_params_audio_dac[] = {
|
|
45 |
static const desc_param glue(common_params_audio_dac_, PARAM)[] = {
|
|
46 | 46 |
{ |
47 | 47 |
.id = AC_PAR_AUDIO_WIDGET_CAP, |
48 | 48 |
.val = ((AC_WID_AUD_OUT << AC_WCAP_TYPE_SHIFT) | |
... | ... | |
66 | 66 |
}; |
67 | 67 |
|
68 | 68 |
/* common: audio input widget */ |
69 |
static const desc_param common_params_audio_adc[] = {
|
|
69 |
static const desc_param glue(common_params_audio_adc_, PARAM)[] = {
|
|
70 | 70 |
{ |
71 | 71 |
.id = AC_PAR_AUDIO_WIDGET_CAP, |
72 | 72 |
.val = ((AC_WID_AUD_IN << AC_WCAP_TYPE_SHIFT) | |
... | ... | |
94 | 94 |
}; |
95 | 95 |
|
96 | 96 |
/* common: pin widget (line-out) */ |
97 |
static const desc_param common_params_audio_lineout[] = {
|
|
97 |
static const desc_param glue(common_params_audio_lineout_, PARAM)[] = {
|
|
98 | 98 |
{ |
99 | 99 |
.id = AC_PAR_AUDIO_WIDGET_CAP, |
100 | 100 |
.val = ((AC_WID_PIN << AC_WCAP_TYPE_SHIFT) | |
... | ... | |
116 | 116 |
}; |
117 | 117 |
|
118 | 118 |
/* common: pin widget (line-in) */ |
119 |
static const desc_param common_params_audio_linein[] = {
|
|
119 |
static const desc_param glue(common_params_audio_linein_, PARAM)[] = {
|
|
120 | 120 |
{ |
121 | 121 |
.id = AC_PAR_AUDIO_WIDGET_CAP, |
122 | 122 |
.val = ((AC_WID_PIN << AC_WCAP_TYPE_SHIFT) | |
... | ... | |
134 | 134 |
}; |
135 | 135 |
|
136 | 136 |
/* output: root node */ |
137 |
static const desc_param output_params_root[] = {
|
|
137 |
static const desc_param glue(output_params_root_, PARAM)[] = {
|
|
138 | 138 |
{ |
139 | 139 |
.id = AC_PAR_VENDOR_ID, |
140 | 140 |
.val = QEMU_HDA_ID_OUTPUT, |
... | ... | |
151 | 151 |
}; |
152 | 152 |
|
153 | 153 |
/* output: audio function */ |
154 |
static const desc_param output_params_audio_func[] = {
|
|
154 |
static const desc_param glue(output_params_audio_func_, PARAM)[] = {
|
|
155 | 155 |
{ |
156 | 156 |
.id = AC_PAR_FUNCTION_TYPE, |
157 | 157 |
.val = AC_GRP_AUDIO_FUNCTION, |
... | ... | |
186 | 186 |
}; |
187 | 187 |
|
188 | 188 |
/* output: nodes */ |
189 |
static const desc_node output_nodes[] = {
|
|
189 |
static const desc_node glue(output_nodes_, PARAM)[] = {
|
|
190 | 190 |
{ |
191 | 191 |
.nid = AC_NODE_ROOT, |
192 | 192 |
.name = "root", |
193 |
.params = output_params_root,
|
|
194 |
.nparams = ARRAY_SIZE(output_params_root),
|
|
193 |
.params = glue(output_params_root_, PARAM),
|
|
194 |
.nparams = ARRAY_SIZE(glue(output_params_root_, PARAM)),
|
|
195 | 195 |
},{ |
196 | 196 |
.nid = 1, |
197 | 197 |
.name = "func", |
198 |
.params = output_params_audio_func,
|
|
199 |
.nparams = ARRAY_SIZE(output_params_audio_func),
|
|
198 |
.params = glue(output_params_audio_func_, PARAM),
|
|
199 |
.nparams = ARRAY_SIZE(glue(output_params_audio_func_, PARAM)),
|
|
200 | 200 |
},{ |
201 | 201 |
.nid = 2, |
202 | 202 |
.name = "dac", |
203 |
.params = common_params_audio_dac,
|
|
204 |
.nparams = ARRAY_SIZE(common_params_audio_dac),
|
|
203 |
.params = glue(common_params_audio_dac_, PARAM),
|
|
204 |
.nparams = ARRAY_SIZE(glue(common_params_audio_dac_, PARAM)),
|
|
205 | 205 |
.stindex = 0, |
206 | 206 |
},{ |
207 | 207 |
.nid = 3, |
208 | 208 |
.name = "out", |
209 |
.params = common_params_audio_lineout,
|
|
210 |
.nparams = ARRAY_SIZE(common_params_audio_lineout),
|
|
209 |
.params = glue(common_params_audio_lineout_, PARAM),
|
|
210 |
.nparams = ARRAY_SIZE(glue(common_params_audio_lineout_, PARAM)),
|
|
211 | 211 |
.config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | |
212 | 212 |
(AC_JACK_LINE_OUT << AC_DEFCFG_DEVICE_SHIFT) | |
213 | 213 |
(AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | |
... | ... | |
219 | 219 |
}; |
220 | 220 |
|
221 | 221 |
/* output: codec */ |
222 |
static const desc_codec output = {
|
|
222 |
static const desc_codec glue(output_, PARAM) = {
|
|
223 | 223 |
.name = "output", |
224 | 224 |
.iid = QEMU_HDA_ID_OUTPUT, |
225 |
.nodes = output_nodes,
|
|
226 |
.nnodes = ARRAY_SIZE(output_nodes),
|
|
225 |
.nodes = glue(output_nodes_, PARAM),
|
|
226 |
.nnodes = ARRAY_SIZE(glue(output_nodes_, PARAM)),
|
|
227 | 227 |
}; |
228 | 228 |
|
229 | 229 |
/* duplex: root node */ |
230 |
static const desc_param duplex_params_root[] = {
|
|
230 |
static const desc_param glue(duplex_params_root_, PARAM)[] = {
|
|
231 | 231 |
{ |
232 | 232 |
.id = AC_PAR_VENDOR_ID, |
233 | 233 |
.val = QEMU_HDA_ID_DUPLEX, |
... | ... | |
244 | 244 |
}; |
245 | 245 |
|
246 | 246 |
/* duplex: audio function */ |
247 |
static const desc_param duplex_params_audio_func[] = {
|
|
247 |
static const desc_param glue(duplex_params_audio_func_, PARAM)[] = {
|
|
248 | 248 |
{ |
249 | 249 |
.id = AC_PAR_FUNCTION_TYPE, |
250 | 250 |
.val = AC_GRP_AUDIO_FUNCTION, |
... | ... | |
279 | 279 |
}; |
280 | 280 |
|
281 | 281 |
/* duplex: nodes */ |
282 |
static const desc_node duplex_nodes[] = {
|
|
282 |
static const desc_node glue(duplex_nodes_, PARAM)[] = {
|
|
283 | 283 |
{ |
284 | 284 |
.nid = AC_NODE_ROOT, |
285 | 285 |
.name = "root", |
286 |
.params = duplex_params_root,
|
|
287 |
.nparams = ARRAY_SIZE(duplex_params_root),
|
|
286 |
.params = glue(duplex_params_root_, PARAM),
|
|
287 |
.nparams = ARRAY_SIZE(glue(duplex_params_root_, PARAM)),
|
|
288 | 288 |
},{ |
289 | 289 |
.nid = 1, |
290 | 290 |
.name = "func", |
291 |
.params = duplex_params_audio_func,
|
|
292 |
.nparams = ARRAY_SIZE(duplex_params_audio_func),
|
|
291 |
.params = glue(duplex_params_audio_func_, PARAM),
|
|
292 |
.nparams = ARRAY_SIZE(glue(duplex_params_audio_func_, PARAM)),
|
|
293 | 293 |
},{ |
294 | 294 |
.nid = 2, |
295 | 295 |
.name = "dac", |
296 |
.params = common_params_audio_dac,
|
|
297 |
.nparams = ARRAY_SIZE(common_params_audio_dac),
|
|
296 |
.params = glue(common_params_audio_dac_, PARAM),
|
|
297 |
.nparams = ARRAY_SIZE(glue(common_params_audio_dac_, PARAM)),
|
|
298 | 298 |
.stindex = 0, |
299 | 299 |
},{ |
300 | 300 |
.nid = 3, |
301 | 301 |
.name = "out", |
302 |
.params = common_params_audio_lineout,
|
|
303 |
.nparams = ARRAY_SIZE(common_params_audio_lineout),
|
|
302 |
.params = glue(common_params_audio_lineout_, PARAM),
|
|
303 |
.nparams = ARRAY_SIZE(glue(common_params_audio_lineout_, PARAM)),
|
|
304 | 304 |
.config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | |
305 | 305 |
(AC_JACK_LINE_OUT << AC_DEFCFG_DEVICE_SHIFT) | |
306 | 306 |
(AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | |
... | ... | |
311 | 311 |
},{ |
312 | 312 |
.nid = 4, |
313 | 313 |
.name = "adc", |
314 |
.params = common_params_audio_adc,
|
|
315 |
.nparams = ARRAY_SIZE(common_params_audio_adc),
|
|
314 |
.params = glue(common_params_audio_adc_, PARAM),
|
|
315 |
.nparams = ARRAY_SIZE(glue(common_params_audio_adc_, PARAM)),
|
|
316 | 316 |
.stindex = 1, |
317 | 317 |
.conn = (uint32_t[]) { 5 }, |
318 | 318 |
},{ |
319 | 319 |
.nid = 5, |
320 | 320 |
.name = "in", |
321 |
.params = common_params_audio_linein,
|
|
322 |
.nparams = ARRAY_SIZE(common_params_audio_linein),
|
|
321 |
.params = glue(common_params_audio_linein_, PARAM),
|
|
322 |
.nparams = ARRAY_SIZE(glue(common_params_audio_linein_, PARAM)),
|
|
323 | 323 |
.config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | |
324 | 324 |
(AC_JACK_LINE_IN << AC_DEFCFG_DEVICE_SHIFT) | |
325 | 325 |
(AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | |
... | ... | |
330 | 330 |
}; |
331 | 331 |
|
332 | 332 |
/* duplex: codec */ |
333 |
static const desc_codec duplex = {
|
|
333 |
static const desc_codec glue(duplex_, PARAM) = {
|
|
334 | 334 |
.name = "duplex", |
335 | 335 |
.iid = QEMU_HDA_ID_DUPLEX, |
336 |
.nodes = duplex_nodes,
|
|
337 |
.nnodes = ARRAY_SIZE(duplex_nodes),
|
|
336 |
.nodes = glue(duplex_nodes_, PARAM),
|
|
337 |
.nnodes = ARRAY_SIZE(glue(duplex_nodes_, PARAM)),
|
|
338 | 338 |
}; |
339 | 339 |
|
340 | 340 |
/* micro: root node */ |
341 |
static const desc_param micro_params_root[] = {
|
|
341 |
static const desc_param glue(micro_params_root_, PARAM)[] = {
|
|
342 | 342 |
{ |
343 | 343 |
.id = AC_PAR_VENDOR_ID, |
344 | 344 |
.val = QEMU_HDA_ID_MICRO, |
... | ... | |
355 | 355 |
}; |
356 | 356 |
|
357 | 357 |
/* micro: audio function */ |
358 |
static const desc_param micro_params_audio_func[] = {
|
|
358 |
static const desc_param glue(micro_params_audio_func_, PARAM)[] = {
|
|
359 | 359 |
{ |
360 | 360 |
.id = AC_PAR_FUNCTION_TYPE, |
361 | 361 |
.val = AC_GRP_AUDIO_FUNCTION, |
... | ... | |
390 | 390 |
}; |
391 | 391 |
|
392 | 392 |
/* micro: nodes */ |
393 |
static const desc_node micro_nodes[] = {
|
|
393 |
static const desc_node glue(micro_nodes_, PARAM)[] = {
|
|
394 | 394 |
{ |
395 | 395 |
.nid = AC_NODE_ROOT, |
396 | 396 |
.name = "root", |
397 |
.params = micro_params_root,
|
|
398 |
.nparams = ARRAY_SIZE(micro_params_root),
|
|
397 |
.params = glue(micro_params_root_, PARAM),
|
|
398 |
.nparams = ARRAY_SIZE(glue(micro_params_root_, PARAM)),
|
|
399 | 399 |
},{ |
400 | 400 |
.nid = 1, |
401 | 401 |
.name = "func", |
402 |
.params = micro_params_audio_func,
|
|
403 |
.nparams = ARRAY_SIZE(micro_params_audio_func),
|
|
402 |
.params = glue(micro_params_audio_func_, PARAM),
|
|
403 |
.nparams = ARRAY_SIZE(glue(micro_params_audio_func_, PARAM)),
|
|
404 | 404 |
},{ |
405 | 405 |
.nid = 2, |
406 | 406 |
.name = "dac", |
407 |
.params = common_params_audio_dac,
|
|
408 |
.nparams = ARRAY_SIZE(common_params_audio_dac),
|
|
407 |
.params = glue(common_params_audio_dac_, PARAM),
|
|
408 |
.nparams = ARRAY_SIZE(glue(common_params_audio_dac_, PARAM)),
|
|
409 | 409 |
.stindex = 0, |
410 | 410 |
},{ |
411 | 411 |
.nid = 3, |
412 | 412 |
.name = "out", |
413 |
.params = common_params_audio_lineout,
|
|
414 |
.nparams = ARRAY_SIZE(common_params_audio_lineout),
|
|
413 |
.params = glue(common_params_audio_lineout_, PARAM),
|
|
414 |
.nparams = ARRAY_SIZE(glue(common_params_audio_lineout_, PARAM)),
|
|
415 | 415 |
.config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | |
416 | 416 |
(AC_JACK_SPEAKER << AC_DEFCFG_DEVICE_SHIFT) | |
417 | 417 |
(AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | |
... | ... | |
422 | 422 |
},{ |
423 | 423 |
.nid = 4, |
424 | 424 |
.name = "adc", |
425 |
.params = common_params_audio_adc,
|
|
426 |
.nparams = ARRAY_SIZE(common_params_audio_adc),
|
|
425 |
.params = glue(common_params_audio_adc_, PARAM),
|
|
426 |
.nparams = ARRAY_SIZE(glue(common_params_audio_adc_, PARAM)),
|
|
427 | 427 |
.stindex = 1, |
428 | 428 |
.conn = (uint32_t[]) { 5 }, |
429 | 429 |
},{ |
430 | 430 |
.nid = 5, |
431 | 431 |
.name = "in", |
432 |
.params = common_params_audio_linein,
|
|
433 |
.nparams = ARRAY_SIZE(common_params_audio_linein),
|
|
432 |
.params = glue(common_params_audio_linein_, PARAM),
|
|
433 |
.nparams = ARRAY_SIZE(glue(common_params_audio_linein_, PARAM)),
|
|
434 | 434 |
.config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | |
435 | 435 |
(AC_JACK_MIC_IN << AC_DEFCFG_DEVICE_SHIFT) | |
436 | 436 |
(AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | |
... | ... | |
441 | 441 |
}; |
442 | 442 |
|
443 | 443 |
/* micro: codec */ |
444 |
static const desc_codec micro = {
|
|
444 |
static const desc_codec glue(micro_, PARAM) = {
|
|
445 | 445 |
.name = "micro", |
446 | 446 |
.iid = QEMU_HDA_ID_MICRO, |
447 |
.nodes = micro_nodes,
|
|
448 |
.nnodes = ARRAY_SIZE(micro_nodes),
|
|
447 |
.nodes = glue(micro_nodes_, PARAM),
|
|
448 |
.nnodes = ARRAY_SIZE(glue(micro_nodes_, PARAM)),
|
|
449 | 449 |
}; |
450 |
|
|
451 |
#undef PARAM |
|
452 |
#undef HDA_MIXER |
|
453 |
#undef QEMU_HDA_ID_OUTPUT |
|
454 |
#undef QEMU_HDA_ID_DUPLEX |
|
455 |
#undef QEMU_HDA_ID_MICRO |
|
456 |
#undef QEMU_HDA_AMP_CAPS |
Also available in: Unified diff