diff options
author | Simon Glass <sjg@chromium.org> | 2020-02-06 09:54:50 -0700 |
---|---|---|
committer | Bin Meng <bmeng.cn@gmail.com> | 2020-02-07 22:41:24 +0800 |
commit | 50162348f0d3b915004733131acd81805e202c76 (patch) | |
tree | 56db3ef185e028253871f7f0ecd7d3c7a80e366a /drivers/core | |
parent | 3cf0fba4ff862d833545f82fb2209ff3c79d17b5 (diff) | |
download | u-boot-50162348f0d3b915004733131acd81805e202c76.zip u-boot-50162348f0d3b915004733131acd81805e202c76.tar.gz u-boot-50162348f0d3b915004733131acd81805e202c76.tar.bz2 |
dm: core: Add a function to find a device by drvdata
It is sometimes useful to find a device in a uclass using only its driver
data. The driver data often indicates the 'subtype' of the device, e,g,
via its compatible string.
Add a function to handle this.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Diffstat (limited to 'drivers/core')
-rw-r--r-- | drivers/core/uclass.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c index c520ef1..61192d8 100644 --- a/drivers/core/uclass.c +++ b/drivers/core/uclass.c @@ -629,6 +629,23 @@ int uclass_next_device_check(struct udevice **devp) return device_probe(*devp); } +int uclass_first_device_drvdata(enum uclass_id id, ulong driver_data, + struct udevice **devp) +{ + struct udevice *dev; + struct uclass *uc; + + uclass_id_foreach_dev(id, dev, uc) { + if (dev_get_driver_data(dev) == driver_data) { + *devp = dev; + + return device_probe(dev); + } + } + + return -ENODEV; +} + int uclass_bind_device(struct udevice *dev) { struct uclass *uc; |