Message ID | 20230104023953.2973362-4-chancel.liu@nxp.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 1760df5b7ee6a0bfc8ad47f4db490c36c5546be8 |
Headers | show |
Series | Add support for XCVR on i.MX93 platform | expand |
On Wed, Jan 4, 2023 at 10:40 AM Chancel Liu <chancel.liu@nxp.com> wrote: > eDMA on i.MX93 platform requires the period size to be multiple of > maxburst. > > Signed-off-by: Chancel Liu <chancel.liu@nxp.com> > Acked-by: Shengjiu Wang <shengjiu.wang@gmail.com> Best regards Wang shengjiu > --- > sound/soc/fsl/fsl_xcvr.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/sound/soc/fsl/fsl_xcvr.c b/sound/soc/fsl/fsl_xcvr.c > index b794158a7876..2a78243df752 100644 > --- a/sound/soc/fsl/fsl_xcvr.c > +++ b/sound/soc/fsl/fsl_xcvr.c > @@ -22,6 +22,7 @@ > struct fsl_xcvr_soc_data { > const char *fw_name; > bool spdif_only; > + bool use_edma; > }; > > struct fsl_xcvr { > @@ -538,6 +539,16 @@ static int fsl_xcvr_startup(struct snd_pcm_substream > *substream, > return -EBUSY; > } > > + /* > + * EDMA controller needs period size to be a multiple of > + * tx/rx maxburst > + */ > + if (xcvr->soc_data->use_edma) > + snd_pcm_hw_constraint_step(substream->runtime, 0, > + SNDRV_PCM_HW_PARAM_PERIOD_SIZE, > + tx ? xcvr->dma_prms_tx.maxburst > : > + xcvr->dma_prms_rx.maxburst); > + > switch (xcvr->mode) { > case FSL_XCVR_MODE_SPDIF: > case FSL_XCVR_MODE_ARC: > @@ -1207,6 +1218,7 @@ static const struct fsl_xcvr_soc_data > fsl_xcvr_imx8mp_data = { > > static const struct fsl_xcvr_soc_data fsl_xcvr_imx93_data = { > .spdif_only = true, > + .use_edma = true, > }; > > static const struct of_device_id fsl_xcvr_dt_ids[] = { > -- > 2.25.1 > >
diff --git a/sound/soc/fsl/fsl_xcvr.c b/sound/soc/fsl/fsl_xcvr.c index b794158a7876..2a78243df752 100644 --- a/sound/soc/fsl/fsl_xcvr.c +++ b/sound/soc/fsl/fsl_xcvr.c @@ -22,6 +22,7 @@ struct fsl_xcvr_soc_data { const char *fw_name; bool spdif_only; + bool use_edma; }; struct fsl_xcvr { @@ -538,6 +539,16 @@ static int fsl_xcvr_startup(struct snd_pcm_substream *substream, return -EBUSY; } + /* + * EDMA controller needs period size to be a multiple of + * tx/rx maxburst + */ + if (xcvr->soc_data->use_edma) + snd_pcm_hw_constraint_step(substream->runtime, 0, + SNDRV_PCM_HW_PARAM_PERIOD_SIZE, + tx ? xcvr->dma_prms_tx.maxburst : + xcvr->dma_prms_rx.maxburst); + switch (xcvr->mode) { case FSL_XCVR_MODE_SPDIF: case FSL_XCVR_MODE_ARC: @@ -1207,6 +1218,7 @@ static const struct fsl_xcvr_soc_data fsl_xcvr_imx8mp_data = { static const struct fsl_xcvr_soc_data fsl_xcvr_imx93_data = { .spdif_only = true, + .use_edma = true, }; static const struct of_device_id fsl_xcvr_dt_ids[] = {
eDMA on i.MX93 platform requires the period size to be multiple of maxburst. Signed-off-by: Chancel Liu <chancel.liu@nxp.com> --- sound/soc/fsl/fsl_xcvr.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)