colibri_imx7: implement board level USB PHY mode
authorStefan Agner <stefan.agner@toradex.com>
Fri, 10 Mar 2017 01:17:52 +0000 (17:17 -0800)
committerStefano Babic <sbabic@denx.de>
Sun, 19 Mar 2017 16:29:20 +0000 (17:29 +0100)
Implement board level USB PHY mode callback. On USB OTG Port 1
the Colibri standard foresees GPIO USBC_DET to decide whether the
port should run in Host or Device mode.

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
board/toradex/colibri_imx7/colibri_imx7.c

index e1340c323b726a42a97c68b68f0941090ee1f74e..c03bde168a8287b0b7a9a38c01831a11a65aa7a7 100644 (file)
@@ -23,6 +23,7 @@
 #include <netdev.h>
 #include <power/pmic.h>
 #include <power/rn5t567_pmic.h>
+#include <usb.h>
 #include <usb/ehci-ci.h>
 #include "../common/tdx-common.h"
 
@@ -46,6 +47,8 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #define NAND_PAD_READY0_CTRL (PAD_CTL_DSE_3P3V_49OHM | PAD_CTL_PUS_PU5KOHM)
 
+#define USB_CDET_GPIO  IMX_GPIO_NR(7, 14)
+
 int dram_init(void)
 {
        gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
@@ -71,6 +74,12 @@ static iomux_v3_cfg_t const usdhc1_pads[] = {
        MX7D_PAD_GPIO1_IO00__GPIO1_IO0 | MUX_PAD_CTRL(NO_PAD_CTRL),
 };
 
+#ifdef CONFIG_USB_EHCI_MX7
+static iomux_v3_cfg_t const usb_cdet_pads[] = {
+       MX7D_PAD_ENET1_CRS__GPIO7_IO14 | MUX_PAD_CTRL(NO_PAD_CTRL),
+};
+#endif
+
 #ifdef CONFIG_NAND_MXS
 static iomux_v3_cfg_t const gpmi_pads[] = {
        MX7D_PAD_SD3_DATA0__NAND_DATA00 | MUX_PAD_CTRL(NAND_PAD_CTRL),
@@ -319,6 +328,11 @@ int board_init(void)
        setup_lcd();
 #endif
 
+#ifdef CONFIG_USB_EHCI_MX7
+       imx_iomux_v3_setup_multiple_pads(usb_cdet_pads, ARRAY_SIZE(usb_cdet_pads));
+       gpio_request(USB_CDET_GPIO, "usb-cdet-gpio");
+#endif
+
        return 0;
 }
 
@@ -417,4 +431,18 @@ int board_ehci_hcd_init(int port)
        }
        return 0;
 }
+
+int board_usb_phy_mode(int port)
+{
+       switch (port) {
+       case 0:
+               if (gpio_get_value(USB_CDET_GPIO))
+                       return USB_INIT_DEVICE;
+               else
+                       return USB_INIT_HOST;
+       case 1:
+       default:
+               return USB_INIT_HOST;
+       }
+}
 #endif