[RFC][PATCH] syscon: Add syscon_regmap_lookup_by_compatible wrapper

Add a wrapper to look up a system controller by a compatible string.
This operates by looking up the given name in the device (device tree property) of the device using the system controller.
Signed-off-by: Marek Vasut marex@denx.de --- Cc: Johan Jonker jbx6244@gmail.com Cc: Simon Glass sjg@chromium.org Cc: Sumit Garg sumit.garg@linaro.org Cc: Tom Rini trini@konsulko.com --- drivers/core/syscon-uclass.c | 27 +++++++++++++++++++++++++++ include/syscon.h | 13 +++++++++++++ 2 files changed, 40 insertions(+)
diff --git a/drivers/core/syscon-uclass.c b/drivers/core/syscon-uclass.c index a47b8bd3c01..b89006c030d 100644 --- a/drivers/core/syscon-uclass.c +++ b/drivers/core/syscon-uclass.c @@ -111,6 +111,33 @@ static int syscon_probe_by_ofnode(ofnode node, struct udevice **devp) return 0; }
+struct regmap *syscon_regmap_lookup_by_compatible(struct udevice *dev, + const char *compatible) +{ + struct udevice *syscon; + struct regmap *r; + ofnode node; + int err; + + node = ofnode_by_compatible(ofnode_null(), compatible); + if (!ofnode_valid(node)) { + dev_dbg(dev, "unable to find syscon device\n"); + return ERR_PTR(-EINVAL); + } + + err = syscon_probe_by_ofnode(node, &syscon); + if (err) + return ERR_PTR(-ENODEV); + + r = syscon_get_regmap(syscon); + if (!r) { + dev_dbg(dev, "unable to find regmap\n"); + return ERR_PTR(-ENODEV); + } + + return r; +} + struct regmap *syscon_regmap_lookup_by_phandle(struct udevice *dev, const char *name) { diff --git a/include/syscon.h b/include/syscon.h index 7a5ee3fa26b..88f264d801b 100644 --- a/include/syscon.h +++ b/include/syscon.h @@ -60,6 +60,19 @@ int syscon_get_by_driver_data(ulong driver_data, struct udevice **devp); */ struct regmap *syscon_get_regmap_by_driver_data(ulong driver_data);
+/** + * syscon_regmap_lookup_by_compatible() - Look up a controller by a compatible string + * + * This operates by looking up the given name in the device (device + * tree property) of the device using the system controller. + * + * @dev: Device using the system controller + * @compatible: Compatible string of the system controller + * Return: A pointer to the regmap if found, ERR_PTR(-ve) on error + */ +struct regmap *syscon_regmap_lookup_by_compatible(struct udevice *dev, + const char *compatible); + /** * syscon_regmap_lookup_by_phandle() - Look up a controller by a phandle *
participants (1)
-
Marek Vasut