dm: fix logic of lists_bind_fdt()

If parameter drv of lists_bind_fdt() is specified, we shall bind only to
this very driver and to no other.

If the driver drv has an of_match property, we shall only bind to the
driver if it matches the compatible string of the device.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Heinrich Schuchardt 2022-07-11 08:25:33 +02:00 committed by Simon Glass
parent 9396116d2d
commit de84a4f0ee

View file

@ -223,10 +223,14 @@ int lists_bind_fdt(struct udevice *parent, ofnode node, struct udevice **devp,
compat);
for (entry = driver; entry != driver + n_ents; entry++) {
if (drv) {
if (drv != entry)
continue;
if (!entry->of_match)
break;
}
ret = driver_check_compatible(entry->of_match, &id,
compat);
if ((drv) && (drv == entry))
break;
if (!ret)
break;
}