linux-sg2042/drivers/usb/host
Alan Stern 8c03356a55 EHCI: Fix root-hub and port suspend/resume problems
This patch (as738b) fixes numerous problems in the controller/root-hub
suspend/resume/remote-wakeup support in ehci-hcd:

	The bus_resume() routine should wake up only the ports that
	were suspended by bus_suspend().  Ports that were already
	suspended should remain that way.

	The interrupt mask is used to detect loss of power in the
	bus_resume() routine (if the mask is 0 then power was lost).
	However bus_suspend() always sets the mask to 0.  Instead the
	mask should retain its normal value, with port-change-detect
	interrupts disabled if remote wakeup is turned off.

	The interrupt mask should be reset to its correct value at the
	end of bus_resume() regardless of whether power was lost.

	bus_resume() reinitializes the operational registers if power
	was lost.  However those registers are not in the aux power
	well, hence they can lose their values whenever the controller
	is put into D3.  They should always be reinitialized.

	When a port-change interrupt occurs and the root hub is
	suspended, the interrupt handler should request a root-hub
	resume instead of starting up the controller all by itself.

	There's no need for the interrupt handler to request a
	root-hub resume every time a suspended port sends a
	remote-wakeup request.

	The pci_resume() method doesn't need to check for connected
	ports when deciding whether or not to reset the controller.
	It can make that decision based on whether Vaux power was
	maintained.

	Even when the controller does not need to be reset,
	pci_resume() must undo the effect of pci_suspend() by
	re-enabling the interrupt mask.

	If power was lost, pci_resume() must not call ehci_run().
	At this point the root hub is still supposed to be suspended,
	not running.  It's enough to rewrite the command register and
	set the configured_flag.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2006-12-01 14:25:52 -08:00
..
Kconfig USB: u132-hcd: host controller driver for ELAN U132 adapter 2006-09-27 11:58:59 -07:00
Makefile USB: u132-hcd: host controller driver for ELAN U132 adapter 2006-09-27 11:58:59 -07:00
ehci-au1xxx.c USB: Properly unregister reboot notifier in case of failure in ehci hcd 2006-09-27 11:58:54 -07:00
ehci-dbg.c USB: revert EHCI VIA workaround patch 2006-10-17 13:57:18 -07:00
ehci-fsl.c USB: Properly unregister reboot notifier in case of failure in ehci hcd 2006-09-27 11:58:54 -07:00
ehci-fsl.h [PATCH] USB: EHCI for Freescale 83xx 2006-03-20 14:49:55 -08:00
ehci-hcd.c EHCI: Fix root-hub and port suspend/resume problems 2006-12-01 14:25:52 -08:00
ehci-hub.c EHCI: Fix root-hub and port suspend/resume problems 2006-12-01 14:25:52 -08:00
ehci-mem.c USB: EHCI whitespace fixes (cosmetic) 2006-09-27 11:58:56 -07:00
ehci-pci.c EHCI: Fix root-hub and port suspend/resume problems 2006-12-01 14:25:52 -08:00
ehci-q.c USB: revert EHCI VIA workaround patch 2006-10-17 13:57:18 -07:00
ehci-sched.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
ehci.h EHCI: Fix root-hub and port suspend/resume problems 2006-12-01 14:25:52 -08:00
hc_crisv10.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
hc_crisv10.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
isp116x-hcd.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
isp116x.h USB: Dealias -110 code (more complete) 2006-09-27 11:59:00 -07:00
ohci-at91.c USB: ohci-at91, two one-liners 2006-09-27 11:58:57 -07:00
ohci-au1xxx.c USB: Properly unregister reboot notifier in case of failure in ehci hcd 2006-09-27 11:58:54 -07:00
ohci-dbg.c USB: fix __must_check warnings in drivers/usb/host/ 2006-09-27 11:58:58 -07:00
ohci-ep93xx.c USB: Properly unregister reboot notifier in case of failure in ehci hcd 2006-09-27 11:58:54 -07:00
ohci-hcd.c USB: OHCI: disable RHSC inside interrupt handler 2006-12-01 14:23:27 -08:00
ohci-hub.c OHCI: change priority level of resume log message 2006-12-01 14:23:35 -08:00
ohci-lh7a404.c USB: Properly unregister reboot notifier in case of failure in ehci hcd 2006-09-27 11:58:54 -07:00
ohci-mem.c USB: Properly unregister reboot notifier in case of failure in ehci hcd 2006-09-27 11:58:54 -07:00
ohci-omap.c USB: Properly unregister reboot notifier in case of failure in ehci hcd 2006-09-27 11:58:54 -07:00
ohci-pci.c ohci: Use ref-counting hotplug safe interfaces 2006-09-28 15:36:43 -07:00
ohci-pnx4008.c USB: ohci-pnx4008 build fixes 2006-10-17 14:46:30 -07:00
ohci-ppc-soc.c USB: Properly unregister reboot notifier in case of failure in ehci hcd 2006-09-27 11:58:54 -07:00
ohci-pxa27x.c USB: Properly unregister reboot notifier in case of failure in ehci hcd 2006-09-27 11:58:54 -07:00
ohci-q.c [PATCH] ohci: don't play with IRQ regs 2006-10-06 08:53:40 -07:00
ohci-s3c2410.c USB: Properly unregister reboot notifier in case of failure in ehci hcd 2006-09-27 11:58:54 -07:00
ohci-sa1111.c USB: OHCI avoids root hub timer polling 2006-09-27 11:58:48 -07:00
ohci.h OHCI: add auto-stop support 2006-09-28 15:36:46 -07:00
pci-quirks.c [PATCH] USB: Kill compiler warning in quirk_usb_handoff_ohci 2006-07-12 16:03:22 -07:00
pci-quirks.h [PATCH] USB: pci-quirks.c: proper prototypes 2006-04-14 11:12:20 -07:00
sl811-hcd.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
sl811.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sl811_cs.c [PATCH] USB: move hardware-specific <linux/usb_*.h> to <linux/usb/*.h> 2006-06-21 15:04:18 -07:00
u132-hcd.c USB: ftdi-elan.c: fixes and cleanups 2006-12-01 14:23:37 -08:00
uhci-debug.c USB: Make file operations structs in drivers/usb const. 2006-09-27 11:58:52 -07:00
uhci-hcd.c UHCI: workaround for Asus motherboard 2006-10-17 14:46:31 -07:00
uhci-hcd.h [PATCH] UHCI: Improve FSBR-off timing 2006-06-21 15:04:16 -07:00
uhci-hub.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
uhci-q.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00