Signed-off-by: Alexander Shiyan <shc_work@xxxxxxx> --- drivers/mfd/syscon.c | 20 ++++++++++++++++++++ include/mfd/syscon.h | 8 ++++++++ 2 files changed, 28 insertions(+) diff --git a/drivers/mfd/syscon.c b/drivers/mfd/syscon.c index 52cb433..6437344 100644 --- a/drivers/mfd/syscon.c +++ b/drivers/mfd/syscon.c @@ -41,6 +41,26 @@ void __iomem *syscon_base_lookup_by_pdevname(const char *s) return ERR_PTR(-ENODEV); } +void __iomem *syscon_base_lookup_by_phandle(struct device_node *np, + const char *property) +{ + struct device_node *node; + struct syscon *syscon; + struct device_d *dev; + + node = of_parse_phandle(np, property, 0); + if (!node) + return ERR_PTR(-ENODEV); + + dev = of_find_device_by_node(node); + if (!dev) + return ERR_PTR(-ENODEV); + + syscon = dev->priv; + + return syscon->base; +} + static int syscon_probe(struct device_d *dev) { struct syscon *syscon; diff --git a/include/mfd/syscon.h b/include/mfd/syscon.h index 68432b7..0eccd5c 100644 --- a/include/mfd/syscon.h +++ b/include/mfd/syscon.h @@ -16,11 +16,19 @@ #ifdef CONFIG_MFD_SYSCON void __iomem *syscon_base_lookup_by_pdevname(const char *); +void __iomem *syscon_base_lookup_by_phandle + (struct device_node *np, const char *property); #else static inline void __iomem *syscon_base_lookup_by_pdevname(const char *) { return NULL; } + +static inline void __iomem *syscon_base_lookup_by_phandle + (struct device_node *np, const char *property) +{ + return NULL; +} #endif #endif -- 1.8.3.2 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox