Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd41762a authored by Karthik Reddy Katta's avatar Karthik Reddy Katta Committed by Gerrit - the friendly Code Review server
Browse files

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: default avatarKarthik Reddy Katta <a_katta@codeaurora.org>
parent fdddc49e
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
/*
 * 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);
	}
+4 −0
Original line number Diff line number Diff line
@@ -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;
+0 −3
Original line number Diff line number Diff line
@@ -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);