From: Venkatesh Yadav Abbarapu Date: Mon, 25 Nov 2024 04:12:02 +0000 (+0530) Subject: usb: onboard-hub: Bail out if peer hub is already probed X-Git-Url: http://git.dujemihanovic.xyz/html/%7B%7B%20%28.OutputFormats.Get?a=commitdiff_plain;h=57e30b09fcfc88da72c310f979b35ed99a9b277c;p=u-boot.git usb: onboard-hub: Bail out if peer hub is already probed 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 Reviewed-by: Marek Vasut --- diff --git a/common/usb_onboard_hub.c b/common/usb_onboard_hub.c index bf71266272..6f28036e09 100644 --- a/common/usb_onboard_hub.c +++ b/common/usb_onboard_hub.c @@ -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,