Index: sys/dev/sound/pci/hda/hdaa_patches.c =================================================================== --- sys/dev/sound/pci/hda/hdaa_patches.c +++ sys/dev/sound/pci/hda/hdaa_patches.c @@ -44,6 +44,9 @@ #include #include +#include "pin_patch.h" +#include "pin_patch_realtek.h" + SND_DECLARE_FILE("$FreeBSD$"); static const struct { @@ -145,10 +148,29 @@ 0 } }; +static struct pin_patch_t * +match_pin_patches(int vendor_id, int vendor_subid) +{ + for (int ci = 0; ci < nitems(realtek_model_pin_patches); ci++) { + struct hdaa_model_pin_patch_t *p = &realtek_model_pin_patches[ci]; + if (vendor_id == p->id) { + struct model_pin_patch_t *pinpatches = p->patches; + for (struct model_pin_patch_t *pp = pinpatches; pp->models; pp++) { + for (struct pin_machine_model_t *model = pp->models; model->id; model++) { + if (vendor_subid == model->id) + return (pp->pin_patches); + } + } + } + } + + return (0); +} + static void hdac_pin_patch(struct hdaa_widget *w) { - const char *patch = NULL; + const char *patch_str = NULL; uint32_t config, orig, id, subid; nid_t nid = w->nid; @@ -156,54 +178,7 @@ id = hdaa_codec_id(w->devinfo); subid = hdaa_card_id(w->devinfo); - /* XXX: Old patches require complete review. - * Now they may create more problem then solve due to - * incorrect associations. - */ - if (id == HDA_CODEC_ALC880 && subid == LG_LW20_SUBVENDOR) { - switch (nid) { - case 26: - config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK; - config |= HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN; - break; - case 27: - config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK; - config |= HDA_CONFIG_DEFAULTCONF_DEVICE_HP_OUT; - break; - default: - break; - } - } else if (id == HDA_CODEC_ALC880 && - (subid == CLEVO_D900T_SUBVENDOR || - subid == ASUS_M5200_SUBVENDOR)) { - /* - * Super broken BIOS - */ - switch (nid) { - case 24: /* MIC1 */ - config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK; - config |= HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN; - break; - case 25: /* XXX MIC2 */ - config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK; - config |= HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN; - break; - case 26: /* LINE1 */ - config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK; - config |= HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN; - break; - case 27: /* XXX LINE2 */ - config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK; - config |= HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN; - break; - case 28: /* CD */ - config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK; - config |= HDA_CONFIG_DEFAULTCONF_DEVICE_CD; - break; - } - } else if (id == HDA_CODEC_ALC883 && - (subid == MSI_MS034A_SUBVENDOR || - HDA_DEV_MATCH(ACER_ALL_SUBVENDOR, subid))) { + if (id == HDA_CODEC_ALC883 && HDA_DEV_MATCH(ACER_ALL_SUBVENDOR, subid)) { switch (nid) { case 25: config &= ~(HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | @@ -247,42 +222,6 @@ config |= HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_NONE; break; } - } else if (id == HDA_CODEC_ALC861 && subid == - ASUS_W6F_SUBVENDOR) { - switch (nid) { - case 11: - config &= ~(HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK); - config |= (HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_OUT | - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED); - break; - case 12: - case 14: - case 16: - case 31: - case 32: - config &= ~(HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK); - config |= (HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN | - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED); - break; - case 15: - config &= ~(HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK); - config |= (HDA_CONFIG_DEFAULTCONF_DEVICE_HP_OUT | - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_JACK); - break; - } - } else if (id == HDA_CODEC_ALC861 && subid == - UNIWILL_9075_SUBVENDOR) { - switch (nid) { - case 15: - config &= ~(HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK); - config |= (HDA_CONFIG_DEFAULTCONF_DEVICE_HP_OUT | - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_JACK); - break; - } } /* New patches */ @@ -290,10 +229,10 @@ subid == LENOVO_X300_SUBVENDOR) { switch (nid) { case 17: /* Headphones with redirection */ - patch = "as=1 seq=15"; + patch_str = "as=1 seq=15"; break; case 20: /* Two mics together */ - patch = "as=2 seq=15"; + patch_str = "as=2 seq=15"; break; } } else if (id == HDA_CODEC_AD1986A && @@ -302,60 +241,45 @@ subid == ASUS_P5PL2_SUBVENDOR)) { switch (nid) { case 26: /* Headphones with redirection */ - patch = "as=1 seq=15"; + patch_str = "as=1 seq=15"; break; case 28: /* 5.1 out => 2.0 out + 1 input */ - patch = "device=Line-in as=8 seq=1"; + patch_str = "device=Line-in as=8 seq=1"; break; case 29: /* Can't use this as input, as the only available mic * preamplifier is busy by front panel mic (nid 31). * If you want to use this rear connector as mic input, * you have to disable the front panel one. */ - patch = "as=0"; + patch_str = "as=0"; break; case 31: /* Lot of inputs configured with as=15 and unusable */ - patch = "as=8 seq=3"; + patch_str = "as=8 seq=3"; break; case 32: - patch = "as=8 seq=4"; + patch_str = "as=8 seq=4"; break; case 34: - patch = "as=8 seq=5"; + patch_str = "as=8 seq=5"; break; case 36: - patch = "as=8 seq=6"; - break; - } - } else if (id == HDA_CODEC_ALC260 && - HDA_DEV_MATCH(SONY_S5_SUBVENDOR, subid)) { - switch (nid) { - case 16: - patch = "seq=15 device=Headphones"; + patch_str = "as=8 seq=6"; break; } - } else if (id == HDA_CODEC_ALC268) { - if (subid == ACER_T5320_SUBVENDOR) { - switch (nid) { - case 20: /* Headphones Jack */ - patch = "as=1 seq=15"; - break; - } - } } else if (id == HDA_CODEC_CX20561 && subid == LENOVO_B450_SUBVENDOR) { switch (nid) { case 22: - patch = "as=1 seq=15"; + patch_str = "as=1 seq=15"; break; } } else if (id == HDA_CODEC_CX20561 && subid == LENOVO_T400_SUBVENDOR) { switch (nid) { case 22: - patch = "as=1 seq=15"; + patch_str = "as=1 seq=15"; break; case 26: - patch = "as=1 seq=0"; + patch_str = "as=1 seq=0"; break; } } else if (id == HDA_CODEC_CX20590 && @@ -366,102 +290,62 @@ subid == LENOVO_G580_SUBVENDOR)) { switch (nid) { case 25: - patch = "as=1 seq=15"; + patch_str = "as=1 seq=15"; break; /* * Group onboard mic and headphone mic * together. Fixes onboard mic. */ case 27: - patch = "as=2 seq=15"; + patch_str = "as=2 seq=15"; break; case 35: - patch = "as=2"; - break; - } - } else if (id == HDA_CODEC_ALC269 && - (subid == LENOVO_X1CRBN_SUBVENDOR || - subid == LENOVO_T430_SUBVENDOR || - subid == LENOVO_T430S_SUBVENDOR || - subid == LENOVO_T530_SUBVENDOR)) { - switch (nid) { - case 21: - patch = "as=1 seq=15"; - break; - } - } else if (id == HDA_CODEC_ALC285 && - (subid == LENOVO_X120KH_SUBVENDOR || - subid == LENOVO_X120QD_SUBVENDOR)) { - switch (nid) { - case 33: - patch = "as=1 seq=15"; - break; - } - } else if (id == HDA_CODEC_ALC269 && - subid == ASUS_UX31A_SUBVENDOR) { - switch (nid) { - case 33: - patch = "as=1 seq=15"; - break; - } - } else if (id == HDA_CODEC_ALC892 && - subid == INTEL_DH87RL_SUBVENDOR) { - switch (nid) { - case 27: - patch = "as=1 seq=15"; - break; - } - } else if (id == HDA_CODEC_ALC292 && - subid == LENOVO_X120BS_SUBVENDOR) { - switch (nid) { - case 21: - patch = "as=1 seq=15"; - break; - } - } else if (id == HDA_CODEC_ALC295 && subid == HP_AF006UR_SUBVENDOR) { - switch (nid) { - case 18: - patch = "as=2"; - break; - case 25: - patch = "as=2 seq=15"; - break; - case 33: - patch = "as=1 seq=15"; - break; - } - } else if (id == HDA_CODEC_ALC298 && HDA_DEV_MATCH(LENOVO_ALL_SUBVENDOR, subid)) { - switch (nid) { - case 23: - config = 0x03a1103f; - break; - case 33: - config = 0x2121101f; - break; - } - } else if (id == HDA_CODEC_ALC298 && subid == DELL_XPS9560_SUBVENDOR) { - switch (nid) { - case 24: - config = 0x01a1913c; - break; - case 26: - config = 0x01a1913d; + patch_str = "as=2"; break; } } else if (id == HDA_CODEC_ALC256 && (subid == DELL_I7577_SUBVENDOR || subid == DELL_L7480_SUBVENDOR)) { switch (nid) { case 20: - patch = "as=1 seq=0"; + patch_str = "as=1 seq=0"; break; case 33: - patch = "as=1 seq=15"; + patch_str = "as=1 seq=15"; break; } + } else { + /* + * loop over hdaa_model_pin_patch + */ + struct pin_patch_t *pin_patches = NULL; + + pin_patches = match_pin_patches(id, subid); + + if (pin_patches != NULL) { + for (struct pin_patch_t *patch = pin_patches; patch->type; patch++) { + if (nid == patch->nid) { + switch (patch->type) { + case PIN_PATCH_TYPE_STRING: + patch_str = patch->patch.string; + case PIN_PATCH_TYPE_MASK: + config &= ~patch->patch.mask[0]; + config |= patch->patch.mask[1]; + break; + case PIN_PATCH_TYPE_OVERRIDE: + config = patch->patch.override; + break; + default: + /* should panic hard */ + break; + } + break; + } + } + } } - if (patch != NULL) - config = hdaa_widget_pin_patch(config, patch); + if (patch_str != NULL) + config = hdaa_widget_pin_patch(config, patch_str); HDA_BOOTVERBOSE( if (config != orig) device_printf(w->devinfo->dev, Index: sys/dev/sound/pci/hda/hdac.h =================================================================== --- sys/dev/sound/pci/hda/hdac.h +++ sys/dev/sound/pci/hda/hdac.h @@ -61,6 +61,7 @@ #define HDA_INTEL_82801G HDA_MODEL_CONSTRUCT(INTEL, 0x27d8) #define HDA_INTEL_82801H HDA_MODEL_CONSTRUCT(INTEL, 0x284b) #define HDA_INTEL_82801I HDA_MODEL_CONSTRUCT(INTEL, 0x293e) +#define HDA_INTEL_GMLK HDA_MODEL_CONSTRUCT(INTEL, 0x3198) #define HDA_INTEL_JLK HDA_MODEL_CONSTRUCT(INTEL, 0x38c8) #define HDA_INTEL_82801JI HDA_MODEL_CONSTRUCT(INTEL, 0x3a3e) #define HDA_INTEL_82801JD HDA_MODEL_CONSTRUCT(INTEL, 0x3a6e) @@ -91,7 +92,16 @@ #define HDA_INTEL_CMLKLP HDA_MODEL_CONSTRUCT(INTEL, 0x02c8) #define HDA_INTEL_CMLKH HDA_MODEL_CONSTRUCT(INTEL, 0x06c8) #define HDA_INTEL_TGLK HDA_MODEL_CONSTRUCT(INTEL, 0xa0c8) -#define HDA_INTEL_GMLK HDA_MODEL_CONSTRUCT(INTEL, 0x3198) +#define INTEL_A100ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xa100) +#define INTEL_D400ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xd400) +#define INTEL_D401ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xd401) +#define INTEL_D402ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xd402) +#define INTEL_E305ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xe305) +#define INTEL_E308ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xe308) +#define INTEL_E224ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xe224) +#define INTEL_E400ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xe400) +#define INTEL_E401ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xe401) +#define INTEL_E402ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xe402) #define HDA_INTEL_ALL HDA_MODEL_CONSTRUCT(INTEL, 0xffff) /* Nvidia */ @@ -198,6 +208,10 @@ /* HP/Compaq */ #define HP_VENDORID 0x103c +#define HP_Z200_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x103c) +#define HP_225AID_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x225a) +#define HP_2272ID_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x2272) +#define HP_2273ID_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x2273) #define HP_V3000_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x30b5) #define HP_NX7400_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x30a2) #define HP_NX6310_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x30aa) @@ -207,6 +221,7 @@ #define HP_DV5000_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x30a5) #define HP_DC7700S_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x2801) #define HP_DC7700_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x2802) +#define HP_DC5750_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x280a) #define HP_AF006UR_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x83a2) #define HP_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0xffff) /* What is wrong with XN 2563 anyway? (Got the picture ?) */ @@ -222,7 +237,28 @@ #define DELL_L7480_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x07a0) #define DELL_XPSM1210_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x01d7) #define DELL_OPLX745_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x01da) +#define DELL_05F4ID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x05f4) +#define DELL_05F5ID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x05f5) +#define DELL_05F6ID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x05f6) +#define DELL_V5470_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x0615) +#define DELL_V5470_1_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x0616) +#define DELL_064AID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x064a) +#define DELL_064BID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x064b) +#define DELL_9020M_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x0669) +#define DELL_V5480_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x069a) +#define DELL_06D9ID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x06d9) +#define DELL_06DAID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x06da) +#define DELL_06DBID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x06db) +#define DELL_06DDID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x06dd) +#define DELL_06DEID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x06de) +#define DELL_06DFID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x06df) +#define DELL_06E0ID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x06e0) +#define DELL_7559_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x0706) +#define DELL_7000_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x0798) #define DELL_XPS9560_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x07be) +#define DELL_E7240_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x05ca) +#define DELL_164AID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x164a) +#define DELL_164BID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x164b) #define DELL_I7577_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x0802) #define DELL_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0xffff) @@ -233,34 +269,66 @@ /* Acer */ #define ACER_VENDORID 0x1025 +#define ACER_0070ID_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0070) +#define ACER_0077ID_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0077) +#define ACER_0078ID_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0078) +#define ACER_0087ID_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0087) #define ACER_A5050_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x010f) #define ACER_A4520_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0127) #define ACER_A4710_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x012f) #define ACER_A4715_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0133) +#define ACER_TM_6293_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0139) #define ACER_3681WXM_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0110) #define ACER_T6292_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x011b) #define ACER_T5320_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x011f) +#define ACER_TM_6293_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0139) +#define ACER_AC700_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x047c) +#define ACER_V5_571G_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x072d) +#define ACER_AO725_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0740) +#define ACER_AO756_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0742) +#define ACER_E1_472_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0762) +#define ACER_E1_572_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0775) +#define ACER_V5_573G_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x079b) +#define ACER_CB_14_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x106d) +#define ACER_V5_122P_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0xa80d) +#define ACER_APFV_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0xa884) +#define ACER_E309ID_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0xe309) +#define ACER_E310ID_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0xe310) #define ACER_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0xffff) /* Asus */ #define ASUS_VENDORID 0x1043 +#define ASUS_X540A_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x103e) +#define ASUS_X540SA_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x10c0) +#define ASUS_X556UR_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x11c0) +#define ASUS_W5A_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x10c3) +#define ASUS_X540LA_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x10d0) #define ASUS_A8X_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1153) #define ASUS_U5F_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1263) #define ASUS_W6F_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1263) +#define ASUS_X541SA_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x12e0) +#define ASUS_X541UV_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x12f0) #define ASUS_A7M_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1323) #define ASUS_F3JC_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1338) #define ASUS_G2K_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1339) +#define ASUS_Z550SA_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x13b0) #define ASUS_A7T_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x13c2) #define ASUS_UX31A_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1517) +#define ASUS_Z71V_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1964) #define ASUS_W2J_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1971) #define ASUS_M5200_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1993) +#define ASUS_G73JW_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1a13) +#define ASUS_X705UD_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1a30) +#define ASUS_Z550MA_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1bbd) +#define ASUS_X555UB_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1ccd) #define ASUS_P5PL2_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x817f) #define ASUS_P1AH2_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x81cb) #define ASUS_M2NPVMX_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x81cb) #define ASUS_M2V_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x81e7) #define ASUS_P5BWD_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x81ec) #define ASUS_M2N_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x8234) -#define ASUS_A8NVMCSM_SUBVENDOR HDA_MODEL_CONSTRUCT(NVIDIA, 0xcb84) +#define ASUS_A8NVMCSM_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0xcb84) +#define ASUS_X101CH_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x8516) #define ASUS_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0xffff) /* IBM / Lenovo */ @@ -287,7 +355,11 @@ #define LENOVO_T430S_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21fb) #define LENOVO_T520_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21cf) #define LENOVO_T530_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21f6) +#define LENOVO_X230_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21fa) +#define LENOVO_X230T_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x2203) +#define LENOVO_T431S_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x2208) #define LENOVO_G580_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x3977) +#define LENOVO_3000_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x384e) #define LENOVO_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0xffff) /* Samsung */ @@ -307,8 +379,19 @@ /* Sony */ #define SONY_VENDORID 0x104d #define SONY_S5_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x81cc) +#define SONY_81A0ID_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x81a0) +#define SONY_81D6ID_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x81d6) +#define SONY_81BBID_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x81bb) +#define SONY_VAIO_TX_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x81e2) +#define SONY_VAIO_S13_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x9099) +#define SONY_VAIO_P11_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x90b5) +#define SONY_VAIO_P13_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x90b6) #define SONY_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0xffff) +/* Tyan? */ +#define TYAN_VENDORID 0x10f1 +#define TYAN_N6650W_SUBVENDOR HDA_MODEL_CONSTRUCT(TYAN, 0x2915) + /* * Apple Intel MacXXXX seems using Sigmatel codec/vendor id * instead of their own, which is beyond my comprehension @@ -322,18 +405,32 @@ /* LG Electronics */ #define LG_VENDORID 0x1854 #define LG_LW20_SUBVENDOR HDA_MODEL_CONSTRUCT(LG, 0x0018) +#define LG_M1_SUBVENDOR HDA_MODEL_CONSTRUCT(LG, 0x003b) +#define LG_P1_SUBVENDOR HDA_MODEL_CONSTRUCT(LG, 0x005f) +#define LG_W1_SUBVENDOR HDA_MODEL_CONSTRUCT(LG, 0x0068) +#define LG_LW25_SUBVENDOR HDA_MODEL_CONSTRUCT(LG, 0x0077) #define LG_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(LG, 0xffff) /* Fujitsu Siemens */ #define FS_VENDORID 0x1734 #define FS_PA1510_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0x10b8) #define FS_SI1848_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0x10cd) +#define FS_AMILO_M1437_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0x107c) +#define FS_AMILO_M1451G_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0x1094) +#define FS_AMILO_PI1556_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0x10b0) +#define FS_AMILO_XI1526_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0x10ac) +#define FS_H270_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0x1147) #define FS_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0xffff) /* Fujitsu Limited */ #define FL_VENDORID 0x10cf #define FL_S7020D_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0x1326) +#define FL_LB_S7110_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0x1397) #define FL_U1010_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0x142d) +#define FL_1475ID_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0x1475) +#define FL_LB_U904_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0x1845) +#define FL_LB_T731_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0x15dc) +#define FL_LB_E725_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0x1757) #define FL_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0xffff) /* Toshiba */ @@ -346,18 +443,61 @@ #define MSI_VENDORID 0x1462 #define MSI_MS1034_SUBVENDOR HDA_MODEL_CONSTRUCT(MSI, 0x0349) #define MSI_MS034A_SUBVENDOR HDA_MODEL_CONSTRUCT(MSI, 0x034a) +#define MSI_1150ID_SUBVENDOR HDA_MODEL_CONSTRUCT(MSI, 0x1150) +#define MSI_MS_B120_SUBVENDOR HDA_MODEL_CONSTRUCT(MSI, 0xb120) #define MSI_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(MSI, 0xffff) /* Giga-Byte Technology */ #define GB_VENDORID 0x1458 #define GB_G33S2H_SUBVENDOR HDA_MODEL_CONSTRUCT(GB, 0xa022) +#define GB_K8_SUBVENDOR HDA_MODEL_CONSTRUCT(GB, 0xa102) +#define GB_BXBT2807_SUBVENDOR HDA_MODEL_CONSTRUCT(GB, 0xfa53) #define GP_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(GB, 0xffff) /* Uniwill ? */ #define UNIWILL_VENDORID 0x1584 #define UNIWILL_9075_SUBVENDOR HDA_MODEL_CONSTRUCT(UNIWILL, 0x9075) +#define UNIWILL_9050_SUBVENDOR HDA_MODEL_CONSTRUCT(UNIWILL, 0x9050) +#define UNIWILL_9054_SUBVENDOR HDA_MODEL_CONSTRUCT(UNIWILL, 0x9054) +#define UNIWILL_9070_SUBVENDOR HDA_MODEL_CONSTRUCT(UNIWILL, 0x9070) #define UNIWILL_9080_SUBVENDOR HDA_MODEL_CONSTRUCT(UNIWILL, 0x9080) +/* Coeus / Elitegroup */ +#define COEUS_VENDORID 0x1019 +#define COEUS_G610P_SUBVENDOR HDA_MODEL_CONSTRUCT(COEUS, 0x0f69) +#define COEUS_A880ID_SUBVENDOR HDA_MODEL_CONSTRUCT(COEUS, 0xa880) + +/* Arima */ +#define ARIMA_VENDORID 0x161f +#define ARIMA_W810_SUBVENDOR HDA_MODEL_CONSTRUCT(ARIMA, 0x0f69) + +/* Shuttle Computer */ +#define SHUTTLE_VENDORID 0x1039 +#define SHUTTLE_ST20G5_SUBVENDOR HDA_MODEL_CONSTRUCT(SHUTTLE, 0xc790) + +/* First International Computer */ +#define FIC_VENDORID 0x1509 +#define FIC_P4M_SUBVENDOR HDA_MODEL_CONSTRUCT(FIC, 0x925d) + +/* Gateway 2000 */ +#define GATEWAY_VENDORID 0x107b +#define GATEWAY_3032ID_SUBVENDOR HDA_MODEL_CONSTRUCT(GATEWAY, 0x3032) +#define GATEWAY_3033ID_SUBVENDOR HDA_MODEL_CONSTRUCT(GATEWAY, 0x3033) +#define GATEWAY_4039ID_SUBVENDOR HDA_MODEL_CONSTRUCT(GATEWAY, 0x4039) + +/* Biostar */ +#define BIOSTAR_VENDORID 0x1565 +#define BIOSTAR_8202ID_SUBVENDOR HDA_MODEL_CONSTRUCT(BIOSTAR, 0x8202) + +/* EPoX Computer Co., Ltd. */ +#define EPOX_VENDORID 0x1695 +#define EPOX_400DID_SUBVENDOR HDA_MODEL_CONSTRUCT(EPOX, 0x400d) +#define EPOX_EP5LDA_SUBVENDOR HDA_MODEL_CONSTRUCT(EPOX, 0x4012) + +/* AOpen */ +#define AOPEN_VENDORID 0xa0a0 +#define AOPEN_I915GMMHFS_SUBVENDOR HDA_MODEL_CONSTRUCT(AOPEN, 0x8202) + /* All codecs you can eat... */ #define HDA_CODEC_CONSTRUCT(vendor, id) \ (((uint32_t)(vendor##_VENDORID) << 16) | ((id) & 0xffff)) @@ -390,6 +530,7 @@ #define HDA_CODEC_ALC268 HDA_CODEC_CONSTRUCT(REALTEK, 0x0268) #define HDA_CODEC_ALC269 HDA_CODEC_CONSTRUCT(REALTEK, 0x0269) #define HDA_CODEC_ALC270 HDA_CODEC_CONSTRUCT(REALTEK, 0x0270) +#define HDA_CODEC_ALC271 HDA_CODEC_CONSTRUCT(REALTEK, 0x0271) #define HDA_CODEC_ALC272 HDA_CODEC_CONSTRUCT(REALTEK, 0x0272) #define HDA_CODEC_ALC273 HDA_CODEC_CONSTRUCT(REALTEK, 0x0273) #define HDA_CODEC_ALC274 HDA_CODEC_CONSTRUCT(REALTEK, 0x0274) Index: sys/dev/sound/pci/hda/pin_patch.h =================================================================== --- /dev/null +++ sys/dev/sound/pci/hda/pin_patch.h @@ -0,0 +1,99 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2018 Khamba Staring + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ +#ifndef PIN_PATCH_H +#define PIN_PATCH_H + +#include "hdac.h" + +#define PIN_SUBVENDOR(sv) { .id = sv } + + +#define PIN_PATCH_STRING(n, patchstr) { .nid = n, \ + .type = PIN_PATCH_TYPE_STRING,\ + .patch.string = patchstr \ + } +#define PIN_OVERRIDE(n, newvalue) { .nid = n, \ + .type = PIN_PATCH_TYPE_OVERRIDE,\ + .patch.override = newvalue \ + } +#define PIN_PATCH_NOT_APPLICABLE(n) PIN_PATCH_STRING(n, "as=15 misc=1 color=Black ctype=1/8 device=Speaker loc=Rear conn=None") +#define PIN_PATCH_HP_OUT(n) PIN_PATCH_STRING(n, "seq=15 as=1 color=Green ctype=1/8 device=Headphones loc=Rear") +#define PIN_PATCH_HP(n) PIN_PATCH_STRING(n, "seq=15 as=1 misc=1 color=Green ctype=1/8 device=Headphones loc=Rear") +#define PIN_PATCH_SPEAKER(n) PIN_PATCH_STRING(n, "as=2 misc=1 ctype=ATAPI loc=Onboard conn=Fixed") +#define PIN_PATCH_BASS_SPEAKER(n) PIN_PATCH_STRING(n, "as=3 misc=1 ctype=ATAPI loc=Onboard conn=Fixed") +#define PIN_PATCH_MIC_IN(n) PIN_PATCH_STRING(n, "as=5 misc=9 color=Pink ctype=1/8 device=Mic loc=Rear") +#define PIN_PATCH_MIC_INTERNAL(n) PIN_PATCH_STRING(n, "as=6 misc=1 ctype=Digital device=Mic loc=Internal conn=Fixed") +#define PIN_PATCH_MIC_FRONT(n) PIN_PATCH_STRING(n, "as=4 misc=12 color=Pink ctype=1/8 device=Mic loc=Front") +#define PIN_PATCH_LINE_IN(n) PIN_PATCH_STRING(n, "seq=1 as=3 color=Blue ctype=1/8 device=Line-in loc=Rear") +#define PIN_PATCH_LINE_OUT(n) PIN_PATCH_STRING(n, "as=1 color=Green ctype=1/8 loc=Rear") +#define PIN_PATCH_SPDIF_OUT(n) PIN_PATCH_STRING(n, "as=4 misc=1 color=Green ctype=Optical device=SPDIF-out loc=Rear") +#define PIN_PATCH_JACK_WO_DETECT(n) PIN_PATCH_STRING(n, "seq=12 as=3 misc=1 color=Pink ctype=1/8 device=Mic loc=Rear") +#define PIN_PATCH_HPMIC_WO_DETECT(n) PIN_PATCH_STRING(n, "seq=13 as=3 misc=1 color=Pink ctype=1/8 device=Mic loc=Rear") +#define PIN_PATCH_HPMIC_WITH_DETECT(n) PIN_PATCH_STRING(n, "seq=12 as=3 color=Pink ctype=1/8 device=Mic loc=Rear") +#define PIN_PATCH_CLFE(n) PIN_PATCH_STRING(n, "seq=1 as=1 misc=4 color=Black ctype=1/8 loc=Rear") +#define PIN_PATCH_SURROUND(n) PIN_PATCH_STRING(n, "seq=2 as=1 misc=4 color=Orange ctype=1/8 loc=Rear") +#define PIN_PATCH_SUBWOOFER(n) PIN_PATCH_STRING(n, "seq=1 as=1 misc=1 ctype=ATAPI device=Speaker loc=Onboard conn=Fixed") +#define PIN_PATCH_DOCK_LINE_OUT(n) PIN_PATCH_STRING(n, "seq=15 as=3 color=Black ctype=1/8 loc=Ext-Rear") +#define PIN_PATCH_DOCK_HP(n) PIN_PATCH_STRING(n, "seq=15 as=3 color=Black ctype=1/8 device=Headphones loc=Ext-Rear") +#define PIN_PATCH_DOCK_MIC_IN(n) PIN_PATCH_STRING(n, "as=4 color=Black ctype=1/8 device=Mic loc=Ext-Left") + +enum { + PIN_PATCH_TYPE_EOL, /* end-of-list */ + PIN_PATCH_TYPE_STRING, + PIN_PATCH_TYPE_MASK, + PIN_PATCH_TYPE_OVERRIDE +}; + +struct pin_patch_t { + nid_t nid; /* nid to patch */ + int type; /* patch type */ + union { + const char *string; /* patch string */ + uint32_t mask[2]; /* pin config mask */ + uint32_t override; /* pin config override */ + } patch; +}; + +struct pin_machine_model_t { + uint32_t id; /* vendor machine id */ +}; + +struct model_pin_patch_t { + struct pin_machine_model_t *models; /* list of machine models */ + struct pin_patch_t *pin_patches; /* hardcoded overrides */ + void (*fixup_func)(struct hdaa_widget *); /* for future use */ +}; + +struct hdaa_model_pin_patch_t { + uint32_t id; /* the hdaa id */ + struct model_pin_patch_t *patches; /* list of machine patches */ +}; + +#endif /* PIN_PATCH_H */ Index: sys/dev/sound/pci/hda/pin_patch_realtek.h =================================================================== --- /dev/null +++ sys/dev/sound/pci/hda/pin_patch_realtek.h @@ -0,0 +1,992 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2018 Khamba Staring + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef PIN_PATCH_REALTEK_H +#define PIN_PATCH_REALTEK_H + +#include "hdac.h" +#include "pin_patch.h" + +/* + * Pin patches + */ +static struct pin_patch_t pin_patches_lg_lw20[] = { + { + .nid = 26, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { HDA_CONFIG_DEFAULTCONF_DEVICE_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN } + }, { + .nid = 27, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { HDA_CONFIG_DEFAULTCONF_DEVICE_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_HP_OUT } + }, { } +}; + +static struct pin_patch_t pin_patches_clevo_d900t_asus_m5200[] = { + { + .nid = 24, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { HDA_CONFIG_DEFAULTCONF_DEVICE_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN } + }, { + .nid = 25, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { HDA_CONFIG_DEFAULTCONF_DEVICE_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN } + }, { + .nid = 26, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { HDA_CONFIG_DEFAULTCONF_DEVICE_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN } + }, { + .nid = 27, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { HDA_CONFIG_DEFAULTCONF_DEVICE_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN } + }, { + .nid = 28, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { HDA_CONFIG_DEFAULTCONF_DEVICE_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_CD } + }, { } +}; + +static struct pin_patch_t pin_patches_msi_ms034a[] = { + { + .nid = 25, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED } + }, { + .nid = 28, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_CD | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED } + }, { } +}; + +static struct pin_patch_t pin_patches_asus_w6f[] = { + { + .nid = 11, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED } + }, { + .nid = 12, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED } + }, { + .nid = 14, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED } + }, { + .nid = 15, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_HP_OUT | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_JACK } + }, { + .nid = 16, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED } + }, { + .nid = 31, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED } + }, { + .nid = 32, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED } + }, { } +}; + +static struct pin_patch_t pin_patches_uniwill_9075[] = { + { + .nid = 15, + .type = PIN_PATCH_TYPE_MASK, + .patch.mask = { + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK, + HDA_CONFIG_DEFAULTCONF_DEVICE_HP_OUT | + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_JACK } + }, { } +}; + +static struct pin_patch_t pin_patches_dell_xps_jack[] = { + PIN_PATCH_JACK_WO_DETECT(24), + PIN_PATCH_HPMIC_WO_DETECT(26), + { } +}; + +/* + * List of models and patches + */ +static struct hdaa_model_pin_patch_t realtek_model_pin_patches[] = { + { /**** CODEC: HDA_CODEC_ALC255 ****/ + .id = HDA_CODEC_ALC255, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ASUS_X556UR_SUBVENDOR), + PIN_SUBVENDOR(ASUS_X540LA_SUBVENDOR), + PIN_SUBVENDOR(ASUS_Z550MA_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_JACK_WO_DETECT(25), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(DELL_9020M_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_JACK_WO_DETECT(25), + PIN_PATCH_HPMIC_WO_DETECT(26), + { } + } + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC256 ****/ + .id = HDA_CODEC_ALC256, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(DELL_9020M_SUBVENDOR), + PIN_SUBVENDOR(DELL_7000_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(27, "seq=1 as=5 misc=1 ctype=Analog device=Speaker loc=Internal conn=Fixed"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ASUS_X540A_SUBVENDOR), + PIN_SUBVENDOR(ASUS_X540SA_SUBVENDOR), + PIN_SUBVENDOR(ASUS_X541SA_SUBVENDOR), + PIN_SUBVENDOR(ASUS_X541UV_SUBVENDOR), + PIN_SUBVENDOR(ASUS_Z550SA_SUBVENDOR), + PIN_SUBVENDOR(ASUS_X705UD_SUBVENDOR), + PIN_SUBVENDOR(ASUS_X555UB_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_MIC_INTERNAL(19), + PIN_PATCH_STRING(25, "as=2 misc=1 color=Black ctype=1/8 device=Mic loc=Right"), + { } + } + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC260 ****/ + .id = HDA_CODEC_ALC260, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(SONY_S5_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(16, "seq=15 device=Headphones"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(HP_DC5750_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(17, "as=1 misc=1 ctype=ATAPI device=Speaker loc=Internal conn=Fixed"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(SONY_VAIO_TX_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(15, "color=Green ctype=1/8 device=Headphones loc=Rear"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(SONY_81BBID_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(15, "as=2 color=Black ctype=1/8 device=Headphones loc=Rear"), + PIN_PATCH_STRING(16, "seq=15 as=3 ctype=1/8"), + PIN_PATCH_NOT_APPLICABLE(17), + PIN_PATCH_STRING(18, "as=3 misc=9 color=Red ctype=1/8 device=Mic loc=Rear"), + PIN_PATCH_NOT_APPLICABLE(19), + PIN_PATCH_NOT_APPLICABLE(20), + PIN_PATCH_NOT_APPLICABLE(21), + PIN_PATCH_NOT_APPLICABLE(22), + PIN_PATCH_NOT_APPLICABLE(23), + PIN_PATCH_NOT_APPLICABLE(24), + PIN_PATCH_NOT_APPLICABLE(25), + { } + } + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC262 ****/ + .id = HDA_CODEC_ALC262, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(FS_H270_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(20, "as=1 misc=1 ctype=ATAPI device=Speaker loc=Onboard conn=Fixed"), + PIN_PATCH_STRING(21, "seq=15 as=2 misc=4 color=Black ctype=1/8 device=Headphones loc=Front"), + PIN_PATCH_STRING(22, "seq=15 as=1 misc=4 color=Black ctype=1/8 device=Headphones loc=Rear"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(FL_LB_S7110_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(21, "as=1 misc=1 ctype=Analog device=Speaker loc=Internal conn=Fixed"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(HP_Z200_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(22, "as=2 misc=1 ctype=ATAPI device=Speaker loc=Onboard conn=Fixed"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(TYAN_N6650W_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(22, "as=15 misc=1 color=White ctype=ATAPI device=AUX loc=Onboard"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(LENOVO_3000_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(22, "seq=1 as=2"), + { } + } + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC268 ****/ + .id = HDA_CODEC_ALC268, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ACER_T5320_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(20, "as=1 seq=15"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ACER_TM_6293_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(30, "as=8 misc=1 color=Black ctype=Combo device=SPDIF-out loc=Rear"), + { } + } + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC269 ****/ + .id = HDA_CODEC_ALC269, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(LENOVO_X1CRBN_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(21, "as=1 seq=15"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(LENOVO_T430_SUBVENDOR), + PIN_SUBVENDOR(LENOVO_T430S_SUBVENDOR), + PIN_SUBVENDOR(LENOVO_X230_SUBVENDOR), + PIN_SUBVENDOR(LENOVO_X230T_SUBVENDOR), + PIN_SUBVENDOR(LENOVO_T431S_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_DOCK_MIC_IN(25), + PIN_PATCH_DOCK_HP(27), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ASUS_UX31A_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(33, "as=1 seq=15"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ASUS_G73JW_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_SUBWOOFER(23), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(FL_1475ID_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_DOCK_LINE_OUT(26), + PIN_PATCH_DOCK_MIC_IN(27), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(FL_LB_U904_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_HPMIC_WITH_DETECT(25), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(FL_LB_T731_SUBVENDOR), + PIN_SUBVENDOR(FL_LB_E725_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(33, "seq=15 as=2 color=Black ctype=1/8 device=Headphones loc=Front"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(DELL_05F4ID_SUBVENDOR), + PIN_SUBVENDOR(DELL_05F5ID_SUBVENDOR), + PIN_SUBVENDOR(DELL_05F6ID_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_JACK_WO_DETECT(25), + PIN_PATCH_HPMIC_WO_DETECT(26), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ACER_V5_571G_SUBVENDOR), + PIN_SUBVENDOR(ACER_V5_122P_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_JACK_WO_DETECT(25), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ASUS_X101CH_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(24, "seq=12 as=2 misc=8 color=Black ctype=1/8 device=Mic loc=Right"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ACER_AC700_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(18, "seq=15 as=2 misc=9 ctype=ATAPI device=Mic loc=Onboard conn=Fixed"), + PIN_PATCH_STRING(20, "as=1 misc=1 ctype=ATAPI device=Speaker loc=Onboard conn=Fixed"), + PIN_PATCH_STRING(24, "as=1 misc=1 ctype=ATAPI device=Speaker loc=Onboard conn=Fixed"), + PIN_PATCH_STRING(30, "seq=14 as=1 color=Black ctype=Digital device=SPDIF-out loc=Left"), + PIN_PATCH_STRING(33, "seq=15 as=1 color=Black ctype=1/8 device=Headphones loc=Left"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(HP_225AID_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(24, "seq=15 as=3 color=Black ctype=1/8 device=Line-in loc=Ext-Rear"), + PIN_PATCH_STRING(27, "as=2 color=Black ctype=1/8 loc=Ext-Rear"), + { } + } + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC271 ****/ + .id = HDA_CODEC_ALC271, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ACER_AO725_SUBVENDOR), + PIN_SUBVENDOR(ACER_AO756_SUBVENDOR), + PIN_SUBVENDOR(ACER_E1_472_SUBVENDOR), + PIN_SUBVENDOR(ACER_E1_572_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(20, "as=1 misc=1 ctype=ATAPI device=Speaker loc=Onboard conn=Fixed"), + PIN_PATCH_STRING(25, "as=2 misc=12 color=Pink ctype=1/8 device=Mic loc=Rear"), + PIN_PATCH_STRING(27, "seq=15 as=2 misc=1 ctype=Analog device=Mic loc=Onboard conn=Fixed"), + PIN_PATCH_HP_OUT(33), + { } + } + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC280 ****/ + .id = HDA_CODEC_ALC280, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(HP_2272ID_SUBVENDOR), + PIN_SUBVENDOR(HP_2273ID_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(27, "as=2 color=Black ctype=1/8 loc=Ext-Rear"), + PIN_PATCH_HPMIC_WITH_DETECT(26), + PIN_PATCH_STRING(24, "seq=15 as=3 color=Black ctype=1/8 device=Line-in loc=Ext-Rear"), + { } + } + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC282 ****/ + .id = HDA_CODEC_ALC282, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ACER_V5_573G_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(18, "as=3 misc=1 ctype=Digital device=Mic loc=Internal conn=Fixed"), + PIN_PATCH_STRING(20, "as=1 misc=1 ctype=Analog device=Speaker loc=Internal conn=Fixed"), + PIN_PATCH_STRING(23, "seq=8 conn=None"), + PIN_PATCH_NOT_APPLICABLE(24), + PIN_PATCH_JACK_WO_DETECT(25), + PIN_PATCH_NOT_APPLICABLE(26), + PIN_PATCH_NOT_APPLICABLE(27), + PIN_PATCH_STRING(29, "seq=13 as=2 misc=11 color=Pink ctype=DIN device=Other conn=None"), + PIN_PATCH_NOT_APPLICABLE(30), + PIN_PATCH_STRING(33, "seq=15 as=1 color=Black ctype=1/8 device=Headphones loc=Left"), + { } + } + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC286 ****/ + .id = HDA_CODEC_ALC286, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(SONY_VAIO_P11_SUBVENDOR), + PIN_SUBVENDOR(SONY_VAIO_P13_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_JACK_WO_DETECT(25), + { } + } + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC288 ****/ + .id = HDA_CODEC_ALC288, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(DELL_E7240_SUBVENDOR), + { } + }, + .pin_patches = pin_patches_dell_xps_jack + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC290 ****/ + .id = HDA_CODEC_ALC290, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(DELL_V5470_SUBVENDOR), + PIN_SUBVENDOR(DELL_V5470_1_SUBVENDOR), + PIN_SUBVENDOR(DELL_V5480_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(18, "as=4 misc=1 ctype=Digital device=Mic loc=Internal conn=Fixed"), + PIN_PATCH_STRING(20, "as=1 misc=1 ctype=Analog device=Speaker loc=Internal conn=Fixed"), + PIN_PATCH_STRING(21, "seq=15 as=1 color=Green ctype=1/8 device=Headphones loc=Front"), + PIN_PATCH_STRING(23, "seq=2 as=1 misc=1 ctype=Analog device=Speaker loc=Internal conn=Fixed"), + PIN_PATCH_JACK_WO_DETECT(26), + { } + } + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC292 ****/ + .id = HDA_CODEC_ALC292, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(LENOVO_X120BS_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(21, "as=1 seq=15"), + { } + } + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC293 ****/ + .id = HDA_CODEC_ALC293, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(DELL_064AID_SUBVENDOR), + PIN_SUBVENDOR(DELL_064BID_SUBVENDOR), + PIN_SUBVENDOR(DELL_06D9ID_SUBVENDOR), + PIN_SUBVENDOR(DELL_06DAID_SUBVENDOR), + PIN_SUBVENDOR(DELL_06DBID_SUBVENDOR), + PIN_SUBVENDOR(DELL_06DDID_SUBVENDOR), + PIN_SUBVENDOR(DELL_06DEID_SUBVENDOR), + PIN_SUBVENDOR(DELL_06DFID_SUBVENDOR), + PIN_SUBVENDOR(DELL_06E0ID_SUBVENDOR), + PIN_SUBVENDOR(DELL_164AID_SUBVENDOR), + PIN_SUBVENDOR(DELL_164BID_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_HPMIC_WO_DETECT(24), + PIN_PATCH_JACK_WO_DETECT(26), + { } + } + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC298 ****/ + .id = HDA_CODEC_ALC298, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(DELL_XPS9560_SUBVENDOR), + { } + }, + .pin_patches = pin_patches_dell_xps_jack + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC861 ****/ + .id = HDA_CODEC_ALC861, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ASUS_W6F_SUBVENDOR), + { } + }, + .pin_patches = pin_patches_asus_w6f + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(UNIWILL_9075_SUBVENDOR), + { } + }, + .pin_patches = pin_patches_uniwill_9075 + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC880 ****/ + .id = HDA_CODEC_ALC880, + .patches = (struct model_pin_patch_t[]){ + { // old patch + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(LG_LW20_SUBVENDOR), + { } + }, + .pin_patches = pin_patches_lg_lw20 + }, { // old patch + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(CLEVO_D900T_SUBVENDOR), + PIN_SUBVENDOR(ASUS_M5200_SUBVENDOR), + { } + }, + .pin_patches = pin_patches_clevo_d900t_asus_m5200 + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(LG_M1_SUBVENDOR), + PIN_SUBVENDOR(LG_P1_SUBVENDOR), + PIN_SUBVENDOR(LG_W1_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_NOT_APPLICABLE(22), + PIN_PATCH_NOT_APPLICABLE(24), + PIN_PATCH_NOT_APPLICABLE(26), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(COEUS_G610P_SUBVENDOR), + PIN_SUBVENDOR(ARIMA_W810_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_NOT_APPLICABLE(23), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(FS_AMILO_M1437_SUBVENDOR), + PIN_SUBVENDOR(FS_AMILO_M1451G_SUBVENDOR), + PIN_SUBVENDOR(FS_AMILO_PI1556_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_HP_OUT(20), + PIN_PATCH_SPEAKER(21), + PIN_PATCH_BASS_SPEAKER(22), + PIN_PATCH_NOT_APPLICABLE(23), + PIN_PATCH_NOT_APPLICABLE(24), + PIN_PATCH_MIC_IN(25), + PIN_PATCH_NOT_APPLICABLE(26), + PIN_PATCH_NOT_APPLICABLE(27), + PIN_PATCH_NOT_APPLICABLE(28), + PIN_PATCH_NOT_APPLICABLE(29), + PIN_PATCH_NOT_APPLICABLE(30), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(UNIWILL_9054_SUBVENDOR), + PIN_SUBVENDOR(FS_AMILO_XI1526_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_HP_OUT(20), + PIN_PATCH_SPEAKER(21), + PIN_PATCH_NOT_APPLICABLE(22), + PIN_PATCH_NOT_APPLICABLE(23), + PIN_PATCH_NOT_APPLICABLE(24), + PIN_PATCH_MIC_IN(25), + PIN_PATCH_NOT_APPLICABLE(26), + PIN_PATCH_NOT_APPLICABLE(27), + PIN_PATCH_NOT_APPLICABLE(28), + PIN_PATCH_NOT_APPLICABLE(29), + PIN_PATCH_SPDIF_OUT(30), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(LG_LW25_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(26, "seq=15 as=4 misc=4 color=Blue ctype=1/8 device=Line-in loc=Rear"), + PIN_PATCH_STRING(27, "seq=15 as=3 color=Green ctype=1/8 device=Headphones loc=Left"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(UNIWILL_9070_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_HP(20), + PIN_PATCH_SPEAKER(21), + PIN_PATCH_BASS_SPEAKER(22), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(UNIWILL_9050_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_NOT_APPLICABLE(23), + PIN_PATCH_NOT_APPLICABLE(25), + PIN_PATCH_NOT_APPLICABLE(27), + PIN_PATCH_NOT_APPLICABLE(31), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ASUS_Z71V_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_SPEAKER(20), + PIN_PATCH_HP(21), + PIN_PATCH_NOT_APPLICABLE(22), + PIN_PATCH_NOT_APPLICABLE(23), + PIN_PATCH_MIC_IN(24), + PIN_PATCH_NOT_APPLICABLE(25), + PIN_PATCH_LINE_IN(26), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ASUS_W5A_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_HP(20), + PIN_PATCH_NOT_APPLICABLE(21), + PIN_PATCH_NOT_APPLICABLE(22), + PIN_PATCH_NOT_APPLICABLE(23), + PIN_PATCH_MIC_INTERNAL(24), + PIN_PATCH_NOT_APPLICABLE(25), + PIN_PATCH_NOT_APPLICABLE(26), + PIN_PATCH_NOT_APPLICABLE(27), + PIN_PATCH_NOT_APPLICABLE(28), + PIN_PATCH_NOT_APPLICABLE(29), + PIN_PATCH_STRING(30, "seq=14 as=1 misc=1 color=Black ctype=ATAPI device=SPDIF-out loc=Lid-In conn=Fixed"), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ACER_E310ID_SUBVENDOR), + PIN_SUBVENDOR(SONY_81A0ID_SUBVENDOR), + PIN_SUBVENDOR(SONY_81D6ID_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_LINE_OUT(20), + PIN_PATCH_NOT_APPLICABLE(21), + PIN_PATCH_NOT_APPLICABLE(22), + PIN_PATCH_NOT_APPLICABLE(23), + PIN_PATCH_STRING(24, "as=3 misc=12 color=Pink ctype=1/8 device=Mic loc=Rear"), + PIN_PATCH_HP(25), + PIN_PATCH_LINE_IN(26), + PIN_PATCH_MIC_FRONT(27), + PIN_PATCH_NOT_APPLICABLE(28), + PIN_PATCH_NOT_APPLICABLE(29), + PIN_PATCH_NOT_APPLICABLE(30), + PIN_PATCH_NOT_APPLICABLE(31), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ACER_0070ID_SUBVENDOR), + PIN_SUBVENDOR(ACER_E309ID_SUBVENDOR), + PIN_SUBVENDOR(INTEL_D402ID_SUBVENDOR), + PIN_SUBVENDOR(INTEL_E305ID_SUBVENDOR), + PIN_SUBVENDOR(INTEL_E308ID_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_LINE_OUT(20), + PIN_PATCH_NOT_APPLICABLE(21), + PIN_PATCH_NOT_APPLICABLE(22), + PIN_PATCH_NOT_APPLICABLE(23), + PIN_PATCH_STRING(24, "as=3 misc=12 color=Pink ctype=1/8 device=Mic loc=Rear"), + PIN_PATCH_HP(25), + PIN_PATCH_LINE_IN(26), + PIN_PATCH_MIC_FRONT(27), + PIN_PATCH_NOT_APPLICABLE(28), + PIN_PATCH_NOT_APPLICABLE(29), + PIN_PATCH_STRING(30, "seq=14 as=1 misc=1 color=Black ctype=RCA device=SPDIF-out loc=Rear"), + PIN_PATCH_NOT_APPLICABLE(31), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(GATEWAY_3032ID_SUBVENDOR), + PIN_SUBVENDOR(GATEWAY_3033ID_SUBVENDOR), + PIN_SUBVENDOR(GATEWAY_4039ID_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_LINE_OUT(20), + PIN_PATCH_NOT_APPLICABLE(21), + PIN_PATCH_CLFE(22), + PIN_PATCH_SURROUND(23), + PIN_PATCH_STRING(24, "as=3 misc=12 color=Pink ctype=1/8 device=Mic loc=Rear"), + PIN_PATCH_HP(25), + PIN_PATCH_LINE_IN(26), + PIN_PATCH_MIC_FRONT(27), + PIN_PATCH_NOT_APPLICABLE(28), + PIN_PATCH_NOT_APPLICABLE(29), + PIN_PATCH_NOT_APPLICABLE(30), + PIN_PATCH_NOT_APPLICABLE(31), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(COEUS_A880ID_SUBVENDOR), + PIN_SUBVENDOR(BIOSTAR_8202ID_SUBVENDOR), + PIN_SUBVENDOR(EPOX_400DID_SUBVENDOR), + PIN_SUBVENDOR(EPOX_EP5LDA_SUBVENDOR), + PIN_SUBVENDOR(INTEL_A100ID_SUBVENDOR), + PIN_SUBVENDOR(INTEL_D400ID_SUBVENDOR), + PIN_SUBVENDOR(INTEL_D401ID_SUBVENDOR), + PIN_SUBVENDOR(INTEL_E224ID_SUBVENDOR), + PIN_SUBVENDOR(INTEL_E400ID_SUBVENDOR), + PIN_SUBVENDOR(INTEL_E401ID_SUBVENDOR), + PIN_SUBVENDOR(INTEL_E402ID_SUBVENDOR), + PIN_SUBVENDOR(AOPEN_I915GMMHFS_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_LINE_OUT(20), + PIN_PATCH_NOT_APPLICABLE(21), + PIN_PATCH_CLFE(22), + PIN_PATCH_SURROUND(23), + PIN_PATCH_STRING(24, "as=3 misc=12 color=Pink ctype=1/8 device=Mic loc=Rear"), + PIN_PATCH_HP(25), + PIN_PATCH_LINE_IN(26), + PIN_PATCH_MIC_FRONT(27), + PIN_PATCH_NOT_APPLICABLE(28), + PIN_PATCH_NOT_APPLICABLE(29), + PIN_PATCH_STRING(30, "seq=14 as=1 misc=1 color=Black ctype=RCA device=SPDIF-out loc=Rear"), + PIN_PATCH_NOT_APPLICABLE(31), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ACER_APFV_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_LINE_OUT(20), + PIN_PATCH_SURROUND(21), + PIN_PATCH_CLFE(22), + PIN_PATCH_STRING(23, "seq=4 as=1 misc=4 color=Grey ctype=1/8 loc=Rear"), + PIN_PATCH_STRING(24, "as=3 misc=12 color=Pink ctype=1/8 device=Mic loc=Rear"), + PIN_PATCH_MIC_FRONT(25), + PIN_PATCH_LINE_IN(26), + PIN_PATCH_HP(27), + PIN_PATCH_NOT_APPLICABLE(28), + PIN_PATCH_NOT_APPLICABLE(29), + PIN_PATCH_NOT_APPLICABLE(30), + PIN_PATCH_NOT_APPLICABLE(31), + { } + } + }, { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(ACER_0077ID_SUBVENDOR), + PIN_SUBVENDOR(ACER_0078ID_SUBVENDOR), + PIN_SUBVENDOR(ACER_0087ID_SUBVENDOR), + PIN_SUBVENDOR(SHUTTLE_ST20G5_SUBVENDOR), + PIN_SUBVENDOR(GB_K8_SUBVENDOR), + PIN_SUBVENDOR(MSI_1150ID_SUBVENDOR), + PIN_SUBVENDOR(FIC_P4M_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_LINE_OUT(20), + PIN_PATCH_SURROUND(21), + PIN_PATCH_CLFE(22), + PIN_PATCH_STRING(23, "seq=4 as=1 misc=4 color=Grey ctype=1/8 loc=Rear"), + PIN_PATCH_STRING(24, "as=3 misc=12 color=Pink ctype=1/8 device=Mic loc=Rear"), + PIN_PATCH_MIC_FRONT(25), + PIN_PATCH_LINE_IN(26), + PIN_PATCH_HP(27), + PIN_PATCH_NOT_APPLICABLE(28), + PIN_PATCH_NOT_APPLICABLE(29), + PIN_PATCH_STRING(30, "seq=14 as=1 misc=1 color=Black ctype=RCA device=SPDIF-out loc=Rear"), + PIN_PATCH_NOT_APPLICABLE(31), + { } + } + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC883 ****/ + .id = HDA_CODEC_ALC883, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(MSI_MS034A_SUBVENDOR), + { } + }, + .pin_patches = pin_patches_msi_ms034a + }, { } + } + }, { /**** CODEC: HDA_CODEC_ALC892 ****/ + .id = HDA_CODEC_ALC892, + .patches = (struct model_pin_patch_t[]){ + { + .models = (struct pin_machine_model_t[]){ + PIN_SUBVENDOR(INTEL_DH87RL_SUBVENDOR), + { } + }, + .pin_patches = (struct pin_patch_t[]){ + PIN_PATCH_STRING(27, "as=1 seq=15"), + { } + } + }, { } + } + } +}; + +#endif /* PIN_PATCH_REALTEK_H */