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