From ea2b640cb6323b9f0028e72dfc02decec651041b Mon Sep 17 00:00:00 2001 From: Brian Austin Date: Wed, 27 Sep 2017 14:37:42 -0500 Subject: [PATCH] ASoC: cs35l36: Add boost control for external supply If supplying boost voltage externally you have to put the device in specific setting or damage may occur Add DAPM_POST events to setup the correct up/dn Add DT boolean to specify external or internal boost Change-Id: I449b18601757127d6570d6e5bca1db3f2c7938ae Signed-off-by: Brian Austin Signed-off-by: Ravi Vembu Mot-CRs-fixed: (CR) Reviewed-on: https://gerrit.mot.com/1140358 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Submit-Approved: Jira Key --- include/sound/cs35l36.h | 1 + sound/soc/codecs/cs35l36.c | 12 ++++++++++++ sound/soc/codecs/cs35l36.h | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/include/sound/cs35l36.h b/include/sound/cs35l36.h index b7e5eeb2bab2..1d97eaef7e11 100644 --- a/include/sound/cs35l36.h +++ b/include/sound/cs35l36.h @@ -38,6 +38,7 @@ struct cs35l36_platform_data { int bst_vctl; int bst_vctl_sel; int bst_ipk; + bool extern_boost; int temp_warn_thld; struct irq_cfg irq_config; }; diff --git a/sound/soc/codecs/cs35l36.c b/sound/soc/codecs/cs35l36.c index 828014271bbf..1fbe47936551 100644 --- a/sound/soc/codecs/cs35l36.c +++ b/sound/soc/codecs/cs35l36.c @@ -202,6 +202,12 @@ 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); @@ -218,6 +224,12 @@ 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); diff --git a/sound/soc/codecs/cs35l36.h b/sound/soc/codecs/cs35l36.h index 7be0783bbab3..043de5d4aa58 100644 --- a/sound/soc/codecs/cs35l36.h +++ b/sound/soc/codecs/cs35l36.h @@ -307,6 +307,11 @@ #define CS35L36_PLL_IGAIN_SHIFT 4 #define CS35L36_PLL_IGAIN 0x04 +#define CS35L36_BST_EN_MASK 0x30 +#define CS35L36_BST_EN 0x02 +#define CS35L36_BST_DIS_VP 0x01 +#define CS35L36_BST_DIS_EXTN 0x00 +#define CS35L36_BST_EN_SHIFT 4 #define CS35L36_BST_MAN_IPKCOMP_MASK 0x200 #define CS35L36_BST_MAN_IPKCOMP_SHIFT 9