@@ -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)
{
@@ -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
*
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(+)