[adm5120] fix usb mis-cleanup after r27162 (#9581)
[openwrt.git] / target / linux / adm5120 / files / drivers / usb / host / adm5120-pm.c
index c88e448..0ccf829 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * ADM5120 HCD (Host Controller Driver) for USB
  *
 /*
  * ADM5120 HCD (Host Controller Driver) for USB
  *
- * Copyright (C) 2007,2008 Gabor Juhos <juhosg at openwrt.org>
+ * Copyright (C) 2007-2008 Gabor Juhos <juhosg@openwrt.org>
  *
  * This file was derived from fragments of the OHCI driver.
  *   (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
  *
  * This file was derived from fragments of the OHCI driver.
  *   (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
@@ -432,13 +432,17 @@ static inline int admhc_rh_resume(struct admhcd *ahcd)
 static int admhc_root_hub_state_changes(struct admhcd *ahcd, int changed,
                int any_connected)
 {
 static int admhc_root_hub_state_changes(struct admhcd *ahcd, int changed,
                int any_connected)
 {
-       int     poll_rh = 1;
-
-       /* keep on polling until RHSC is enabled */
+       /* If INSM is enabled, don't poll */
        if (admhc_readl(ahcd, &ahcd->regs->int_enable) & ADMHC_INTR_INSM)
        if (admhc_readl(ahcd, &ahcd->regs->int_enable) & ADMHC_INTR_INSM)
-               poll_rh = 0;
+               return 0;
 
 
-       return poll_rh;
+       /* If no status changes are pending, enable status-change interrupts */
+       if (!changed) {
+               admhc_intr_enable(ahcd, ADMHC_INTR_INSM);
+               return 0;
+       }
+
+       return 1;
 }
 
 #endif /* CONFIG_PM */
 }
 
 #endif /* CONFIG_PM */
This page took 0.024165 seconds and 4 git commands to generate.