|
@@ -508,16 +508,18 @@ static int xhci_do_dbc_start(struct xhci_hcd *xhci)
|
|
return 0;
|
|
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;
|
|
struct xhci_dbc *dbc = xhci->dbc;
|
|
|
|
|
|
if (dbc->state == DS_DISABLED)
|
|
if (dbc->state == DS_DISABLED)
|
|
- return;
|
|
|
|
|
|
+ return -1;
|
|
|
|
|
|
writel(0, &dbc->regs->control);
|
|
writel(0, &dbc->regs->control);
|
|
xhci_dbc_mem_cleanup(xhci);
|
|
xhci_dbc_mem_cleanup(xhci);
|
|
dbc->state = DS_DISABLED;
|
|
dbc->state = DS_DISABLED;
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
static int xhci_dbc_start(struct xhci_hcd *xhci)
|
|
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)
|
|
static void xhci_dbc_stop(struct xhci_hcd *xhci)
|
|
{
|
|
{
|
|
|
|
+ int ret;
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
struct xhci_dbc *dbc = xhci->dbc;
|
|
struct xhci_dbc *dbc = xhci->dbc;
|
|
struct dbc_port *port = &dbc->port;
|
|
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);
|
|
xhci_dbc_tty_unregister_device(xhci);
|
|
|
|
|
|
spin_lock_irqsave(&dbc->lock, flags);
|
|
spin_lock_irqsave(&dbc->lock, flags);
|
|
- xhci_do_dbc_stop(xhci);
|
|
|
|
|
|
+ ret = xhci_do_dbc_stop(xhci);
|
|
spin_unlock_irqrestore(&dbc->lock, flags);
|
|
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
|
|
static void
|