mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
usb: dwc3-generic: Relax unsupported dr_mode check
When dr_mode is peripheral or otg and U-Boot has not been built with
DM_USB_GADGET support, booting such device may end up with:
dwc3_glue_bind_common: subnode name: usb@fcc00000
Error binding driver 'dwc3-generic-wrapper': -6
Some drivers failed to bind
initcall sequence 00000000effbca08 failed at call 0000000000a217c8 (err=-6)
### ERROR ### Please RESET the board ###
Instead fail gracfully with ENODEV to allow board continue booting.
dwc3_glue_bind_common: subnode name: usb@fcc00000
dwc3_glue_bind_common: unsupported dr_mode 3
Also use CONFIG_IS_ENABLED(USB_HOST) and change switch to if statements
to improve readability of the code.
Fixes: 446e3a205b ("dwc3-generic: Handle the PHYs, the clocks and the reset lines")
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Reviewed-by: Marek Vasut <marex@denx.de>
This commit is contained in:
committed by
Kever Yang
parent
4412a2bf0b
commit
6913c30516
@@ -226,8 +226,7 @@ U_BOOT_DRIVER(dwc3_generic_peripheral) = {
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPL_USB_HOST) || \
|
||||
!defined(CONFIG_SPL_BUILD) && defined(CONFIG_USB_HOST)
|
||||
#if CONFIG_IS_ENABLED(USB_HOST)
|
||||
static int dwc3_generic_host_probe(struct udevice *dev)
|
||||
{
|
||||
struct xhci_hcor *hcor;
|
||||
@@ -409,7 +408,7 @@ struct dwc3_glue_ops ti_ops = {
|
||||
static int dwc3_glue_bind_common(struct udevice *parent, ofnode node)
|
||||
{
|
||||
const char *name = ofnode_get_name(node);
|
||||
const char *driver = NULL;
|
||||
const char *driver;
|
||||
enum usb_dr_mode dr_mode;
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
@@ -421,27 +420,17 @@ static int dwc3_glue_bind_common(struct udevice *parent, ofnode node)
|
||||
if (!dr_mode)
|
||||
dr_mode = usb_get_dr_mode(node);
|
||||
|
||||
switch (dr_mode) {
|
||||
case USB_DR_MODE_PERIPHERAL:
|
||||
case USB_DR_MODE_OTG:
|
||||
#if CONFIG_IS_ENABLED(DM_USB_GADGET)
|
||||
if (CONFIG_IS_ENABLED(DM_USB_GADGET) &&
|
||||
(dr_mode == USB_DR_MODE_PERIPHERAL || dr_mode == USB_DR_MODE_OTG)) {
|
||||
debug("%s: dr_mode: OTG or Peripheral\n", __func__);
|
||||
driver = "dwc3-generic-peripheral";
|
||||
#endif
|
||||
break;
|
||||
#if defined(CONFIG_SPL_USB_HOST) || !defined(CONFIG_SPL_BUILD)
|
||||
case USB_DR_MODE_HOST:
|
||||
} else if (CONFIG_IS_ENABLED(USB_HOST) && dr_mode == USB_DR_MODE_HOST) {
|
||||
debug("%s: dr_mode: HOST\n", __func__);
|
||||
driver = "dwc3-generic-host";
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
debug("%s: unsupported dr_mode\n", __func__);
|
||||
} else {
|
||||
debug("%s: unsupported dr_mode %d\n", __func__, dr_mode);
|
||||
return -ENODEV;
|
||||
};
|
||||
|
||||
if (!driver)
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
ret = device_bind_driver_to_node(parent, driver, name,
|
||||
node, &dev);
|
||||
|
||||
Reference in New Issue
Block a user