mmc: fsl_esdhc: workaround for hardware 3.3v IO reliability issue
[oweals/u-boot.git] / drivers / core / of_access.c
index 8b2ce7a0c21b5272548007af8a67087e78fac080..922e78f99b8275b812c395ef9968dfb534279baa 100644 (file)
@@ -20,7 +20,9 @@
  */
 
 #include <common.h>
+#include <log.h>
 #include <malloc.h>
+#include <linux/bug.h>
 #include <linux/libfdt.h>
 #include <dm/of_access.h>
 #include <linux/ctype.h>
@@ -171,6 +173,38 @@ const void *of_get_property(const struct device_node *np, const char *name,
        return pp ? pp->value : NULL;
 }
 
+const struct property *of_get_first_property(const struct device_node *np)
+{
+       if (!np)
+               return NULL;
+
+       return  np->properties;
+}
+
+const struct property *of_get_next_property(const struct device_node *np,
+                                           const struct property *property)
+{
+       if (!np)
+               return NULL;
+
+       return property->next;
+}
+
+const void *of_get_property_by_prop(const struct device_node *np,
+                                   const struct property *property,
+                                   const char **name,
+                                   int *lenp)
+{
+       if (!np || !property)
+               return NULL;
+       if (name)
+               *name = property->name;
+       if (lenp)
+               *lenp = property->length;
+
+       return property->value;
+}
+
 static const char *of_prop_next_string(struct property *prop, const char *cur)
 {
        const void *curv = cur;
@@ -449,21 +483,7 @@ static void *of_find_property_value_of_size(const struct device_node *np,
 
 int of_read_u32(const struct device_node *np, const char *propname, u32 *outp)
 {
-       const __be32 *val;
-
-       debug("%s: %s: ", __func__, propname);
-       if (!np)
-               return -EINVAL;
-       val = of_find_property_value_of_size(np, propname, sizeof(*outp));
-       if (IS_ERR(val)) {
-               debug("(not found)\n");
-               return PTR_ERR(val);
-       }
-
-       *outp = be32_to_cpup(val);
-       debug("%#x (%d)\n", *outp, *outp);
-
-       return 0;
+       return of_read_u32_index(np, propname, 0, outp);
 }
 
 int of_read_u32_array(const struct device_node *np, const char *propname,