aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2020-02-06 09:54:50 -0700
committerBin Meng <bmeng.cn@gmail.com>2020-02-07 22:41:24 +0800
commit50162348f0d3b915004733131acd81805e202c76 (patch)
tree56db3ef185e028253871f7f0ecd7d3c7a80e366a /drivers
parent3cf0fba4ff862d833545f82fb2209ff3c79d17b5 (diff)
downloadu-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')
-rw-r--r--drivers/core/uclass.c17
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;