X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/d63beb8f0c1e496ebc2a9c568d13233acdafa82f..3329b43e7655951c4b496eb7c24b2af096fcbef7:/target/linux/adm5120/files/drivers/usb/host/adm5120-pm.c?ds=sidebyside diff --git a/target/linux/adm5120/files/drivers/usb/host/adm5120-pm.c b/target/linux/adm5120/files/drivers/usb/host/adm5120-pm.c index c88e44829..0ccf829c2 100644 --- a/target/linux/adm5120/files/drivers/usb/host/adm5120-pm.c +++ b/target/linux/adm5120/files/drivers/usb/host/adm5120-pm.c @@ -1,7 +1,7 @@ /* * ADM5120 HCD (Host Controller Driver) for USB * - * Copyright (C) 2007,2008 Gabor Juhos + * Copyright (C) 2007-2008 Gabor Juhos * * This file was derived from fragments of the OHCI driver. * (C) Copyright 1999 Roman Weissgaerber @@ -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) { - 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) - 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 */