diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 54fdf3448133..4c7b03996be9 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
@@ -59,6 +59,8 @@ enum { | |||
59 | STAC_D945GTP3, | 59 | STAC_D945GTP3, |
60 | STAC_D945GTP5, | 60 | STAC_D945GTP5, |
61 | STAC_MACMINI, | 61 | STAC_MACMINI, |
62 | STAC_MACBOOK, | ||
63 | STAC_MACBOOK_PRO, | ||
62 | STAC_922X_MODELS | 64 | STAC_922X_MODELS |
63 | }; | 65 | }; |
64 | 66 | ||
@@ -521,11 +523,25 @@ static unsigned int d945gtp5_pin_configs[10] = { | |||
521 | 0x02a19320, 0x40000100, | 523 | 0x02a19320, 0x40000100, |
522 | }; | 524 | }; |
523 | 525 | ||
526 | static unsigned int macbook_pin_configs[10] = { | ||
527 | 0x0321e230, 0x03a1e020, 0x400000fd, 0x9017e110, | ||
528 | 0x400000fe, 0x0381e021, 0x1345e240, 0x13c5e22e, | ||
529 | 0x400000fc, 0x400000fb, | ||
530 | }; | ||
531 | |||
532 | static unsigned int macbook_pro_pin_configs[10] = { | ||
533 | 0x0221401f, 0x90a70120, 0x01813024, 0x01014010, | ||
534 | 0x400000fd, 0x01016011, 0x1345e240, 0x13c5e22e, | ||
535 | 0x400000fc, 0x400000fb, | ||
536 | }; | ||
537 | |||
524 | static unsigned int *stac922x_brd_tbl[STAC_922X_MODELS] = { | 538 | static unsigned int *stac922x_brd_tbl[STAC_922X_MODELS] = { |
525 | [STAC_D945_REF] = ref922x_pin_configs, | 539 | [STAC_D945_REF] = ref922x_pin_configs, |
526 | [STAC_D945GTP3] = d945gtp3_pin_configs, | 540 | [STAC_D945GTP3] = d945gtp3_pin_configs, |
527 | [STAC_D945GTP5] = d945gtp5_pin_configs, | 541 | [STAC_D945GTP5] = d945gtp5_pin_configs, |
528 | [STAC_MACMINI] = d945gtp5_pin_configs, | 542 | [STAC_MACMINI] = d945gtp5_pin_configs, |
543 | [STAC_MACBOOK] = macbook_pin_configs, | ||
544 | [STAC_MACBOOK_PRO] = macbook_pro_pin_configs, | ||
529 | }; | 545 | }; |
530 | 546 | ||
531 | static const char *stac922x_models[STAC_922X_MODELS] = { | 547 | static const char *stac922x_models[STAC_922X_MODELS] = { |
@@ -533,6 +549,8 @@ static const char *stac922x_models[STAC_922X_MODELS] = { | |||
533 | [STAC_D945GTP5] = "5stack", | 549 | [STAC_D945GTP5] = "5stack", |
534 | [STAC_D945GTP3] = "3stack", | 550 | [STAC_D945GTP3] = "3stack", |
535 | [STAC_MACMINI] = "macmini", | 551 | [STAC_MACMINI] = "macmini", |
552 | [STAC_MACBOOK] = "macbook", | ||
553 | [STAC_MACBOOK_PRO] = "macbook-pro", | ||
536 | }; | 554 | }; |
537 | 555 | ||
538 | static struct snd_pci_quirk stac922x_cfg_tbl[] = { | 556 | static struct snd_pci_quirk stac922x_cfg_tbl[] = { |
@@ -1866,6 +1884,18 @@ static int patch_stac922x(struct hda_codec *codec) | |||
1866 | spec->board_config = snd_hda_check_board_config(codec, STAC_922X_MODELS, | 1884 | spec->board_config = snd_hda_check_board_config(codec, STAC_922X_MODELS, |
1867 | stac922x_models, | 1885 | stac922x_models, |
1868 | stac922x_cfg_tbl); | 1886 | stac922x_cfg_tbl); |
1887 | if (spec->board_config == STAC_MACMINI) { | ||
1888 | spec->gpio_mute = 1; | ||
1889 | /* Intel Macs have all same PCI SSID, so we need to check | ||
1890 | * codec SSID to distinguish the exact models | ||
1891 | */ | ||
1892 | switch (codec->subsystem_id) { | ||
1893 | case 0x106b1e00: | ||
1894 | spec->board_config = STAC_MACBOOK_PRO; | ||
1895 | break; | ||
1896 | } | ||
1897 | } | ||
1898 | |||
1869 | again: | 1899 | again: |
1870 | if (spec->board_config < 0) { | 1900 | if (spec->board_config < 0) { |
1871 | snd_printdd(KERN_INFO "hda_codec: Unknown model for STAC922x, " | 1901 | snd_printdd(KERN_INFO "hda_codec: Unknown model for STAC922x, " |
@@ -1906,9 +1936,6 @@ static int patch_stac922x(struct hda_codec *codec) | |||
1906 | return err; | 1936 | return err; |
1907 | } | 1937 | } |
1908 | 1938 | ||
1909 | if (spec->board_config == STAC_MACMINI) | ||
1910 | spec->gpio_mute = 1; | ||
1911 | |||
1912 | codec->patch_ops = stac92xx_patch_ops; | 1939 | codec->patch_ops = stac92xx_patch_ops; |
1913 | 1940 | ||
1914 | return 0; | 1941 | return 0; |