ofnode: add {ofnode, dev}_read_resource_byname()
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Fri, 25 Aug 2017 16:12:30 +0000 (01:12 +0900)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Tue, 29 Aug 2017 14:56:17 +0000 (23:56 +0900)
Linux supports platform_get_resource_byname() to look up a resource
by name.

We want a similar helper.  It is useful when a device node has named
register regions.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/core/ofnode.c
drivers/core/read.c
include/dm/ofnode.h
include/dm/read.h

index c1a2e9f0daefdffef2b7087e91d5b23f86bb1c6e..0685b689d8467061aaa4ed6081538558eaa9fe98 100644 (file)
@@ -627,3 +627,15 @@ int ofnode_read_resource(ofnode node, uint index, struct resource *res)
                return 0;
        }
 }
+
+int ofnode_read_resource_byname(ofnode node, const char *name,
+                               struct resource *res)
+{
+       int index;
+
+       index = ofnode_stringlist_search(node, "reg-names", name);
+       if (index < 0)
+               return index;
+
+       return ofnode_read_resource(node, index, res);
+}
index fe40bed64de3c8f6d164b05a4e13e15eec377d35..6acb33388f560e5f9e828a99193b8a99861442ca 100644 (file)
@@ -164,3 +164,9 @@ int dev_read_resource(struct udevice *dev, uint index, struct resource *res)
 {
        return ofnode_read_resource(dev_ofnode(dev), index, res);
 }
+
+int dev_read_resource_byname(struct udevice *dev, const char *name,
+                            struct resource *res)
+{
+       return ofnode_read_resource_byname(dev_ofnode(dev), name, res);
+}
index 210ddb2e5d7464573ef6d8c85cd0cd1d2a85291a..de2769ed537695416d651660fc568d2d59e60cec 100644 (file)
@@ -625,5 +625,7 @@ int ofnode_read_simple_size_cells(ofnode node);
 bool ofnode_pre_reloc(ofnode node);
 
 int ofnode_read_resource(ofnode node, uint index, struct resource *res);
+int ofnode_read_resource_byname(ofnode node, const char *name,
+                               struct resource *res);
 
 #endif
index c3a4a5611a70aad6fd7b4669524c0f2d461195dd..49d69c990f6eb07f529c12f0af7b1b71b1a3cd1d 100644 (file)
@@ -359,13 +359,24 @@ int dev_read_enabled(struct udevice *dev);
 /**
  * dev_read_resource() - obtain an indexed resource from a device.
  *
- * @dev: devuce to examine
+ * @dev: device to examine
  * @index index of the resource to retrieve (0 = first)
  * @res returns the resource
  * @return 0 if ok, negative on error
  */
 int dev_read_resource(struct udevice *dev, uint index, struct resource *res);
 
+/**
+ * dev_read_resource_byname() - obtain a named resource from a device.
+ *
+ * @dev: device to examine
+ * @name: name of the resource to retrieve
+ * @res: returns the resource
+ * @return 0 if ok, negative on error
+ */
+int dev_read_resource_byname(struct udevice *dev, const char *name,
+                            struct resource *res);
+
 #else /* CONFIG_DM_DEV_READ_INLINE is enabled */
 
 static inline int dev_read_u32_default(struct udevice *dev,
@@ -513,6 +524,13 @@ static inline int dev_read_resource(struct udevice *dev, uint index,
        return ofnode_read_resource(dev_ofnode(dev), index, res);
 }
 
+static inline int dev_read_resource_byname(struct udevice *dev,
+                                          const char *name,
+                                          struct resource *res)
+{
+       return ofnode_read_resource_byname(dev_ofnode(dev), name, res);
+}
+
 #endif /* CONFIG_DM_DEV_READ_INLINE */
 
 /**