[alsa-devel] No sound with nVidia Corporation MCP79 High Definition Audio (rev b1) (Macbook Pro 5, 5)
Takashi Iwai
tiwai at suse.de
Mon Jul 6 16:47:48 CEST 2009
At Mon, 6 Jul 2009 16:36:09 +0200,
Andreas Nüßlein wrote:
>
> On Monday 06 July 2009 16:16:06 you wrote:
> > At Mon, 6 Jul 2009 16:03:04 +0200,
> >
> > Andreas Nüßlein wrote:
> > > On Monday 06 July 2009 15:39:09 you wrote:
> > > > At Mon, 6 Jul 2009 14:59:09 +0200,
> > > >
> > > > Andreas Nüßlein wrote:
> > > > > On Monday 06 July 2009 14:44:56 you wrote:
> > > > > > At Mon, 6 Jul 2009 12:19:11 +0200,
> > > > > >
> > > > > > Andreas Nüßlein wrote:
> > > > > > > On Monday 06 July 2009 12:08:11 you wrote:
> > > > > > > > At Mon, 6 Jul 2009 11:45:07 +0200,
> > > > > > > >
> > > > > > > > Andreas Nüßlein wrote:
> > > > > > > > > [1 <text/plain; iso-8859-1 (quoted-printable)>]
> > > > > > > > >
> > > > > > > > > On Monday 06 July 2009 09:23:07 you wrote:
> > > > > > > > > > At Sun, 5 Jul 2009 12:30:52 +0200,
> > > > > > > > > >
> > > > > > > > > > > however i was able to reproduce the "bad kfree", by
> > > > > > > > > > > changing the volumes in alsamixer. it always gave me the
> > > > > > > > > > > same "called from ID" so i tried "while (true) do cat
> > > > > > > > > > > /proc/kallsyms | grep ffffffffa001b08b; done" and then
> > > > > > > > > > > changed the volume, but the grep never returned anything,
> > > > > > > > > > > dmesg of course got more and more of those kfree-errors.
> > > > > > > > > >
> > > > > > > > > > The address won't match exactly in /proc/kasllsyms.
> > > > > > > > > > But you can guess which function by address. First sort
> > > > > > > > > > /proc/kallsyms then check the position that fits with the
> > > > > > > > > > given address.
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > Takashi
> > > > > > > > >
> > > > > > > > > well i'm not really sure _I_ can guess ;) i guess it's
> > > > > > > > > either "t snd_ctl_ioctl [snd]" or "t
> > > > > > > > > snd_ctl_ioctl_compat [snd]".
> > > > > > > > >
> > > > > > > > > here are the greps, "snd: bad kfree (called from
> > > > > > > > > ffffffffa001b08b)" being the error:
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > $ cat /proc/kallsyms | sort | grep ffffffffa001a
> > > > > > > > > ffffffffa001a045 t snd_ctl_elem_info [snd]
> > > > > > > > > ffffffffa001a17a t copy_ctl_value_from_user [snd]
> > > > > > > > > ffffffffa001a34f t snd_ctl_elem_read [snd]
> > > > > > > > > ffffffffa001a413 t snd_ctl_elem_write [snd]
> > > > > > > > > ffffffffa001a515 T snd_ctl_rename_id [snd]
> > > > > > > > > ffffffffa001a5b5 T snd_ctl_activate_id [snd]
> > > > > > > > > ffffffffa001a66e T snd_ctl_remove_id [snd]
> > > > > > > > > ffffffffa001a6ed T snd_ctl_add [snd]
> > > > > > > > > ffffffffa001a6ed u snd_ctl_add [snd_hda_codec]
> > > > > > > > > ffffffffa001a947 t snd_ctl_elem_add [snd]
> > > > > > > > > ffffffffa001abd3 t snd_ctl_elem_add_compat [snd]
> > > > > > > > > ffffffffa001ad37 t snd_ctl_elem_add_user [snd]
> > > > > > > > > ffffffffa001ada6 t snd_ctl_ioctl [snd]
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > $ cat /proc/kallsyms | sort | grep ffffffffa001b
> > > > > > > > > ffffffffa001b4c4 t snd_ctl_ioctl_compat [snd]
> > > > > > > > > ffffffffa001b9ba T snd_ctl_new1 [snd]
> > > > > > > > > ffffffffa001b9ba u snd_ctl_new1 [snd_hda_codec]
> > > > > > > > > ffffffffa001b9ba u snd_ctl_new1 [snd_hda_codec_cirrus]
> > > > > > > > > ffffffffa001bb30 T snd_pci_quirk_lookup [snd]
> > > > > > > > > ffffffffa001bb30 u snd_pci_quirk_lookup [snd_hda_codec]
> > > > > > > > > ffffffffa001bb30 u snd_pci_quirk_lookup [snd_hda_intel]
> > > > > > > > > ffffffffa001bb93 T snd_verbose_printk [snd]
> > > > > > > > > ffffffffa001bb93 u snd_verbose_printk [snd_hda_codec]
> > > > > > > > > ffffffffa001bb93 u snd_verbose_printk [snd_hda_intel]
> > > > > > > > > ffffffffa001bb93 u snd_verbose_printk [snd_hwdep]
> > > > > > > > > ffffffffa001bb93 u snd_verbose_printk [snd_pcm]
> > > > > > > > > ffffffffa001bb93 u snd_verbose_printk [snd_timer]
> > > > > > > > > ffffffffa001bc7b T release_and_free_resource [snd]
> > > > > > > > > ffffffffa001bcd4 t snd_device_register_all [snd]
> > > > > > > > > ffffffffa001bd76 T snd_device_register [snd]
> > > > > > > > > ffffffffa001bd76 u snd_device_register [snd_pcm]
> > > > > > > > > ffffffffa001be67 t snd_device_disconnect [snd]
> > > > > > > > > ffffffffa001bf5d t snd_device_disconnect_all [snd]
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > hope that helps =)
> > > > > > > >
> > > > > > > > Maybe the patch below can give a better clue.
> > > > > > > > This will spew stack traces when this error is triggered.
> > > > > > > > Don't be surprised.
> > > > > > >
> > > > > > > oki - new output =)
> > > > > > >
> > > > > > >
> > > > > > > [16306.365597] snd: bad kfree (called from ffffffffa001b08f)
> > > > > > > [16306.365604] Pid: 26533, comm: alsamixer Tainted: P W
> > > > > > > 2.6.30.1 #2 [16306.365610] Call Trace:
> > > > > > > [16306.365632] [<ffffffffa001b08f>] ? snd_ctl_ioctl+0x2e5/0x71e
> > > > > > > [snd] [16306.365645] [<ffffffff802b8bf9>] ?
> > > > > > > __inc_zone_state+0x20/0x9b [16306.365655] [<ffffffff802cfffc>] ?
> > > > > > > alloc_page_vma+0x197/0x1e1 [16306.365666] [<ffffffff802afb63>] ?
> > > > > > > __lru_cache_add+0x93/0xdd [16306.365676] [<ffffffff802ea651>] ?
> > > > > > > vfs_ioctl+0x35/0x97
> > > > > > > [16306.365686] [<ffffffff802eaae5>] ? do_vfs_ioctl+0x432/0x482
> > > > > > > [16306.365696] [<ffffffff806336bf>] ?
> > > > > > > _spin_lock_irqsave+0x28/0x5c [16306.365705] [<ffffffff80247e22>]
> > > > > > > ? do_page_fault+0x272/0x29e [16306.365715] [<ffffffff802eab82>]
> > > > > > > ? sys_ioctl+0x4d/0x81 [16306.365726] [<ffffffff8022af2b>] ?
> > > > > > > system_call_fastpath+0x16/0x1b
> > > > > >
> > > > > > Try the very latest alsa-driver-unstable snapshot.
> > > > > > This bug should have been fixed, also possibly with CS420x parser
> > > > > > bug, too.
> > > > > >
> > > > > >
> > > > > > Takashi
> > > > >
> > > > > so dmesg knows the following:
> > > > >
> > > > > [18042.848549] HDA Intel 0000:00:08.0: PCI INT A -> Link[LAZA] -> GSI
> > > > > 23 (level, low) -> IRQ 23 [18042.848623] HDA Intel 0000:00:08.0:
> > > > > setting latency timer to 64 [18043.007568] ALSA
> > > > > /home/nutz/tmp/alsa/alsa-driver-unstable/pci/hda/../../alsa-kernel/pc
> > > > >i/hd a/hda_codec.c:3851: autoconfig: line_outs=1 (0xa/0x0/0x0/0x0/0x0)
> > > > > [18043.007584] ALSA
> > > > > /home/nutz/tmp/alsa/alsa-driver-unstable/pci/hda/../../alsa-kernel/pc
> > > > >i/hd a/hda_codec.c:3855: speaker_outs=1 (0xb/0x0/0x0/0x0/0x0)
> > > > > [18043.007596] ALSA
> > > > > /home/nutz/tmp/alsa/alsa-driver-unstable/pci/hda/../../alsa-kernel/pc
> > > > >i/hd a/hda_codec.c:3859: hp_outs=1 (0x9/0x0/0x0/0x0/0x0)
> > > > > [18043.007608] ALSA
> > > > > /home/nutz/tmp/alsa/alsa-driver-unstable/pci/hda/../../alsa-kernel/pc
> > > > >i/hd a/hda_codec.c:3860: mono: mono_out=0x0 [18043.007618] ALSA
> > > > > /home/nutz/tmp/alsa/alsa-driver-unstable/pci/hda/../../alsa-kernel/pc
> > > > >i/hd a/hda_codec.c:3863: dig-out=0x10/0x15 [18043.007628] ALSA
> > > > > /home/nutz/tmp/alsa/alsa-driver-unstable/pci/hda/../../alsa-kernel/pc
> > > > >i/hd a/hda_codec.c:3871: inputs: mic=0xd, fmic=0x0, line=0xc,
> > > > > fline=0x0, cd=0x0, aux=0x0
> > > > > [18043.007642] ALSA
> > > > > /home/nutz/tmp/alsa/alsa-driver-unstable/pci/hda/../../alsa-kernel/pc
> > > > >i/hd a/hda_codec.c:3873: dig-in=0x12 [18043.121187] ALSA
> > > > > /home/nutz/tmp/alsa/alsa-driver-unstable/acore/control.c:337: control
> > > > > 2:0:0:IEC958 Capture Switch:0 is already present [18043.121204]
> > > > > hda_codec: cannot build controlsfor #0 (error -16)
> > > > >
> > > > >
> > > > > and i don't have a mixer anymore ;)
> > > >
> > > > It's because your chip was uninitialized by BIOS or whatever, the
> > > > another state you got sometimes.
> > > >
> > > > Now fixed in the driver to force to initialize pins.
> > > > Try the latest tarball again.
> > > >
> > > >
> > > > Takashi
> > >
> > > TAKASHIIIIIIIIIIIII =)
> > > !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> > >
> > > digital out is working... i tried the new snapshot (eventhough, as you
> > > said my subsystem is now again uninitialized) and i got back the
> > > alsamixer- capabilities;
> > >
> > > i ran mplayer test.wav and started playing around with the
> > > mixer-controls.
> > >
> > > when i reached IEC958 and turned it on, my out-jack began to glow red =)
> > > so that works. i rushed over to my dorm-partners speakersystem and
> > > plugged it in - voila that actually works! (i tried a DTS video with
> > > mplayer -vc hwdts )
> > >
> > > that is SO cool =)
> > >
> > > however as you might've figured out, analog out is not working, yet ;(
> > > i tried the built-in speakers as well as the headphones (and of course
> > > all the
> >
> > Hm, so you don't get any output although no errors with aplay?
> >
> > Please give alsa-info.sh output with the latest driver to be sure.
> >
> >
> > Takashi
>
> and here is the alsa-info with the "correct" subsystem id.
>
> i also was able to get the wrong subsystem id again: i did
> /etc/init.d/alsasound stop && modprobe snd-hda-intel - that changed it.
> (i'll have a look into init.d/alsasound to see if there are any clues)
Interesting. So, resetting the controller alone can change the
SSID. It doesn't happen on other systems.
Could you try to apply the patch below on alsa-kernel directory with
-p2? This will disable the additional COEF setups, which I blindly
copied from older cs4207 patch.
thanks,
Takashi
---
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
index b1fd183..fda83b2 100644
--- a/sound/pci/hda/patch_cirrus.c
+++ b/sound/pci/hda/patch_cirrus.c
@@ -933,7 +933,7 @@ static void init_input(struct hda_codec *codec)
change_cur_input(codec, spec->cur_input, 1);
if (spec->mic_detect)
cs_automic(codec);
-
+#if 0
coef = 0x000a; /* ADC1/2 - Digital and Analog Soft Ramp */
if (is_active_pin(codec, CS_DMIC2_PIN_NID))
coef |= 0x0500; /* DMIC2 enable 2 channels, disable GPIO1 */
@@ -943,6 +943,7 @@ static void init_input(struct hda_codec *codec)
* IDX_SPDIF_CTL.
*/
cs_vendor_coef_set(codec, IDX_ADC_CFG, coef);
+#endif
}
static struct hda_verb cs_coef_init_verbs[] = {
@@ -980,10 +981,10 @@ static int cs_init(struct hda_codec *codec)
{
struct cs_spec *spec = codec->spec;
- snd_hda_sequence_write(codec, cs_coef_init_verbs);
+ /*snd_hda_sequence_write(codec, cs_coef_init_verbs);*/
init_output(codec);
init_input(codec);
- init_digital(codec);
+ /*init_digital(codec);*/
return 0;
}
More information about the Alsa-devel
mailing list