Unverified Commit 2c618f36 authored by Christophe Leroy's avatar Christophe Leroy Committed by Mark Brown
Browse files

ASoC: fsl: fsl_qmc_audio: Drop struct qmc_dai_chan



prtd_tx and prtd_rx members are not used anymore and only qmc_chan
member remains so struct qmc_dai_chan has become pointless.

Use qmc_chan directly and drop struct qmc_dai_chan.

Acked-by: default avatarHerve Codina <herve.codina@bootlin.com>
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Link: https://patch.msgid.link/9c729bbd9f1b61120a09a87fb76176ef344c5153.1758209158.git.christophe.leroy@csgroup.eu


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 4c5f8c25
Loading
Loading
Loading
Loading
+20 −32
Original line number Diff line number Diff line
@@ -17,12 +17,6 @@
#include <sound/pcm_params.h>
#include <sound/soc.h>

struct qmc_dai_chan {
	struct qmc_dai_prtd *prtd_tx;
	struct qmc_dai_prtd *prtd_rx;
	struct qmc_chan *qmc_chan;
};

struct qmc_dai {
	char *name;
	int id;
@@ -33,7 +27,7 @@ struct qmc_dai {
	unsigned int nb_chans_avail;
	unsigned int nb_chans_used_tx;
	unsigned int nb_chans_used_rx;
	struct qmc_dai_chan *chans;
	struct qmc_chan **qmc_chans;
};

struct qmc_audio {
@@ -125,7 +119,7 @@ static int qmc_audio_pcm_write_submit(struct qmc_dai_prtd *prtd)
	int ret;

	for (i = 0; i < prtd->channels; i++) {
		ret = qmc_chan_write_submit(prtd->qmc_dai->chans[i].qmc_chan,
		ret = qmc_chan_write_submit(prtd->qmc_dai->qmc_chans[i],
					    prtd->ch_dma_addr_current + i * prtd->ch_dma_offset,
					    prtd->ch_dma_size,
					    i == prtd->channels - 1 ? qmc_audio_pcm_write_complete :
@@ -165,7 +159,7 @@ static int qmc_audio_pcm_read_submit(struct qmc_dai_prtd *prtd)
	int ret;

	for (i = 0; i < prtd->channels; i++) {
		ret = qmc_chan_read_submit(prtd->qmc_dai->chans[i].qmc_chan,
		ret = qmc_chan_read_submit(prtd->qmc_dai->qmc_chans[i],
					   prtd->ch_dma_addr_current + i * prtd->ch_dma_offset,
					   prtd->ch_dma_size,
					   i == prtd->channels - 1 ? qmc_audio_pcm_read_complete :
@@ -206,7 +200,6 @@ static int qmc_audio_pcm_trigger(struct snd_soc_component *component,
				 struct snd_pcm_substream *substream, int cmd)
{
	struct qmc_dai_prtd *prtd = substream->runtime->private_data;
	unsigned int i;
	int ret;

	if (!prtd->qmc_dai) {
@@ -220,9 +213,6 @@ static int qmc_audio_pcm_trigger(struct snd_soc_component *component,
		prtd->ch_dma_addr_current = prtd->ch_dma_addr_start;

		if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
			for (i = 0; i < prtd->channels; i++)
				prtd->qmc_dai->chans[i].prtd_tx = prtd;

			/* Submit first chunk ... */
			ret = qmc_audio_pcm_write_submit(prtd);
			if (ret)
@@ -238,9 +228,6 @@ static int qmc_audio_pcm_trigger(struct snd_soc_component *component,
			if (ret)
				return ret;
		} else {
			for (i = 0; i < prtd->channels; i++)
				prtd->qmc_dai->chans[i].prtd_rx = prtd;

			/* Submit first chunk ... */
			ret = qmc_audio_pcm_read_submit(prtd);
			if (ret)
@@ -610,9 +597,9 @@ static int qmc_dai_hw_params(struct snd_pcm_substream *substream,
		chan_param.mode = QMC_TRANSPARENT;
		chan_param.transp.max_rx_buf_size = params_period_bytes(params) / nb_chans_used;
		for (i = 0; i < nb_chans_used; i++) {
			ret = qmc_chan_set_param(qmc_dai->chans[i].qmc_chan, &chan_param);
			ret = qmc_chan_set_param(qmc_dai->qmc_chans[i], &chan_param);
			if (ret) {
				dev_err(dai->dev, "chans[%u], set param failed %d\n",
				dev_err(dai->dev, "qmc_chans[%u], set param failed %d\n",
					i, ret);
				return ret;
			}
@@ -654,7 +641,7 @@ static int qmc_dai_trigger(struct snd_pcm_substream *substream, int cmd,
	case SNDRV_PCM_TRIGGER_RESUME:
	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
		for (i = 0; i < nb_chans_used; i++) {
			ret = qmc_chan_start(qmc_dai->chans[i].qmc_chan, direction);
			ret = qmc_chan_start(qmc_dai->qmc_chans[i], direction);
			if (ret)
				goto err_stop;
		}
@@ -663,13 +650,13 @@ static int qmc_dai_trigger(struct snd_pcm_substream *substream, int cmd,
	case SNDRV_PCM_TRIGGER_STOP:
		/* Stop and reset all QMC channels and return the first error encountered */
		for (i = 0; i < nb_chans_used; i++) {
			ret_tmp = qmc_chan_stop(qmc_dai->chans[i].qmc_chan, direction);
			ret_tmp = qmc_chan_stop(qmc_dai->qmc_chans[i], direction);
			if (!ret)
				ret = ret_tmp;
			if (ret_tmp)
				continue;

			ret_tmp = qmc_chan_reset(qmc_dai->chans[i].qmc_chan, direction);
			ret_tmp = qmc_chan_reset(qmc_dai->qmc_chans[i], direction);
			if (!ret)
				ret = ret_tmp;
		}
@@ -681,7 +668,7 @@ static int qmc_dai_trigger(struct snd_pcm_substream *substream, int cmd,
	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
		/* Stop all QMC channels and return the first error encountered */
		for (i = 0; i < nb_chans_used; i++) {
			ret_tmp = qmc_chan_stop(qmc_dai->chans[i].qmc_chan, direction);
			ret_tmp = qmc_chan_stop(qmc_dai->qmc_chans[i], direction);
			if (!ret)
				ret = ret_tmp;
		}
@@ -697,8 +684,8 @@ static int qmc_dai_trigger(struct snd_pcm_substream *substream, int cmd,

err_stop:
	while (i--) {
		qmc_chan_stop(qmc_dai->chans[i].qmc_chan, direction);
		qmc_chan_reset(qmc_dai->chans[i].qmc_chan, direction);
		qmc_chan_stop(qmc_dai->qmc_chans[i], direction);
		qmc_chan_reset(qmc_dai->qmc_chans[i], direction);
	}
	return ret;
}
@@ -794,19 +781,20 @@ static int qmc_audio_dai_parse(struct qmc_audio *qmc_audio, struct device_node *
		return dev_err_probe(qmc_audio->dev, -EINVAL,
				     "dai %d no QMC channel defined\n", qmc_dai->id);

	qmc_dai->chans = devm_kcalloc(qmc_audio->dev, count, sizeof(*qmc_dai->chans), GFP_KERNEL);
	if (!qmc_dai->chans)
	qmc_dai->qmc_chans = devm_kcalloc(qmc_audio->dev, count, sizeof(*qmc_dai->qmc_chans),
					  GFP_KERNEL);
	if (!qmc_dai->qmc_chans)
		return -ENOMEM;

	for (i = 0; i < count; i++) {
		qmc_dai->chans[i].qmc_chan = devm_qmc_chan_get_byphandles_index(qmc_audio->dev, np,
		qmc_dai->qmc_chans[i] = devm_qmc_chan_get_byphandles_index(qmc_audio->dev, np,
									   "fsl,qmc-chan", i);
		if (IS_ERR(qmc_dai->chans[i].qmc_chan)) {
			return dev_err_probe(qmc_audio->dev, PTR_ERR(qmc_dai->chans[i].qmc_chan),
		if (IS_ERR(qmc_dai->qmc_chans[i])) {
			return dev_err_probe(qmc_audio->dev, PTR_ERR(qmc_dai->qmc_chans[i]),
					     "dai %d get QMC channel %d failed\n", qmc_dai->id, i);
		}

		ret = qmc_chan_get_info(qmc_dai->chans[i].qmc_chan, &info);
		ret = qmc_chan_get_info(qmc_dai->qmc_chans[i], &info);
		if (ret) {
			dev_err(qmc_audio->dev, "dai %d get QMC %d channel info failed %d\n",
				qmc_dai->id, i, ret);
@@ -851,7 +839,7 @@ static int qmc_audio_dai_parse(struct qmc_audio *qmc_audio, struct device_node *
			}
		}

		ret = qmc_chan_get_ts_info(qmc_dai->chans[i].qmc_chan, &ts_info);
		ret = qmc_chan_get_ts_info(qmc_dai->qmc_chans[i], &ts_info);
		if (ret) {
			dev_err(qmc_audio->dev, "dai %d get QMC %d channel TS info failed %d\n",
				qmc_dai->id, i, ret);