TPL: TM2: usb3: Provide board specific code to support DWC3 controller
authorLukasz Majewski <l.majewski@samsung.com>
Thu, 12 May 2016 11:17:03 +0000 (13:17 +0200)
committerJaehoon Chung <jh80.chung@samsung.com>
Wed, 18 May 2016 06:32:13 +0000 (15:32 +0900)
Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
board/samsung/tm2/tm2.c

index f71b3ac..e2b6c8e 100644 (file)
@@ -7,8 +7,14 @@
 #include <dm.h>
 #include <errno.h>
 #include <malloc.h>
+#include <dwc3-uboot.h>
 #include <asm/armv8/mmu.h>
 #include <asm/arch/dwmmc.h>
+#include <usb.h>
+#include <dwc3-uboot.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/power.h>
+#include <samsung-usb-phy-uboot.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -96,6 +102,37 @@ int board_mmc_init(bd_t *bis)
 }
 #endif
 
+#ifdef CONFIG_USB_DWC3
+static struct dwc3_device dwc3_device_data = {
+       .maximum_speed = USB_SPEED_SUPER,
+       .base = 0x15400000,
+       .dr_mode = USB_DR_MODE_PERIPHERAL,
+       .index = 0,
+};
+
+int usb_gadget_handle_interrupts(void)
+{
+       dwc3_uboot_handle_interrupt(0);
+       return 0;
+}
+
+int board_usb_init(int index, enum usb_init_type init)
+{
+       struct exynos_usb3_phy *phy = (struct exynos_usb3_phy *)
+               samsung_get_base_usb3_phy();
+
+       if (!phy) {
+               error("usb3 phy not supported");
+               return -ENODEV;
+       }
+
+       set_usbdrd_phy_ctrl(POWER_USB_DRD_PHY_CTRL_EN);
+       exynos5_usb3_phy_init(phy);
+
+       return dwc3_uboot_init(&dwc3_device_data);
+}
+#endif
+
 int checkboard(void)
 {
        const char *board_info;