On Wed, Jul 17, 2019 at 1:58 PM Lucas Stach <l.stach@xxxxxxxxxxxxxx> wrote: > > New revisions of the SAI IP block have even more differences that need > be taken into account by the driver. To avoid sprinking compatible > checks all over the driver move the current differences into of_match_data. > > Signed-off-by: Lucas Stach <l.stach@xxxxxxxxxxxxxx> This is the way I handled in my patch series too. So, Reviewed-by: Daniel Baluta <daniel.baluta@xxxxxxx> > --- > sound/soc/fsl/fsl_sai.c | 22 ++++++++++++++-------- > sound/soc/fsl/fsl_sai.h | 6 +++++- > 2 files changed, 19 insertions(+), 9 deletions(-) > > diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c > index 812c94fbb160..3a1ed8b857d6 100644 > --- a/sound/soc/fsl/fsl_sai.c > +++ b/sound/soc/fsl/fsl_sai.c > @@ -9,6 +9,7 @@ > #include <linux/dmaengine.h> > #include <linux/module.h> > #include <linux/of_address.h> > +#include <linux/of_device.h> > #include <linux/pm_runtime.h> > #include <linux/regmap.h> > #include <linux/slab.h> > @@ -798,10 +799,7 @@ static int fsl_sai_probe(struct platform_device *pdev) > return -ENOMEM; > > sai->pdev = pdev; > - > - if (of_device_is_compatible(np, "fsl,imx6sx-sai") || > - of_device_is_compatible(np, "fsl,imx6ul-sai")) > - sai->sai_on_imx = true; > + sai->soc_data = of_device_get_match_data(&pdev->dev); > > sai->is_lsb_first = of_property_read_bool(np, "lsb-first"); > > @@ -910,7 +908,7 @@ static int fsl_sai_probe(struct platform_device *pdev) > if (ret) > return ret; > > - if (sai->sai_on_imx) > + if (sai->soc_data->use_imx_pcm) > return imx_pcm_dma_init(pdev, IMX_SAI_DMABUF_SIZE); > else > return devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0); > @@ -923,10 +921,18 @@ static int fsl_sai_remove(struct platform_device *pdev) > return 0; > } > > +static const struct fsl_sai_soc_data fsl_sai_vf610_data = { > + .use_imx_pcm = false, > +}; > + > +static const struct fsl_sai_soc_data fsl_sai_imx6sx_data = { > + .use_imx_pcm = true, > +}; > + > static const struct of_device_id fsl_sai_ids[] = { > - { .compatible = "fsl,vf610-sai", }, > - { .compatible = "fsl,imx6sx-sai", }, > - { .compatible = "fsl,imx6ul-sai", }, > + { .compatible = "fsl,vf610-sai", .data = &fsl_sai_vf610_data }, > + { .compatible = "fsl,imx6sx-sai", .data = &fsl_sai_imx6sx_data }, > + { .compatible = "fsl,imx6ul-sai", .data = &fsl_sai_imx6sx_data }, > { /* sentinel */ } > }; > MODULE_DEVICE_TABLE(of, fsl_sai_ids); > diff --git a/sound/soc/fsl/fsl_sai.h b/sound/soc/fsl/fsl_sai.h > index 24cb156bf995..83e2bfe05b1b 100644 > --- a/sound/soc/fsl/fsl_sai.h > +++ b/sound/soc/fsl/fsl_sai.h > @@ -126,6 +126,10 @@ > #define FSL_SAI_MAXBURST_TX 6 > #define FSL_SAI_MAXBURST_RX 6 > > +struct fsl_sai_soc_data { > + bool use_imx_pcm; > +}; > + > struct fsl_sai { > struct platform_device *pdev; > struct regmap *regmap; > @@ -135,7 +139,6 @@ struct fsl_sai { > bool is_slave_mode; > bool is_lsb_first; > bool is_dsp_mode; > - bool sai_on_imx; > bool synchronous[2]; > > unsigned int mclk_id[2]; > @@ -143,6 +146,7 @@ struct fsl_sai { > unsigned int slots; > unsigned int slot_width; > > + const struct fsl_sai_soc_data *soc_data; > struct snd_dmaengine_dai_dma_data dma_params_rx; > struct snd_dmaengine_dai_dma_data dma_params_tx; > }; > -- > 2.20.1 > > _______________________________________________ > Alsa-devel mailing list > Alsa-devel@xxxxxxxxxxxxxxxx > https://mailman.alsa-project.org/mailman/listinfo/alsa-devel _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel