From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751280AbXCTQVZ (ORCPT ); Tue, 20 Mar 2007 12:21:25 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751771AbXCTQVZ (ORCPT ); Tue, 20 Mar 2007 12:21:25 -0400 Received: from cantor.suse.de ([195.135.220.2]:38698 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751280AbXCTQVY (ORCPT ); Tue, 20 Mar 2007 12:21:24 -0400 Date: Tue, 20 Mar 2007 17:21:22 +0100 Message-ID: From: Takashi Iwai To: Chuck Ebbert Cc: Pavel Machek , kernel list , Ingo Molnar Subject: Re: BUG: soft lockup during suspend In-Reply-To: References: <20070320123253.GB19019@elf.ucw.cz> <46000633.5000900@redhat.com> User-Agent: Wanderlust/2.12.0 (Your Wildest Dreams) SEMI/1.14.6 (Maruoka) FLIM/1.14.7 (=?ISO-8859-4?Q?Sanj=F2?=) APEL/10.6 MULE XEmacs/21.5 (beta27) (fiddleheads) (+CVS-20060704) (i386-suse-linux) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org At Tue, 20 Mar 2007 17:08:48 +0100, I wrote: > > At Tue, 20 Mar 2007 12:05:07 -0400, > Chuck Ebbert wrote: > > > > Takashi Iwai wrote: > > > > > > X60/T60 is known to be often broken regarding the communication > > > between the controller and the codec chip. When this kind of thing > > > happens, the driver tries to switch to a single-shot I/O without using > > > ring-buffers and IRQs, and even in such a mode, the communication gets > > > broken. FWIW, it doesn't happen on other machines with HD-audio, so > > > it's fairly specific to X60/T60. No idea why. > > > > What about Acer Aspire 5102? > > > > 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) If yes, could you try the patch below? thanks, Takashi diff -r 1dd843b6ffa7 sound/pci/hda/hda_intel.c --- a/sound/pci/hda/hda_intel.c Tue Mar 20 11:33:46 2007 +0100 +++ b/sound/pci/hda/hda_intel.c Tue Mar 20 17:16:20 2007 +0100 @@ -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; }