[ALSA] hda-codec - Add STAC9228 DMIC support
authorMatthew Ranostay <mranostay@embeddedalley.com>
Thu, 18 Oct 2007 15:38:17 +0000 (17:38 +0200)
committerJaroslav Kysela <perex@perex.cz>
Thu, 31 Jan 2008 16:29:06 +0000 (17:29 +0100)
Added the missing STAC9228 DMIC support.
Also added a new vendor id tag for IDT.

Signed-off-by: Matthew Ranostay <mranostay@embeddedalley.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
sound/pci/hda/hda_codec.c
sound/pci/hda/patch_sigmatel.c

index 8cbe3bf..dacabe5 100644 (file)
@@ -55,6 +55,7 @@ static struct hda_vendor_id hda_vendor_ids[] = {
        { 0x10ec, "Realtek" },
        { 0x1057, "Motorola" },
        { 0x1106, "VIA" },
+       { 0x111d, "IDT" },
        { 0x11d4, "Analog Devices" },
        { 0x13f6, "C-Media" },
        { 0x14f1, "Conexant" },
index 0401223..86cd3f6 100644 (file)
@@ -204,6 +204,11 @@ 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] = {
         0x12, 0x13
 };
@@ -2688,7 +2693,6 @@ static int patch_stac927x(struct hda_codec *codec)
                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;
@@ -2697,7 +2701,6 @@ static int patch_stac927x(struct hda_codec *codec)
                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;
@@ -2706,11 +2709,20 @@ static int patch_stac927x(struct hda_codec *codec)
                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;
        /* GPIO0 High = Enable EAPD */
        spec->gpio_mask = spec->gpio_data = 0x00000001;