Browse Source

Merge changes I78da6dad,I6e445618,I67795bf0 into audio-drivers.lnx.5.0.r1-rel

* changes:
  ASoC: bolero: Update clock sequence to clear Fs counter
  asoc: va-macro: Update clk_div switch based on decimation rate.
  soc: add check condition before enabling irq.
Linux Build Service Account 4 years ago
parent
commit
d9fa9d435b
3 changed files with 18 additions and 10 deletions
  1. 9 8
      asoc/codecs/bolero/bolero-clk-rsc.c
  2. 6 1
      asoc/codecs/bolero/va-macro.c
  3. 3 1
      soc/swr-mstr-ctrl.c

+ 9 - 8
asoc/codecs/bolero/bolero-clk-rsc.c

@@ -476,14 +476,15 @@ void bolero_clk_rsc_fs_gen_request(struct device *dev, bool enable)
 	mutex_lock(&priv->fs_gen_lock);
 	if (enable) {
 		if (priv->reg_seq_en_cnt++ == 0) {
-			for (i = 0; i < (priv->num_fs_reg * 2); i += 2) {
-				dev_dbg(priv->dev, "%s: Register: %d, value: %d\n",
+			for (i = 0; i < (priv->num_fs_reg * 3); i += 3) {
+				dev_dbg(priv->dev, "%s: Register: %d, mask: %d, value %d\n",
 					__func__, priv->fs_gen_seq[i],
-					priv->fs_gen_seq[i + 1]);
+					priv->fs_gen_seq[i + 1],
+					priv->fs_gen_seq[i + 2]);
 				regmap_update_bits(regmap,
 						   priv->fs_gen_seq[i],
 						   priv->fs_gen_seq[i + 1],
-						   priv->fs_gen_seq[i + 1]);
+						   priv->fs_gen_seq[i + 2]);
 			}
 		}
 	} else {
@@ -495,8 +496,8 @@ void bolero_clk_rsc_fs_gen_request(struct device *dev, bool enable)
 			return;
 		}
 		if (--priv->reg_seq_en_cnt == 0) {
-			for (i = ((priv->num_fs_reg - 1) * 2); i >= 0; i -= 2) {
-				dev_dbg(priv->dev, "%s: Register: %d, value: %d\n",
+			for (i = ((priv->num_fs_reg - 1) * 3); i >= 0; i -= 3) {
+				dev_dbg(priv->dev, "%s: Register: %d, mask: %d\n",
 					__func__, priv->fs_gen_seq[i],
 					priv->fs_gen_seq[i + 1]);
 				regmap_update_bits(regmap, priv->fs_gen_seq[i],
@@ -621,7 +622,7 @@ static int bolero_clk_rsc_probe(struct platform_device *pdev)
 		ret = -EINVAL;
 		goto err;
 	}
-	priv->num_fs_reg = fs_gen_size/(2 * sizeof(u32));
+	priv->num_fs_reg = fs_gen_size/(3 * sizeof(u32));
 	priv->fs_gen_seq = devm_kzalloc(&pdev->dev, fs_gen_size, GFP_KERNEL);
 	if (!priv->fs_gen_seq) {
 		ret = -ENOMEM;
@@ -632,7 +633,7 @@ static int bolero_clk_rsc_probe(struct platform_device *pdev)
 	ret = of_property_read_u32_array(pdev->dev.of_node,
 					 "qcom,fs-gen-sequence",
 					 priv->fs_gen_seq,
-					 priv->num_fs_reg * 2);
+					 priv->num_fs_reg * 3);
 	if (ret < 0) {
 		dev_err(&pdev->dev, "%s: unable to parse fs-gen-sequence, ret = %d\n",
 			__func__, ret);

+ 6 - 1
asoc/codecs/bolero/va-macro.c

@@ -173,6 +173,7 @@ struct va_macro_priv {
 	int dapm_tx_clk_status;
 	bool lpi_enable;
 	bool register_event_listener;
+	bool clk_div_switch;
 	int dec_mode[VA_MACRO_NUM_DECIMATORS];
 	u16 current_clk_id;
 };
@@ -206,7 +207,7 @@ static int va_macro_clk_div_get(struct snd_soc_component *component)
 		return -EINVAL;
 
 	if ((va_priv->version >= BOLERO_VERSION_2_0)
-		&& !va_priv->lpi_enable
+		&& va_priv->clk_div_switch
 		&& (va_priv->dmic_clk_div == VA_MACRO_CLK_DIV_16))
 		return VA_MACRO_CLK_DIV_8;
 
@@ -1524,6 +1525,10 @@ static int va_macro_hw_params(struct snd_pcm_substream *substream,
 		params_channels(params));
 
 	sample_rate = params_rate(params);
+	if (sample_rate > 16000)
+		va_priv->clk_div_switch = true;
+	else
+		va_priv->clk_div_switch = false;
 	switch (sample_rate) {
 	case 8000:
 		tx_fs_rate = 0;

+ 3 - 1
soc/swr-mstr-ctrl.c

@@ -3250,7 +3250,9 @@ static int swrm_runtime_suspend(struct device *dev)
 		}
 
 		if (swrm->clk_stop_mode0_supp) {
-			if (swrm->wake_irq > 0) {
+			if ((swrm->wake_irq > 0) &&
+			    (irqd_irq_disabled(
+			    irq_get_irq_data(swrm->wake_irq)))) {
 				enable_irq(swrm->wake_irq);
 			} else if (swrm->ipc_wakeup) {
 				msm_aud_evt_blocking_notifier_call_chain(