diff options
author | Tom Rini <trini@konsulko.com> | 2020-07-10 16:22:57 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2020-07-10 16:22:57 -0400 |
commit | 4a9146c29573dbfa661918280d9522a01f6ca919 (patch) | |
tree | b1b135237dcfee94a27e8df7ce2208230c28b894 /drivers/core/device.c | |
parent | f30924739975b4f60c0862b539790fdcdb7da20c (diff) | |
parent | 6c3fc50ee59366df62e8345ea9fd86c3ace0c3f1 (diff) |
Merge tag 'dm-pull-10jul20' of https://gitlab.denx.de/u-boot/custodians/u-boot-dm
of-platdata: better phandle and compatible-string support
patman support for Python3 on Ubuntu 14.04
new checkpatch check to avoid #ifdefs
Diffstat (limited to 'drivers/core/device.c')
-rw-r--r-- | drivers/core/device.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/drivers/core/device.c b/drivers/core/device.c index a7408d9c76..476133f172 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -248,10 +248,11 @@ int device_bind_ofnode(struct udevice *parent, const struct driver *drv, } int device_bind_by_name(struct udevice *parent, bool pre_reloc_only, - const struct driver_info *info, struct udevice **devp) + struct driver_info *info, struct udevice **devp) { struct driver *drv; uint platdata_size = 0; + int ret; drv = lists_driver_lookup_name(info->name); if (!drv) @@ -262,9 +263,16 @@ int device_bind_by_name(struct udevice *parent, bool pre_reloc_only, #if CONFIG_IS_ENABLED(OF_PLATDATA) platdata_size = info->platdata_size; #endif - return device_bind_common(parent, drv, info->name, - (void *)info->platdata, 0, ofnode_null(), platdata_size, - devp); + ret = device_bind_common(parent, drv, info->name, + (void *)info->platdata, 0, ofnode_null(), + platdata_size, devp); + if (ret) + return ret; +#if CONFIG_IS_ENABLED(OF_PLATDATA) + info->dev = *devp; +#endif + + return ret; } static void *alloc_priv(int size, uint flags) @@ -729,6 +737,18 @@ int device_get_global_by_ofnode(ofnode ofnode, struct udevice **devp) return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp); } +#if CONFIG_IS_ENABLED(OF_PLATDATA) +int device_get_by_driver_info(const struct driver_info *info, + struct udevice **devp) +{ + struct udevice *dev; + + dev = info->dev; + + return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp); +} +#endif + int device_find_first_child(const struct udevice *parent, struct udevice **devp) { if (list_empty(&parent->child_head)) { |