summaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/ehci-ppc-soc.c
diff options
context:
space:
mode:
authorMike Nuss <mike@terascala.com>2007-08-21 03:21:15 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2007-08-22 23:28:01 +0200
commitc907d3b09f7a50023b61ba6ec4e01ccaa543a7ae (patch)
treeef0eaa13142324ae4298789bffce92749800b5ef /drivers/usb/host/ehci-ppc-soc.c
parentUEAGLE: Remove sysfs files on error case (diff)
downloadlinux-c907d3b09f7a50023b61ba6ec4e01ccaa543a7ae.tar.xz
linux-c907d3b09f7a50023b61ba6ec4e01ccaa543a7ae.zip
USB: make EHCI initialize properly on PPC SOCs
Correctly initialize the on-chip EHCI controller on the AMCC PPC440EPx. Fix "USB 0.0" initialization message, and properly put the controller into a known state before starting it. Add "FIXME" comment to the au1xxx bus glue which is doing the same wrong thing here. (Who maintains that, now that AMD sold off Alchemy?) Remove some false copyright attributions which were somehow placed in the au1xxx bus glue then copied into ppc-soc. Signed-off-by: Mike Nuss <mike@terascala.com> Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Cc: K.Boge <karsten.boge@amd.com> Cc: Jordan Crouse <jordan.crouse@amd.com> Signed-off-by: Stefan Roese <sr@denx.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/host/ehci-ppc-soc.c')
-rw-r--r--drivers/usb/host/ehci-ppc-soc.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/drivers/usb/host/ehci-ppc-soc.c b/drivers/usb/host/ehci-ppc-soc.c
index c2cedb09ed8b..4f99b0eb27bc 100644
--- a/drivers/usb/host/ehci-ppc-soc.c
+++ b/drivers/usb/host/ehci-ppc-soc.c
@@ -6,7 +6,7 @@
* Bus Glue for PPC On-Chip EHCI driver
* Tested on AMCC 440EPx
*
- * Based on "ehci-au12xx.c" by David Brownell <dbrownell@users.sourceforge.net>
+ * Based on "ehci-au1xxx.c" by K.Boge <karsten.boge@amd.com>
*
* This file is licenced under the GPL.
*/
@@ -15,6 +15,24 @@
extern int usb_disabled(void);
+/* called during probe() after chip reset completes */
+static int ehci_ppc_soc_setup(struct usb_hcd *hcd)
+{
+ struct ehci_hcd *ehci = hcd_to_ehci(hcd);
+ int retval;
+
+ retval = ehci_halt(ehci);
+ if (retval)
+ return retval;
+
+ retval = ehci_init(hcd);
+ if (retval)
+ return retval;
+
+ ehci->sbrn = 0x20;
+ return ehci_reset(ehci);
+}
+
/**
* usb_ehci_ppc_soc_probe - initialize PPC-SoC-based HCDs
* Context: !in_interrupt()
@@ -120,7 +138,7 @@ static const struct hc_driver ehci_ppc_soc_hc_driver = {
/*
* basic lifecycle operations
*/
- .reset = ehci_init,
+ .reset = ehci_ppc_soc_setup,
.start = ehci_run,
.stop = ehci_stop,
.shutdown = ehci_shutdown,