From 53b4e14f9480f4479dc281d35ba4c7dfbc2cbfa4 Mon Sep 17 00:00:00 2001 From: Vatsal Bucha Date: Tue, 13 Nov 2018 19:36:25 +0530 Subject: [PATCH] ASoC: bolero: Add callback to tanggu in SSR Disable Add callback event in ssr_disable to disable tanggu PA before regcache_cache_only to avoid pop after PDR. Also update proper bit while RX Mute. Change-Id: I06402269d393ca74c11611482cafbde03f4c62b9 Signed-off-by: Vatsal Bucha --- asoc/codecs/bolero/bolero-cdc.c | 1 + asoc/codecs/bolero/internal.h | 1 + asoc/codecs/bolero/rx-macro.c | 7 ++++--- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/asoc/codecs/bolero/bolero-cdc.c b/asoc/codecs/bolero/bolero-cdc.c index d6a196b6c830..dcf688ef6c99 100644 --- a/asoc/codecs/bolero/bolero-cdc.c +++ b/asoc/codecs/bolero/bolero-cdc.c @@ -581,6 +581,7 @@ static void bolero_ssr_disable(struct device *dev, void *data) struct bolero_priv *priv = data; int macro_idx; + bolero_cdc_notifier_call(priv, BOLERO_WCD_EVT_PA_OFF_PRE_SSR); regcache_cache_only(priv->regmap, true); mutex_lock(&priv->clk_lock); diff --git a/asoc/codecs/bolero/internal.h b/asoc/codecs/bolero/internal.h index 0129c395f1b9..89d3cadb7f3b 100644 --- a/asoc/codecs/bolero/internal.h +++ b/asoc/codecs/bolero/internal.h @@ -20,6 +20,7 @@ /* from bolero to WCD events */ enum { BOLERO_WCD_EVT_TX_CH_HOLD_CLEAR = 1, + BOLERO_WCD_EVT_PA_OFF_PRE_SSR, BOLERO_WCD_EVT_SSR_DOWN, BOLERO_WCD_EVT_SSR_UP, }; diff --git a/asoc/codecs/bolero/rx-macro.c b/asoc/codecs/bolero/rx-macro.c index 4624eae8a9e9..f5ad8d225d8e 100644 --- a/asoc/codecs/bolero/rx-macro.c +++ b/asoc/codecs/bolero/rx-macro.c @@ -1117,7 +1117,7 @@ static int rx_macro_mclk_ctrl(struct device *dev, bool enable) static int rx_macro_event_handler(struct snd_soc_codec *codec, u16 event, u32 data) { - u16 reg = 0, reg_mix = 0, rx_idx = 0, mute = 0x0; + u16 reg = 0, reg_mix = 0, rx_idx = 0, mute = 0x0, val = 0; struct device *rx_dev = NULL; struct rx_macro_priv *rx_priv = NULL; @@ -1128,12 +1128,13 @@ static int rx_macro_event_handler(struct snd_soc_codec *codec, u16 event, case BOLERO_MACRO_EVT_RX_MUTE: rx_idx = data >> 0x10; mute = data & 0xffff; + val = mute ? 0x10 : 0x00; reg = BOLERO_CDC_RX_RX0_RX_PATH_CTL + (rx_idx * RX_MACRO_RX_PATH_OFFSET); reg_mix = BOLERO_CDC_RX_RX0_RX_PATH_MIX_CTL + (rx_idx * RX_MACRO_RX_PATH_OFFSET); - snd_soc_update_bits(codec, reg, 0x10, mute << 0x10); - snd_soc_update_bits(codec, reg_mix, 0x10, mute << 0x10); + snd_soc_update_bits(codec, reg, 0x10, val); + snd_soc_update_bits(codec, reg_mix, 0x10, val); break; case BOLERO_MACRO_EVT_IMPED_TRUE: rx_macro_wcd_clsh_imped_config(codec, data, true);