]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
usb: onboard-hub: Bail out if peer hub is already probed
authorVenkatesh Yadav Abbarapu <venkatesh.abbarapu@amd.com>
Mon, 25 Nov 2024 04:12:02 +0000 (09:42 +0530)
committerMarek Vasut <marex@denx.de>
Mon, 25 Nov 2024 04:40:49 +0000 (05:40 +0100)
The .bind function is implemented to bind the correct
"half" of the hub that the driver wants to bind,
and returning -ENODEV for the other "half".

Signed-off-by: Venkatesh Yadav Abbarapu <venkatesh.abbarapu@amd.com>
Reviewed-by: Marek Vasut <marex@denx.de>
common/usb_onboard_hub.c

index bf71266272d3f3515e4460e33f919d396964c885..6f28036e095c025ccb034f43b32e9c6fa00894ff 100644 (file)
@@ -176,6 +176,26 @@ err:
        return ret;
 }
 
+static int usb_onboard_hub_bind(struct udevice *dev)
+{
+       struct ofnode_phandle_args phandle;
+       const void *fdt = gd->fdt_blob;
+       int ret, off;
+
+       ret = dev_read_phandle_with_args(dev, "peer-hub", NULL, 0, 0, &phandle);
+       if (ret)  {
+               dev_err(dev, "peer-hub not specified\n");
+               return ret;
+       }
+
+       off = ofnode_to_offset(phandle.node);
+       ret = fdt_node_check_compatible(fdt, off, "usb424,5744");
+       if (!ret)
+               return 0;
+
+       return -ENODEV;
+}
+
 static int usb_onboard_hub_remove(struct udevice *dev)
 {
        struct onboard_hub *hub = dev_get_priv(dev);
@@ -218,6 +238,7 @@ static const struct udevice_id usb_onboard_hub_ids[] = {
 U_BOOT_DRIVER(usb_onboard_hub) = {
        .name   = "usb_onboard_hub",
        .id     = UCLASS_USB_HUB,
+       .bind   = usb_onboard_hub_bind,
        .probe = usb_onboard_hub_probe,
        .remove = usb_onboard_hub_remove,
        .of_match = usb_onboard_hub_ids,