X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=drivers%2Fcore%2Fdevice.c;h=9538874017ac4865acc30177b6982b1e6e0f4fd1;hb=a8981d4f80b010666ad754d20a4f389f94d6726d;hp=ef41a9be3edc3d9cb20247f5026bd720a265d5a7;hpb=91cbd792c46c916ef196c5b7cd16ff592d2f3632;p=platform%2Fkernel%2Fu-boot.git diff --git a/drivers/core/device.c b/drivers/core/device.c index ef41a9b..9538874 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -109,6 +109,8 @@ int device_bind(struct udevice *parent, struct driver *drv, const char *name, dev->seq = -1; #ifdef CONFIG_OF_CONTROL dev->req_seq = fdtdec_get_int(gd->fdt_blob, of_offset, "reg", -1); + if (!IS_ERR_VALUE(dev->req_seq)) + dev->req_seq &= INT_MAX; if (uc->uc_drv->name && of_offset != -1) { fdtdec_get_alias_seq(gd->fdt_blob, uc->uc_drv->name, of_offset, &dev->req_seq); @@ -512,3 +514,30 @@ int device_get_child_by_of_offset(struct udevice *parent, int seq, ret = device_find_child_by_of_offset(parent, seq, &dev); return device_get_device_tail(dev, ret, devp); } + +int device_find_first_child(struct udevice *parent, struct udevice **devp) +{ + if (list_empty(&parent->child_head)) { + *devp = NULL; + } else { + *devp = list_first_entry(&parent->child_head, struct udevice, + sibling_node); + } + + return 0; +} + +int device_find_next_child(struct udevice **devp) +{ + struct udevice *dev = *devp; + struct udevice *parent = dev->parent; + + if (list_is_last(&dev->sibling_node, &parent->child_head)) { + *devp = NULL; + } else { + *devp = list_entry(dev->sibling_node.next, struct udevice, + sibling_node); + } + + return 0; +}