Merge tag 'spi-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/misc
[deliverable/linux.git] / drivers / of / base.c
index d9bfd49b193503f61977a7a1c253e0a981ba07b1..c181b94abc363b64a4a38c2e39625b7564dc2267 100644 (file)
@@ -173,9 +173,9 @@ struct property *of_find_property(const struct device_node *np,
                return NULL;
 
        read_lock(&devtree_lock);
-       for (pp = np->properties; pp != 0; pp = pp->next) {
+       for (pp = np->properties; pp; pp = pp->next) {
                if (of_prop_cmp(pp->name, name) == 0) {
-                       if (lenp != 0)
+                       if (lenp)
                                *lenp = pp->length;
                        break;
                }
@@ -497,7 +497,7 @@ struct device_node *of_find_node_with_property(struct device_node *from,
        read_lock(&devtree_lock);
        np = from ? from->allnext : allnodes;
        for (; np; np = np->allnext) {
-               for (pp = np->properties; pp != 0; pp = pp->next) {
+               for (pp = np->properties; pp; pp = pp->next) {
                        if (of_prop_cmp(pp->name, prop_name) == 0) {
                                of_node_get(np);
                                goto out;
@@ -902,7 +902,7 @@ int of_parse_phandle_with_args(struct device_node *np, const char *list_name,
        /* Retrieve the phandle list property */
        list = of_get_property(np, list_name, &size);
        if (!list)
-               return -EINVAL;
+               return -ENOENT;
        list_end = list + size / sizeof(*list);
 
        /* Loop over the phandles until all the requested entry is found */
@@ -1051,7 +1051,8 @@ int prom_remove_property(struct device_node *np, struct property *prop)
 }
 
 /*
- * prom_update_property - Update a property in a node.
+ * prom_update_property - Update a property in a node, if the property does
+ * not exist, add it.
  *
  * Note that we don't actually remove it, since we have given out
  * who-knows-how-many pointers to the data using get-property.
@@ -1059,13 +1060,19 @@ int prom_remove_property(struct device_node *np, struct property *prop)
  * and add the new property to the property list
  */
 int prom_update_property(struct device_node *np,
-                        struct property *newprop,
-                        struct property *oldprop)
+                        struct property *newprop)
 {
-       struct property **next;
+       struct property **next, *oldprop;
        unsigned long flags;
        int found = 0;
 
+       if (!newprop->name)
+               return -EINVAL;
+
+       oldprop = of_find_property(np, newprop->name, NULL);
+       if (!oldprop)
+               return prom_add_property(np, newprop);
+
        write_lock_irqsave(&devtree_lock, flags);
        next = &np->properties;
        while (*next) {
@@ -1173,7 +1180,7 @@ static void of_alias_add(struct alias_prop *ap, struct device_node *np,
        ap->stem[stem_len] = 0;
        list_add_tail(&ap->link, &aliases_lookup);
        pr_debug("adding DT alias:%s: stem=%s id=%i node=%s\n",
-                ap->alias, ap->stem, ap->id, np ? np->full_name : NULL);
+                ap->alias, ap->stem, ap->id, of_node_full_name(np));
 }
 
 /**
This page took 0.024721 seconds and 5 git commands to generate.