浏览代码

ALSA: hda/cirrus - support for iMac12,2 model

This early 2011 model just need to have headphones on GPI02
instead of GPI01, and use BIOS pincfgs.
It is detected by codec SSID.
The iMac12,1 model is known to work the same way, although maybe
not with the same codec SSID.

Signed-off-by: Jérémy Lal <kapouer@melix.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Jérémy Lal 13 年之前
父节点
当前提交
7e5bea19ae
共有 1 个文件被更改,包括 9 次插入0 次删除
  1. 9 0
      sound/pci/hda/patch_cirrus.c

+ 9 - 0
sound/pci/hda/patch_cirrus.c

@@ -79,6 +79,7 @@ enum {
 	CS420X_MBP53,
 	CS420X_MBP53,
 	CS420X_MBP55,
 	CS420X_MBP55,
 	CS420X_IMAC27,
 	CS420X_IMAC27,
+	CS420X_IMAC27_122,
 	CS420X_APPLE,
 	CS420X_APPLE,
 	CS420X_AUTO,
 	CS420X_AUTO,
 	CS420X_MODELS
 	CS420X_MODELS
@@ -1290,6 +1291,7 @@ static const char * const cs420x_models[CS420X_MODELS] = {
 	[CS420X_MBP53] = "mbp53",
 	[CS420X_MBP53] = "mbp53",
 	[CS420X_MBP55] = "mbp55",
 	[CS420X_MBP55] = "mbp55",
 	[CS420X_IMAC27] = "imac27",
 	[CS420X_IMAC27] = "imac27",
+	[CS420X_IMAC27_122] = "imac27_122",
 	[CS420X_APPLE] = "apple",
 	[CS420X_APPLE] = "apple",
 	[CS420X_AUTO] = "auto",
 	[CS420X_AUTO] = "auto",
 };
 };
@@ -1306,6 +1308,7 @@ static const struct snd_pci_quirk cs420x_cfg_tbl[] = {
 };
 };
 
 
 static const struct snd_pci_quirk cs420x_codec_cfg_tbl[] = {
 static const struct snd_pci_quirk cs420x_codec_cfg_tbl[] = {
+	SND_PCI_QUIRK(0x106b, 0x2000, "iMac 12,2", CS420X_IMAC27_122),
 	SND_PCI_QUIRK_VENDOR(0x106b, "Apple", CS420X_APPLE),
 	SND_PCI_QUIRK_VENDOR(0x106b, "Apple", CS420X_APPLE),
 	{} /* terminator */
 	{} /* terminator */
 };
 };
@@ -1405,6 +1408,12 @@ static int patch_cs420x(struct hda_codec *codec)
 		spec->gpio_mask = spec->gpio_dir =
 		spec->gpio_mask = spec->gpio_dir =
 			spec->gpio_eapd_hp | spec->gpio_eapd_speaker;
 			spec->gpio_eapd_hp | spec->gpio_eapd_speaker;
 		break;
 		break;
+	case CS420X_IMAC27_122:
+		spec->gpio_eapd_hp = 4; /* GPIO2 = headphones */
+		spec->gpio_eapd_speaker = 8; /* GPIO3 = speakers */
+		spec->gpio_mask = spec->gpio_dir =
+			spec->gpio_eapd_hp | spec->gpio_eapd_speaker;
+		break;
 	}
 	}
 
 
 	err = cs_parse_auto_config(codec);
 	err = cs_parse_auto_config(codec);