[alsa-devel] How to implement capture_switch control?

Adam Jiang jiang.adam at gmail.com
Thu Jun 23 03:52:14 CEST 2011


2011/6/22 Mark Brown <broonie at opensource.wolfsonmicro.com>:
> On Wed, Jun 22, 2011 at 04:56:26PM +0900, Adam Jiang wrote:
>> 2011/6/21 Mark Brown <broonie at opensource.wolfsonmicro.com>:
>> > On Mon, Jun 20, 2011 at 04:15:38PM +0900, Adam Jiang wrote:
>
>> > If the hardware does not physically support mute then this should be
>> > emulated in software. ?In the case of the WM8903 the device does not
>> > have a specific capture mute control, though extremely low gains are
>> > supported for the Capture Volume control which function as a mute so
>> > you could also set minimum Capture Volume.
>
>> I got the idea about software emulation for mute. Would you please
>> point me to an example about device/driver where hardware capture
>> switch is supported?
>
> grep "Capture Switch" sound/soc/codecs/*.c
>

I got wm8904 as an example. In the driver of wm8904, there is a
control defined as

SOC_DOUBLE_R("Capture Switch", WM8904_ANALOGUE_LEFT_INPUT_0,
            WM8904_ANALOGUE_RIGHT_INPUT_0, 7, 1, 0),

And, there is also its peer in wm8903 defined as

SOC_SINGLE("Left Input PGA Switch", WM8903_ANALOGUE_LEFT_INPUT_0,
          7, 1, 1),

I checked their datasheet and I found there is no difference between
the registers of ANALOGUE_LEFT_INPUT_0. Both of them have one bit for
mute/unmute analog input path. Comparing SOC_SINGLE and SOC_DOUBLE
macro, one snd_soc_control structure is missing in former. What is
exactly the difference between the two definitions. Is there any docs
to describe how could I use these macros in soc.h?


More information about the Alsa-devel mailing list