diff -r fb9512ce24e0 pci/hda/hda_codec.c --- a/pci/hda/hda_codec.c Thu Oct 18 10:48:43 2007 +0200 +++ b/pci/hda/hda_codec.c Thu Oct 18 11:03:07 2007 -0400 @@ -55,6 +55,7 @@ static struct hda_vendor_id hda_vendor_i { 0x10ec, "Realtek" }, { 0x1057, "Motorola" }, { 0x1106, "VIA" }, + { 0x111d, "IDT" }, { 0x11d4, "Analog Devices" }, { 0x13f6, "C-Media" }, { 0x14f1, "Conexant" }, diff -r fb9512ce24e0 pci/hda/patch_sigmatel.c --- a/pci/hda/patch_sigmatel.c Thu Oct 18 10:48:43 2007 +0200 +++ b/pci/hda/patch_sigmatel.c Thu Oct 18 11:14:40 2007 -0400 @@ -202,6 +202,11 @@ static hda_nid_t stac927x_adc_nids[3] = static hda_nid_t stac927x_mux_nids[3] = { 0x15, 0x16, 0x17 +}; + +#define STAC927X_NUM_DMICS 2 +static hda_nid_t stac927x_dmic_nids[STAC927X_NUM_DMICS + 1] = { + 0x13, 0x14, 0 }; static hda_nid_t stac9205_adc_nids[2] = { @@ -2739,7 +2744,6 @@ static int patch_stac927x(struct hda_cod spec->mux_nids = stac927x_mux_nids; spec->num_muxes = ARRAY_SIZE(stac927x_mux_nids); spec->num_adcs = ARRAY_SIZE(stac927x_adc_nids); - spec->num_dmics = 0; spec->init = d965_core_init; spec->mixer = stac927x_mixer; break; @@ -2748,7 +2752,6 @@ static int patch_stac927x(struct hda_cod spec->mux_nids = stac927x_mux_nids; spec->num_muxes = ARRAY_SIZE(stac927x_mux_nids); spec->num_adcs = ARRAY_SIZE(stac927x_adc_nids); - spec->num_dmics = 0; spec->init = d965_core_init; spec->mixer = stac927x_mixer; break; @@ -2757,9 +2760,18 @@ static int patch_stac927x(struct hda_cod spec->mux_nids = stac927x_mux_nids; spec->num_muxes = ARRAY_SIZE(stac927x_mux_nids); spec->num_adcs = ARRAY_SIZE(stac927x_adc_nids); - spec->num_dmics = 0; spec->init = stac927x_core_init; spec->mixer = stac927x_mixer; + } + + switch (codec->subsystem_id) { + case 0x1028020A: /* STAC 9228 */ + case 0x10280209: /* STAC 9228 */ + spec->dmic_nids = stac927x_dmic_nids; + spec->num_dmics = STAC927X_NUM_DMICS; + break; + default: + spec->num_dmics = 0; } spec->multiout.dac_nids = spec->dac_nids;