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

Commit ed0a7eb0 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ASoC: msm-cpe-lsm: Fix sequence for LAB data channel"

parents c4f8b67c 68a7887a
Loading
Loading
Loading
Loading
+31 −27
Original line number Diff line number Diff line
@@ -374,15 +374,6 @@ static int msm_cpe_lsm_lab_stop(struct snd_pcm_substream *substream)
			"%s: open data failed %d\n", __func__, rc);
	dma_data->ph = 0;

	rc = lsm_ops->lab_ch_setup(cpe->core_handle,
				   session,
				   WCD_CPE_POST_DISABLE);
	if (rc)
		dev_err(rtd->dev,
			"%s: POST ch teardown failed, err = %d\n",
			__func__, rc);
	lab_d->thread_status = MSM_LSM_LAB_THREAD_STOP;

	/*
	 * Even though LAB stop failed,
	 * output AFE port needs to be stopped
@@ -393,6 +384,16 @@ static int msm_cpe_lsm_lab_stop(struct snd_pcm_substream *substream)
		dev_err(rtd->dev,
			"%s: AFE out port stop failed, err = %d\n",
			__func__, rc);

	rc = lsm_ops->lab_ch_setup(cpe->core_handle,
				   session,
				   WCD_CPE_POST_DISABLE);
	if (rc)
		dev_err(rtd->dev,
			"%s: POST ch teardown failed, err = %d\n",
			__func__, rc);
	lab_d->thread_status = MSM_LSM_LAB_THREAD_STOP;

	return 0;
}

@@ -517,6 +518,7 @@ static int msm_cpe_lab_thread(void *data)
	struct cpe_hw_params *hw_params = &lsm_d->hw_params;
	struct cpe_priv *cpe = cpe_get_private_data(substream);
	struct wcd_cpe_lsm_ops *lsm_ops;
	struct wcd_cpe_afe_ops *afe_ops;
	struct cpe_data_pcm_buf *cur_buf, *next_buf;
	struct msm_slim_dma_data *dma_data = NULL;
	struct snd_soc_pcm_runtime *rtd = NULL;
@@ -553,6 +555,7 @@ static int msm_cpe_lab_thread(void *data)
	}

	lsm_ops = &cpe->lsm_ops;
	afe_ops = &cpe->afe_ops;

	if (!kthread_should_stop()) {
		rc = lsm_ops->lab_ch_setup(cpe->core_handle,
@@ -572,16 +575,6 @@ static int msm_cpe_lab_thread(void *data)
			goto done;
		}

		rc = lsm_ops->lab_ch_setup(cpe->core_handle,
					   session,
					   WCD_CPE_POST_ENABLE);
		if (rc) {
			dev_err(rtd->dev,
				"%s: POST ch setup failed, err = %d\n",
				__func__, rc);
			goto done;
		}

		dev_dbg(rtd->dev, "%s: Established data channel\n",
			__func__);

@@ -600,6 +593,25 @@ static int msm_cpe_lab_thread(void *data)

		cur_buf = &lab_d->pcm_buf[0];
		next_buf = &lab_d->pcm_buf[1];
		rc = lsm_ops->lab_ch_setup(cpe->core_handle,
					   session,
					   WCD_CPE_POST_ENABLE);
		if (rc) {
			dev_err(rtd->dev,
				"%s: POST ch setup failed, err = %d\n",
				__func__, rc);
			goto done;
		}

		rc = afe_ops->afe_port_start(cpe->core_handle,
				&session->afe_out_port_cfg);
		if (rc) {
			dev_err(rtd->dev,
				"%s: AFE out port start failed, err = %d\n",
				__func__, rc);
			goto done;
		}

	} else {
		dev_dbg(rtd->dev,
			"%s: LAB stopped before starting read\n",
@@ -1534,14 +1546,6 @@ static int msm_cpe_lsm_lab_start(struct snd_pcm_substream *substream,
			return rc;
		}

		rc = afe_ops->afe_port_start(cpe->core_handle, out_port);
		if (rc) {
			dev_err(rtd->dev,
				"%s: AFE out port start failed, err = %d\n",
				__func__, rc);
			return rc;
		}

		atomic_set(&lab_d->abort_read, 0);
		dev_dbg(rtd->dev,
			"%s: KW detected, scheduling LAB thread\n",