[alsa-devel] [PATCH 10/11] ASoC: codecs: Add AB8500 codec-driver

Ola Lilja ola.o.lilja at stericsson.com
Wed May 9 11:09:20 CEST 2012

On 05/09/2012 10:33 AM, Mark Brown wrote:

> On Wed, May 09, 2012 at 09:48:35AM +0200, Ola Lilja wrote:
>> On 05/08/2012 08:27 PM, Mark Brown wrote:
>> > On Tue, May 08, 2012 at 03:57:30PM +0200, Ola Lilja wrote:
>> > So, you were adding this just for debug...  Let's not do that.  There's
>> > already diagnostic infrastructure in the regulator API and at the DAPM
>> > level too.  If we need this sort of stuff it's probably not device
>> > specific so we should probably improve the core if it's not easy enough
>> > to figure out what's going on already.
>> Well, I want this in our driver and you told me to use the regulator-widget, so
>> now the only way for us to have this information, which I find very useful when
>> we debug, is to let the core have some means to provide the information to our
>> driver. I don't want to be forced to enable debug prints in a lot of other
>> places than our driver. That just makes it harder.
> I'm sorry, but this is crazy.  Anyone might want to inspect the state of
> any DAPM widget - it's really not sensible for us to go through and open
> code this in every single driver and widget which might want them.  Just
> adding random ad-hoc logging all over the place isn't helpful.  As I've
> said quite a few times now you really need to work with the frameworks
> rather than against or around them, pretty much all of the issues I'm
> finding come into this category.  Nothing about these widgets seems like
> it is different to any other, and your driver isn't terribly unusual in
> this area.


> There's *lots* of debugging infrastructure in there as standard, there's
> debugfs, there's tracepoints (which are specificially designed for easy
> post processing) and yes there's debug prints too.  Given how basic the
> stuff you're adding here is it doesn't really seem credible that it's
> not possible to do it with the existing infrastructure, and you've
> certainly not discussed any problems.

OK... so I have to live with this then. I'll remove the _status-functions...

>> >> +	{"Mic 1a or 1b Select", "Mic 1a", "MIC1A V-AMICx Enable"},
>> >> +	{"Mic 1a or 1b Select", "Mic 1b", "MIC1B V-AMICx Enable"},
>> > This also looks very odd...  is this the micbias stuff again?
>> I'll rename them to "MIC1A Enable" and "MIC1B Enable". They are connected
>> connected to the correct regulator-supply from the machine-driver.
> So these are the micbiases...  all my previous comments still apply.

No, the actual widgets are controlling enable-bits. Before I had different
enable-widgets depending on the micbias, but now this is moved to be controlled
with the platform-data and these can be named as enable-bits again (without the
micbias in the name).

>> > Same as last time this should be configured by the machine driver.
>> I also told you last time that I have a hard time doing this from the
>> machine-driver. The switch between these clocks comes from a component in
>> user-space getting its information from a DSP running its own life. If we just
>> run the ASoC-driver normally without Android this will never change, but our
>> whole system-design form Android needs to be able to do this clock-switch in the
>> way we do it. I have no means of getting this information inside the linux-kernel.
> As I said last time if you want to do this manually from userspace do it
> from the machine driver.  The CODEC driver should *not* be doing this
> stuff, especially not in a way which is not joined up with the rest of

So I can put this in the machine-driver and then it is OK?

> the kernel.  As I said last time:
> | Normally the clocking control is under the control of the machine driver
> | and if the machine driver wants to offer any options to userspace it'd
> | provide its own control - usually there's way more stuff going on here
> | than just selecting a source and much more coordination needed with the
> | drivers involved.
> Please don't just ignore review and continue to submit the same stuff
> unless there's been clear discussion that what's happening is actually
> OK.

I wasn't aware of that the comment with | above was a show-stopper since I
explained before why we need to do it. I wasn't either aware that you meant that
I should just move it to the machine-driver. Furthermore, I didn't want to spam
to much comments each time.

>> >> +	SOC_DOUBLE_R_TLV("Mic Master Gain",
>> >> +		AB8500_ADDIGGAIN3, AB8500_ADDIGGAIN4,
>> >> +		0, AB8500_ADDIGGAINX_ADXGAIN_MAX, 1, adx_dig_gain_tlv),
>> > All volume controls should be "...Volume".
>> So what you are saying is that "Gain" is not an accepted term for a volume?!
> The control names have meaning to userspace and are parsed by it to ffer
> UI to users.  The keyword for a volume control is Volume.  See
> ControlNames.txt in the kernel.
>> >> +	SOC_ENUM("Digital Interface 0 Bit-clock Switch", soc_enum_fsbitclk0),
>> >> +	SOC_ENUM("Digital Interface 1 Bit-clock Switch", soc_enum_fsbitclk1),
>> > Hrm?
>> In our current Android-design this is also needed to be controlled for the same
>> reasons as the switching of clocks.
> And *exactly* the same concerns apply - if you need to do this do 

Same here then... I'll move it to the machine-driver until we have a more
acceptable way of doing this.

>> > This is fairly impenetrable and would usually be done in hte machine
>> > driver.  Machines might not use the chip biases for some or all of the
>> > mics but it looks like this code assumes they do.
>> OK, so it will be fine if I just move the code to the machine-driver?
> Should be, yes.
>> >> +int ab8500_audio_setup_if1(struct snd_soc_codec *codec,
>> >> +			unsigned int fmt,
>> >> +			unsigned int wl,
>> >> +			unsigned int delay)
>> > Why is this not static?
>> Because it is called from the machine-driver.
> Why?  No other driver does this...

This is setting up an I2S-interface connected directly to another chip for
FM-radio. It is not triggered by opening an ALSA-device. How/where do you want
me to do this?

More information about the Alsa-devel mailing list