Commit abdaa77b authored by Joerg Roedel's avatar Joerg Roedel Committed by Rob Herring

of: Introduce of_phandle_iterator_args()

This helper function can be used to copy the arguments of a
phandle to an array.
Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
Signed-off-by: default avatarRob Herring <robh@kernel.org>
parent f623ce95
...@@ -1534,6 +1534,23 @@ int of_phandle_iterator_next(struct of_phandle_iterator *it) ...@@ -1534,6 +1534,23 @@ int of_phandle_iterator_next(struct of_phandle_iterator *it)
return -EINVAL; return -EINVAL;
} }
int of_phandle_iterator_args(struct of_phandle_iterator *it,
uint32_t *args,
int size)
{
int i, count;
count = it->cur_count;
if (WARN_ON(size < count))
count = size;
for (i = 0; i < count; i++)
args[i] = be32_to_cpup(it->cur++);
return count;
}
static int __of_parse_phandle_with_args(const struct device_node *np, static int __of_parse_phandle_with_args(const struct device_node *np,
const char *list_name, const char *list_name,
const char *cells_name, const char *cells_name,
...@@ -1557,13 +1574,13 @@ static int __of_parse_phandle_with_args(const struct device_node *np, ...@@ -1557,13 +1574,13 @@ static int __of_parse_phandle_with_args(const struct device_node *np,
goto err; goto err;
if (out_args) { if (out_args) {
int i; int c;
if (WARN_ON(it.cur_count > MAX_PHANDLE_ARGS))
it.cur_count = MAX_PHANDLE_ARGS; c = of_phandle_iterator_args(&it,
out_args->args,
MAX_PHANDLE_ARGS);
out_args->np = it.node; out_args->np = it.node;
out_args->args_count = it.cur_count; out_args->args_count = c;
for (i = 0; i < it.cur_count; i++)
out_args->args[i] = be32_to_cpup(it.cur++);
} else { } else {
of_node_put(it.node); of_node_put(it.node);
} }
......
...@@ -359,6 +359,9 @@ extern int of_phandle_iterator_init(struct of_phandle_iterator *it, ...@@ -359,6 +359,9 @@ extern int of_phandle_iterator_init(struct of_phandle_iterator *it,
int cell_count); int cell_count);
extern int of_phandle_iterator_next(struct of_phandle_iterator *it); extern int of_phandle_iterator_next(struct of_phandle_iterator *it);
extern int of_phandle_iterator_args(struct of_phandle_iterator *it,
uint32_t *args,
int size);
extern void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)); extern void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align));
extern int of_alias_get_id(struct device_node *np, const char *stem); extern int of_alias_get_id(struct device_node *np, const char *stem);
...@@ -648,6 +651,13 @@ static inline int of_phandle_iterator_next(struct of_phandle_iterator *it) ...@@ -648,6 +651,13 @@ static inline int of_phandle_iterator_next(struct of_phandle_iterator *it)
return -ENOSYS; return -ENOSYS;
} }
static inline int of_phandle_iterator_args(struct of_phandle_iterator *it,
uint32_t *args,
int size)
{
return 0;
}
static inline int of_alias_get_id(struct device_node *np, const char *stem) static inline int of_alias_get_id(struct device_node *np, const char *stem)
{ {
return -ENOSYS; return -ENOSYS;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment