mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 00:00:00 -04:00
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:
parent
ea2b640cb6
commit
bec5057733
1 changed files with 48 additions and 14 deletions
|
|
@ -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, &_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"},
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue