summaryrefslogtreecommitdiff
path: root/board/toradex/colibri-imx8x/colibri-imx8x.c
diff options
context:
space:
mode:
Diffstat (limited to 'board/toradex/colibri-imx8x/colibri-imx8x.c')
-rw-r--r--board/toradex/colibri-imx8x/colibri-imx8x.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/board/toradex/colibri-imx8x/colibri-imx8x.c b/board/toradex/colibri-imx8x/colibri-imx8x.c
index 6ed9cc4fa8..3caaa12cb5 100644
--- a/board/toradex/colibri-imx8x/colibri-imx8x.c
+++ b/board/toradex/colibri-imx8x/colibri-imx8x.c
@@ -18,11 +18,14 @@
#include <env.h>
#include <errno.h>
#include <linux/libfdt.h>
+#include <usb.h>
#include "../common/tdx-cfg-block.h"
DECLARE_GLOBAL_DATA_PTR;
+static struct gpio_desc gpio_usb_cdet;
+
#define UART_PAD_CTRL ((SC_PAD_CONFIG_OUT_IN << PADRING_CONFIG_SHIFT) | \
(SC_PAD_ISO_OFF << PADRING_LPCONFIG_SHIFT) | \
(SC_PAD_28FDSOI_DSE_DV_HIGH << PADRING_DSE_SHIFT) | \
@@ -40,6 +43,25 @@ static void setup_iomux_uart(void)
imx8_iomux_setup_multiple_pads(uart3_pads, ARRAY_SIZE(uart3_pads));
}
+int board_ci_udc_phy_mode(void *__iomem phy_base, int phy_off)
+{
+ int ret;
+
+ switch ((phys_addr_t)phy_base) {
+ case USB_BASE_ADDR:
+ if (!dm_gpio_is_valid(&gpio_usb_cdet))
+ return -ENODEV;
+
+ ret = dm_gpio_get_value(&gpio_usb_cdet);
+ if (ret < 0)
+ return ret;
+
+ return ret ? USB_INIT_DEVICE : USB_INIT_HOST;
+ default:
+ return USB_INIT_HOST;
+ }
+}
+
static int is_imx8dx(void)
{
u32 val = 0;
@@ -95,7 +117,14 @@ int board_early_init_f(void)
#if IS_ENABLED(CONFIG_DM_GPIO)
static void board_gpio_init(void)
{
- /* TODO */
+ if (dm_gpio_lookup_name("GPIO5_9", &gpio_usb_cdet))
+ return;
+
+ if (dm_gpio_request(&gpio_usb_cdet, "usb_c_det"))
+ return;
+
+ if (dm_gpio_set_dir_flags(&gpio_usb_cdet, GPIOD_IS_IN))
+ return;
}
#else
static inline void board_gpio_init(void) {}