board: samsung: artik10: support dwc3 gadget initialization
authorChanho Park <chanho61.park@samsung.com>
Mon, 11 Apr 2016 01:10:39 +0000 (10:10 +0900)
committerChanho Park <chanho61.park@samsung.com>
Mon, 11 Apr 2016 03:53:16 +0000 (12:53 +0900)
This patch supports dwc3 usb gadge3 for artik10/smdk5422 board.

Change-Id: I17d5072f99c276aa20daee28a0ba9d78ea09d32f
Signed-off-by: Chanho Park <chanho61.park@samsung.com>
board/samsung/smdk5422/smdk5422.c

index e2c39eb113a42b41c4385b642a12139647927b08..49be1e5cb497587e49782179f58918626813f3a8 100644 (file)
@@ -23,6 +23,8 @@
 #include <common.h>
 #include <asm/io.h>
 #include <netdev.h>
+#include <dwc3-uboot.h>
+#include <usb.h>
 #include <asm/arch/cpu.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/power.h>
@@ -489,3 +491,71 @@ unsigned int get_board_rev(void)
 
        return board_rev_info;
 }
+
+#ifdef CONFIG_USB_DWC3
+static struct dwc3_device dwc3_device_data = {
+       .maximum_speed = USB_SPEED_SUPER,
+       .base = 0x12400000,
+       .dr_mode = USB_DR_MODE_PERIPHERAL,
+       .index = 0,
+};
+
+int usb_gadget_handle_interrupts(void)
+{
+       dwc3_uboot_handle_interrupt(0);
+       return 0;
+}
+
+int board_usb_cleanup(int index, enum usb_init_type init)
+{
+       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 -1;
+       }
+
+       set_usbdrd_phy_ctrl(POWER_USB_DRD_PHY_CTRL_EN);
+       exynos5_usb3_phy_init(phy);
+
+       return dwc3_uboot_init(&dwc3_device_data);
+}
+#endif
+#ifdef CONFIG_SET_DFU_ALT_INFO
+char *get_dfu_alt_system(char *interface, char *devstr)
+{
+       char *info = "Not supported!";
+
+       return getenv("dfu_alt_system");
+}
+
+char *get_dfu_alt_boot(char *interface, char *devstr)
+{
+       char *info = "Not supported!";
+       struct mmc *mmc;
+       char *alt_boot;
+       int dev_num;
+
+       dev_num = simple_strtoul(devstr, NULL, 10);
+
+       mmc = find_mmc_device(dev_num);
+       if (!mmc)
+               return NULL;
+
+       if (mmc_init(mmc))
+               return NULL;
+
+       if (IS_SD(mmc))
+               alt_boot = CONFIG_DFU_ALT_BOOT_SD;
+       else
+               alt_boot = CONFIG_DFU_ALT_BOOT_EMMC;
+
+       return alt_boot;
+}
+#endif