瀏覽代碼

Merge "asoc: wcd9378: disable swr slave path when any usecase stop"

QCTECMDR Service 8 月之前
父節點
當前提交
ace5a84ff5
共有 1 個文件被更改,包括 13 次插入6 次删除
  1. 13 6
      asoc/codecs/wcd9378/wcd9378.c

+ 13 - 6
asoc/codecs/wcd9378/wcd9378.c

@@ -293,8 +293,9 @@ static int wcd9378_swr_slvdev_datapath_control(struct device *dev,
 	struct wcd9378_priv *wcd9378 = NULL;
 	struct swr_device *swr_dev = NULL;
 	int bank = 0, ret = 0;
-	u8 clk_rst = 0x00, scale_rst = 0x00, swr_clk = 0, clk_scale = 0;
-	u16 scale_reg = 0;
+	u8 clk_rst = 0x00, scale_rst = 0x00;
+	u8 swr_clk = 0, clk_scale = 0;
+	u16 scale_reg = 0, scale_reg2 = 0;
 
 	wcd9378 = dev_get_drvdata(dev);
 	if (!wcd9378)
@@ -315,12 +316,16 @@ static int wcd9378_swr_slvdev_datapath_control(struct device *dev,
 
 	scale_reg = (bank ? SWRS_SCP_BUSCLOCK_SCALE_BANK1 :
 				SWRS_SCP_BUSCLOCK_SCALE_BANK0);
+	scale_reg2 = (!bank ? SWRS_SCP_BUSCLOCK_SCALE_BANK1 :
+				SWRS_SCP_BUSCLOCK_SCALE_BANK0);
 
 	if (enable) {
 		swr_write(swr_dev, swr_dev->dev_num,
-				SWRS_SCP_BASE_CLK_BASE, &swr_clk);
+					SWRS_SCP_BASE_CLK_BASE, &swr_clk);
+		swr_write(swr_dev, swr_dev->dev_num,
+					scale_reg, &clk_scale);
 		swr_write(swr_dev, swr_dev->dev_num,
-				scale_reg, &clk_scale);
+					scale_reg2, &clk_scale);
 		ret = swr_slvdev_datapath_control(swr_dev,
 					swr_dev->dev_num, true);
 	} else {
@@ -329,9 +334,11 @@ static int wcd9378_swr_slvdev_datapath_control(struct device *dev,
 					SWRS_SCP_BASE_CLK_BASE, &clk_rst);
 			swr_write(swr_dev, swr_dev->dev_num,
 					scale_reg, &scale_rst);
-			ret = swr_slvdev_datapath_control(swr_dev,
-					swr_dev->dev_num, false);
+			swr_write(swr_dev, swr_dev->dev_num,
+					scale_reg2, &scale_rst);
 		}
+		ret = swr_slvdev_datapath_control(swr_dev,
+					swr_dev->dev_num, false);
 	}
 
 	return ret;