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.
- 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?
- 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 response.
thanks,
Takashi