dm: core: Add function to get child count of ofnode or device

This patch add function used to get the child count of
a ofnode or a device

Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
Reviewed-by: Weijie Gao <weijie.gao@mediatek.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Chunfeng Yun 2020-05-02 11:35:09 +02:00 committed by Marek Vasut
parent c693f212c5
commit 89b84b85e9
4 changed files with 37 additions and 0 deletions

View File

@ -474,6 +474,17 @@ ofnode ofnode_get_chosen_node(const char *name)
return ofnode_path(prop);
}
int ofnode_get_child_count(ofnode parent)
{
ofnode child;
int num = 0;
ofnode_for_each_subnode(child, parent)
num++;
return num;
}
static int decode_timing_property(ofnode node, const char *name,
struct timing_entry *result)
{

View File

@ -352,3 +352,8 @@ fdt_addr_t dev_read_addr_pci(const struct udevice *dev)
return addr;
}
int dev_get_child_count(const struct udevice *dev)
{
return ofnode_get_child_count(dev_ofnode(dev));
}

View File

@ -879,6 +879,14 @@ ofnode ofnode_by_prop_value(ofnode from, const char *propname,
ofnode_valid(node); \
node = ofnode_next_subnode(node))
/**
* ofnode_get_child_count() - get the child count of a ofnode
*
* @node: valid node to get its child count
* @return the number of subnodes
*/
int ofnode_get_child_count(ofnode parent);
/**
* ofnode_translate_address() - Translate a device-tree address
*

View File

@ -669,6 +669,14 @@ u64 dev_translate_dma_address(const struct udevice *dev,
*/
int dev_read_alias_highest_id(const char *stem);
/**
* dev_get_child_count() - get the child count of a device
*
* @dev: device to use for interation (struct udevice *)
* @return the count of child subnode
*/
int dev_get_child_count(const struct udevice *dev);
#else /* CONFIG_DM_DEV_READ_INLINE is enabled */
static inline int dev_read_u32(const struct udevice *dev,
@ -978,6 +986,11 @@ static inline int dev_read_alias_highest_id(const char *stem)
return fdtdec_get_alias_highest_id(gd->fdt_blob, stem);
}
static inline int dev_get_child_count(const struct udevice *dev)
{
return ofnode_get_child_count(dev_ofnode(dev));
}
#endif /* CONFIG_DM_DEV_READ_INLINE */
/**