提交 7b8b47bd 编写于 作者: M Masahiro Yamada

ofnode: add {ofnode, dev}_read_resource_byname()

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: NMasahiro Yamada <yamada.masahiro@socionext.com>
Reviewed-by: NSimon Glass <sjg@chromium.org>
上级 8b3cec7d
...@@ -627,3 +627,15 @@ int ofnode_read_resource(ofnode node, uint index, struct resource *res) ...@@ -627,3 +627,15 @@ int ofnode_read_resource(ofnode node, uint index, struct resource *res)
return 0; 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);
}
...@@ -164,3 +164,9 @@ int dev_read_resource(struct udevice *dev, uint index, struct resource *res) ...@@ -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); 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);
}
...@@ -625,5 +625,7 @@ int ofnode_read_simple_size_cells(ofnode node); ...@@ -625,5 +625,7 @@ int ofnode_read_simple_size_cells(ofnode node);
bool ofnode_pre_reloc(ofnode node); bool ofnode_pre_reloc(ofnode node);
int ofnode_read_resource(ofnode node, uint index, struct resource *res); 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 #endif
...@@ -359,13 +359,24 @@ int dev_read_enabled(struct udevice *dev); ...@@ -359,13 +359,24 @@ int dev_read_enabled(struct udevice *dev);
/** /**
* dev_read_resource() - obtain an indexed resource from a device. * 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) * @index index of the resource to retrieve (0 = first)
* @res returns the resource * @res returns the resource
* @return 0 if ok, negative on error * @return 0 if ok, negative on error
*/ */
int dev_read_resource(struct udevice *dev, uint index, struct resource *res); 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 */ #else /* CONFIG_DM_DEV_READ_INLINE is enabled */
static inline int dev_read_u32_default(struct udevice *dev, 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, ...@@ -513,6 +524,13 @@ static inline int dev_read_resource(struct udevice *dev, uint index,
return ofnode_read_resource(dev_ofnode(dev), index, res); 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 */ #endif /* CONFIG_DM_DEV_READ_INLINE */
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册