From 53b4e14f9480f4479dc281d35ba4c7dfbc2cbfa4 Mon Sep 17 00:00:00 2001 From: Vatsal Bucha Date: Tue, 13 Nov 2018 19:36:25 +0530 Subject: [PATCH 1/2] 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 d6a196b6c8..dcf688ef6c 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 0129c395f1..89d3cadb7f 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 4624eae8a9..f5ad8d225d 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); From 79da9fb84a19d288cf3faef8b663d13ed8ed6dac Mon Sep 17 00:00:00 2001 From: Vatsal Bucha Date: Tue, 13 Nov 2018 19:49:34 +0530 Subject: [PATCH 2/2] ASoC: wcd937x: Fix pop after PDR Pop is heard after PDR is triggered. This is because while device down PA is still on. Disable PA before SSR device down to prevent pop. Change-Id: I6bfe3e731bdf60fba8fee90ab39c03a0512006ce Signed-off-by: Vatsal Bucha --- asoc/codecs/wcd937x/internal.h | 1 + asoc/codecs/wcd937x/wcd937x.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/asoc/codecs/wcd937x/internal.h b/asoc/codecs/wcd937x/internal.h index eb2de9d69e..c0f96f124f 100644 --- a/asoc/codecs/wcd937x/internal.h +++ b/asoc/codecs/wcd937x/internal.h @@ -123,6 +123,7 @@ enum { 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/wcd937x/wcd937x.c b/asoc/codecs/wcd937x/wcd937x.c index 485d328389..34e4b1b811 100644 --- a/asoc/codecs/wcd937x/wcd937x.c +++ b/asoc/codecs/wcd937x/wcd937x.c @@ -1246,6 +1246,11 @@ static int wcd937x_event_notify(struct notifier_block *block, mask = 0x20; snd_soc_update_bits(codec, reg, mask, 0x00); break; + case BOLERO_WCD_EVT_PA_OFF_PRE_SSR: + snd_soc_update_bits(codec, WCD937X_ANA_HPH, 0xC0, 0x00); + snd_soc_update_bits(codec, WCD937X_ANA_EAR, 0x80, 0x00); + snd_soc_update_bits(codec, WCD937X_AUX_AUXPA, 0x80, 0x00); + break; case BOLERO_WCD_EVT_SSR_DOWN: wcd937x_reset_low(wcd937x->dev); break;