Introduce of_address_count() helper to count the IO resources instead of open-coding it. Signed-off-by: Yang Yingliang <yangyingliang@xxxxxxxxxx> --- drivers/of/address.c | 11 +++++++++++ include/linux/of_address.h | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/drivers/of/address.c b/drivers/of/address.c index 96f0a12e507c..e32846a9a8d5 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -848,6 +848,17 @@ int of_address_to_resource(struct device_node *dev, int index, } EXPORT_SYMBOL_GPL(of_address_to_resource); +int of_address_count(struct device_node *np) +{ + struct resource res; + int count = 0; + + while (of_address_to_resource(np, count, &res) == 0) + count++; + + return count; +} + /** * of_iomap - Maps the memory mapped IO for a given device_node * @np: the device whose io range will be mapped diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 45598dbec269..63027e8f3397 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h @@ -43,6 +43,7 @@ extern u64 of_translate_dma_address(struct device_node *dev, extern u64 of_translate_address(struct device_node *np, const __be32 *addr); extern int of_address_to_resource(struct device_node *dev, int index, struct resource *r); +extern int of_address_count(struct device_node *np); extern void __iomem *of_iomap(struct device_node *device, int index); void __iomem *of_io_request_and_map(struct device_node *device, int index, const char *name); @@ -127,6 +128,7 @@ static inline bool of_dma_is_coherent(struct device_node *np) #ifdef CONFIG_OF extern int of_address_to_resource(struct device_node *dev, int index, struct resource *r); +extern int of_address_count(struct device_node *np); void __iomem *of_iomap(struct device_node *node, int index); #else static inline int of_address_to_resource(struct device_node *dev, int index, @@ -139,6 +141,11 @@ static inline void __iomem *of_iomap(struct device_node *device, int index) { return NULL; } + +static inline int of_address_count(struct device_node *np) +{ + return 0; +} #endif #define of_range_parser_init of_pci_range_parser_init -- 2.25.1