/*
 * File: HdaModels.c
 *
 * Copyright (c) 2018 John Davis
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

#include "AudioDxe.h"
#include <Library/HdaModels.h>

//
// Controller name strings.
//
HDA_CONTROLLER_LIST_ENTRY gHdaControllerList[] = {
    // AMD.
    { HDA_CONTROLLER_AMDXXXX,       L"AMD HD Audio Controller" },

    // Intel.
    { HDA_CONTROLLER_ICH6,          L"Intel ICH6 HD Audio Controller" },
    { HDA_CONTROLLER_63XXESB,       L"Intel 63XXESB HD Audio Controller" },
    { HDA_CONTROLLER_ICH7,          L"Intel ICH7 HD Audio Controller" },
    { HDA_CONTROLLER_ICH8,          L"Intel ICH8 HD Audio Controller" },
    { HDA_CONTROLLER_ICH9,          L"Intel ICH9 HD Audio Controller" },
    { HDA_CONTROLLER_ICH10_1,       L"Intel ICH10 HD Audio Controller" },
    { HDA_CONTROLLER_ICH10_2,       L"Intel ICH10 HD Audio Controller" },
    { HDA_CONTROLLER_5SERIES_1,     L"Intel 5 Series HD Audio Controller" },
    { HDA_CONTROLLER_5SERIES_2,     L"Intel 5 Series HD Audio Controller" },
    { HDA_CONTROLLER_6SERIES,       L"Intel 6 Series HD Audio Controller" },
    { HDA_CONTROLLER_X79,           L"Intel X79/C600 Series HD Audio Controller" },
    { HDA_CONTROLLER_7SERIES,       L"Intel 7 Series HD Audio Controller" },
    { HDA_CONTROLLER_8SERIES_1,     L"Intel 8 Series HD Audio Controller" },
    { HDA_CONTROLLER_8SERIES_2,     L"Intel 8 Series HD Audio Controller" },
    { HDA_CONTROLLER_8SERIES_3,     L"Intel 8 Series HD Audio Controller" },
    { HDA_CONTROLLER_8SERIES_4,     L"Intel 8 Series HD Audio Controller" },
    { HDA_CONTROLLER_9SERIES_1,     L"Intel 9 Series HD Audio Controller" },
    { HDA_CONTROLLER_9SERIES_2,     L"Intel 9 Series HD Audio Controller" },
    { HDA_CONTROLLER_X99_1,         L"Intel X99/C610 Series HD Audio Controller" },
    { HDA_CONTROLLER_X99_2,         L"Intel X99/C610 Series HD Audio Controller" },
    { HDA_CONTROLLER_100SERIES,     L"Intel 100 Series HD Audio Controller" },
    { HDA_CONTROLLER_200SERIES,     L"Intel 200 Series HD Audio Controller" },
    { HDA_CONTROLLER_300SERIES,     L"Intel 300 Series HD Audio Controller" },
    { HDA_CONTROLLER_HASWELL_1,     L"Intel Haswell HD Audio Controller" },
    { HDA_CONTROLLER_HASWELL_2,     L"Intel Ivy Bridge/Haswell HD Audio Controller" },
    { HDA_CONTROLLER_CRYSTALWELL,   L"Intel Crystal Well HD Audio Controller" },
    { HDA_CONTROLLER_BROADWELL,     L"Intel Broadwell HD Audio Controller" },
    { HDA_CONTROLLER_INTELXXXX,     L"Intel HD Audio Controller" },

    // NVIDIA
    { HDA_CONTROLLER_MCP51,         L"NVIDIA MCP51 HD Audio Controller" },
    { HDA_CONTROLLER_MCP55,         L"NVIDIA MCP55 HD Audio Controller" },
    { HDA_CONTROLLER_MCP61_1,       L"NVIDIA MCP61 HD Audio Controller" },
    { HDA_CONTROLLER_MCP61_2,       L"NVIDIA MCP61 HD Audio Controller" },
    { HDA_CONTROLLER_MCP65_1,       L"NVIDIA MCP65 HD Audio Controller" },
    { HDA_CONTROLLER_MCP65_2,       L"NVIDIA MCP65 HD Audio Controller" },
    { HDA_CONTROLLER_MCP67_1,       L"NVIDIA MCP67 HD Audio Controller" },
    { HDA_CONTROLLER_MCP67_2,       L"NVIDIA MCP67 HD Audio Controller" },
    { HDA_CONTROLLER_MCP72,         L"NVIDIA MCP72 HD Audio Controller" },
    { HDA_CONTROLLER_MCP73,         L"NVIDIA MCP73 HD Audio Controller" },
    { HDA_CONTROLLER_MCP79_1,       L"NVIDIA MCP79 HD Audio Controller" },
    { HDA_CONTROLLER_MCP79_2,       L"NVIDIA MCP79 HD Audio Controller" },
    { HDA_CONTROLLER_MCP79_3,       L"NVIDIA MCP79 HD Audio Controller" },
    { HDA_CONTROLLER_MCP79_4,       L"NVIDIA MCP79 HD Audio Controller" },
    { HDA_CONTROLLER_MCP89,         L"NVIDIA MCP89 HD Audio Controller" },
    { HDA_CONTROLLER_GT216,         L"NVIDIA GT216 HD Audio Controller" },
    { HDA_CONTROLLER_GF100,         L"NVIDIA GF100 HD Audio Controller" },
    { HDA_CONTROLLER_GF106,         L"NVIDIA GF106 HD Audio Controller" },
    { HDA_CONTROLLER_GF108,         L"NVIDIA GF108 HD Audio Controller" },
    { HDA_CONTROLLER_GF104,         L"NVIDIA GF104 HD Audio Controller" },
    { HDA_CONTROLLER_GF116,         L"NVIDIA GF116 HD Audio Controller" },
    { HDA_CONTROLLER_GF119,         L"NVIDIA GF119 HD Audio Controller" },
    { HDA_CONTROLLER_GF110,         L"NVIDIA GF110 HD Audio Controller" },
    { HDA_CONTROLLER_GK104,         L"NVIDIA GK104 HD Audio Controller" },
    { HDA_CONTROLLER_GK106,         L"NVIDIA GK106 HD Audio Controller" },
    { HDA_CONTROLLER_GF114,         L"NVIDIA GF114 HD Audio Controller" },
    { HDA_CONTROLLER_GK208,         L"NVIDIA GK208 HD Audio Controller" },
    { HDA_CONTROLLER_GK110,         L"NVIDIA GK110 HD Audio Controller" },
    { HDA_CONTROLLER_GK107,         L"NVIDIA GK107 HD Audio Controller" },
    { HDA_CONTROLLER_GM200,         L"NVIDIA GM200 HD Audio Controller" },
    { HDA_CONTROLLER_GP108,         L"NVIDIA GP108 HD Audio Controller" },
    { HDA_CONTROLLER_GP107GL,       L"NVIDIA GP107GL HD Audio Controller" },
    { HDA_CONTROLLER_GM206,         L"NVIDIA GM206 HD Audio Controller" },
    { HDA_CONTROLLER_GM204,         L"NVIDIA GM204 HD Audio Controller" },
    { HDA_CONTROLLER_GP102,         L"NVIDIA GP102 HD Audio Controller" },
    { HDA_CONTROLLER_GP104,         L"NVIDIA GP104 HD Audio Controller" },
    { HDA_CONTROLLER_GP106,         L"NVIDIA GP106 HD Audio Controller" },
    { HDA_CONTROLLER_TU102,         L"NVIDIA TU102 HD Audio Controller" },
    { HDA_CONTROLLER_NVIDIAXXXX,    L"NVIDIA HD Audio Controller" },

    // End.
    { 0,                            NULL }
};

//
// Codec name strings.
//
HDA_CODEC_LIST_ENTRY gHdaCodecList[] = {
    // AMD.
    { HDA_CODEC_AMDXXXX,            0x0000, L"AMD (Unknown)" },

    // Analog Devices.
    { HDA_CODEC_AD1882,             0x0000, L"Analog Devices AD1882" },
    { HDA_CODEC_AD1882A,            0x0000, L"Analog Devices AD1882A" },
    { HDA_CODEC_AD1883,             0x0000, L"Analog Devices AD1883" },
    { HDA_CODEC_AD1884,             0x0000, L"Analog Devices AD1884" },
    { HDA_CODEC_AD1884A,            0x0000, L"Analog Devices AD1884A" },
    { HDA_CODEC_AD1981HD,           0x0000, L"Analog Devices AD1981HD" },
    { HDA_CODEC_AD1983,             0x0000, L"Analog Devices AD1983" },
    { HDA_CODEC_AD1984,             0x0000, L"Analog Devices AD1984" },
    { HDA_CODEC_AD1984A,            0x0000, L"Analog Devices AD1984A" },
    { HDA_CODEC_AD1984B,            0x0000, L"Analog Devices AD1984B" },
    { HDA_CODEC_AD1986A,            0x0000, L"Analog Devices AD1986A" },
    { HDA_CODEC_AD1987,             0x0000, L"Analog Devices AD1987" },
    { HDA_CODEC_AD1988,             0x0000, L"Analog Devices AD1988A" },
    { HDA_CODEC_AD1988B,            0x0000, L"Analog Devices AD1988B" },
    { HDA_CODEC_AD1989A,            0x0000, L"Analog Devices AD1989A" },
    { HDA_CODEC_AD1989B,            0x0000, L"Analog Devices AD2000b" },
    { HDA_CODEC_ADXXXX,             0x0000, L"Analog Devices (Unknown)" },

    // Cirrus Logic.
    { HDA_CODEC_CS4206,             0x0000, L"Cirrus Logic CS4206" },
    { HDA_CODEC_CS4207,             0x0000, L"Cirrus Logic CS4207" },
    { HDA_CODEC_CS4210,             0x0000, L"Cirrus Logic CS4210" },
    { HDA_CODEC_CSXXXX,             0x0000, L"Cirrus Logic (Unknown)" },

    // Conexant.
    { HDA_CODEC_CX20549,            0x0000, L"Conexant CX20549 (Venice)" },
    { HDA_CODEC_CX20551,            0x0000, L"Conexant CX20551 (Waikiki)" },
    { HDA_CODEC_CX20561,            0x0000, L"Conexant CX20561 (Hermosa)" },
    { HDA_CODEC_CX20582,            0x0000, L"Conexant CX20582 (Pebble)" },
    { HDA_CODEC_CX20583,            0x0000, L"Conexant CX20583 (Pebble HSF)" },
    { HDA_CODEC_CX20584,            0x0000, L"Conexant CX20584" },
    { HDA_CODEC_CX20585,            0x0000, L"Conexant CX20585" },
    { HDA_CODEC_CX20588,            0x0000, L"Conexant CX20588" },
    { HDA_CODEC_CX20590,            0x0000, L"Conexant CX20590" },
    { HDA_CODEC_CX20631,            0x0000, L"Conexant CX20631" },
    { HDA_CODEC_CX20632,            0x0000, L"Conexant CX20632" },
    { HDA_CODEC_CX20641,            0x0000, L"Conexant CX20641" },
    { HDA_CODEC_CX20642,            0x0000, L"Conexant CX20642" },
    { HDA_CODEC_CX20651,            0x0000, L"Conexant CX20651" },
    { HDA_CODEC_CX20652,            0x0000, L"Conexant CX20652" },
    { HDA_CODEC_CX20664,            0x0000, L"Conexant CX20664" },
    { HDA_CODEC_CX20665,            0x0000, L"Conexant CX20665" },
    { HDA_CODEC_CXXXXX,             0x0000, L"Conexant (Unknown)" },

    // Creative.
    { HDA_CODEC_CA0110,             0x0000, L"Creative CA0110-IBG" },
    { HDA_CODEC_CA0110_2,           0x0000, L"Creative CA0110-IBG" },
    { HDA_CODEC_CA0132,             0x0000, L"Creative CA0132" },
    { HDA_CODEC_SB0880,             0x0000, L"Creative SB0880 X-Fi" },
    { HDA_CODEC_CAXXXX,             0x0000, L"Creative (Unknown)" },

    // IDT.
    { HDA_CODEC_IDT92HD005,         0x0000, L"IDT 92HD005" },
    { HDA_CODEC_IDT92HD005D,        0x0000, L"IDT 92HD005D" },
    { HDA_CODEC_IDT92HD206X,        0x0000, L"IDT 92HD206X" },
    { HDA_CODEC_IDT92HD206D,        0x0000, L"IDT 92HD206D" },
    { HDA_CODEC_IDT92HD66B1X5,      0x0000, L"IDT 92HD66B1X5" },
    { HDA_CODEC_IDT92HD66B2X5,      0x0000, L"IDT 92HD66B2X5" },
    { HDA_CODEC_IDT92HD66B3X5,      0x0000, L"IDT 92HD66B3X5" },
    { HDA_CODEC_IDT92HD66C1X5,      0x0000, L"IDT 92HD66C1X5" },
    { HDA_CODEC_IDT92HD66C2X5,      0x0000, L"IDT 92HD66C2X5" },
    { HDA_CODEC_IDT92HD66C3X5,      0x0000, L"IDT 92HD66C3X5" },
    { HDA_CODEC_IDT92HD66B1X3,      0x0000, L"IDT 92HD66B1X3" },
    { HDA_CODEC_IDT92HD66B2X3,      0x0000, L"IDT 92HD66B2X3" },
    { HDA_CODEC_IDT92HD66B3X3,      0x0000, L"IDT 92HD66B3X3" },
    { HDA_CODEC_IDT92HD66C1X3,      0x0000, L"IDT 92HD66C1X3" },
    { HDA_CODEC_IDT92HD66C2X3,      0x0000, L"IDT 92HD66C2X3" },
    { HDA_CODEC_IDT92HD66C3_65,     0x0000, L"IDT 92HD66C3_65" },
    { HDA_CODEC_IDT92HD700X,        0x0000, L"IDT 92HD700X" },
    { HDA_CODEC_IDT92HD700D,        0x0000, L"IDT 92HD700D" },
    { HDA_CODEC_IDT92HD71B5,        0x0000, L"IDT 92HD71B5" },
    { HDA_CODEC_IDT92HD71B5_2,      0x0000, L"IDT 92HD71B5" },
    { HDA_CODEC_IDT92HD71B6,        0x0000, L"IDT 92HD71B6" },
    { HDA_CODEC_IDT92HD71B6_2,      0x0000, L"IDT 92HD71B6" },
    { HDA_CODEC_IDT92HD71B7,        0x0000, L"IDT 92HD71B7" },
    { HDA_CODEC_IDT92HD71B7_2,      0x0000, L"IDT 92HD71B7" },
    { HDA_CODEC_IDT92HD71B8,        0x0000, L"IDT 92HD71B8" },
    { HDA_CODEC_IDT92HD71B8_2,      0x0000, L"IDT 92HD71B8" },
    { HDA_CODEC_IDT92HD73C1,        0x0000, L"IDT 92HD73C1" },
    { HDA_CODEC_IDT92HD73D1,        0x0000, L"IDT 92HD73D1" },
    { HDA_CODEC_IDT92HD73E1,        0x0000, L"IDT 92HD73E1" },
    { HDA_CODEC_IDT92HD75B3,        0x0000, L"IDT 92HD75B3" },
    { HDA_CODEC_IDT92HD75BX,        0x0000, L"IDT 92HD75BX" },
    { HDA_CODEC_IDT92HD81B1C,       0x0000, L"IDT 92HD81B1C" },
    { HDA_CODEC_IDT92HD81B1X,       0x0000, L"IDT 92HD81B1X" },
    { HDA_CODEC_IDT92HD83C1C,       0x0000, L"IDT 92HD83C1C" },
    { HDA_CODEC_IDT92HD83C1X,       0x0000, L"IDT 92HD83C1X" },
    { HDA_CODEC_IDT92HD87B1_3,      0x0000, L"IDT 92HD87B1/3" },
    { HDA_CODEC_IDT92HD87B2_4,      0x0000, L"IDT 92HD87B2/4" },
    { HDA_CODEC_IDT92HD89C3,        0x0000, L"IDT 92HD89C3" },
    { HDA_CODEC_IDT92HD89C2,        0x0000, L"IDT 92HD89C2" },
    { HDA_CODEC_IDT92HD89C1,        0x0000, L"IDT 92HD89C1" },
    { HDA_CODEC_IDT92HD89B3,        0x0000, L"IDT 92HD89B3" },
    { HDA_CODEC_IDT92HD89B2,        0x0000, L"IDT 92HD89B2" },
    { HDA_CODEC_IDT92HD89B1,        0x0000, L"IDT 92HD89B1" },
    { HDA_CODEC_IDT92HD89E3,        0x0000, L"IDT 92HD89E3" },
    { HDA_CODEC_IDT92HD89E2,        0x0000, L"IDT 92HD89E2" },
    { HDA_CODEC_IDT92HD89E1,        0x0000, L"IDT 92HD89E1" },
    { HDA_CODEC_IDT92HD89D3,        0x0000, L"IDT 92HD89D3" },
    { HDA_CODEC_IDT92HD89D2,        0x0000, L"IDT 92HD89D2" },
    { HDA_CODEC_IDT92HD89D1,        0x0000, L"IDT 92HD89D1" },
    { HDA_CODEC_IDT92HD89F3,        0x0000, L"IDT 92HD89F3" },
    { HDA_CODEC_IDT92HD89F2,        0x0000, L"IDT 92HD89F2" },
    { HDA_CODEC_IDT92HD89F1,        0x0000, L"IDT 92HD89F1" },
    { HDA_CODEC_IDT92HD90BXX,       0x0000, L"IDT 92HD90BXX" },
    { HDA_CODEC_IDT92HD91BXX,       0x0000, L"IDT 92HD91BXX" },
    { HDA_CODEC_IDT92HD93BXX,       0x0000, L"IDT 92HD93BXX" },
    { HDA_CODEC_IDT92HD98BXX,       0x0000, L"IDT 92HD98BXX" },
    { HDA_CODEC_IDT92HD99BXX,       0x0000, L"IDT 92HD99BXX" },
    { HDA_CODEC_IDTXXXX,            0x0000, L"IDT (Unknown)" },

    // Intel.
    { HDA_CODEC_INTELCRESTLINE,     0x0000, L"Intel Crestline HDMI" },
    { HDA_CODEC_INTELBEARLAKE,      0x0000, L"Intel Bearlake HDMI" },
    { HDA_CODEC_INTELCANTIGA,       0x0000, L"Intel Cantiga HDMI" },
    { HDA_CODEC_INTELEAGLELAKE,     0x0000, L"Intel Eaglelake HDMI" },
    { HDA_CODEC_INTELIBEXPEAK,      0x0000, L"Intel Ibex Peak HDMI" },
    { HDA_CODEC_INTELIBEXPEAK2,     0x0000, L"Intel Ibex Peak HDMI" },
    { HDA_CODEC_INTELCOUGARPOINT,   0x0000, L"Intel Cougar Point HDMI" },
    { HDA_CODEC_INTELPANTHERPOINT,  0x0000, L"Intel Panther Point HDMI" },
    { HDA_CODEC_INTELHASWELL,       0x0000, L"Intel Haswell HDMI" },
    { HDA_CODEC_INTELBROADWELL,     0x0000, L"Intel Broadwell HDMI" },
    { HDA_CODEC_INTELSKYLAKE,       0x0000, L"Intel Skylake HDMI" },
    { HDA_CODEC_INTELBROXTON,       0x0000, L"Intel Broxton HDMI" },
    { HDA_CODEC_INTELKABYLAKE,      0x0000, L"Intel Kaby Lake HDMI" },
    { HDA_CODEC_INTELCANNONLAKE,    0x0000, L"Intel Cannon Lake HDMI" },
    { HDA_CODEC_INTELGEMINILAKE,    0x0000, L"Intel Gemini Lake HDMI" },
    { HDA_CODEC_INTELGEMINILAKE2,   0x0000, L"Intel Gemini Lake HDMI" },
    { HDA_CODEC_INTELXXXX,          0x0000, L"Intel (Unknown)" },

    // NVIDIA.
    { HDA_CODEC_NVIDIAXXXX,         0x0000, L"NVIDIA (Unknown)" },

    // Realtek.
    { HDA_CODEC_ALC221,             0x0000, L"Realtek ALC221" },
    { HDA_CODEC_ALC225,             0x0000, L"Realtek ALC225" },
    { HDA_CODEC_ALC230,             0x0000, L"Realtek ALC230" },
    { HDA_CODEC_ALC233,             0x0000, L"Realtek ALC233" },
    { HDA_CODEC_ALC235,             0x0000, L"Realtek ALC235" },
    { HDA_CODEC_ALC236,             0x0000, L"Realtek ALC236" },
    { HDA_CODEC_ALC255,             0x0000, L"Realtek ALC255" },
    { HDA_CODEC_ALC256,             0x0000, L"Realtek ALC256" },
    { HDA_CODEC_ALC257,             0x0000, L"Realtek ALC257" },
    { HDA_CODEC_ALC260,             0x0000, L"Realtek ALC260" },
    { HDA_CODEC_ALC262,             0x0000, L"Realtek ALC262" },
    { HDA_CODEC_ALC267,             0x0000, L"Realtek ALC267" },
    { HDA_CODEC_ALC268,             0x0000, L"Realtek ALC268" },
    { HDA_CODEC_ALC269,             0x0000, L"Realtek ALC269" },
    { HDA_CODEC_ALC270,             0x0000, L"Realtek ALC270" },
    { HDA_CODEC_ALC272,             0x0000, L"Realtek ALC272" },
    { HDA_CODEC_ALC273,             0x0000, L"Realtek ALC273" },
    { HDA_CODEC_ALC275,             0x0000, L"Realtek ALC275" },
    { HDA_CODEC_ALC276,             0x0000, L"Realtek ALC276" },
    { HDA_CODEC_ALC280,             0x0000, L"Realtek ALC280" },
    { HDA_CODEC_ALC282,             0x0000, L"Realtek ALC282" },
    { HDA_CODEC_ALC283,             0x0000, L"Realtek ALC283" },
    { HDA_CODEC_ALC284,             0x0000, L"Realtek ALC284" },
    { HDA_CODEC_ALC285,             0x0000, L"Realtek ALC285" },
    { HDA_CODEC_ALC286,             0x0000, L"Realtek ALC286" },
    { HDA_CODEC_ALC288,             0x0000, L"Realtek ALC288" },
    { HDA_CODEC_ALC289,             0x0000, L"Realtek ALC289" },
    { HDA_CODEC_ALC290,             0x0000, L"Realtek ALC290" },
    { HDA_CODEC_ALC292,             0x0000, L"Realtek ALC292" },
    { HDA_CODEC_ALC293,             0x0000, L"Realtek ALC293" },
    { HDA_CODEC_ALC294,             0x0000, L"Realtek ALC294" },
    { HDA_CODEC_ALC295,             0x0000, L"Realtek ALC295" },
    { HDA_CODEC_ALC298,             0x0000, L"Realtek ALC298" },
    { HDA_CODEC_ALC660,             0x0000, L"Realtek ALC660" },
    { HDA_CODEC_ALC662,             0x0002, L"Realtek ALC662v2" },
    { HDA_CODEC_ALC662,             0x0000, L"Realtek ALC662" },
    { HDA_CODEC_ALC663,             0x0000, L"Realtek ALC663" },
    { HDA_CODEC_ALC665,             0x0000, L"Realtek ALC665" },
    { HDA_CODEC_ALC668,             0x0000, L"Realtek ALC668" },
    { HDA_CODEC_ALC670,             0x0000, L"Realtek ALC670" },
    { HDA_CODEC_ALC671,             0x0000, L"Realtek ALC671" },
    { HDA_CODEC_ALC680,             0x0000, L"Realtek ALC680" },
    { HDA_CODEC_ALC861,             0x0000, L"Realtek ALC861" },
    { HDA_CODEC_ALC861VD,           0x0000, L"Realtek ALC861-VD" },
    { HDA_CODEC_ALC880,             0x0000, L"Realtek ALC880" },
    { HDA_CODEC_ALC882,             0x0000, L"Realtek ALC882" },
    { HDA_CODEC_ALC883,             0x0000, L"Realtek ALC883" },
    { HDA_CODEC_ALC885,             0x0103, L"Realtek ALC889A" },
    { HDA_CODEC_ALC885,             0x0101, L"Realtek ALC889A" },
    { HDA_CODEC_ALC885,             0x0000, L"Realtek ALC885" },
    { HDA_CODEC_ALC887,             0x0302, L"Realtek ALC888B" },
    { HDA_CODEC_ALC887,             0x0002, L"Realtek ALC887-VD2" },
    { HDA_CODEC_ALC887,             0x0001, L"Realtek ALC887-VD" },
    { HDA_CODEC_ALC887,             0x0000, L"Realtek ALC887" },
    { HDA_CODEC_ALC888,             0x0003, L"Realtek ALC888S-VD" },
    { HDA_CODEC_ALC888,             0x0002, L"Realtek ALC888S-VC" },
    { HDA_CODEC_ALC888,             0x0001, L"Realtek ALC888S" },
    { HDA_CODEC_ALC888,             0x0000, L"Realtek ALC888" },
    { HDA_CODEC_ALC889,             0x0000, L"Realtek ALC889" },
    { HDA_CODEC_ALC892,             0x0000, L"Realtek ALC892" },
    { HDA_CODEC_ALC898,             0x0000, L"Realtek ALC898" },
    { HDA_CODEC_ALC899,             0x0000, L"Realtek ALC899" },
    { HDA_CODEC_ALC1150,            0x0000, L"Realtek ALC1150" },
    { HDA_CODEC_ALC1220,            0x0000, L"Realtek ALC1220" },
    { HDA_CODEC_ALCXXXX,            0x0000, L"Realtek (Unknown)" },

    // Sigmatel.
    { HDA_CODEC_CXD9872RDK,         0x0000, L"Sigmatel CXD9872RD/K" },
    { HDA_CODEC_CXD9872AKD,         0x0000, L"Sigmatel CXD9872AKD" },
    { HDA_CODEC_STAC9200D,          0x0000, L"Sigmatel STAC9200D" },
    { HDA_CODEC_STAC9204X,          0x0000, L"Sigmatel STAC9204X" },
    { HDA_CODEC_STAC9204D,          0x0000, L"Sigmatel STAC9204D" },
    { HDA_CODEC_STAC9205X,          0x0000, L"Sigmatel STAC9205X" },
    { HDA_CODEC_STAC9205D,          0x0000, L"Sigmatel STAC9205D" },
    { HDA_CODEC_STAC9220,           0x0000, L"Sigmatel STAC9220" },
    { HDA_CODEC_STAC9220_A1,        0x0000, L"Sigmatel STAC9220_A1" },
    { HDA_CODEC_STAC9220_A2,        0x0000, L"Sigmatel STAC9220_A2" },
    { HDA_CODEC_STAC9221,           0x0000, L"Sigmatel STAC9221" },
    { HDA_CODEC_STAC9221_A2,        0x0000, L"Sigmatel STAC9221_A2" },
    { HDA_CODEC_STAC9221D,          0x0000, L"Sigmatel STAC9221D" },
    { HDA_CODEC_STAC922XD,          0x0000, L"Sigmatel STAC9220D/9223D" },
    { HDA_CODEC_STAC9227X,          0x0000, L"Sigmatel STAC9227X" },
    { HDA_CODEC_STAC9227D,          0x0000, L"Sigmatel STAC9227D" },
    { HDA_CODEC_STAC9228X,          0x0000, L"Sigmatel STAC9228X" },
    { HDA_CODEC_STAC9228D,          0x0000, L"Sigmatel STAC9228D" },
    { HDA_CODEC_STAC9229X,          0x0000, L"Sigmatel STAC9229X" },
    { HDA_CODEC_STAC9229D,          0x0000, L"Sigmatel STAC9229D" },
    { HDA_CODEC_STAC9230X,          0x0000, L"Sigmatel STAC9230X" },
    { HDA_CODEC_STAC9230D,          0x0000, L"Sigmatel STAC9230D" },
    { HDA_CODEC_STAC9250,           0x0000, L"Sigmatel STAC9250" },
    { HDA_CODEC_STAC9251,           0x0000, L"Sigmatel STAC9251" },
    { HDA_CODEC_STAC9255,           0x0000, L"Sigmatel STAC9255" },
    { HDA_CODEC_STAC9255D,          0x0000, L"Sigmatel STAC9255D" },
    { HDA_CODEC_STAC9254,           0x0000, L"Sigmatel STAC9254" },
    { HDA_CODEC_STAC9254D,          0x0000, L"Sigmatel STAC9254D" },
    { HDA_CODEC_STAC9271X,          0x0000, L"Sigmatel STAC9271X" },
    { HDA_CODEC_STAC9271D,          0x0000, L"Sigmatel STAC9271D" },
    { HDA_CODEC_STAC9272X,          0x0000, L"Sigmatel STAC9272X" },
    { HDA_CODEC_STAC9272D,          0x0000, L"Sigmatel STAC9272D" },
    { HDA_CODEC_STAC9273X,          0x0000, L"Sigmatel STAC9273X" },
    { HDA_CODEC_STAC9273D,          0x0000, L"Sigmatel STAC9273D" },
    { HDA_CODEC_STAC9274,           0x0000, L"Sigmatel STAC9274" },
    { HDA_CODEC_STAC9274D,          0x0000, L"Sigmatel STAC9274D" },
    { HDA_CODEC_STAC9274X5NH,       0x0000, L"Sigmatel STAC9274X5NH" },
    { HDA_CODEC_STAC9274D5NH,       0x0000, L"Sigmatel STAC9274D5NH" },
    { HDA_CODEC_STAC9872AK,         0x0000, L"Sigmatel STAC9872AK" },
    { HDA_CODEC_STACXXXX,           0x0000, L"Sigmatel (Unknown)" },

    // VIA.
    { HDA_CODEC_VT1708_8,           0x0000, L"VIA VT1708_8" },
    { HDA_CODEC_VT1708_9,           0x0000, L"VIA VT1708_9" },
    { HDA_CODEC_VT1708_A,           0x0000, L"VIA VT1708_A" },
    { HDA_CODEC_VT1708_B,           0x0000, L"VIA VT1708_B" },
    { HDA_CODEC_VT1709_0,           0x0000, L"VIA VT1709_0" },
    { HDA_CODEC_VT1709_1,           0x0000, L"VIA VT1709_1" },
    { HDA_CODEC_VT1709_2,           0x0000, L"VIA VT1709_2" },
    { HDA_CODEC_VT1709_3,           0x0000, L"VIA VT1709_3" },
    { HDA_CODEC_VT1709_4,           0x0000, L"VIA VT1709_4" },
    { HDA_CODEC_VT1709_5,           0x0000, L"VIA VT1709_5" },
    { HDA_CODEC_VT1709_6,           0x0000, L"VIA VT1709_6" },
    { HDA_CODEC_VT1709_7,           0x0000, L"VIA VT1709_7" },
    { HDA_CODEC_VT1708B_0,          0x0000, L"VIA VT1708B_0" },
    { HDA_CODEC_VT1708B_1,          0x0000, L"VIA VT1708B_1" },
    { HDA_CODEC_VT1708B_2,          0x0000, L"VIA VT1708B_2" },
    { HDA_CODEC_VT1708B_3,          0x0000, L"VIA VT1708B_3" },
    { HDA_CODEC_VT1708B_4,          0x0000, L"VIA VT1708B_4" },
    { HDA_CODEC_VT1708B_5,          0x0000, L"VIA VT1708B_5" },
    { HDA_CODEC_VT1708B_6,          0x0000, L"VIA VT1708B_6" },
    { HDA_CODEC_VT1708B_7,          0x0000, L"VIA VT1708B_7" },
    { HDA_CODEC_VT1708S_0,          0x0000, L"VIA VT1708S_0" },
    { HDA_CODEC_VT1708S_1,          0x0000, L"VIA VT1708S_1" },
    { HDA_CODEC_VT1708S_2,          0x0000, L"VIA VT1708S_2" },
    { HDA_CODEC_VT1708S_3,          0x0000, L"VIA VT1708S_3" },
    { HDA_CODEC_VT1708S_4,          0x0000, L"VIA VT1708S_4" },
    { HDA_CODEC_VT1708S_5,          0x0000, L"VIA VT1708S_5" },
    { HDA_CODEC_VT1708S_6,          0x0000, L"VIA VT1708S_6" },
    { HDA_CODEC_VT1708S_7,          0x0000, L"VIA VT1708S_7" },
    { HDA_CODEC_VT1702_0,           0x0000, L"VIA VT1702_0" },
    { HDA_CODEC_VT1702_1,           0x0000, L"VIA VT1702_1" },
    { HDA_CODEC_VT1702_2,           0x0000, L"VIA VT1702_2" },
    { HDA_CODEC_VT1702_3,           0x0000, L"VIA VT1702_3" },
    { HDA_CODEC_VT1702_4,           0x0000, L"VIA VT1702_4" },
    { HDA_CODEC_VT1702_5,           0x0000, L"VIA VT1702_5" },
    { HDA_CODEC_VT1702_6,           0x0000, L"VIA VT1702_6" },
    { HDA_CODEC_VT1702_7,           0x0000, L"VIA VT1702_7" },
    { HDA_CODEC_VT1716S_0,          0x0000, L"VIA VT1716S_0" },
    { HDA_CODEC_VT1716S_1,          0x0000, L"VIA VT1716S_1" },
    { HDA_CODEC_VT1718S_0,          0x0000, L"VIA VT1718S_0" },
    { HDA_CODEC_VT1718S_1,          0x0000, L"VIA VT1718S_1" },
    { HDA_CODEC_VT1802_0,           0x0000, L"VIA VT1802_0" },
    { HDA_CODEC_VT1802_1,           0x0000, L"VIA VT1802_1" },
    { HDA_CODEC_VT1812,             0x0000, L"VIA VT1812" },
    { HDA_CODEC_VT1818S,            0x0000, L"VIA VT1818S" },
    { HDA_CODEC_VT1828S,            0x0000, L"VIA VT1828S" },
    { HDA_CODEC_VT2002P_0,          0x0000, L"VIA VT2002P_0" },
    { HDA_CODEC_VT2002P_1,          0x0000, L"VIA VT2002P_1" },
    { HDA_CODEC_VT2020,             0x0000, L"VIA VT2020" },
    { HDA_CODEC_VTXXXX,             0x0000, L"VIA (Unknown)" },

    // End.
    { 0,                            0x0000, NULL }
};
