|
@@ -59,6 +59,8 @@ enum {
|
|
STAC_D945GTP3,
|
|
STAC_D945GTP3,
|
|
STAC_D945GTP5,
|
|
STAC_D945GTP5,
|
|
STAC_MACMINI,
|
|
STAC_MACMINI,
|
|
|
|
+ STAC_MACBOOK,
|
|
|
|
+ STAC_MACBOOK_PRO,
|
|
STAC_922X_MODELS
|
|
STAC_922X_MODELS
|
|
};
|
|
};
|
|
|
|
|
|
@@ -521,11 +523,25 @@ static unsigned int d945gtp5_pin_configs[10] = {
|
|
0x02a19320, 0x40000100,
|
|
0x02a19320, 0x40000100,
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+static unsigned int macbook_pin_configs[10] = {
|
|
|
|
+ 0x0321e230, 0x03a1e020, 0x400000fd, 0x9017e110,
|
|
|
|
+ 0x400000fe, 0x0381e021, 0x1345e240, 0x13c5e22e,
|
|
|
|
+ 0x400000fc, 0x400000fb,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static unsigned int macbook_pro_pin_configs[10] = {
|
|
|
|
+ 0x0221401f, 0x90a70120, 0x01813024, 0x01014010,
|
|
|
|
+ 0x400000fd, 0x01016011, 0x1345e240, 0x13c5e22e,
|
|
|
|
+ 0x400000fc, 0x400000fb,
|
|
|
|
+};
|
|
|
|
+
|
|
static unsigned int *stac922x_brd_tbl[STAC_922X_MODELS] = {
|
|
static unsigned int *stac922x_brd_tbl[STAC_922X_MODELS] = {
|
|
[STAC_D945_REF] = ref922x_pin_configs,
|
|
[STAC_D945_REF] = ref922x_pin_configs,
|
|
[STAC_D945GTP3] = d945gtp3_pin_configs,
|
|
[STAC_D945GTP3] = d945gtp3_pin_configs,
|
|
[STAC_D945GTP5] = d945gtp5_pin_configs,
|
|
[STAC_D945GTP5] = d945gtp5_pin_configs,
|
|
[STAC_MACMINI] = d945gtp5_pin_configs,
|
|
[STAC_MACMINI] = d945gtp5_pin_configs,
|
|
|
|
+ [STAC_MACBOOK] = macbook_pin_configs,
|
|
|
|
+ [STAC_MACBOOK_PRO] = macbook_pro_pin_configs,
|
|
};
|
|
};
|
|
|
|
|
|
static const char *stac922x_models[STAC_922X_MODELS] = {
|
|
static const char *stac922x_models[STAC_922X_MODELS] = {
|
|
@@ -533,6 +549,8 @@ static const char *stac922x_models[STAC_922X_MODELS] = {
|
|
[STAC_D945GTP5] = "5stack",
|
|
[STAC_D945GTP5] = "5stack",
|
|
[STAC_D945GTP3] = "3stack",
|
|
[STAC_D945GTP3] = "3stack",
|
|
[STAC_MACMINI] = "macmini",
|
|
[STAC_MACMINI] = "macmini",
|
|
|
|
+ [STAC_MACBOOK] = "macbook",
|
|
|
|
+ [STAC_MACBOOK_PRO] = "macbook-pro",
|
|
};
|
|
};
|
|
|
|
|
|
static struct snd_pci_quirk stac922x_cfg_tbl[] = {
|
|
static struct snd_pci_quirk stac922x_cfg_tbl[] = {
|
|
@@ -1866,6 +1884,18 @@ static int patch_stac922x(struct hda_codec *codec)
|
|
spec->board_config = snd_hda_check_board_config(codec, STAC_922X_MODELS,
|
|
spec->board_config = snd_hda_check_board_config(codec, STAC_922X_MODELS,
|
|
stac922x_models,
|
|
stac922x_models,
|
|
stac922x_cfg_tbl);
|
|
stac922x_cfg_tbl);
|
|
|
|
+ if (spec->board_config == STAC_MACMINI) {
|
|
|
|
+ spec->gpio_mute = 1;
|
|
|
|
+ /* Intel Macs have all same PCI SSID, so we need to check
|
|
|
|
+ * codec SSID to distinguish the exact models
|
|
|
|
+ */
|
|
|
|
+ switch (codec->subsystem_id) {
|
|
|
|
+ case 0x106b1e00:
|
|
|
|
+ spec->board_config = STAC_MACBOOK_PRO;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
again:
|
|
again:
|
|
if (spec->board_config < 0) {
|
|
if (spec->board_config < 0) {
|
|
snd_printdd(KERN_INFO "hda_codec: Unknown model for STAC922x, "
|
|
snd_printdd(KERN_INFO "hda_codec: Unknown model for STAC922x, "
|
|
@@ -1906,9 +1936,6 @@ static int patch_stac922x(struct hda_codec *codec)
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|
|
- if (spec->board_config == STAC_MACMINI)
|
|
|
|
- spec->gpio_mute = 1;
|
|
|
|
-
|
|
|
|
codec->patch_ops = stac92xx_patch_ops;
|
|
codec->patch_ops = stac92xx_patch_ops;
|
|
|
|
|
|
return 0;
|
|
return 0;
|