diff mbox

[U-Boot,v2,4/4] tegra20: port to new ehci interface

Message ID 1346882457-3226-5-git-send-email-dev@lynxeye.de
State Superseded
Delegated to: Marek Vasut
Headers show

Commit Message

Lucas Stach Sept. 5, 2012, 10 p.m. UTC
EHCI interface now supports more than one controller. Wire up our usb functions
to use this new interface.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 arch/arm/cpu/armv7/tegra20/usb.c        | 15 ++++-----------
 arch/arm/include/asm/arch-tegra20/usb.h |  4 ++--
 drivers/usb/host/ehci-tegra.c           |  5 ++---
 3 Dateien geändert, 8 Zeilen hinzugefügt(+), 16 Zeilen entfernt(-)
diff mbox

Patch

diff --git a/arch/arm/cpu/armv7/tegra20/usb.c b/arch/arm/cpu/armv7/tegra20/usb.c
index 178bb13..9e87faa 100644
--- a/arch/arm/cpu/armv7/tegra20/usb.c
+++ b/arch/arm/cpu/armv7/tegra20/usb.c
@@ -77,7 +77,6 @@  struct fdt_usb {
 
 static struct fdt_usb port[USB_PORTS_MAX];	/* List of valid USB ports */
 static unsigned port_count;			/* Number of available ports */
-static int port_current;			/* Current port (-1 = none) */
 
 /*
  * This table has USB timing parameters for each Oscillator frequency we
@@ -346,30 +345,25 @@  static int add_port(struct fdt_usb *config, const u32 timing[])
 	return 0;
 }
 
-int tegrausb_start_port(unsigned portnum, u32 *hccr, u32 *hcor)
+int tegrausb_start_port(int portnum, u32 *hccr, u32 *hcor)
 {
 	struct usb_ctlr *usbctlr;
 
 	if (portnum >= port_count)
 		return -1;
-	tegrausb_stop_port();
 	set_host_mode(&port[portnum]);
 
 	usbctlr = port[portnum].reg;
 	*hccr = (u32)&usbctlr->cap_length;
 	*hcor = (u32)&usbctlr->usb_cmd;
-	port_current = portnum;
 	return 0;
 }
 
-int tegrausb_stop_port(void)
+int tegrausb_stop_port(int portnum)
 {
 	struct usb_ctlr *usbctlr;
 
-	if (port_current == -1)
-		return -1;
-
-	usbctlr = port[port_current].reg;
+	usbctlr = port[portnum].reg;
 
 	/* Stop controller */
 	writel(0, &usbctlr->usb_cmd);
@@ -378,7 +372,7 @@  int tegrausb_stop_port(void)
 	/* Initiate controller reset */
 	writel(2, &usbctlr->usb_cmd);
 	udelay(1000);
-	port_current = -1;
+
 	return 0;
 }
 
@@ -454,7 +448,6 @@  int board_usb_init(const void *blob)
 			return -1;
 		set_host_mode(&config);
 	}
-	port_current = -1;
 
 	return 0;
 }
diff --git a/arch/arm/include/asm/arch-tegra20/usb.h b/arch/arm/include/asm/arch-tegra20/usb.h
index 638033b..4bbd4aa 100644
--- a/arch/arm/include/asm/arch-tegra20/usb.h
+++ b/arch/arm/include/asm/arch-tegra20/usb.h
@@ -240,13 +240,13 @@  int board_usb_init(const void *blob);
  * @param hcor		returns start address of EHCI HCOR registers
  * @return 0 if ok, -1 on error (generally invalid port number)
  */
-int tegrausb_start_port(unsigned portnum, u32 *hccr, u32 *hcor);
+int tegrausb_start_port(int portnum, u32 *hccr, u32 *hcor);
 
 /**
  * Stop the current port
  *
  * @return 0 if ok, -1 if no port was active
  */
-int tegrausb_stop_port(void);
+int tegrausb_stop_port(int portnum);
 
 #endif	/* _TEGRA_USB_H_ */
diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c
index bb5a68e..a1c43f8 100644
--- a/drivers/usb/host/ehci-tegra.c
+++ b/drivers/usb/host/ehci-tegra.c
@@ -57,7 +57,7 @@  int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
 	 * Select the first port, as we don't have a way of selecting others
 	 * yet
 	 */
-	if (tegrausb_start_port(0, &our_hccr, &our_hcor))
+	if (tegrausb_start_port(index, &our_hccr, &our_hcor))
 		return -1;
 
 	*hccr = (struct ehci_hccr *)our_hccr;
@@ -72,6 +72,5 @@  int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
  */
 int ehci_hcd_stop(int index)
 {
-	tegrausb_stop_port();
-	return 0;
+	return tegrausb_stop_port(index);
 }