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

Commit 71ee774c authored by Walter Yang's avatar Walter Yang Committed by Banajit Goswami
Browse files

Revert "ASoC: msm: decrement slim channel ref to set the property"



This reverts commit 8777df6c6eabb099c5069081dc991bb819337ff6
("ASoC: msm: decrement slim channel ref to set the property").

Slimbus channel deallocate and slimbus channel query should
happen in pair to ensure the ref count and state of the
channel are both in correct value.

CRs-Fixed: 1102349
Change-Id: Ie15f6e65448194ba781160856dd3f4e2ab081de1
Signed-off-by: default avatarWalter Yang <yandongy@codeaurora.org>
parent ce396617
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -313,7 +313,7 @@ static int msm_dai_slim_prepare(struct snd_pcm_substream *substream,
	struct msm_slim_dai_data *dai_data = NULL;
	struct slim_ch prop;
	int rc;
	u8 i;
	u8 i, j;

	dai_data = msm_slim_get_dai_data(drv_data, dai);
	if (!dai_data) {
@@ -350,10 +350,6 @@ static int msm_dai_slim_prepare(struct snd_pcm_substream *substream,
		}
	}

	/* To decrement the channel ref count*/
	for (i = 0; i < dai_data->ch_cnt; i++)
		slim_dealloc_ch(drv_data->sdev, dai_data->chan_h[i]);

	prop.prot = SLIM_AUTO_ISO;
	prop.baser = SLIM_RATE_4000HZ;
	prop.dataf = SLIM_CH_DATAF_NOT_DEFINED;
@@ -377,6 +373,8 @@ static int msm_dai_slim_prepare(struct snd_pcm_substream *substream,

error_define_chan:
error_chan_query:
	for (j = 0; j < i; j++)
		slim_dealloc_ch(drv_data->sdev, dai_data->chan_h[j]);
	return rc;
}

@@ -386,6 +384,7 @@ static void msm_dai_slim_shutdown(struct snd_pcm_substream *stream,
	struct msm_dai_slim_drv_data *drv_data = dev_get_drvdata(dai->dev);
	struct msm_slim_dma_data *dma_data = NULL;
	struct msm_slim_dai_data *dai_data;
	int i, rc = 0;

	dai_data = msm_slim_get_dai_data(drv_data, dai);
	dma_data = snd_soc_dai_get_dma_data(dai, stream);
@@ -404,6 +403,15 @@ static void msm_dai_slim_shutdown(struct snd_pcm_substream *stream,
		return;
	}

	for (i = 0; i < dai_data->ch_cnt; i++) {
		rc = slim_dealloc_ch(drv_data->sdev, dai_data->chan_h[i]);
		if (rc) {
			dev_err(dai->dev,
				"%s: dealloc_ch failed, err = %d\n",
				__func__, rc);
		}
	}

	snd_soc_dai_set_dma_data(dai, stream, NULL);
	/* clear prepared state for the dai */
	CLR_DAI_STATE(dai_data->status, DAI_STATE_PREPARED);