dm: fix logic of lists_bind_fdt()
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Mon, 11 Jul 2022 06:25:33 +0000 (08:25 +0200)
committerSimon Glass <sjg@chromium.org>
Tue, 26 Jul 2022 08:30:56 +0000 (02:30 -0600)
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>
drivers/core/lists.c

index 93514a7..c49695b 100644 (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;
                }