diff mbox series

[RESEND,v2,3/3] ASoC: fsl_xcvr: Add constraints of period size while using eDMA

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

Commit Message

Chancel Liu Jan. 4, 2023, 2:39 a.m. UTC
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(+)

Comments

Shengjiu Wang Jan. 5, 2023, 9:55 a.m. UTC | #1
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 mbox series

Patch

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[] = {