ALSA: hda - Add support of Alienware M17x laptop
authorTakashi Iwai <tiwai@suse.de>
Wed, 2 Sep 2009 05:43:08 +0000 (07:43 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 2 Sep 2009 05:43:08 +0000 (07:43 +0200)
Added the quirk for Alienware M17x with IDT 92HD73* codec chip.
It has two HP and one line-out jack, one mic jack, a built-in
speaker and a built-in mic.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Documentation/sound/alsa/HD-Audio-Models.txt
sound/pci/hda/patch_sigmatel.c

index abffd41..32d8cc0 100644 (file)
@@ -380,6 +380,7 @@ STAC92HD73*
   dell-m6-dmic Dell desktops/laptops with digital mics
   dell-m6      Dell desktops/laptops with both type of mics
   dell-eq      Dell desktops/laptops
   dell-m6-dmic Dell desktops/laptops with digital mics
   dell-m6      Dell desktops/laptops with both type of mics
   dell-eq      Dell desktops/laptops
+  alienware    Alienware M17x
   auto         BIOS setup (default)
 
 STAC92HD83*
   auto         BIOS setup (default)
 
 STAC92HD83*
index 83a338b..e31e53d 100644 (file)
@@ -83,6 +83,7 @@ enum {
        STAC_DELL_M6_DMIC,
        STAC_DELL_M6_BOTH,
        STAC_DELL_EQ,
        STAC_DELL_M6_DMIC,
        STAC_DELL_M6_BOTH,
        STAC_DELL_EQ,
+       STAC_ALIENWARE_M17X,
        STAC_92HD73XX_MODELS
 };
 
        STAC_92HD73XX_MODELS
 };
 
@@ -1513,12 +1514,20 @@ static unsigned int dell_m6_pin_configs[13] = {
        0x4f0000f0,
 };
 
        0x4f0000f0,
 };
 
+static unsigned int alienware_m17x_pin_configs[13] = {
+       0x0321101f, 0x0321101f, 0x03a11020, 0x03014020,
+       0x90170110, 0x4f0000f0, 0x4f0000f0, 0x4f0000f0,
+       0x4f0000f0, 0x90a60160, 0x4f0000f0, 0x4f0000f0,
+       0x904601b0,
+};
+
 static unsigned int *stac92hd73xx_brd_tbl[STAC_92HD73XX_MODELS] = {
        [STAC_92HD73XX_REF]     = ref92hd73xx_pin_configs,
        [STAC_DELL_M6_AMIC]     = dell_m6_pin_configs,
        [STAC_DELL_M6_DMIC]     = dell_m6_pin_configs,
        [STAC_DELL_M6_BOTH]     = dell_m6_pin_configs,
        [STAC_DELL_EQ]  = dell_m6_pin_configs,
 static unsigned int *stac92hd73xx_brd_tbl[STAC_92HD73XX_MODELS] = {
        [STAC_92HD73XX_REF]     = ref92hd73xx_pin_configs,
        [STAC_DELL_M6_AMIC]     = dell_m6_pin_configs,
        [STAC_DELL_M6_DMIC]     = dell_m6_pin_configs,
        [STAC_DELL_M6_BOTH]     = dell_m6_pin_configs,
        [STAC_DELL_EQ]  = dell_m6_pin_configs,
+       [STAC_ALIENWARE_M17X]   = alienware_m17x_pin_configs,
 };
 
 static const char *stac92hd73xx_models[STAC_92HD73XX_MODELS] = {
 };
 
 static const char *stac92hd73xx_models[STAC_92HD73XX_MODELS] = {
@@ -1530,6 +1539,7 @@ static const char *stac92hd73xx_models[STAC_92HD73XX_MODELS] = {
        [STAC_DELL_M6_DMIC] = "dell-m6-dmic",
        [STAC_DELL_M6_BOTH] = "dell-m6",
        [STAC_DELL_EQ] = "dell-eq",
        [STAC_DELL_M6_DMIC] = "dell-m6-dmic",
        [STAC_DELL_M6_BOTH] = "dell-m6",
        [STAC_DELL_EQ] = "dell-eq",
+       [STAC_ALIENWARE_M17X] = "alienware",
 };
 
 static struct snd_pci_quirk stac92hd73xx_cfg_tbl[] = {
 };
 
 static struct snd_pci_quirk stac92hd73xx_cfg_tbl[] = {
@@ -1567,6 +1577,12 @@ static struct snd_pci_quirk stac92hd73xx_cfg_tbl[] = {
        {} /* terminator */
 };
 
        {} /* terminator */
 };
 
+static struct snd_pci_quirk stac92hd73xx_codec_id_cfg_tbl[] = {
+       SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02a1,
+                     "Alienware M17x", STAC_ALIENWARE_M17X),
+       {} /* terminator */
+};
+
 static unsigned int ref92hd83xxx_pin_configs[10] = {
        0x02214030, 0x02211010, 0x02a19020, 0x02170130,
        0x01014050, 0x01819040, 0x01014020, 0x90a3014e,
 static unsigned int ref92hd83xxx_pin_configs[10] = {
        0x02214030, 0x02211010, 0x02a19020, 0x02170130,
        0x01014050, 0x01819040, 0x01014020, 0x90a3014e,
@@ -4909,6 +4925,12 @@ static int patch_stac92hd73xx(struct hda_codec *codec)
                                                        STAC_92HD73XX_MODELS,
                                                        stac92hd73xx_models,
                                                        stac92hd73xx_cfg_tbl);
                                                        STAC_92HD73XX_MODELS,
                                                        stac92hd73xx_models,
                                                        stac92hd73xx_cfg_tbl);
+       /* check codec subsystem id if not found */
+       if (spec->board_config < 0)
+               spec->board_config =
+                       snd_hda_check_board_codec_sid_config(codec,
+                               STAC_92HD73XX_MODELS, stac92hd73xx_models,
+                               stac92hd73xx_codec_id_cfg_tbl);
 again:
        if (spec->board_config < 0)
                snd_printdd(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n",
 again:
        if (spec->board_config < 0)
                snd_printdd(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n",
@@ -4983,6 +5005,11 @@ again:
                        break;
                }
                break;
                        break;
                }
                break;
+       case STAC_ALIENWARE_M17X:
+               spec->num_dmics = STAC92HD73XX_NUM_DMICS;
+               spec->num_smuxes = ARRAY_SIZE(stac92hd73xx_smux_nids);
+               spec->eapd_switch = 0;
+               break;
        default:
                spec->num_dmics = STAC92HD73XX_NUM_DMICS;
                spec->num_smuxes = ARRAY_SIZE(stac92hd73xx_smux_nids);
        default:
                spec->num_dmics = STAC92HD73XX_NUM_DMICS;
                spec->num_smuxes = ARRAY_SIZE(stac92hd73xx_smux_nids);