Unverified Commit 6c28377b authored by Srinivasa Rao Mandadapu's avatar Srinivasa Rao Mandadapu Committed by Mark Brown
Browse files

ASoC: qcom: lpass-cpu: Remove bit clock state check



No need of BCLK state maintenance from driver side as
clock_enable and clk_disable API's maintaing state counter.

One of the major issue was spotted when Headset jack inserted
while playback continues, due to same PCM device node opens twice
for playaback/capture and closes once for capture and playback continues.

It can resolve the errors in such scenarios.

Fixes: b1824968 ("ASoC: qcom: Fix enabling BCLK and LRCLK in LPAIF invalid state")

Signed-off-by: default avatarSrinivasa Rao Mandadapu <srivasam@codeaurora.org>
Reviewed-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20210127151824.8929-1-srivasam@codeaurora.org


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent ded055ee
Loading
Loading
Loading
Loading
+8 −14
Original line number Diff line number Diff line
@@ -286,16 +286,12 @@ static int lpass_cpu_daiops_trigger(struct snd_pcm_substream *substream,
			dev_err(dai->dev, "error writing to i2sctl reg: %d\n",
				ret);

		if (drvdata->bit_clk_state[id] == LPAIF_BIT_CLK_DISABLE) {
		ret = clk_enable(drvdata->mi2s_bit_clk[id]);
		if (ret) {
			dev_err(dai->dev, "error in enabling mi2s bit clk: %d\n", ret);
			clk_disable(drvdata->mi2s_osr_clk[id]);
			return ret;
		}
			drvdata->bit_clk_state[id] = LPAIF_BIT_CLK_ENABLE;
		}

		break;
	case SNDRV_PCM_TRIGGER_STOP:
	case SNDRV_PCM_TRIGGER_SUSPEND:
@@ -310,10 +306,9 @@ static int lpass_cpu_daiops_trigger(struct snd_pcm_substream *substream,
		if (ret)
			dev_err(dai->dev, "error writing to i2sctl reg: %d\n",
				ret);
		if (drvdata->bit_clk_state[id] == LPAIF_BIT_CLK_ENABLE) {

		clk_disable(drvdata->mi2s_bit_clk[dai->driver->id]);
			drvdata->bit_clk_state[id] = LPAIF_BIT_CLK_DISABLE;
		}

		break;
	}

@@ -866,7 +861,6 @@ int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev)
				PTR_ERR(drvdata->mi2s_bit_clk[dai_id]));
			return PTR_ERR(drvdata->mi2s_bit_clk[dai_id]);
		}
		drvdata->bit_clk_state[dai_id] = LPAIF_BIT_CLK_DISABLE;
	}

	/* Allocation for i2sctl regmap fields */
+0 −3
Original line number Diff line number Diff line
@@ -60,9 +60,6 @@
#define LPAIF_I2SCTL_BITWIDTH_24	1
#define LPAIF_I2SCTL_BITWIDTH_32	2

#define LPAIF_BIT_CLK_DISABLE		0
#define LPAIF_BIT_CLK_ENABLE		1

#define LPAIF_I2SCTL_RESET_STATE	0x003C0004
#define LPAIF_DMACTL_RESET_STATE	0x00200000

+0 −1
Original line number Diff line number Diff line
@@ -68,7 +68,6 @@ struct lpass_data {
	unsigned int mi2s_playback_sd_mode[LPASS_MAX_MI2S_PORTS];
	unsigned int mi2s_capture_sd_mode[LPASS_MAX_MI2S_PORTS];
	int hdmi_port_enable;
	int bit_clk_state[LPASS_MAX_MI2S_PORTS];

	/* low-power audio interface (LPAIF) registers */
	void __iomem *lpaif;