lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Wed, 17 Jun 2015 16:58:30 +0800
From:	Zidan Wang <zidan.wang@...escale.com>
To:	Charles Keepax <ckeepax@...nsource.wolfsonmicro.com>
CC:	<broonie@...nel.org>, <lgirdwood@...il.com>, <perex@...ex.cz>,
	<tiwai@...e.de>, <lars@...afoo.de>,
	<patches@...nsource.wolfsonmicro.com>,
	<alsa-devel@...a-project.org>, <linux-kernel@...r.kernel.org>
Subject: Re: [alsa-devel][PATCH v2] ASoC: wm8960: add dapm kcontrols to
 select left/right ADC input source

On Tue, Jun 16, 2015 at 01:18:39PM +0100, Charles Keepax wrote:
> On Tue, Jun 16, 2015 at 02:23:19PM +0800, Zidan Wang wrote:
> > Add dapm kcontrols to select left/right ADC input source, one to select
> > the left ADC input source and one for the right ADC input source.
> > 
> > In default, the left ADC will select the left input, and the right ADC will
> > select the right input. When the left(right) ADC select the right(left) input,
> > the left(right) input path will be powered down.
> > 
> > Signed-off-by: Zidan Wang <zidan.wang@...escale.com>
> > ---
> >  sound/soc/codecs/wm8960.c | 24 ++++++++++++++++++++++--
> >  1 file changed, 22 insertions(+), 2 deletions(-)
> > 
> > diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
> > index 023e898..3ea12b7 100644
> > --- a/sound/soc/codecs/wm8960.c
> > +++ b/sound/soc/codecs/wm8960.c
> > @@ -141,6 +141,8 @@ static const char *wm8960_3d_upper_cutoff[] = {"High", "Low"};
> >  static const char *wm8960_3d_lower_cutoff[] = {"Low", "High"};
> >  static const char *wm8960_alcfunc[] = {"Off", "Right", "Left", "Stereo"};
> >  static const char *wm8960_alcmode[] = {"ALC", "Limiter"};
> > +static const char *wm8960_adcl_src_text[] = {"Left", "Right"};
> > +static const char *wm8960_adcr_src_text[] = {"Right", "Left"};
> >  
> >  static const struct soc_enum wm8960_enum[] = {
> >  	SOC_ENUM_SINGLE(WM8960_DACCTL1, 5, 4, wm8960_polarity),
> > @@ -150,6 +152,10 @@ static const struct soc_enum wm8960_enum[] = {
> >  	SOC_ENUM_SINGLE(WM8960_ALC1, 7, 4, wm8960_alcfunc),
> >  	SOC_ENUM_SINGLE(WM8960_ALC3, 8, 2, wm8960_alcmode),
> >  };
> > +static SOC_ENUM_SINGLE_DECL(wm8960_adcl_src_enum,
> > +			    WM8960_ADDCTL1, 3, wm8960_adcl_src_text);
> > +static SOC_ENUM_SINGLE_DECL(wm8960_adcr_src_enum,
> > +			    WM8960_ADDCTL1, 2, wm8960_adcr_src_text);
> >  
> >  static const int deemph_settings[] = { 0, 32000, 44100, 48000 };
> >  
> > @@ -281,6 +287,11 @@ SOC_SINGLE_TLV("Right Output Mixer RINPUT3 Volume",
> >  	       WM8960_ROUTMIX, 4, 7, 1, bypass_tlv),
> >  };
> >  
> > +static const struct snd_kcontrol_new wm8960_adcl_mux =
> > +	SOC_DAPM_ENUM("ADCL Source", wm8960_adcl_src_enum);
> > +static const struct snd_kcontrol_new wm8960_adcr_mux =
> > +	SOC_DAPM_ENUM("ADCR Source", wm8960_adcr_src_enum);
> > +
> >  static const struct snd_kcontrol_new wm8960_lin_boost[] = {
> >  SOC_DAPM_SINGLE("LINPUT2 Switch", WM8960_LINPATH, 6, 1, 0),
> >  SOC_DAPM_SINGLE("LINPUT3 Switch", WM8960_LINPATH, 7, 1, 0),
> > @@ -344,6 +355,9 @@ SND_SOC_DAPM_ADC("Right ADC", "Capture", WM8960_POWER1, 2, 0),
> >  SND_SOC_DAPM_DAC("Left DAC", "Playback", WM8960_POWER2, 8, 0),
> >  SND_SOC_DAPM_DAC("Right DAC", "Playback", WM8960_POWER2, 7, 0),
> >  
> > +SND_SOC_DAPM_MUX("ADCL Source", SND_SOC_NOPM, 0, 0, &wm8960_adcl_mux),
> > +SND_SOC_DAPM_MUX("ADCR Source", SND_SOC_NOPM, 0, 0, &wm8960_adcr_mux),
> > +
> >  SND_SOC_DAPM_MIXER("Left Output Mixer", WM8960_POWER3, 3, 0,
> >  	&wm8960_loutput_mixer[0],
> >  	ARRAY_SIZE(wm8960_loutput_mixer)),
> > @@ -399,8 +413,14 @@ static const struct snd_soc_dapm_route audio_paths[] = {
> >  	{ "Right Input Mixer", NULL, "RINPUT2" },
> >  	{ "Right Input Mixer", NULL, "RINPUT3" },
> >  
> > -	{ "Left ADC", NULL, "Left Input Mixer" },
> > -	{ "Right ADC", NULL, "Right Input Mixer" },
> > +	{ "ADCL Source", "Left", "Left Input Mixer" },
> > +	{ "ADCL Source", "Right", "Right Input Mixer" },
> > +
> > +	{ "ADCR Source", "Left", "Left Input Mixer" },
> > +	{ "ADCR Source", "Right", "Right Input Mixer" },
> > +
> > +	{ "Left ADC", NULL, "ADCL Source" },
> > +	{ "Right ADC", NULL, "ADCR Source" },
> 
> Are you sure this is correct? My reading is that those bits don't
> affect routing at all, they mearly determine how the channel is
> sent out on the AIF.
> 
I have tested on my board, it can works, but it has something wrong.

If set "ADCR Source" to "Left", RINPUT1(RINPUT2 and RINPUT3)->"Right Input Mixer" will
be powered down, but "Right ADC" is still powered up. Do you have some best method to 
set the audio route?

Thanks,
Zidan Wang


> Thanks,
> Charles
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