Merge "ASoC: wcd934x-dsp-cntl: fix the reset sequence" into msm-4.9
diff --git a/sound/soc/codecs/wcd934x/wcd934x-dsp-cntl.c b/sound/soc/codecs/wcd934x/wcd934x-dsp-cntl.c
index 9bc5d5f..b57b3d4 100644
--- a/sound/soc/codecs/wcd934x/wcd934x-dsp-cntl.c
+++ b/sound/soc/codecs/wcd934x/wcd934x-dsp-cntl.c
@@ -401,6 +401,8 @@
 			__func__, ret);
 		goto done;
 	}
+	/* Pull CPAR out of reset */
+	snd_soc_update_bits(codec, WCD934X_CPE_SS_CPAR_CTL, 0x04, 0x00);
 
 	/* Configure and Enable CPE FLL clock */
 	ret = wcd_cntl_cpe_fll_ctrl(cntl, true);
@@ -422,6 +424,7 @@
 	if (cntl->cdc_cb && cntl->cdc_cb->cdc_clk_en)
 		cntl->cdc_cb->cdc_clk_en(codec, false);
 
+	snd_soc_update_bits(codec, WCD934X_CPE_SS_CPAR_CTL, 0x04, 0x04);
 	WCD_CNTL_MUTEX_UNLOCK(codec, cntl->clk_mutex);
 	return ret;
 }
@@ -458,6 +461,9 @@
 		ret = -EINVAL;
 
 	cntl->is_clk_enabled = false;
+
+	/* Put CPAR in reset */
+	snd_soc_update_bits(codec, WCD934X_CPE_SS_CPAR_CTL, 0x04, 0x04);
 done:
 	WCD_CNTL_MUTEX_UNLOCK(codec, cntl->clk_mutex);
 	return ret;
@@ -469,9 +475,9 @@
 	struct snd_soc_codec *codec = cntl->codec;
 
 	if (enable)
-		snd_soc_write(codec, WCD934X_CPE_SS_CPAR_CTL, 0x03);
+		snd_soc_update_bits(codec, WCD934X_CPE_SS_CPAR_CTL, 0x03, 0x03);
 	else
-		snd_soc_write(codec, WCD934X_CPE_SS_CPAR_CTL, 0x00);
+		snd_soc_update_bits(codec, WCD934X_CPE_SS_CPAR_CTL, 0x03, 0x00);
 }
 
 static int wcd_cntl_enable_memory(struct wcd_dsp_cntl *cntl,