usb: xhci: dbc: Don't decrement runtime PM counter if DBC is not started
pm_runtime_put_sync() gets called everytime in xhci_dbc_stop(). If dbc is not started, this makes the runtime PM counter incorrectly becomes 0, and calls autosuspend function. Then we'll keep seeing this: [54664.762220] xhci_hcd 0000:00:14.0: Root hub is not suspended So only calls pm_runtime_put_sync() when dbc was started. Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
021c91791a
commit
74cb319bd9
|
@ -508,16 +508,18 @@ static int xhci_do_dbc_start(struct xhci_hcd *xhci)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void xhci_do_dbc_stop(struct xhci_hcd *xhci)
|
||||
static int xhci_do_dbc_stop(struct xhci_hcd *xhci)
|
||||
{
|
||||
struct xhci_dbc *dbc = xhci->dbc;
|
||||
|
||||
if (dbc->state == DS_DISABLED)
|
||||
return;
|
||||
return -1;
|
||||
|
||||
writel(0, &dbc->regs->control);
|
||||
xhci_dbc_mem_cleanup(xhci);
|
||||
dbc->state = DS_DISABLED;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xhci_dbc_start(struct xhci_hcd *xhci)
|
||||
|
@ -544,6 +546,7 @@ static int xhci_dbc_start(struct xhci_hcd *xhci)
|
|||
|
||||
static void xhci_dbc_stop(struct xhci_hcd *xhci)
|
||||
{
|
||||
int ret;
|
||||
unsigned long flags;
|
||||
struct xhci_dbc *dbc = xhci->dbc;
|
||||
struct dbc_port *port = &dbc->port;
|
||||
|
@ -556,10 +559,11 @@ static void xhci_dbc_stop(struct xhci_hcd *xhci)
|
|||
xhci_dbc_tty_unregister_device(xhci);
|
||||
|
||||
spin_lock_irqsave(&dbc->lock, flags);
|
||||
xhci_do_dbc_stop(xhci);
|
||||
ret = xhci_do_dbc_stop(xhci);
|
||||
spin_unlock_irqrestore(&dbc->lock, flags);
|
||||
|
||||
pm_runtime_put_sync(xhci_to_hcd(xhci)->self.controller);
|
||||
if (!ret)
|
||||
pm_runtime_put_sync(xhci_to_hcd(xhci)->self.controller);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in New Issue