ASoC: cs35l36: Add a switch that enables BOOST and CLASS H

Add a switch that enables boost and class h.  By default they
are off.

Change-Id: I68efd2ac2fa0c6837415287a97d720d8776a9acd
Signed-off-by: Paul Handrigan <Paul.Handrigan@cirrus.com>
Signed-off-by: Ravi Vembu <raviv@motorola.com>
Mot-CRs-fixed: (CR)
Reviewed-on: https://gerrit.mot.com/1140346
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Submit-Approved: Jira Key
This commit is contained in:
Paul Handrigan 2018-02-20 13:46:18 -06:00 • committed by Ravikumar Vembu
commit bec5057733

View file

@ -202,12 +202,6 @@ static int cs35l36_main_amp_event(struct snd_soc_dapm_widget *w,
switch (event) {
case SND_SOC_DAPM_POST_PMU:
if (!cs35l36->pdata.extern_boost)
regmap_update_bits(cs35l36->regmap, CS35L36_PWR_CTRL2,
CS35L36_BST_EN_MASK,
CS35L36_BST_EN <<
CS35L36_BST_EN_SHIFT);
regmap_update_bits(cs35l36->regmap, CS35L36_PWR_CTRL1,
CS35L36_GLOBAL_EN_MASK,
1 << CS35L36_GLOBAL_EN_SHIFT);
@ -224,12 +218,6 @@ static int cs35l36_main_amp_event(struct snd_soc_dapm_widget *w,
0 << CS35L36_AMP_MUTE_SHIFT);
break;
case SND_SOC_DAPM_POST_PMD:
if (!cs35l36->pdata.extern_boost)
regmap_update_bits(cs35l36->regmap, CS35L36_PWR_CTRL2,
CS35L36_BST_EN_MASK,
CS35L36_BST_DIS_VP <<
CS35L36_BST_EN_SHIFT);
regmap_update_bits(cs35l36->regmap, CS35L36_ASP_RX1_SEL,
CS35L36_PCM_RX_SEL_MASK,
CS35L36_PCM_RX_SEL_ZERO);
@ -248,6 +236,33 @@ static int cs35l36_main_amp_event(struct snd_soc_dapm_widget *w,
return ret;
}
static int cs35l36_boost_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *kcontrol, int event)
{
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
struct cs35l36_private *cs35l36 = snd_soc_codec_get_drvdata(codec);
switch (event) {
case SND_SOC_DAPM_POST_PMU:
if (!cs35l36->pdata.extern_boost)
regmap_update_bits(cs35l36->regmap, CS35L36_PWR_CTRL2,
CS35L36_BST_EN_MASK,
CS35L36_BST_EN <<
CS35L36_BST_EN_SHIFT);
break;
case SND_SOC_DAPM_POST_PMD:
if (!cs35l36->pdata.extern_boost)
regmap_update_bits(cs35l36->regmap, CS35L36_PWR_CTRL2,
CS35L36_BST_EN_MASK,
CS35L36_BST_DIS_VP <<
CS35L36_BST_EN_SHIFT);
break;
default:
dev_dbg(codec->dev, "Invalid event = 0x%x\n", event);
}
return 0;
}
static const struct snd_kcontrol_new amp_enable_ctrl =
SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0);
static const struct snd_kcontrol_new tx1_enable_ctrl =
@ -326,6 +341,19 @@ static SOC_VALUE_ENUM_SINGLE_DECL(asp_tx6_src_enum,
static const struct snd_kcontrol_new asp_tx6_src =
SOC_DAPM_ENUM("ASPTX6SRC", asp_tx6_src_enum);
static const char * const cs35l36_boost_text[] = {
"On",
"Off",
};
static SOC_ENUM_SINGLE_DECL(boost_enum, SND_SOC_NOPM, 0,
cs35l36_boost_text);
static const struct snd_kcontrol_new cs35l36_boost_mux[] = {
SOC_DAPM_ENUM("Boost Enable", boost_enum),
};
static const struct snd_soc_dapm_widget cs35l36_dapm_widgets[] = {
SND_SOC_DAPM_AIF_IN("SDIN", NULL, 0, SND_SOC_NOPM, 0, 0),
@ -338,6 +366,11 @@ static const struct snd_soc_dapm_widget cs35l36_dapm_widgets[] = {
SND_SOC_DAPM_OUTPUT("SPK"),
SND_SOC_DAPM_SWITCH("AMP Enable", SND_SOC_NOPM, 0, 1, &amp_enable_ctrl),
SND_SOC_DAPM_MIXER("CLASS H", CS35L36_PWR_CTRL3, 4, 0, NULL, 0),
SND_SOC_DAPM_MUX_E("BOOST Mux", SND_SOC_NOPM, 0, 0, cs35l36_boost_mux,
cs35l36_boost_event, SND_SOC_DAPM_POST_PMD |
SND_SOC_DAPM_POST_PMU),
SND_SOC_DAPM_AIF_OUT("ASPTX1", NULL, 0, CS35L36_ASP_RX_TX_EN, 0, 0),
SND_SOC_DAPM_AIF_OUT("ASPTX2", NULL, 1, CS35L36_ASP_RX_TX_EN, 1, 0),
SND_SOC_DAPM_AIF_OUT("ASPTX3", NULL, 2, CS35L36_ASP_RX_TX_EN, 2, 0),
@ -363,7 +396,6 @@ static const struct snd_soc_dapm_widget cs35l36_dapm_widgets[] = {
SND_SOC_DAPM_ADC("IMON ADC", NULL, CS35L36_PWR_CTRL2, 13, 0),
SND_SOC_DAPM_ADC("VPMON ADC", NULL, CS35L36_PWR_CTRL2, 8, 0),
SND_SOC_DAPM_ADC("VBSTMON ADC", NULL, CS35L36_PWR_CTRL2, 9, 0),
SND_SOC_DAPM_ADC("CLASS H", NULL, CS35L36_PWR_CTRL3, 4, 0),
SND_SOC_DAPM_INPUT("VP"),
SND_SOC_DAPM_INPUT("VBST"),
@ -430,7 +462,9 @@ static const struct snd_soc_dapm_route cs35l36_audio_map[] = {
{"AMP Enable", "Switch", "AMP Playback"},
{"SDIN", NULL, "AMP Enable"},
{"CLASS H", NULL, "SDIN"},
{"BOOST Mux", "On", "SDIN"},
{"CLASS H", NULL, "BOOST Mux"},
{"Main AMP", NULL, "SDIN"},
{"Main AMP", NULL, "CLASS H"},
{"SPK", NULL, "Main AMP"},