On Thu 20 Feb 2020 at 21:57, Martin Blumenstingl <martin.blumenstingl@xxxxxxxxxxxxxx> wrote: > Introduce a struct aiu_platform_data to make the driver aware of > platform specific information. Convert the existing check for the > internal stereo audio codec (only available on GXL) to this new struct. > Support for the 32-bit SoCs will need this as well because the > AIU_CLK_CTRL_MORE register doesn't have the I2S divider bits (and we > need to use the I2S divider from AIU_CLK_CTRL instead). > > Signed-off-by: Martin Blumenstingl <martin.blumenstingl@xxxxxxxxxxxxxx> Reviewed-by: Jerome Brunet <jbrunet@xxxxxxxxxxxx> > --- > sound/soc/meson/aiu.c | 19 ++++++++++++++++--- > sound/soc/meson/aiu.h | 5 +++++ > 2 files changed, 21 insertions(+), 3 deletions(-) > > diff --git a/sound/soc/meson/aiu.c b/sound/soc/meson/aiu.c > index d3e2d40e9562..38209312a8c3 100644 > --- a/sound/soc/meson/aiu.c > +++ b/sound/soc/meson/aiu.c > @@ -273,6 +273,11 @@ static int aiu_probe(struct platform_device *pdev) > aiu = devm_kzalloc(dev, sizeof(*aiu), GFP_KERNEL); > if (!aiu) > return -ENOMEM; > + > + aiu->platform = device_get_match_data(dev); > + if (!aiu->platform) > + return -ENODEV; > + > platform_set_drvdata(pdev, aiu); > > ret = device_reset(dev); > @@ -322,7 +327,7 @@ static int aiu_probe(struct platform_device *pdev) > } > > /* Register the internal dac control component on gxl */ > - if (of_device_is_compatible(dev->of_node, "amlogic,aiu-gxl")) { > + if (aiu->platform->has_acodec) { > ret = aiu_acodec_ctrl_register_component(dev); > if (ret) { > dev_err(dev, > @@ -344,9 +349,17 @@ static int aiu_remove(struct platform_device *pdev) > return 0; > } > > +static const struct aiu_platform_data aiu_gxbb_pdata = { > + .has_acodec = false, > +}; > + > +static const struct aiu_platform_data aiu_gxl_pdata = { > + .has_acodec = true, > +}; > + > static const struct of_device_id aiu_of_match[] = { > - { .compatible = "amlogic,aiu-gxbb", }, > - { .compatible = "amlogic,aiu-gxl", }, > + { .compatible = "amlogic,aiu-gxbb", .data = &aiu_gxbb_pdata }, > + { .compatible = "amlogic,aiu-gxl", .data = &aiu_gxl_pdata }, > {} > }; > MODULE_DEVICE_TABLE(of, aiu_of_match); > diff --git a/sound/soc/meson/aiu.h b/sound/soc/meson/aiu.h > index 06a968c55728..ab003638d5e5 100644 > --- a/sound/soc/meson/aiu.h > +++ b/sound/soc/meson/aiu.h > @@ -27,11 +27,16 @@ struct aiu_interface { > int irq; > }; > > +struct aiu_platform_data { > + bool has_acodec; > +}; > + > struct aiu { > struct clk *pclk; > struct clk *spdif_mclk; > struct aiu_interface i2s; > struct aiu_interface spdif; > + const struct aiu_platform_data *platform; > }; > > #define AIU_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \