]> git.sur5r.net Git - u-boot/blobdiff - drivers/usb/host/xhci-exynos5.c
exynos: usb: make dwc3_set_mode to static
[u-boot] / drivers / usb / host / xhci-exynos5.c
index eb0ef6c57d23ba35289fef903ad9a317ac8005d0..3f86fdca8973cb901e88d109e9d65e0f63f86e21 100644 (file)
@@ -22,6 +22,7 @@
 #include <asm/arch/cpu.h>
 #include <asm/arch/power.h>
 #include <asm/arch/xhci-exynos.h>
+#include <asm/gpio.h>
 #include <asm-generic/errno.h>
 #include <linux/compat.h>
 #include <linux/usb/dwc3.h>
@@ -39,6 +40,7 @@ struct exynos_xhci {
        struct exynos_usb3_phy *usb3_phy;
        struct xhci_hccr *hcd;
        struct dwc3 *dwc3_reg;
+       struct gpio_desc vbus_gpio;
 };
 
 static struct exynos_xhci exynos;
@@ -66,6 +68,10 @@ static int exynos_usb3_parse_dt(const void *blob, struct exynos_xhci *exynos)
        }
        exynos->hcd = (struct xhci_hccr *)addr;
 
+       /* Vbus gpio */
+       gpio_request_by_name_nodev(blob, node, "samsung,vbus-gpio", 0,
+                                  &exynos->vbus_gpio, GPIOD_IS_OUT);
+
        depth = 0;
        node = fdtdec_next_compatible_subnode(blob, node,
                                COMPAT_SAMSUNG_EXYNOS5_USB3_PHY, &depth);
@@ -176,7 +182,7 @@ static void exynos5_usb3_phy_exit(struct exynos_usb3_phy *phy)
        set_usbdrd_phy_ctrl(POWER_USB_DRD_PHY_CTRL_DISABLE);
 }
 
-void dwc3_set_mode(struct dwc3 *dwc3_reg, u32 mode)
+static void dwc3_set_mode(struct dwc3 *dwc3_reg, u32 mode)
 {
        clrsetbits_le32(&dwc3_reg->g_ctl,
                        DWC3_GCTL_PRTCAPDIR(DWC3_GCTL_PRTCAP_OTG),
@@ -291,6 +297,12 @@ int xhci_hcd_init(int index, struct xhci_hccr **hccr, struct xhci_hcor **hcor)
 
        ctx->dwc3_reg = (struct dwc3 *)((char *)(ctx->hcd) + DWC3_REG_OFFSET);
 
+#ifdef CONFIG_OF_CONTROL
+       /* setup the Vbus gpio here */
+       if (dm_gpio_is_valid(&ctx->vbus_gpio))
+               dm_gpio_set_value(&ctx->vbus_gpio, 1);
+#endif
+
        ret = exynos_xhci_core_init(ctx);
        if (ret) {
                puts("XHCI: failed to initialize controller\n");