diff mbox series

ASoC: cs4265: Add a MIC pre. switch

Message ID 20180907032729.26532-1-flatmax@flatmax.org (mailing list archive)
State New, archived
Headers show
Series ASoC: cs4265: Add a MIC pre. switch | expand

Commit Message

Matt Flax Sept. 7, 2018, 3:27 a.m. UTC
This patch adds a MIC preamp enable switch as a SOC_SINGLE.

Signed-off-by: Matt Flax <flatmax@flatmax.org>
---
 sound/soc/codecs/cs4265.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Charles Keepax Sept. 7, 2018, 8:26 a.m. UTC | #1
On Fri, Sep 07, 2018 at 01:27:29PM +1000, Matt Flax wrote:
> This patch adds a MIC preamp enable switch as a SOC_SINGLE.
> 
> Signed-off-by: Matt Flax <flatmax@flatmax.org>
> ---
>  sound/soc/codecs/cs4265.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/sound/soc/codecs/cs4265.c b/sound/soc/codecs/cs4265.c
> index d9eebf6a..03476f93 100644
> --- a/sound/soc/codecs/cs4265.c
> +++ b/sound/soc/codecs/cs4265.c
> @@ -161,6 +161,7 @@ static const struct snd_kcontrol_new cs4265_snd_controls[] = {
>  	SOC_SINGLE("MMTLR Data Switch", CS4265_SPDIF_CTL2, 0, 1, 0),
>  	SOC_ENUM("Mono Channel Select", spdif_mono_select_enum),
>  	SND_SOC_BYTES("C Data Buffer", CS4265_C_DATA_BUFF, 24),
> +	SOC_SINGLE("MIC Preamp", CS4265_PWRCTL, 3, 1, 1),
>  };

Is this the correct way to control this bit? There is already
a SND_SOC_DAPM_PGA widget called "Pre-amp MIC" that controls
the bit, it looks like this widget is not connected to the
rest of the DAPM graph. Should we just be hooking that widget
up instead?  The datasheet isn't abundantly clear but it looks
like the bit needs to be set whenever the mic is in use:

"The microphone preamplifier block will enter a low-power state
whenever this bit is set."

Which would really make DAPM a better fit, unless there are valid
use-cases for using the mic with the preamp powered down?

Thanks,
Charles
Matt Flax Sept. 7, 2018, 10:18 a.m. UTC | #2
On 07/09/18 18:26, Charles Keepax wrote:
> On Fri, Sep 07, 2018 at 01:27:29PM +1000, Matt Flax wrote:
>> This patch adds a MIC preamp enable switch as a SOC_SINGLE.
>>
>> Signed-off-by: Matt Flax <flatmax@flatmax.org>
>> ---
>>   sound/soc/codecs/cs4265.c | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/sound/soc/codecs/cs4265.c b/sound/soc/codecs/cs4265.c
>> index d9eebf6a..03476f93 100644
>> --- a/sound/soc/codecs/cs4265.c
>> +++ b/sound/soc/codecs/cs4265.c
>> @@ -161,6 +161,7 @@ static const struct snd_kcontrol_new cs4265_snd_controls[] = {
>>   	SOC_SINGLE("MMTLR Data Switch", CS4265_SPDIF_CTL2, 0, 1, 0),
>>   	SOC_ENUM("Mono Channel Select", spdif_mono_select_enum),
>>   	SND_SOC_BYTES("C Data Buffer", CS4265_C_DATA_BUFF, 24),
>> +	SOC_SINGLE("MIC Preamp", CS4265_PWRCTL, 3, 1, 1),
>>   };
> Is this the correct way to control this bit? There is already
> a SND_SOC_DAPM_PGA widget called "Pre-amp MIC" that controls
> the bit, it looks like this widget is not connected to the
> rest of the DAPM graph. Should we just be hooking that widget
> up instead?  The datasheet isn't abundantly clear but it looks
> like the bit needs to be set whenever the mic is in use:
>
> "The microphone preamplifier block will enter a low-power state
> whenever this bit is set."
>
> Which would really make DAPM a better fit, unless there are valid
> use-cases for using the mic with the preamp powered down?
>
>

