diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 8c35ca59a99d..631929da4803 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -2075,6 +2075,10 @@ static int dwc3_probe(struct platform_device *pdev) pm_runtime_set_autosuspend_delay(dev, 100); pm_runtime_allow(dev); pm_runtime_put_sync_suspend(dev); + + if (dwc->edev && extcon_get_state(dwc->edev, EXTCON_USB_HOST)) + dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST); + return 0; } diff --git a/drivers/usb/dwc3/drd.c b/drivers/usb/dwc3/drd.c index a96cca41efa4..3bf470032e1f 100644 --- a/drivers/usb/dwc3/drd.c +++ b/drivers/usb/dwc3/drd.c @@ -421,6 +421,13 @@ static void dwc3_drd_update(struct dwc3 *dwc) if (id < 0) id = 0; + if ((id > 0) && dwc->dr_mode == USB_DR_MODE_OTG && + (of_device_is_compatible(dwc->dev->parent->of_node, + "rockchip,rk3399-dwc3") || + of_device_is_compatible(dwc->dev->of_node, + "rockchip,rk3576-dwc3"))) + return; + #if defined(CONFIG_ARCH_ROCKCHIP) && defined(CONFIG_NO_GKI) if (extcon_get_state(dwc->edev, EXTCON_USB)) dwc->desired_role_sw_mode = USB_DR_MODE_PERIPHERAL;