usb: ehci: only shutdown opened controller
authorPeng Fan <[email protected]>
Wed, 15 Jun 2016 05:15:46 +0000 (13:15 +0800)
committerMarek Vasut <[email protected]>
Fri, 17 Jun 2016 22:49:00 +0000 (00:49 +0200)
If the usb controller is not running, no need to shutdown it,
otherwise `usb stop` complains about:
"EHCI failed to shut down host controller".

To i.MX7D SDB, there are two usb ports, one Host, one OTG.
If we only plug one udisk to the Host port and then `usb start`,
the OTG controller for OTG port does not run actually. Then,
if `usb stop`, the OTG controller for OTG port will also be
shutdown, but it is not running.

This patch adds a check to only shutdown the running controller.

Signed-off-by: Peng Fan <[email protected]>
Cc: Marek Vasut <[email protected]>
Cc: Simon Glass <[email protected]>
Cc: Mateusz Kulikowski <[email protected]>
Cc: Hans de Goede <[email protected]>
Cc: "Stefan BrĂ¼ns" <[email protected]>
Cc: Stephen Warren <[email protected]>
drivers/usb/host/ehci-hcd.c

index fa5d584b82e4a4c7f61168436049fa1d267a58a0..13aa70d606614a61eb0db6fd04a4651786958671 100644 (file)
@@ -210,6 +210,9 @@ static int ehci_shutdown(struct ehci_ctrl *ctrl)
                return -EINVAL;
 
        cmd = ehci_readl(&ctrl->hcor->or_usbcmd);
+       /* If not run, directly return */
+       if (!(cmd & CMD_RUN))
+               return 0;
        cmd &= ~(CMD_PSE | CMD_ASE);
        ehci_writel(&ctrl->hcor->or_usbcmd, cmd);
        ret = handshake(&ctrl->hcor->or_usbsts, STS_ASS | STS_PSS, 0,