]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - drivers/usb/host/ehci-tegra.c
Merge remote-tracking branch 'u-boot/master' into test
[karo-tx-uboot.git] / drivers / usb / host / ehci-tegra.c
index c6da449e4b07c435dcec14ecba16e9322888df3a..38db18e2c9ea34c56140ee9385579cc5c34cfbc8 100644 (file)
@@ -13,7 +13,6 @@
 #include <asm/arch/clock.h>
 #include <asm/arch-tegra/usb.h>
 #include <asm/arch-tegra/clk_rst.h>
-#include <asm/arch/usb.h>
 #include <usb.h>
 #include <usb/ulpi.h>
 #include <libfdt.h>
@@ -461,6 +460,9 @@ static int init_utmi_usb_controller(struct fdt_usb *config)
                if (config->periph_id == PERIPH_ID_USBD)
                        clrbits_le32(&clkrst->crc_utmip_pll_cfg2,
                                     UTMIP_FORCE_PD_SAMP_A_POWERDOWN);
+               if (config->periph_id == PERIPH_ID_USB2)
+                       clrbits_le32(&clkrst->crc_utmip_pll_cfg2,
+                                    UTMIP_FORCE_PD_SAMP_B_POWERDOWN);
                if (config->periph_id == PERIPH_ID_USB3)
                        clrbits_le32(&clkrst->crc_utmip_pll_cfg2,
                                     UTMIP_FORCE_PD_SAMP_C_POWERDOWN);
@@ -483,9 +485,21 @@ static int init_utmi_usb_controller(struct fdt_usb *config)
        clrbits_le32(&usbctlr->icusb_ctrl, IC_ENB1);
 
        /* Select UTMI parallel interface */
-       clrsetbits_le32(&usbctlr->port_sc1, PTS_MASK,
+#if defined(CONFIG_TEGRA20)
+       if (config->periph_id == PERIPH_ID_USBD) {
+               clrsetbits_le32(&usbctlr->port_sc1, PTS1_MASK,
+                               PTS_UTMI << PTS1_SHIFT);
+               clrbits_le32(&usbctlr->port_sc1, STS1);
+       } else {
+               clrsetbits_le32(&usbctlr->port_sc1, PTS_MASK,
+                               PTS_UTMI << PTS_SHIFT);
+               clrbits_le32(&usbctlr->port_sc1, STS);
+       }
+#else
+       clrsetbits_le32(&usbctlr->hostpc1_devlc, PTS_MASK,
                        PTS_UTMI << PTS_SHIFT);
-       clrbits_le32(&usbctlr->port_sc1, STS);
+       clrbits_le32(&usbctlr->hostpc1_devlc, STS);
+#endif
 
        /* Deassert power down state */
        clrbits_le32(&usbctlr->utmip_xcvr_cfg0, UTMIP_FORCE_PD_POWERDOWN |
@@ -543,7 +557,13 @@ static int init_ulpi_usb_controller(struct fdt_usb *config)
                        ULPI_CLKOUT_PINMUX_BYP | ULPI_OUTPUT_PINMUX_BYP);
 
        /* Select ULPI parallel interface */
-       clrsetbits_le32(&usbctlr->port_sc1, PTS_MASK, PTS_ULPI << PTS_SHIFT);
+#if defined(CONFIG_TEGRA20)
+       clrsetbits_le32(&usbctlr->port_sc1, PTS_MASK,
+                       PTS_ULPI << PTS_SHIFT);
+#else
+       clrsetbits_le32(&usbctlr->hostpc1_devlc, PTS_MASK,
+                       PTS_ULPI << PTS_SHIFT);
+#endif
 
        /* enable ULPI transceiver */
        setbits_le32(&usbctlr->susp_ctrl, ULPI_PHY_ENB);
@@ -699,7 +719,7 @@ static int process_usb_nodes(const void *blob, int node_list[], int count)
        return 0;
 }
 
-int board_usb_init(const void *blob)
+int usb_process_devicetree(const void *blob)
 {
        int node_list[USB_PORTS_MAX];
        int count, err = 0;
@@ -734,7 +754,8 @@ 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 ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
+int ehci_hcd_init(int index, enum usb_init_type init,
+               struct ehci_hccr **hccr, struct ehci_hcor **hcor)
 {
        struct fdt_usb *config;
        struct usb_ctlr *usbctlr;