From stern@rowland.harvard.edu Thu Apr 28 11:51:31 2005 Date: Thu, 28 Apr 2005 14:51:27 -0400 (EDT) From: Alan Stern To: Greg KH Subject: USB UHCI: Add shutdown method After all the discussion you might not be interested in this still, but nevertheless here it is. This patch adds a shutdown method to the uhci-hcd driver. Its prerequisite is the patch you wrote adding shutdown support for PCI. Signed-off-by: Alan Stern Signed-off-by: Greg Kroah-Hartman --- --- gregkh-2.6.orig/drivers/usb/host/uhci-hcd.c 2005-05-02 15:59:19.000000000 -0700 +++ gregkh-2.6/drivers/usb/host/uhci-hcd.c 2005-05-02 15:59:20.000000000 -0700 @@ -154,6 +154,7 @@ /* * Last rites for a defunct/nonfunctional controller + * or one we don't want to use any more. */ static void hc_died(struct uhci_hcd *uhci) { @@ -525,6 +526,20 @@ return 0; } +/* Make sure the controller is quiescent and that we're not using it + * any more. This is mainly for the benefit of programs which, like kexec, + * expect the hardware to be idle: not doing DMA or generating IRQs. + * + * This routine may be called in a damaged or failing kernel. Hence we + * do not acquire the spinlock before shutting down the controller. + */ +static void uhci_shutdown(struct pci_dev *pdev) +{ + struct usb_hcd *hcd = (struct usb_hcd *) pci_get_drvdata(pdev); + + hc_died(hcd_to_uhci(hcd)); +} + /* * Allocate a frame list, and then setup the skeleton * @@ -939,6 +954,7 @@ .probe = usb_hcd_pci_probe, .remove = usb_hcd_pci_remove, + .shutdown = uhci_shutdown, #ifdef CONFIG_PM .suspend = usb_hcd_pci_suspend,