Merge branch 'master' of git://git.denx.de/u-boot-usb
[oweals/u-boot.git] / drivers / usb / host / ehci-tegra.c
index 4a4f5593e9da0718c91915b7d7d4b557765c5bfe..e3620da15fb13974a089834861d4d47d202b2aca 100644 (file)
@@ -8,7 +8,7 @@
 
 #include <common.h>
 #include <dm.h>
-#include <asm/errno.h>
+#include <linux/errno.h>
 #include <asm/io.h>
 #include <asm-generic/gpio.h>
 #include <asm/arch/clock.h>
@@ -600,9 +600,18 @@ static int init_ulpi_usb_controller(struct fdt_usb *config,
 
        /* reset ULPI phy */
        if (dm_gpio_is_valid(&config->phy_reset_gpio)) {
-               dm_gpio_set_value(&config->phy_reset_gpio, 0);
-               mdelay(5);
+               /*
+                * This GPIO is typically active-low, and marked as such in
+                * device tree. dm_gpio_set_value() takes this into account
+                * and inverts the value we pass here if required. In other
+                * words, this first call logically asserts the reset signal,
+                * which typically results in driving the physical GPIO low,
+                * and the second call logically de-asserts the reset signal,
+                * which typically results in driver the GPIO high.
+                */
                dm_gpio_set_value(&config->phy_reset_gpio, 1);
+               mdelay(5);
+               dm_gpio_set_value(&config->phy_reset_gpio, 0);
        }
 
        /* Reset the usb controller */
@@ -684,11 +693,13 @@ static void config_clock(const u32 timing[])
                timing[PARAM_CPCON], timing[PARAM_LFCON]);
 }
 
-static int fdt_decode_usb(const void *blob, int node, struct fdt_usb *config)
+static int fdt_decode_usb(struct udevice *dev, struct fdt_usb *config)
 {
+       const void *blob = gd->fdt_blob;
+       int node = dev->of_offset;
        const char *phy, *mode;
 
-       config->reg = (struct usb_ctlr *)fdtdec_get_addr(blob, node, "reg");
+       config->reg = (struct usb_ctlr *)dev_get_addr(dev);
        mode = fdt_getprop(blob, node, "dr_mode", NULL);
        if (mode) {
                if (0 == strcmp(mode, "host"))
@@ -812,7 +823,7 @@ static int ehci_usb_ofdata_to_platdata(struct udevice *dev)
        struct fdt_usb *priv = dev_get_priv(dev);
        int ret;
 
-       ret = fdt_decode_usb(gd->fdt_blob, dev->of_offset, priv);
+       ret = fdt_decode_usb(dev, priv);
        if (ret)
                return ret;
 
@@ -844,17 +855,6 @@ static int ehci_usb_probe(struct udevice *dev)
                             plat->init_type);
 }
 
-static int ehci_usb_remove(struct udevice *dev)
-{
-       int ret;
-
-       ret = ehci_deregister(dev);
-       if (ret)
-               return ret;
-
-       return 0;
-}
-
 static const struct udevice_id ehci_usb_ids[] = {
        { .compatible = "nvidia,tegra20-ehci", .data = USB_CTLR_T20 },
        { .compatible = "nvidia,tegra30-ehci", .data = USB_CTLR_T30 },
@@ -869,7 +869,7 @@ U_BOOT_DRIVER(usb_ehci) = {
        .of_match = ehci_usb_ids,
        .ofdata_to_platdata = ehci_usb_ofdata_to_platdata,
        .probe = ehci_usb_probe,
-       .remove = ehci_usb_remove,
+       .remove = ehci_deregister,
        .ops    = &ehci_usb_ops,
        .platdata_auto_alloc_size = sizeof(struct usb_platdata),
        .priv_auto_alloc_size = sizeof(struct fdt_usb),