diff options
Diffstat (limited to 'drivers/usb/dwc2/core_intr.c')
-rw-r--r-- | drivers/usb/dwc2/core_intr.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c index 19ae2595f1c3..6af6add3d4c0 100644 --- a/drivers/usb/dwc2/core_intr.c +++ b/drivers/usb/dwc2/core_intr.c | |||
@@ -435,6 +435,18 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg) | |||
435 | /* Restart the Phy Clock */ | 435 | /* Restart the Phy Clock */ |
436 | pcgcctl &= ~PCGCTL_STOPPCLK; | 436 | pcgcctl &= ~PCGCTL_STOPPCLK; |
437 | dwc2_writel(hsotg, pcgcctl, PCGCTL); | 437 | dwc2_writel(hsotg, pcgcctl, PCGCTL); |
438 | |||
439 | /* | ||
440 | * If we've got this quirk then the PHY is stuck upon | ||
441 | * wakeup. Assert reset. This will propagate out and | ||
442 | * eventually we'll re-enumerate the device. Not great | ||
443 | * but the best we can do. We can't call phy_reset() | ||
444 | * at interrupt time but there's no hurry, so we'll | ||
445 | * schedule it for later. | ||
446 | */ | ||
447 | if (hsotg->reset_phy_on_wake) | ||
448 | dwc2_host_schedule_phy_reset(hsotg); | ||
449 | |||
438 | mod_timer(&hsotg->wkp_timer, | 450 | mod_timer(&hsotg->wkp_timer, |
439 | jiffies + msecs_to_jiffies(71)); | 451 | jiffies + msecs_to_jiffies(71)); |
440 | } else { | 452 | } else { |