From fd41762a7972406b141d206326154dc467c0ec33 Mon Sep 17 00:00:00 2001 From: Karthik Reddy Katta Date: Mon, 9 Jan 2017 14:21:51 +0530 Subject: [PATCH] ASoC: wcd: Fix ADSP based SVA mode detection failures Updating bit 2 of WCD934X_CODEC_RPM_CLK_MCLK_CFG register from both resource manager and wcd934x-dsp-cntl is leading to improper MAD status while switching between SVA modes. Change the existing implementation to update the above bit only from enable/disable sequence of MAD widget. CRs-Fixed: 1114031 Change-Id: Ia27f3d66701b6e2805ec594a4835a396faf21c2c Signed-off-by: Karthik Reddy Katta --- sound/soc/codecs/wcd934x/wcd934x-dsp-cntl.c | 8 +------- sound/soc/codecs/wcd934x/wcd934x.c | 4 ++++ sound/soc/codecs/wcd9xxx-resmgr-v2.c | 3 --- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/sound/soc/codecs/wcd934x/wcd934x-dsp-cntl.c b/sound/soc/codecs/wcd934x/wcd934x-dsp-cntl.c index aa180fa3159f..e791bf07ec67 100644 --- a/sound/soc/codecs/wcd934x/wcd934x-dsp-cntl.c +++ b/sound/soc/codecs/wcd934x/wcd934x-dsp-cntl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -607,8 +607,6 @@ static void wcd_cntl_do_shutdown(struct wcd_dsp_cntl *cntl) /* Disable WDOG */ snd_soc_update_bits(codec, WCD934X_CPE_SS_WDOG_CFG, 0x3F, 0x01); - snd_soc_update_bits(codec, WCD934X_CODEC_RPM_CLK_MCLK_CFG, - 0x04, 0x00); /* Put WDSP in reset state */ snd_soc_update_bits(codec, WCD934X_CPE_SS_CPE_CTL, @@ -633,11 +631,7 @@ static int wcd_cntl_do_boot(struct wcd_dsp_cntl *cntl) if (cntl->debug_mode) { snd_soc_update_bits(codec, WCD934X_CPE_SS_WDOG_CFG, 0x3F, 0x01); - snd_soc_update_bits(codec, WCD934X_CODEC_RPM_CLK_MCLK_CFG, - 0x04, 0x00); } else { - snd_soc_update_bits(codec, WCD934X_CODEC_RPM_CLK_MCLK_CFG, - 0x04, 0x04); snd_soc_update_bits(codec, WCD934X_CPE_SS_WDOG_CFG, 0x3F, 0x21); } diff --git a/sound/soc/codecs/wcd934x/wcd934x.c b/sound/soc/codecs/wcd934x/wcd934x.c index 86ad8752b6ff..f799702aaa6d 100644 --- a/sound/soc/codecs/wcd934x/wcd934x.c +++ b/sound/soc/codecs/wcd934x/wcd934x.c @@ -2619,6 +2619,8 @@ static int __tavil_codec_enable_mad(struct snd_soc_codec *codec, bool enable) /* Undo reset for MAD */ snd_soc_update_bits(codec, WCD934X_CPE_SS_MAD_CTL, 0x02, 0x00); + snd_soc_update_bits(codec, WCD934X_CODEC_RPM_CLK_MCLK_CFG, + 0x04, 0x04); } else { snd_soc_update_bits(codec, WCD934X_SOC_MAD_AUDIO_CTL_2, 0x03, 0x00); @@ -2628,6 +2630,8 @@ static int __tavil_codec_enable_mad(struct snd_soc_codec *codec, bool enable) /* Turn off MAD clk */ snd_soc_update_bits(codec, WCD934X_CPE_SS_MAD_CTL, 0x01, 0x00); + snd_soc_update_bits(codec, WCD934X_CODEC_RPM_CLK_MCLK_CFG, + 0x04, 0x00); } done: return rc; diff --git a/sound/soc/codecs/wcd9xxx-resmgr-v2.c b/sound/soc/codecs/wcd9xxx-resmgr-v2.c index 71edded182e0..2d9a5101dd95 100644 --- a/sound/soc/codecs/wcd9xxx-resmgr-v2.c +++ b/sound/soc/codecs/wcd9xxx-resmgr-v2.c @@ -262,9 +262,6 @@ static int wcd_resmgr_enable_clk_mclk(struct wcd9xxx_resmgr_v2 *resmgr) wcd_resmgr_codec_reg_update_bits(resmgr, WCD93XX_CDC_CLK_RST_CTRL_MCLK_CONTROL, 0x01, 0x01); - wcd_resmgr_codec_reg_update_bits(resmgr, - WCD934X_CODEC_RPM_CLK_MCLK_CFG, - 0x04, 0x04); wcd_resmgr_codec_reg_update_bits(resmgr, WCD93XX_CDC_CLK_RST_CTRL_MCLK_CONTROL, 0x01, 0x01);