There is no need to init a USB controller before the upper layers indicate
that they are actually going to use it.

board_usb_init now only parses the device tree and sets up the common pll.

Signed-off-by: Lucas Stach <d...@lynxeye.de>
---
 arch/arm/cpu/armv7/tegra20/usb.c | 47 +++++++++++++++-------------------------
 1 Datei geändert, 18 Zeilen hinzugefügt(+), 29 Zeilen entfernt(-)

diff --git a/arch/arm/cpu/armv7/tegra20/usb.c b/arch/arm/cpu/armv7/tegra20/usb.c
index cf800b1..e372b8b 100644
--- a/arch/arm/cpu/armv7/tegra20/usb.c
+++ b/arch/arm/cpu/armv7/tegra20/usb.c
@@ -417,44 +417,29 @@ static int init_ulpi_usb_controller(struct fdt_usb 
*config)
 }
 #endif
 
-/**
- * Add a new USB port to the list of available ports.
- *
- * @param config       USB port configuration
- * @return 0 if ok, -1 if error (too many ports)
- */
-static int add_port(struct fdt_usb *config)
+int tegrausb_start_port(int portnum, u32 *hccr, u32 *hcor)
 {
-       if (port_count == USB_PORTS_MAX) {
-               printf("tegrausb: Cannot register more than %d ports\n",
-                     USB_PORTS_MAX);
+       struct fdt_usb *config;
+       struct usb_ctlr *usbctlr;
+
+       if (portnum >= port_count)
                return -1;
-       }
+
+       config = &port[portnum];
 
        if (config->utmi && init_utmi_usb_controller(config)) {
-               printf("tegrausb: Cannot init port\n");
+               printf("tegrausb: Cannot init port %d\n", portnum);
                return -1;
        }
 
        if (config->ulpi && init_ulpi_usb_controller(config)) {
-               printf("tegrausb: Cannot init port\n");
+               printf("tegrausb: Cannot init port %d\n", portnum);
                return -1;
        }
 
-       port[port_count++] = *config;
-
-       return 0;
-}
+       set_host_mode(config);
 
-int tegrausb_start_port(int portnum, u32 *hccr, u32 *hcor)
-{
-       struct usb_ctlr *usbctlr;
-
-       if (portnum >= port_count)
-               return -1;
-       set_host_mode(&port[portnum]);
-
-       usbctlr = port[portnum].reg;
+       usbctlr = config->reg;
        *hccr = (u32)&usbctlr->cap_length;
        *hcor = (u32)&usbctlr->usb_cmd;
        return 0;
@@ -539,6 +524,12 @@ int board_usb_init(const void *blob)
        count = fdtdec_find_aliases_for_id(blob, "usb",
                        COMPAT_NVIDIA_TEGRA20_USB, node_list, USB_PORTS_MAX);
        for (i = 0; i < count; i++) {
+               if (port_count == USB_PORTS_MAX) {
+                       printf("tegrausb: Cannot register more than %d ports\n",
+                               USB_PORTS_MAX);
+                       return -1;
+               }
+
                debug("USB %d: ", i);
                node = node_list[i];
                if (!node)
@@ -549,9 +540,7 @@ int board_usb_init(const void *blob)
                        return -1;
                }
 
-               if (add_port(&config))
-                       return -1;
-               set_host_mode(&config);
+               port[port_count++] = config;
        }
 
        return 0;
-- 
1.7.11.7

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to