[alsa-devel] [PATCH] ALSA: hda_intel: disable corb rirb when single_cmd active
tiwai at suse.de
Tue Nov 10 08:33:10 CET 2009
At Mon, 09 Nov 2009 12:36:31 -0700,
Troy Kisky wrote:
> Takashi Iwai wrote:
> > Thanks for a quick test! I'll merge it soon.
> >> Thanks for spending your time on something you'd rather not.
> > Well, I'm willing to fix any bugs, of course ;) So I really
> > appreciated your report and patch.
> > But, more important bug still remains -- why single_cmd mode is
> > activated. Let's track it down.
> I have a little more information on that. The RIRB engine is fine
> but the CORB engine is stopping at seemingly random times. Usually
> CORB has about 7 commands queued when it switches to single_cmd mode.
> After the engine dies, even a rmmod/insmod sequence won't revive it.
> It seems to require a power down/up. I have noticed a couple of things
> that I thought might be related, but testing didn't show much difference.
> 1. The Poulsbo manual says that CORB READ Pointer Reset must be cleared
> back to 0 and read back as 0 to verify that the clear completed correctly.
At which timing?
> 2. azx_corb_send_cmd doesn't compare CORBWP with CORBRP to see if adding
> an entry will result in an empty queue.
It's because azx_corb_send_cmd is asynchronous. It doesn't wait.
That's the purpose of CORB being a ring buffer...
> Do you have a suggestion on a more thorough reset? I hate having to reboot
> all the time.
Try to set codec->bus->sync_write = 1 somewhere in the initialization.
This will make the driver to wait and synchronize for each verb
More information about the Alsa-devel