Agreed, when you switch to the MIC rather then LINEIN it should be 
turned on.

This is the DAPM_MUX :
https://github.com/torvalds/linux/blob/master/sound/soc/codecs/cs4265.c#L178
This is the ENUM_SINGLE :
https://github.com/torvalds/linux/blob/master/sound/soc/codecs/cs4265.c#L98

What is the best way to do this ?

Matt
Charles Keepax Sept. 7, 2018, 10:55 a.m. UTC | #3
On Fri, Sep 07, 2018 at 08:18:05PM +1000, Matt Flax wrote:
> On 07/09/18 18:26, Charles Keepax wrote:
> >On Fri, Sep 07, 2018 at 01:27:29PM +1000, Matt Flax wrote:
> >Which would really make DAPM a better fit, unless there are valid
> >use-cases for using the mic with the preamp powered down?
> 
> Agreed, when you switch to the MIC rather then LINEIN it should be
> turned on.
> 
> This is the DAPM_MUX :
> https://github.com/torvalds/linux/blob/master/sound/soc/codecs/cs4265.c#L178
> This is the ENUM_SINGLE :
> https://github.com/torvalds/linux/blob/master/sound/soc/codecs/cs4265.c#L98
> 
> What is the best way to do this ?

Apologies not sure I entirely follow, don't you just want to
update the routes such that the existing "Pre-amp MIC" widget
is between the MICL,R and the ADC Mux. Something like:

{ "Pre-amp MIC", NULL, "MICL" },
{ "Pre-amp MIC", NULL, "MICR" },
{ "ADC Mux", "MIC", "Pre-amp MIC" },

Thanks,
Charles
Matt Flax Sept. 7, 2018, 11:06 a.m. UTC | #4
On 07/09/18 20:55, Charles Keepax wrote:
> On Fri, Sep 07, 2018 at 08:18:05PM +1000, Matt Flax wrote:
>> On 07/09/18 18:26, Charles Keepax wrote:
>>> On Fri, Sep 07, 2018 at 01:27:29PM +1000, Matt Flax wrote:
>>> Which would really make DAPM a better fit, unless there are valid
>>> use-cases for using the mic with the preamp powered down?
>> Agreed, when you switch to the MIC rather then LINEIN it should be
>> turned on.
>>
>> This is the DAPM_MUX :
>> https://github.com/torvalds/linux/blob/master/sound/soc/codecs/cs4265.c#L178
>> This is the ENUM_SINGLE :
>> https://github.com/torvalds/linux/blob/master/sound/soc/codecs/cs4265.c#L98
>>
>> What is the best way to do this ?
> Apologies not sure I entirely follow, don't you just want to
> update the routes such that the existing "Pre-amp MIC" widget
> is between the MICL,R and the ADC Mux. Something like:
>
> { "Pre-amp MIC", NULL, "MICL" },
> { "Pre-amp MIC", NULL, "MICR" },
> { "ADC Mux", "MIC", "Pre-amp MIC" },
>
>

ok - will do.

Matt
diff mbox series

Patch

diff --git a/sound/soc/codecs/cs4265.c b/sound/soc/codecs/cs4265.c
index d9eebf6a..03476f93 100644
--- a/sound/soc/codecs/cs4265.c
+++ b/sound/soc/codecs/cs4265.c
@@ -161,6 +161,7 @@  static const struct snd_kcontrol_new cs4265_snd_controls[] = {
 	SOC_SINGLE("MMTLR Data Switch", CS4265_SPDIF_CTL2, 0, 1, 0),
 	SOC_ENUM("Mono Channel Select", spdif_mono_select_enum),
 	SND_SOC_BYTES("C Data Buffer", CS4265_C_DATA_BUFF, 24),
+	SOC_SINGLE("MIC Preamp", CS4265_PWRCTL, 3, 1, 1),
 };
 
 static const struct snd_soc_dapm_widget cs4265_dapm_widgets[] = {