At Wed, 27 Jul 2011 16:09:50 +0200,
Colomban Wendling wrote:
> 
> Le 27/07/2011 15:07, Takashi Iwai a écrit :
> > At Wed, 27 Jul 2011 14:53:55 +0200,
> > Colomban Wendling wrote:
> >>
> >> Le 27/07/2011 13:20, Takashi Iwai a écrit :
> >>> At Wed, 27 Jul 2011 13:14:41 +0200,
> >>> Colomban Wendling wrote:
> >>>>
> >>>>> Also, you can replace the files in sound/pci/hda/* from 2.6.39 kernel
> >>>>> tree.  If this fixes the problem, it's a sound driver bug.  If not,
> >>>>> it's anything else, e.g. the problem in more core side, e.g. IOMMU
> >>>>> like above or the timer change, etc.
> >>>>
> >>>> Hey, that was a great idea! I reverse-patched sound/pci/hda of 3.0 with
> >>>> 2.6.39.3, and it fixes the problem! :)
> >>>
> >>> OK, then try to replace only sound/pci/hda/hda_intel.c and keep the
> >>> rest.  What happens?
> >>
> >> Doesn't work, that sound is choppy again.
> > 
> > OK, then keep hda_intel.c as 3.0 and replace the rest.
> > If this works, please give alsa-info.sh output (run with --no-upload
> > option).
> 
> It works! Attached is the alsa-info.sh output on this working version:
> 3.0 with 2.6.39.3 sound/pci/hda, but with 3.0's sound/pci/hda/hda_intel.c

Thanks.  Could you try the patch below against 3.0 tree?


Takashi

---
From: Takashi Iwai <ti...@suse.de>
Subject: [PATCH] ALSA: hda - Fix duplicated DAC assignments for Realtek

Copying hp_pins and speaker_pins from line_out_pins may confuse the
parser, and it can lead to duplicated initializations for the same pin
with a wrong DAC assignment.  The problem appears in 3.0 kernel code.

Signed-off-by: Takashi Iwai <ti...@suse.de>
---
 sound/pci/hda/patch_realtek.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 0383dd8..e125c60 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -895,13 +895,15 @@ static void alc_init_auto_hp(struct hda_codec *codec)
        if (present == 3)
                spec->automute_hp_lo = 1; /* both HP and LO automute */
 
-       if (!cfg->speaker_pins[0]) {
+       if (!cfg->speaker_pins[0] &&
+           cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
                memcpy(cfg->speaker_pins, cfg->line_out_pins,
                       sizeof(cfg->speaker_pins));
                cfg->speaker_outs = cfg->line_outs;
        }
 
-       if (!cfg->hp_pins[0]) {
+       if (!cfg->hp_pins[0] &&
+           cfg->line_out_type == AUTO_PIN_HP_OUT) {
                memcpy(cfg->hp_pins, cfg->line_out_pins,
                       sizeof(cfg->hp_pins));
                cfg->hp_outs = cfg->line_outs;
@@ -920,6 +922,7 @@ static void alc_init_auto_hp(struct hda_codec *codec)
                spec->automute_mode = ALC_AUTOMUTE_PIN;
        }
        if (spec->automute && cfg->line_out_pins[0] &&
+           cfg->speaker_pins[0] &&
            cfg->line_out_pins[0] != cfg->hp_pins[0] &&
            cfg->line_out_pins[0] != cfg->speaker_pins[0]) {
                for (i = 0; i < cfg->line_outs; i++) {
-- 
1.7.6




--
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to