[alsa-devel] Regression with .set_bias_level in pcm512x?

Peter Rosin peda at axentia.se
Wed Jan 14 11:04:42 CET 2015


Lars-Peter Clausen wrote:
> On 01/14/2015 10:31 AM, Peter Rosin wrote:
> > Hi!
> >
> > Lars-Peter Clausen wrote:
> >> On 01/13/2015 11:49 PM, Peter Rosin wrote:
> >>> Hi!
> >>>
> >>> I'm working on adding support for DAIFMT_CBM_CFM and
> >> DAIFMT_CBM_CFS to
> >>> pcm512x, and it works nicely in the 3.10 kernel + Atmel-patches were
> >>> I have developed the code. Now I'm trying to forward-port it and
> >>> test it on
> >>> 3.18 + other-Atmel-patches in preparation for submission. However,
> >>> there seems to be a regression in that the (pre-existing)
> >>> pcm512x_set_bias_level callback is never called in the 3.18 version.
> >>>
> >>> I see that there has been some core work on set_bias_level, and
> >>> suspect it has something to do with dapm and components, but I think
> >>> someone else will find the problem much quicker than I am able to.
> >>>
> >>> I have feebly tried to revert
> >>> 0bd2ac3dae74ee25c5ea171cb572731c7a89c248
> >>> and 68f831c2724ab72c0088471b2ed1dc99e81948ef, but that didn't help.
> >>> That also seems a bit backwards. So, what needs to be done in the
> >>> pcm512x driver to have set_bias_level called?
> >>
> >> It's unlikely that these commits have anything to do with it.
> >
> > Agreed, I just wanted to show that I at least did try some things...
> >
> >> I think it is more likely that the DAPM state (for whatever reason)
> >> never actually changes. Check the state of the DAPM context and all
> >> the widgets in /sys/kernel/debug/asoc/your_card/... and compare their
> >> state when the system is idle to when it should not be idle.
> >
> > There is indeed something strange going on with dapm. When things
> > should be active, I have this (for the non-working 3.18 variant):
> >
> > $ cat codec\:pcm512x.0-004c/dapm/Playback \
> > 	codec\:pcm512x.0-004c/dapm/DACL \
> > 	codec\:pcm512x.0-004c/dapm/OUTL \
> > 	dapm/DAC1 \
> > 	dapm/MIX1 \
> > 	dapm/MUX1 \
> > 	dapm/OUT1 \
> > 	dapm/AIFINL
> > Playback: Off  in 1 out 0
> >   stream Playback active
> >   out "static" "DACR"
> >   out "static" "DACL"
> > DACL: Off  in 1 out 0
> >   in  "static" "Playback"
> >   out "static" "OUTL"
> > OUTL: Off  in 1 out 0
> >   in  "static" "DACL"
> >   out "static" "DAC1"
> > DAC1: Off  in 1 out 0
> >   in  "static" "OUTL"
> >   out "static" "MIX1"
> > MIX1: Off  in 1 out 0
> >   in  "static" "DAC1"
> >   out "Mixer" "MUX1"
> > MUX1: Off  in 1 out 0
> >   in  "Mixer" "MIX1"
> >   out "static" "OUT1"
> > OUT1: Off  in 1 out 0
> >   in  "static" "MUX1"
> > AIFINL: Off  in 0 out 0
> >   stream Playback inactive
> >
> > When things are inactive, all "in 1" change to "in 0", and the top "stream Playback"
> > change to "inactive".
> >
> > bias_level of both the card and the codec are "Off", regardless.
> >
> > For reference, I have attached my current card driver, which is given this:
> >
> > 	sound {
> > 		compatible = "axentia,asoc-linea-tse850";
> >
> > 		axentia,model = "TSE850 @ Linea";
> > 		axentia,audio-routing =
> > 			"DAC1", "OUTL",
> > 			"DAC2", "OUTR";
> >
> > 		axentia,ssc-controller = <&ssc0>;
> > 		axentia,audio-codec = <&pcm5142>;
> >
> > 		gpios = <&pioA 9 GPIO_ACTIVE_LOW>,
> > 			<&pioA 8 GPIO_ACTIVE_LOW>,
> > 			<&pioA 10 GPIO_ACTIVE_LOW>,
> > 			<&pioA 11 GPIO_ACTIVE_LOW>;
> >
> > 		status = "okay";
> > 	};
> >
> > I suspect that it has something to do with the snd_soc_dapm_add_routes
> > call in linea_pcm512x_init? (I "stole" that piece from
> > omap-abe-twl6040)
> 
> There does not seem to be a audio sink in your DAPM graph. You have a
> source which is the Playback stream, hence a one the "1" for "in". But a
> widget will only power up if it is on a active path from a source to a sink. Try
> to add a speaker, lineout or similar widget to the end of your graph.

Indeed. I changed "OUT1", "OUT2", "IN1" and "IN2" to be
SND_SOC_DAPM_LINEs instead and pcm512x_set_bias_level is now called.
Thanks!  (and it works too!)

Cheers,
Peter



More information about the Alsa-devel mailing list