aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiang Zhe <zhe.jiang@intel.com>2008-01-17 05:18:41 -0500
committerJaroslav Kysela <perex@perex.cz>2008-01-31 11:30:04 -0500
commit5218c892652c1e8f89964a7fd4cf8b71cc863094 (patch)
treec45f4a3d784b65225a5b3d0246bd775eebc81ec6
parent178532348c215d23d8d64548c6ff0e38b50fca6c (diff)
[ALSA] hda-codec - New model for conexant 5045 codec to support benq r55e
The benq r55e laptop have 3 jacks on the front panel. One for HP, one for Line In and one for Mic In. This patch implemented a new model to support it. Signed-off-by: Jiang Zhe <zhe.jiang@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r--Documentation/sound/alsa/ALSA-Configuration.txt1
-rw-r--r--sound/pci/hda/patch_conexant.c55
2 files changed, 56 insertions, 0 deletions
diff --git a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt
index bbe4b7c42392..66390d7b63f1 100644
--- a/Documentation/sound/alsa/ALSA-Configuration.txt
+++ b/Documentation/sound/alsa/ALSA-Configuration.txt
@@ -947,6 +947,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
947 Conexant 5045 947 Conexant 5045
948 laptop Laptop config 948 laptop Laptop config
949 fujitsu Fujitsu Si1520 laptop 949 fujitsu Fujitsu Si1520 laptop
950 benq Benq R55E
950 test for testing/debugging purpose, almost all controls 951 test for testing/debugging purpose, almost all controls
951 can be adjusted. Appearing only when compiled with 952 can be adjusted. Appearing only when compiled with
952 $CONFIG_SND_DEBUG=y 953 $CONFIG_SND_DEBUG=y
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
index 8b8de96df138..23a3be5509de 100644
--- a/sound/pci/hda/patch_conexant.c
+++ b/sound/pci/hda/patch_conexant.c
@@ -457,6 +457,15 @@ static struct hda_input_mux cxt5045_capture_source = {
457 } 457 }
458}; 458};
459 459
460static struct hda_input_mux cxt5045_capture_source_benq = {
461 .num_items = 3,
462 .items = {
463 { "IntMic", 0x1 },
464 { "ExtMic", 0x2 },
465 { "LineIn", 0x3 },
466 }
467};
468
460/* turn on/off EAPD (+ mute HP) as a master switch */ 469/* turn on/off EAPD (+ mute HP) as a master switch */
461static int cxt5045_hp_master_sw_put(struct snd_kcontrol *kcontrol, 470static int cxt5045_hp_master_sw_put(struct snd_kcontrol *kcontrol,
462 struct snd_ctl_elem_value *ucontrol) 471 struct snd_ctl_elem_value *ucontrol)
@@ -576,6 +585,15 @@ static struct snd_kcontrol_new cxt5045_mixers[] = {
576 {} 585 {}
577}; 586};
578 587
588static struct snd_kcontrol_new cxt5045_benq_mixers[] = {
589 HDA_CODEC_VOLUME("Line In Capture Volume", 0x1a, 0x03, HDA_INPUT),
590 HDA_CODEC_MUTE("Line In Capture Switch", 0x1a, 0x03, HDA_INPUT),
591 HDA_CODEC_VOLUME("Line In Playback Volume", 0x17, 0x3, HDA_INPUT),
592 HDA_CODEC_MUTE("Line In Playback Switch", 0x17, 0x3, HDA_INPUT),
593
594 {}
595};
596
579static struct hda_verb cxt5045_init_verbs[] = { 597static struct hda_verb cxt5045_init_verbs[] = {
580 /* Line in, Mic */ 598 /* Line in, Mic */
581 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN }, 599 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN },
@@ -601,6 +619,30 @@ static struct hda_verb cxt5045_init_verbs[] = {
601 { } /* end */ 619 { } /* end */
602}; 620};
603 621
622static struct hda_verb cxt5045_benq_init_verbs[] = {
623 /* Int Mic, Mic */
624 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN|AC_PINCTL_VREF_80 },
625 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN|AC_PINCTL_VREF_80 },
626 /* Line In,HP, Amp */
627 {0x10, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
628 {0x10, AC_VERB_SET_CONNECT_SEL, 0x1},
629 {0x11, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
630 {0x11, AC_VERB_SET_CONNECT_SEL, 0x1},
631 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
632 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
633 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
634 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
635 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
636 /* Record selector: Int mic */
637 {0x1a, AC_VERB_SET_CONNECT_SEL, 0x1},
638 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE,
639 AC_AMP_SET_INPUT|AC_AMP_SET_RIGHT|AC_AMP_SET_LEFT|0x17},
640 /* SPDIF route: PCM */
641 {0x13, AC_VERB_SET_CONNECT_SEL, 0x0},
642 /* EAPD */
643 {0x10, AC_VERB_SET_EAPD_BTLENABLE, 0x2}, /* default on */
644 { } /* end */
645};
604 646
605static struct hda_verb cxt5045_hp_sense_init_verbs[] = { 647static struct hda_verb cxt5045_hp_sense_init_verbs[] = {
606 /* pin sensing on HP jack */ 648 /* pin sensing on HP jack */
@@ -741,6 +783,7 @@ static int cxt5045_init(struct hda_codec *codec)
741enum { 783enum {
742 CXT5045_LAPTOP, /* Laptops w/ EAPD support */ 784 CXT5045_LAPTOP, /* Laptops w/ EAPD support */
743 CXT5045_FUJITSU, /* Laptops w/ EAPD support */ 785 CXT5045_FUJITSU, /* Laptops w/ EAPD support */
786 CXT5045_BENQ,
744#ifdef CONFIG_SND_DEBUG 787#ifdef CONFIG_SND_DEBUG
745 CXT5045_TEST, 788 CXT5045_TEST,
746#endif 789#endif
@@ -750,6 +793,7 @@ enum {
750static const char *cxt5045_models[CXT5045_MODELS] = { 793static const char *cxt5045_models[CXT5045_MODELS] = {
751 [CXT5045_LAPTOP] = "laptop", 794 [CXT5045_LAPTOP] = "laptop",
752 [CXT5045_FUJITSU] = "fujitsu", 795 [CXT5045_FUJITSU] = "fujitsu",
796 [CXT5045_BENQ] = "benq",
753#ifdef CONFIG_SND_DEBUG 797#ifdef CONFIG_SND_DEBUG
754 [CXT5045_TEST] = "test", 798 [CXT5045_TEST] = "test",
755#endif 799#endif
@@ -763,6 +807,7 @@ static struct snd_pci_quirk cxt5045_cfg_tbl[] = {
763 SND_PCI_QUIRK(0x103c, 0x30cd, "HP DV Series", CXT5045_LAPTOP), 807 SND_PCI_QUIRK(0x103c, 0x30cd, "HP DV Series", CXT5045_LAPTOP),
764 SND_PCI_QUIRK(0x103c, 0x30d5, "HP 530", CXT5045_LAPTOP), 808 SND_PCI_QUIRK(0x103c, 0x30d5, "HP 530", CXT5045_LAPTOP),
765 SND_PCI_QUIRK(0x103c, 0x30d9, "HP Spartan", CXT5045_LAPTOP), 809 SND_PCI_QUIRK(0x103c, 0x30d9, "HP Spartan", CXT5045_LAPTOP),
810 SND_PCI_QUIRK(0x152d, 0x0753, "Benq R55E", CXT5045_BENQ),
766 SND_PCI_QUIRK(0x1734, 0x10ad, "Fujitsu Si1520", CXT5045_FUJITSU), 811 SND_PCI_QUIRK(0x1734, 0x10ad, "Fujitsu Si1520", CXT5045_FUJITSU),
767 SND_PCI_QUIRK(0x1734, 0x10cb, "Fujitsu Si3515", CXT5045_LAPTOP), 812 SND_PCI_QUIRK(0x1734, 0x10cb, "Fujitsu Si3515", CXT5045_LAPTOP),
768 SND_PCI_QUIRK(0x1734, 0x110e, "Fujitsu V5505", CXT5045_LAPTOP), 813 SND_PCI_QUIRK(0x1734, 0x110e, "Fujitsu V5505", CXT5045_LAPTOP),
@@ -819,6 +864,16 @@ static int patch_cxt5045(struct hda_codec *codec)
819 spec->mixers[0] = cxt5045_mixers; 864 spec->mixers[0] = cxt5045_mixers;
820 codec->patch_ops.init = cxt5045_init; 865 codec->patch_ops.init = cxt5045_init;
821 break; 866 break;
867 case CXT5045_BENQ:
868 codec->patch_ops.unsol_event = cxt5045_hp_unsol_event;
869 spec->input_mux = &cxt5045_capture_source_benq;
870 spec->num_init_verbs = 1;
871 spec->init_verbs[0] = cxt5045_benq_init_verbs;
872 spec->mixers[0] = cxt5045_mixers;
873 spec->mixers[1] = cxt5045_benq_mixers;
874 spec->num_mixers = 2;
875 codec->patch_ops.init = cxt5045_init;
876 break;
822#ifdef CONFIG_SND_DEBUG 877#ifdef CONFIG_SND_DEBUG
823 case CXT5045_TEST: 878 case CXT5045_TEST:
824 spec->input_mux = &cxt5045_test_capture_source; 879 spec->input_mux = &cxt5045_test_capture_source;