--- sys/dev/sound/pci/hda/hdac.c.orig Thu Apr 26 19:54:45 2007 +++ sys/dev/sound/pci/hda/hdac.c Thu Apr 26 19:54:14 2007 @@ -92,7 +92,7 @@ #endif #endif -#define HDA_DRV_TEST_REV "20070420_0044" +#define HDA_DRV_TEST_REV "20070427_0044" #define HDA_WIDGET_PARSER_REV 1 SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/hda/hdac.c,v 1.34 2007/04/18 18:26:40 ariff Exp $"); @@ -237,6 +237,7 @@ #define ASUS_W2J_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1971) #define ASUS_F3JC_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1338) #define ASUS_M2N_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x8234) +#define ASUS_M2NPVMX_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x81cb) #define ASUS_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0xffff) /* IBM / Lenovo */ @@ -1878,7 +1879,8 @@ "entries=%d found=%d res=0x%08x\n", __func__, nid, entnum, j, i, ents, w->nconns, res); - goto getconns_out; + else + goto getconns_out; } if (cnid < w->devinfo->startnode || cnid >= w->devinfo->endnode) { @@ -2080,6 +2082,20 @@ default: break; } + } else if (id == HDA_CODEC_AD1986A && sc->pci_subvendor == + ASUS_M2NPVMX_SUBVENDOR) { + switch (nid) { + case 28: /* LINE */ + config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK; + config |= HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN; + break; + case 29: /* MIC */ + config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK; + config |= HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN; + break; + default: + break; + } } HDA_BOOTVERBOSE( @@ -4246,6 +4262,15 @@ continue; if (w->nid != 3) w->enable = 0; + } + if (subvendor == ASUS_M2NPVMX_SUBVENDOR) { + /* nid 28 is mic, nid 29 is line-in */ + w = hdac_widget_get(devinfo, 15); + if (w != NULL) + w->selconn = 2; + w = hdac_widget_get(devinfo, 16); + if (w != NULL) + w->selconn = 1; } break; case HDA_CODEC_AD1988: