Re: 2.6.28-rc regression: digital audio inactive after resume from suspend

From: Takashi Iwai
Date: Tue Nov 25 2008 - 02:15:47 EST


At Tue, 25 Nov 2008 08:03:12 +0100,
Tino Keitel wrote:
>
> On Tue, Nov 25, 2008 at 00:10:14 +0100, Takashi Iwai wrote:
> > At Mon, 24 Nov 2008 22:22:25 +0100,
> > Tino Keitel wrote:
> > >
> > > Hi,
> > >
> > > the digital audio out (optical) is inactive (no red light, and
> > > therefore silent) after resume from suspend on my Mac mini Core Duo.
> > > When I disable and enable the IEC958 toggle, it works again.
> > >
> > > This didn't happen with 2.6.27. Currently, I use 2.6.28-rc6 as of
> > > commit ged31348.
> > >
> > > This is the hardware in lspci:
> > >
> > > 00:1b.0 Audio device [0403]: Intel Corporation 82801G (ICH7 Family)
> > > High Definition Audio Controller [8086:27d8] (rev 02)
> > > Subsystem: Sigmatel Device [8384:7680]
> > > Flags: bus master, fast devsel, latency 0, IRQ 22
> > > Memory at 90440000 (64-bit, non-prefetchable) [size=16K]
> > > Capabilities: <access denied>
> > > Kernel driver in use: HDA Intel
> > > Kernel modules: snd-hda-intel
> > >
> > > The dmesg output with 2.6.27 and 2.6.28-rc are here:
> > >
> > > http://tikei.de/dmesg_2.6.27.5
> > > http://tikei.de/dmesg_2.6.28-rc6
> >
> > Could you run alsa-info.sh with --no-upload option on both kernels
> > and attach the generated files? The script is found at
> > http://www.alsa-project.org/alsa-info.sh
>
> http://tikei.de/alsa-info-2.6.27.5.txt
> http://tikei.de/alsa-info-2.6.28-broken.txt
> http://tikei.de/alsa-info-2.6.28-fixed.txt (here I unchecked/rechecked
> the IEC958 toggle)

Could you try the patch below?


thanks,

Takashi

---
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index ba1ab73..eb91641 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -1436,12 +1436,12 @@ static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
{
hda_nid_t *d;

- snd_hda_codec_write(codec, nid, 0, verb, val);
+ snd_hda_codec_write_cache(codec, nid, 0, verb, val);
d = codec->slave_dig_outs;
if (!d)
return;
for (; *d; d++)
- snd_hda_codec_write(codec, *d, 0, verb, val);
+ snd_hda_codec_write_cache(codec, *d, 0, verb, val);
}

static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/