aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVitaliy Kulikov <Vitaliy.Kulikov@idt.com>2012-02-27 17:47:37 -0500
committerTakashi Iwai <tiwai@suse.de>2012-02-28 01:29:40 -0500
commit5556e147083fb4d473d5c1a82f73205b8b145cd9 (patch)
tree9ac253bf873945b896c61475f69fc53e7d9c774e
parent6edc59e602b36cd3c95a426ef6e8cad0344af8c7 (diff)
ALSA: hda - Fix audio playback support on HP Zephyr system
Enables port E of IDT 92HD91 codec as output and sets correct output phase between ports E and D and high pass filter. Signed-off-by: Vitaliy Kulikov <Vitaliy.Kulikov@idt.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/pci/hda/patch_sigmatel.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index 4c769405d72a..8c346ac59d46 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -99,6 +99,7 @@ enum {
99 STAC_DELL_VOSTRO_3500, 99 STAC_DELL_VOSTRO_3500,
100 STAC_92HD83XXX_HP_cNB11_INTQUAD, 100 STAC_92HD83XXX_HP_cNB11_INTQUAD,
101 STAC_HP_DV7_4000, 101 STAC_HP_DV7_4000,
102 STAC_HP_ZEPHYR,
102 STAC_92HD83XXX_MODELS 103 STAC_92HD83XXX_MODELS
103}; 104};
104 105
@@ -894,6 +895,13 @@ static const struct hda_verb stac92hd83xxx_core_init[] = {
894 {} 895 {}
895}; 896};
896 897
898static const struct hda_verb stac92hd83xxx_hp_zephyr_init[] = {
899 { 0x22, 0x785, 0x43 },
900 { 0x22, 0x782, 0xe0 },
901 { 0x22, 0x795, 0x00 },
902 {}
903};
904
897static const struct hda_verb stac92hd71bxx_core_init[] = { 905static const struct hda_verb stac92hd71bxx_core_init[] = {
898 /* set master volume and direct control */ 906 /* set master volume and direct control */
899 { 0x28, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff}, 907 { 0x28, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
@@ -1621,6 +1629,12 @@ static const unsigned int hp_dv7_4000_pin_configs[10] = {
1621 0x40f000f0, 0x40f000f0, 1629 0x40f000f0, 0x40f000f0,
1622}; 1630};
1623 1631
1632static const unsigned int hp_zephyr_pin_configs[10] = {
1633 0x01813050, 0x0421201f, 0x04a1205e, 0x96130310,
1634 0x96130310, 0x0101401f, 0x1111611f, 0xd5a30130,
1635 0, 0,
1636};
1637
1624static const unsigned int hp_cNB11_intquad_pin_configs[10] = { 1638static const unsigned int hp_cNB11_intquad_pin_configs[10] = {
1625 0x40f000f0, 0x0221101f, 0x02a11020, 0x92170110, 1639 0x40f000f0, 0x0221101f, 0x02a11020, 0x92170110,
1626 0x40f000f0, 0x92170110, 0x40f000f0, 0xd5a30130, 1640 0x40f000f0, 0x92170110, 0x40f000f0, 0xd5a30130,
@@ -1634,6 +1648,7 @@ static const unsigned int *stac92hd83xxx_brd_tbl[STAC_92HD83XXX_MODELS] = {
1634 [STAC_DELL_VOSTRO_3500] = dell_vostro_3500_pin_configs, 1648 [STAC_DELL_VOSTRO_3500] = dell_vostro_3500_pin_configs,
1635 [STAC_92HD83XXX_HP_cNB11_INTQUAD] = hp_cNB11_intquad_pin_configs, 1649 [STAC_92HD83XXX_HP_cNB11_INTQUAD] = hp_cNB11_intquad_pin_configs,
1636 [STAC_HP_DV7_4000] = hp_dv7_4000_pin_configs, 1650 [STAC_HP_DV7_4000] = hp_dv7_4000_pin_configs,
1651 [STAC_HP_ZEPHYR] = hp_zephyr_pin_configs,
1637}; 1652};
1638 1653
1639static const char * const stac92hd83xxx_models[STAC_92HD83XXX_MODELS] = { 1654static const char * const stac92hd83xxx_models[STAC_92HD83XXX_MODELS] = {
@@ -1644,6 +1659,7 @@ static const char * const stac92hd83xxx_models[STAC_92HD83XXX_MODELS] = {
1644 [STAC_DELL_VOSTRO_3500] = "dell-vostro-3500", 1659 [STAC_DELL_VOSTRO_3500] = "dell-vostro-3500",
1645 [STAC_92HD83XXX_HP_cNB11_INTQUAD] = "hp_cNB11_intquad", 1660 [STAC_92HD83XXX_HP_cNB11_INTQUAD] = "hp_cNB11_intquad",
1646 [STAC_HP_DV7_4000] = "hp-dv7-4000", 1661 [STAC_HP_DV7_4000] = "hp-dv7-4000",
1662 [STAC_HP_ZEPHYR] = "hp-zephyr",
1647}; 1663};
1648 1664
1649static const struct snd_pci_quirk stac92hd83xxx_cfg_tbl[] = { 1665static const struct snd_pci_quirk stac92hd83xxx_cfg_tbl[] = {
@@ -1696,6 +1712,14 @@ static const struct snd_pci_quirk stac92hd83xxx_cfg_tbl[] = {
1696 "HP", STAC_92HD83XXX_HP_cNB11_INTQUAD), 1712 "HP", STAC_92HD83XXX_HP_cNB11_INTQUAD),
1697 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x3593, 1713 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x3593,
1698 "HP", STAC_92HD83XXX_HP_cNB11_INTQUAD), 1714 "HP", STAC_92HD83XXX_HP_cNB11_INTQUAD),
1715 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x3561,
1716 "HP", STAC_HP_ZEPHYR),
1717 {} /* terminator */
1718};
1719
1720static const struct snd_pci_quirk stac92hd83xxx_codec_id_cfg_tbl[] = {
1721 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x3561,
1722 "HP", STAC_HP_ZEPHYR),
1699 {} /* terminator */ 1723 {} /* terminator */
1700}; 1724};
1701 1725
@@ -5565,6 +5589,12 @@ static int patch_stac92hd83xxx(struct hda_codec *codec)
5565 STAC_92HD83XXX_MODELS, 5589 STAC_92HD83XXX_MODELS,
5566 stac92hd83xxx_models, 5590 stac92hd83xxx_models,
5567 stac92hd83xxx_cfg_tbl); 5591 stac92hd83xxx_cfg_tbl);
5592 /* check codec subsystem id if not found */
5593 if (spec->board_config < 0)
5594 spec->board_config =
5595 snd_hda_check_board_codec_sid_config(codec,
5596 STAC_92HD83XXX_MODELS, stac92hd83xxx_models,
5597 stac92hd83xxx_codec_id_cfg_tbl);
5568again: 5598again:
5569 if (spec->board_config < 0) 5599 if (spec->board_config < 0)
5570 snd_printdd(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", 5600 snd_printdd(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n",
@@ -5575,6 +5605,12 @@ again:
5575 5605
5576 codec->patch_ops = stac92xx_patch_ops; 5606 codec->patch_ops = stac92xx_patch_ops;
5577 5607
5608 switch (spec->board_config) {
5609 case STAC_HP_ZEPHYR:
5610 spec->init = stac92hd83xxx_hp_zephyr_init;
5611 break;
5612 }
5613
5578 if (find_mute_led_cfg(codec, -1/*no default cfg*/)) 5614 if (find_mute_led_cfg(codec, -1/*no default cfg*/))
5579 snd_printd("mute LED gpio %d polarity %d\n", 5615 snd_printd("mute LED gpio %d polarity %d\n",
5580 spec->gpio_led, 5616 spec->gpio_led,