diff --git a/sound/soc/tegra/tegra210_mbdrc.c b/sound/soc/tegra/tegra210_mbdrc.c index d1d18b70..d3f769fa 100644 --- a/sound/soc/tegra/tegra210_mbdrc.c +++ b/sound/soc/tegra/tegra210_mbdrc.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -867,16 +868,31 @@ int tegra210_mbdrc_codec_init(struct snd_soc_component *cmpnt) } EXPORT_SYMBOL_GPL(tegra210_mbdrc_codec_init); -int tegra210_mbdrc_init(struct platform_device *pdev, int id) +int tegra210_mbdrc_regmap_init(struct platform_device *pdev) { - struct tegra210_ope *ope = dev_get_drvdata(&pdev->dev); - struct resource *mem; + struct device *dev = &pdev->dev; + struct tegra210_ope *ope = dev_get_drvdata(dev); + struct device_node *child; + struct resource mem; void __iomem *regs; + int err; - mem = platform_get_resource(pdev, IORESOURCE_MEM, id); - regs = devm_ioremap_resource(&pdev->dev, mem); + child = of_get_child_by_name(dev->of_node, "dynamic-range-compressor"); + if (!child) + return -ENODEV; + + err = of_address_to_resource(child, 0, &mem); + of_node_put(child); + if (err < 0) { + dev_err(dev, "fail to get MBDRC resource\n"); + return err; + } + + mem.flags = IORESOURCE_MEM; + regs = devm_ioremap_resource(&pdev->dev, &mem); if (IS_ERR(regs)) return PTR_ERR(regs); + ope->mbdrc_regmap = devm_regmap_init_mmio(&pdev->dev, regs, &tegra210_mbdrc_regmap_config); @@ -885,9 +901,11 @@ int tegra210_mbdrc_init(struct platform_device *pdev, int id) return PTR_ERR(ope->mbdrc_regmap); } + regcache_cache_only(ope->mbdrc_regmap, true); + return 0; } -EXPORT_SYMBOL_GPL(tegra210_mbdrc_init); +EXPORT_SYMBOL_GPL(tegra210_mbdrc_regmap_init); MODULE_AUTHOR("Sumit Bhattacharya "); MODULE_DESCRIPTION("Tegra210 MBDRC module"); diff --git a/sound/soc/tegra/tegra210_ope.c b/sound/soc/tegra/tegra210_ope.c index 64fdb2bb..522464c3 100644 --- a/sound/soc/tegra/tegra210_ope.c +++ b/sound/soc/tegra/tegra210_ope.c @@ -328,22 +328,18 @@ static int tegra210_ope_platform_probe(struct platform_device *pdev) dev_set_drvdata(dev, ope); - err = tegra210_peq_init(pdev, TEGRA210_PEQ_IORESOURCE_MEM); + err = tegra210_peq_regmap_init(pdev); if (err < 0) { - dev_err(dev, "peq init failed\n"); + dev_err(dev, "PEQ init failed\n"); return err; } - regcache_cache_only(ope->peq_regmap, true); - - err = tegra210_mbdrc_init(pdev, TEGRA210_MBDRC_IORESOURCE_MEM); + err = tegra210_mbdrc_regmap_init(pdev); if (err < 0) { - dev_err(dev, "mbdrc init failed\n"); + dev_err(dev, "MBDRC init failed\n"); return err; } - regcache_cache_only(ope->mbdrc_regmap, true); - err = devm_snd_soc_register_component(dev, &tegra210_ope_cmpnt, tegra210_ope_dais, ARRAY_SIZE(tegra210_ope_dais)); diff --git a/sound/soc/tegra/tegra210_ope.h b/sound/soc/tegra/tegra210_ope.h index cd386a56..ae1e44f2 100644 --- a/sound/soc/tegra/tegra210_ope.h +++ b/sound/soc/tegra/tegra210_ope.h @@ -68,11 +68,11 @@ struct tegra210_ope { u32 peq_biquad_shifts[TEGRA210_PEQ_SHIFT_PARAM_SIZE_PER_CH]; }; -extern int tegra210_peq_init(struct platform_device *pdev, int id); +extern int tegra210_peq_regmap_init(struct platform_device *pdev); extern int tegra210_peq_codec_init(struct snd_soc_component *cmpnt); extern void tegra210_peq_restore(struct tegra210_ope *ope); extern void tegra210_peq_save(struct tegra210_ope *ope); -extern int tegra210_mbdrc_init(struct platform_device *pdev, int id); +extern int tegra210_mbdrc_regmap_init(struct platform_device *pdev); extern int tegra210_mbdrc_codec_init(struct snd_soc_component *cmpnt); extern int tegra210_mbdrc_hw_params(struct snd_soc_component *cmpnt); diff --git a/sound/soc/tegra/tegra210_peq.c b/sound/soc/tegra/tegra210_peq.c index 25f529c4..847394de 100644 --- a/sound/soc/tegra/tegra210_peq.c +++ b/sound/soc/tegra/tegra210_peq.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -354,15 +355,28 @@ int tegra210_peq_codec_init(struct snd_soc_component *cmpnt) } EXPORT_SYMBOL_GPL(tegra210_peq_codec_init); -int tegra210_peq_init(struct platform_device *pdev, int id) +int tegra210_peq_regmap_init(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct tegra210_ope *ope = dev_get_drvdata(dev); - struct resource *mem; + struct device_node *child; + struct resource mem; void __iomem *regs; + int err; - mem = platform_get_resource(pdev, IORESOURCE_MEM, id); - regs = devm_ioremap_resource(dev, mem); + child = of_get_child_by_name(dev->of_node, "equalizer"); + if (!child) + return -ENODEV; + + err = of_address_to_resource(child, 0, &mem); + of_node_put(child); + if (err < 0) { + dev_err(dev, "fail to get PEQ resource\n"); + return err; + } + + mem.flags = IORESOURCE_MEM; + regs = devm_ioremap_resource(dev, &mem); if (IS_ERR(regs)) return PTR_ERR(regs); ope->peq_regmap = devm_regmap_init_mmio(dev, regs, @@ -372,9 +386,11 @@ int tegra210_peq_init(struct platform_device *pdev, int id) return PTR_ERR(ope->peq_regmap); } + regcache_cache_only(ope->peq_regmap, true); + return 0; } -EXPORT_SYMBOL_GPL(tegra210_peq_init); +EXPORT_SYMBOL_GPL(tegra210_peq_regmap_init); MODULE_AUTHOR("Sumit Bhattacharya "); MODULE_DESCRIPTION("Tegra210 PEQ module");