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: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Rob Herring <robh@kernel.org>
This commit is contained in:
Joerg Roedel 2016-04-04 17:49:21 +02:00 committed by Rob Herring
parent f623ce95a5
commit abdaa77b18
2 changed files with 33 additions and 6 deletions

View File

@ -1534,6 +1534,23 @@ err:
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,
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);
} }

View File

@ -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)
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;