Status of audio on 3.3 kernel for ARM
Mark Brown
broonie at sirena.org.uk
Tue May 8 05:27:35 EDT 2012
On Mon, May 07, 2012 at 09:07:37AM -0600, Daniel Drake wrote:
> When playing sound normally, it appears not to find a meaningful route
> and leaves all of the widgets powered down. This can be seen with cat
> /sys/devices/platform/soc-audio/*5631/dapm_widget (and you can compare
> to 3.0 where various things do get powered up during playback).
Yes, this is the intended behaviour if nothing is connected.
> If you make some tweaks to the mixer controls (even ones that should
> have no net effect) you can sometimes poke DAPM into looking for a
> route again and finding one and powering up the right components, e.g.
> http://mailman.alsa-project.org/pipermail/alsa-devel/2012-May/051686.htm
That link is broken....
> To solve this, I first tried to understand and debug the DAPM logic.
> This is tedious and time consuming, with so many widgets and routes in
> our codec driver there is a lot of recursion and after a few hours I
> still couldn't make any sense of it.
It's just a straightforward DAG of connections from input to output -
nothing too magic. The routing tables in the drivers are like this:
{ "Destination", "Control", "Source" },
where Destination and Source are widgets and the optional Control is
either a mixer switch or mux value associated with Destination. If
you've not found it the debugfs stuff in debugfs/asoc is usually very
helpful in inspecting what DAPM thinks is going on.
> I then tried to simplify our driver, removing practically all routes
> and widgets at the DAPM level and just pre-configuring registers to
> have the right components for audio playback through the speakers
> working. No luck there either - couldn't get any audible output.
> I think this is the right approach though - first remove all the
> dynamic stuff just to have playback working, then re-add the widgets
> and routes one-by-one (based on the codec datasheet which has a nice
> logic diagram) with repeated testing to make sure nothing gets broken.
The fact that you're struggling with even a fixed register write
sequence suggests you might just be missing something like a mute...
> This seems like a hard issue.
It really shouldn't be, it normally isn't. It's probably worth trying
to upstream your drivers -
More information about the Devel
mailing list