This can be used by both tegra-smmu and tegra20-devfreq drivers. Suggested-by: Dmitry Osipenko <digetx@xxxxxxxxx> Signed-off-by: Nicolin Chen <nicoleotsuka@xxxxxxxxx> --- Changelog v1->v2 * N/A drivers/memory/tegra/mc.c | 23 +++++++++++++++++++++++ include/soc/tegra/mc.h | 1 + 2 files changed, 24 insertions(+) diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c index ec8403557ed4..09352ad66dcc 100644 --- a/drivers/memory/tegra/mc.c +++ b/drivers/memory/tegra/mc.c @@ -42,6 +42,29 @@ static const struct of_device_id tegra_mc_of_match[] = { }; MODULE_DEVICE_TABLE(of, tegra_mc_of_match); +struct tegra_mc *tegra_get_memory_controller(void) +{ + struct platform_device *pdev; + struct device_node *np; + struct tegra_mc *mc; + + np = of_find_matching_node_and_match(NULL, tegra_mc_of_match, NULL); + if (!np) + return ERR_PTR(-ENOENT); + + pdev = of_find_device_by_node(np); + of_node_put(np); + if (!pdev) + return ERR_PTR(-ENODEV); + + mc = platform_get_drvdata(pdev); + if (!mc) + return ERR_PTR(-EPROBE_DEFER); + + return mc; +} +EXPORT_SYMBOL_GPL(tegra_get_memory_controller); + static int tegra_mc_block_dma_common(struct tegra_mc *mc, const struct tegra_mc_reset *rst) { diff --git a/include/soc/tegra/mc.h b/include/soc/tegra/mc.h index 1238e35653d1..c72718fd589f 100644 --- a/include/soc/tegra/mc.h +++ b/include/soc/tegra/mc.h @@ -183,5 +183,6 @@ struct tegra_mc { int tegra_mc_write_emem_configuration(struct tegra_mc *mc, unsigned long rate); unsigned int tegra_mc_get_emem_device_count(struct tegra_mc *mc); +struct tegra_mc *tegra_get_memory_controller(void); #endif /* __SOC_TEGRA_MC_H__ */ -- 2.17.1