summaryrefslogtreecommitdiffstats
path: root/drivers/of/base.c
diff options
context:
space:
mode:
authorSebastian Hesselbarth <sebastian.hesselbarth@gmail.com>2013-06-14 17:34:23 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2013-06-20 21:20:55 +0200
commit2fe4a860eb856a4b4218983497d30b4d5c356e98 (patch)
treeedc1809fd5c59b83f07da61ed2a4a4094db57634 /drivers/of/base.c
parenta0b6c0d00ac947686de03644d4521ecbc28fff0d (diff)
downloadbarebox-2fe4a860eb856a4b4218983497d30b4d5c356e98.tar.gz
barebox-2fe4a860eb856a4b4218983497d30b4d5c356e98.tar.xz
OF: base: import property iterators from Linux OF API
This imports of_prop_next_u32, of_prop_next_string, and the corresponding for_property_for_each_ helpers from Linux OF API. Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Diffstat (limited to 'drivers/of/base.c')
-rw-r--r--drivers/of/base.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 478de9dd0c..2d53b14259 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -797,6 +797,47 @@ int of_property_count_strings(struct device_node *np, const char *propname)
}
EXPORT_SYMBOL_GPL(of_property_count_strings);
+const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur,
+ u32 *pu)
+{
+ const void *curv = cur;
+
+ if (!prop)
+ return NULL;
+
+ if (!cur) {
+ curv = prop->value;
+ goto out_val;
+ }
+
+ curv += sizeof(*cur);
+ if (curv >= prop->value + prop->length)
+ return NULL;
+
+out_val:
+ *pu = be32_to_cpup(curv);
+ return curv;
+}
+EXPORT_SYMBOL_GPL(of_prop_next_u32);
+
+const char *of_prop_next_string(struct property *prop, const char *cur)
+{
+ const void *curv = cur;
+
+ if (!prop)
+ return NULL;
+
+ if (!cur)
+ return prop->value;
+
+ curv += strlen(cur) + 1;
+ if (curv >= prop->value + prop->length)
+ return NULL;
+
+ return curv;
+}
+EXPORT_SYMBOL_GPL(of_prop_next_string);
+
/**
* of_property_write_bool - Create/Delete empty (bool) property.
*