Re: BUG: soft lockup during suspend

From: Takashi Iwai
Date: Mon Mar 26 2007 - 05:50:58 EST


At Fri, 23 Mar 2007 15:22:46 -0400,
Chuck Ebbert wrote:
>
> Takashi Iwai wrote:
> > At Tue, 20 Mar 2007 17:08:48 +0100,
> > I wrote:
> >> At Tue, 20 Mar 2007 12:05:07 -0400,
> >>>
> >>> http://lkml.org/lkml/2006/12/3/9
> >> This is a different problem.
> >> A known workaround is to provide probe_mask=1 module option.
> >
> > BTW, does this happen on the latest linus git tree? (rc4 may work,
> > though)
> >
>
> 2.6.21-rc4 works perfectly, detecting my Acer notebook's model
> properly and adding the sound devices to the bus. Very nice...

Could you try rc5? I'm afraid that one of fix patches on rc5 may
break the probing on your laptop (this path had to be applied to
recover another regression...)

If it happened, try the patch below from the latest ALSA tree.

thanks,

Takashi


[PATCH] [ALSA] hda-intel - Probe additional slots only if necessary

Probing the codec slots on ATI controller causes problems on some
devices like Acer laptops. On these devices, reading from codec
slot 3 results in the communication failure with the codec chip.
Meanwhile, some laptops (e.g. Gateway) have the codec connection
only on slot 3, and probing this slot is mandatory for them.
The patch improves the probing robustness. The additional slots
are now checked only when no codecs are found in the primary three
slots.

Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
Signed-off-by: Jaroslav Kysela <perex@xxxxxxx>

---
commit a239a9ff89307a0a65fd9cbb02afb020bdb13de0
tree 72603176c199d3fedaeba030f3ea5691c4b5d882
parent 66753e652a094e0ab856417a5092297dbabe5fd6
author Takashi Iwai <tiwai@xxxxxxx> Wed, 21 Mar 2007 15:14:35 +0100
committer Jaroslav Kysela <perex@xxxxxxx> Wed, 21 Mar 2007 15:15:24 +0100

sound/pci/hda/hda_intel.c | 16 ++++++++++++++--
1 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 517a8d7..5e478b9 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -198,6 +198,7 @@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO
#define RIRB_INT_MASK 0x05

/* STATESTS int mask: SD2,SD1,SD0 */
+#define AZX_MAX_CODECS 3
#define STATESTS_INT_MASK 0x07

/* SD_CTL bits */
@@ -991,7 +992,7 @@ static int __devinit azx_codec_create(st
return err;

codecs = 0;
- for (c = 0; c < azx_max_codecs[chip->driver_type]; c++) {
+ for (c = 0; c < AZX_MAX_CODECS; c++) {
if ((chip->codec_mask & (1 << c)) & probe_mask) {
err = snd_hda_codec_new(chip->bus, c, NULL);
if (err < 0)
@@ -999,7 +1000,18 @@ static int __devinit azx_codec_create(st
codecs++;
}
}
- if (! codecs) {
+ if (!codecs) {
+ /* probe additional slots if no codec is found */
+ for (; c < azx_max_codecs[chip->driver_type]; c++) {
+ if ((chip->codec_mask & (1 << c)) & probe_mask) {
+ err = snd_hda_codec_new(chip->bus, c, NULL);
+ if (err < 0)
+ continue;
+ codecs++;
+ }
+ }
+ }
+ if (!codecs) {
snd_printk(KERN_ERR SFX "no codecs initialized\n");
return -ENXIO;
}
-
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/