USB: sa1111: add OHCI shutdown methods
authorRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 26 Jan 2012 11:10:20 +0000 (11:10 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 24 Mar 2012 11:30:13 +0000 (11:30 +0000)
Add OHCI shutdown methods to cleanly shutdown the OHCI controller on
system shutdowns and reboots.  This avoids the controller continuing
to run should be soft-reboot the platform, potentially scribbling
over system memory.

Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/usb/host/ohci-sa1111.c

index 83f3a40db538ab14e6145c23fbde0a38df66a45f..95c3f0fb48d3c9d79b2020dec51f12ba3a1acbc9 100644 (file)
@@ -89,6 +89,7 @@ static const struct hc_driver ohci_sa1111_hc_driver = {
         */
        .start =                ohci_sa1111_start,
        .stop =                 ohci_stop,
+       .shutdown =             ohci_shutdown,
 
        /*
         * managing i/o requests and associated device resources
@@ -232,6 +233,16 @@ static int ohci_hcd_sa1111_remove(struct sa1111_dev *dev)
        return 0;
 }
 
+static void ohci_hcd_sa1111_shutdown(struct sa1111_dev *dev)
+{
+       struct usb_hcd *hcd = sa1111_get_drvdata(dev);
+
+       if (test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags)) {
+               hcd->driver->shutdown(hcd);
+               sa1111_stop_hc(dev);
+       }
+}
+
 static struct sa1111_driver ohci_hcd_sa1111_driver = {
        .drv = {
                .name   = "sa1111-ohci",
@@ -240,4 +251,5 @@ static struct sa1111_driver ohci_hcd_sa1111_driver = {
        .devid          = SA1111_DEVID_USB,
        .probe          = ohci_hcd_sa1111_probe,
        .remove         = ohci_hcd_sa1111_remove,
+       .shutdown       = ohci_hcd_sa1111_shutdown,
 };