]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - board/karo/tx6/tx6qdl.c
imx: mx6: unify source code for TX6Q and TX6DL
[karo-tx-uboot.git] / board / karo / tx6 / tx6qdl.c
similarity index 77%
rename from board/karo/tx6dl/tx6dl.c
rename to board/karo/tx6/tx6qdl.c
index 7d6a291cf11514c49c4f3adf0bce0c8869165411..27c007ef1753a1b0a3130d5aa5e16e1fef84a4de 100644 (file)
@@ -19,9 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
  */
-#ifndef DEBUG
 #define DEBUG
-#endif
 //#define TIMER_TEST
 
 #include <common.h>
 
 #include "../common/karo.h"
 
-#define TX6DL_FEC_RST_GPIO             IMX_GPIO_NR(7, 6)
-#define TX6DL_FEC_PWR_GPIO             IMX_GPIO_NR(3, 20)
-#define TX6DL_FEC_INT_GPIO             IMX_GPIO_NR(2, 4)
-#define TX6DL_LED_GPIO                 IMX_GPIO_NR(2, 20)
+#define TX6_FEC_RST_GPIO               IMX_GPIO_NR(7, 6)
+#define TX6_FEC_PWR_GPIO               IMX_GPIO_NR(3, 20)
+#define TX6_FEC_INT_GPIO               IMX_GPIO_NR(2, 4)
+#define TX6_LED_GPIO                   IMX_GPIO_NR(2, 20)
 
-#define TX6DL_LCD_PWR_GPIO             IMX_GPIO_NR(2, 31)
-#define TX6DL_LCD_RST_GPIO             IMX_GPIO_NR(3, 29)
-#define TX6DL_LCD_BACKLIGHT_GPIO               IMX_GPIO_NR(1, 1)
+#define TX6_LCD_PWR_GPIO               IMX_GPIO_NR(2, 31)
+#define TX6_LCD_RST_GPIO               IMX_GPIO_NR(3, 29)
+#define TX6_LCD_BACKLIGHT_GPIO         IMX_GPIO_NR(1, 1)
 
-#define TX6DL_RESET_OUT_GPIO           IMX_GPIO_NR(7, 12)
+#define TX6_RESET_OUT_GPIO             IMX_GPIO_NR(7, 12)
 
 #define TEMPERATURE_MIN                        -40
 #define TEMPERATURE_HOT                        80
@@ -64,9 +62,9 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#define MUX_CFG_SION                   IOMUX_PAD(0, 0, IOMUX_CONFIG_SION, 0, 0, 0)
+#define MUX_CFG_SION                   IOMUX_PAD(0, 0, MUX_CONFIG_SION, 0, 0, 0)
 
-static const iomux_v3_cfg_t tx6dl_pads[] = {
+static const iomux_v3_cfg_t tx6qdl_pads[] = {
        /* NAND flash pads */
        MX6_PAD_NANDF_CLE__RAWNAND_CLE,
        MX6_PAD_NANDF_ALE__RAWNAND_ALE,
@@ -116,7 +114,7 @@ static const iomux_v3_cfg_t tx6dl_pads[] = {
        MX6_PAD_SD3_DAT4__GPIO_7_1, /* PHY INT */
 };
 
-static const iomux_v3_cfg_t tx6dl_fec_pads[] = {
+static const iomux_v3_cfg_t tx6qdl_fec_pads[] = {
        /* FEC functions */
        MX6_PAD_ENET_MDC__ENET_MDC,
        MX6_PAD_ENET_MDIO__ENET_MDIO,
@@ -130,11 +128,11 @@ static const iomux_v3_cfg_t tx6dl_fec_pads[] = {
        MX6_PAD_ENET_TXD0__ENET_TDATA_0,
 };
 
-static const struct gpio tx6dl_gpios[] = {
-       { TX6DL_RESET_OUT_GPIO, GPIOF_OUTPUT_INIT_HIGH, "#RESET_OUT", },
-       { TX6DL_FEC_PWR_GPIO, GPIOF_OUTPUT_INIT_HIGH, "FEC PHY PWR", },
-       { TX6DL_FEC_RST_GPIO, GPIOF_OUTPUT_INIT_LOW, "FEC PHY RESET", },
-       { TX6DL_FEC_INT_GPIO, GPIOF_INPUT, "FEC PHY INT", },
+static const struct gpio tx6qdl_gpios[] = {
+       { TX6_RESET_OUT_GPIO, GPIOF_OUTPUT_INIT_HIGH, "#RESET_OUT", },
+       { TX6_FEC_PWR_GPIO, GPIOF_OUTPUT_INIT_HIGH, "FEC PHY PWR", },
+       { TX6_FEC_RST_GPIO, GPIOF_OUTPUT_INIT_LOW, "FEC PHY RESET", },
+       { TX6_FEC_INT_GPIO, GPIOF_INPUT, "FEC PHY INT", },
 };
 
 /*
@@ -304,8 +302,8 @@ static int setup_pmic_voltages(void)
 
 int board_early_init_f(void)
 {
-       gpio_request_array(tx6dl_gpios, ARRAY_SIZE(tx6dl_gpios));
-       imx_iomux_v3_setup_multiple_pads(tx6dl_pads, ARRAY_SIZE(tx6dl_pads));
+       gpio_request_array(tx6qdl_gpios, ARRAY_SIZE(tx6qdl_gpios));
+       imx_iomux_v3_setup_multiple_pads(tx6qdl_pads, ARRAY_SIZE(tx6qdl_pads));
 
        return 0;
 }
@@ -316,7 +314,9 @@ int board_init(void)
 
        /* Address of boot parameters */
        gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x1000;
-#if 1
+#ifdef CONFIG_OF_LIBFDT
+       gd->bd->bi_arch_number = -1;
+#else
        gd->bd->bi_arch_number = 4429;
 #endif
        ret = setup_pmic_voltages();
@@ -370,12 +370,12 @@ static const iomux_v3_cfg_t mmc1_pads[] = {
        MX6_PAD_SD3_CLK__GPIO_7_3,
 };
 
-static struct tx6dl_esdhc_cfg {
+static struct tx6q_esdhc_cfg {
        const iomux_v3_cfg_t *pads;
        int num_pads;
        enum mxc_clock clkid;
        struct fsl_esdhc_cfg cfg;
-} tx6dl_esdhc_cfg[] = {
+} tx6qdl_esdhc_cfg[] = {
        {
                .pads = mmc0_pads,
                .num_pads = ARRAY_SIZE(mmc0_pads),
@@ -398,11 +398,11 @@ static struct tx6dl_esdhc_cfg {
        },
 };
 
-static inline struct tx6dl_esdhc_cfg *to_tx6dl_esdhc_cfg(struct fsl_esdhc_cfg *cfg)
+static inline struct tx6q_esdhc_cfg *to_tx6q_esdhc_cfg(struct fsl_esdhc_cfg *cfg)
 {
        void *p = cfg;
 
-       return p - offsetof(struct tx6dl_esdhc_cfg, cfg);
+       return p - offsetof(struct tx6q_esdhc_cfg, cfg);
 }
 
 int board_mmc_getcd(struct mmc *mmc)
@@ -413,7 +413,8 @@ int board_mmc_getcd(struct mmc *mmc)
                return cfg->cd_gpio;
 
        debug("SD card %d is %spresent\n",
-               to_tx6dl_esdhc_cfg(cfg) - tx6dl_esdhc_cfg, gpio_get_value(cfg->cd_gpio) ? "NOT " : "");
+               to_tx6q_esdhc_cfg(cfg) - tx6qdl_esdhc_cfg,
+               gpio_get_value(cfg->cd_gpio) ? "NOT " : "");
        return !gpio_get_value(cfg->cd_gpio);
 }
 
@@ -421,16 +422,16 @@ int board_mmc_init(bd_t *bis)
 {
        int i;
 
-       for (i = 0; i < ARRAY_SIZE(tx6dl_esdhc_cfg); i++) {
+       for (i = 0; i < ARRAY_SIZE(tx6qdl_esdhc_cfg); i++) {
                struct mmc *mmc;
-               struct fsl_esdhc_cfg *cfg = &tx6dl_esdhc_cfg[i].cfg;
+               struct fsl_esdhc_cfg *cfg = &tx6qdl_esdhc_cfg[i].cfg;
 
                if (i >= CONFIG_SYS_FSL_ESDHC_NUM)
                        break;
 
-               cfg->sdhc_clk = mxc_get_clock(tx6dl_esdhc_cfg[i].clkid);
-               imx_iomux_v3_setup_multiple_pads(tx6dl_esdhc_cfg[i].pads,
-                                               tx6dl_esdhc_cfg[i].num_pads);
+               cfg->sdhc_clk = mxc_get_clock(tx6qdl_esdhc_cfg[i].clkid);
+               imx_iomux_v3_setup_multiple_pads(tx6qdl_esdhc_cfg[i].pads,
+                                               tx6qdl_esdhc_cfg[i].num_pads);
 
                debug("%s: Initializing MMC slot %d\n", __func__, i);
                fsl_esdhc_initialize(bis, cfg);
@@ -463,10 +464,10 @@ int board_eth_init(bd_t *bis)
        /* delay at least 21ms for the PHY internal POR signal to deassert */
        udelay(22000);
 
-       imx_iomux_v3_setup_multiple_pads(tx6dl_fec_pads, ARRAY_SIZE(tx6dl_fec_pads));
+       imx_iomux_v3_setup_multiple_pads(tx6qdl_fec_pads, ARRAY_SIZE(tx6qdl_fec_pads));
 
        /* Deassert RESET to the external phy */
-       gpio_set_value(TX6DL_FEC_RST_GPIO, 1);
+       gpio_set_value(TX6_FEC_RST_GPIO, 1);
 
        ret = cpu_eth_init(bis);
        if (ret)
@@ -497,7 +498,7 @@ void show_activity(int arg)
 
        if (led_state == LED_STATE_INIT) {
                last = get_timer(0);
-               gpio_set_value(TX6DL_LED_GPIO, 1);
+               gpio_set_value(TX6_LED_GPIO, 1);
                led_state = LED_STATE_ON;
                blink_rate = calc_blink_rate(check_cpu_temperature(0));
        } else {
@@ -505,9 +506,9 @@ void show_activity(int arg)
                        blink_rate = calc_blink_rate(check_cpu_temperature(0));
                        last = get_timer_masked();
                        if (led_state == LED_STATE_ON) {
-                               gpio_set_value(TX6DL_LED_GPIO, 0);
+                               gpio_set_value(TX6_LED_GPIO, 0);
                        } else {
-                               gpio_set_value(TX6DL_LED_GPIO, 1);
+                               gpio_set_value(TX6_LED_GPIO, 1);
                        }
                        led_state = 1 - led_state;
                }
@@ -570,7 +571,7 @@ static const iomux_v3_cfg_t stk5_pads[] = {
 };
 
 static const struct gpio stk5_gpios[] = {
-       { TX6DL_LED_GPIO, GPIOF_OUTPUT_INIT_LOW, "HEARTBEAT LED", },
+       { TX6_LED_GPIO, GPIOF_OUTPUT_INIT_LOW, "HEARTBEAT LED", },
 
        { IMX_GPIO_NR(3, 23), GPIOF_INPUT, "USBOTG ID", },
        { IMX_GPIO_NR(1, 8), GPIOF_INPUT, "USBOTG OC", },
@@ -588,21 +589,136 @@ vidinfo_t panel_info = {
        .vl_bpix = LCD_COLOR24,    /* Bits per pixel, 0: 1bpp, 1: 2bpp, 2: 4bpp, 3: 8bpp ... */
 };
 
-static struct fb_videomode tx6dl_fb_mode = {
-       /* Standard VGA timing */
-       .name           = "VGA",
-       .refresh        = 60,
-       .xres           = 640,
-       .yres           = 480,
-       .pixclock       = KHZ2PICOS(25175),
-       .left_margin    = 48,
-       .hsync_len      = 96,
-       .right_margin   = 16,
-       .upper_margin   = 31,
-       .vsync_len      = 2,
-       .lower_margin   = 12,
-       .sync           = FB_SYNC_CLK_LAT_FALL,
-       .vmode          = FB_VMODE_NONINTERLACED,
+static struct fb_videomode tx6_fb_modes[] = {
+       {
+               /* Standard VGA timing */
+               .name           = "VGA",
+               .refresh        = 60,
+               .xres           = 640,
+               .yres           = 480,
+               .pixclock       = KHZ2PICOS(25175),
+               .left_margin    = 48,
+               .hsync_len      = 96,
+               .right_margin   = 16,
+               .upper_margin   = 31,
+               .vsync_len      = 2,
+               .lower_margin   = 12,
+               .sync           = FB_SYNC_CLK_LAT_FALL,
+       },
+       {
+               /* Emerging ETV570 640 x 480 display. Syncs low active,
+                * DE high active, 115.2 mm x 86.4 mm display area
+                * VGA compatible timing
+                */
+               .name           = "ETV570",
+               .refresh        = 60,
+               .xres           = 640,
+               .yres           = 480,
+               .pixclock       = KHZ2PICOS(25175),
+               .left_margin    = 114,
+               .hsync_len      = 30,
+               .right_margin   = 16,
+               .upper_margin   = 32,
+               .vsync_len      = 3,
+               .lower_margin   = 10,
+               .sync           = FB_SYNC_CLK_LAT_FALL,
+       },
+       {
+               /* Emerging ET0350G0DH6 320 x 240 display.
+                * 70.08 mm x 52.56 mm display area.
+                */
+               .name           = "ET0350",
+               .refresh        = 60,
+               .xres           = 320,
+               .yres           = 240,
+               .pixclock       = KHZ2PICOS(6500),
+               .left_margin    = 68 - 34,
+               .hsync_len      = 34,
+               .right_margin   = 20,
+               .upper_margin   = 18 - 3,
+               .vsync_len      = 3,
+               .lower_margin   = 4,
+               .sync           = FB_SYNC_CLK_LAT_FALL,
+       },
+       {
+               /* Emerging ET0430G0DH6 480 x 272 display.
+                * 95.04 mm x 53.856 mm display area.
+                */
+               .name           = "ET0430",
+               .refresh        = 60,
+               .xres           = 480,
+               .yres           = 272,
+               .pixclock       = KHZ2PICOS(9000),
+               .left_margin    = 2,
+               .hsync_len      = 41,
+               .right_margin   = 2,
+               .upper_margin   = 2,
+               .vsync_len      = 10,
+               .lower_margin   = 2,
+               .sync           = FB_SYNC_CLK_LAT_FALL,
+       },
+       {
+               /* Emerging ET0500G0DH6 800 x 480 display.
+                * 109.6 mm x 66.4 mm display area.
+                */
+               .name           = "ET0500",
+               .refresh        = 60,
+               .xres           = 800,
+               .yres           = 480,
+               .pixclock       = KHZ2PICOS(33260),
+               .left_margin    = 216 - 128,
+               .hsync_len      = 128,
+               .right_margin   = 1056 - 800 - 216,
+               .upper_margin   = 35 - 2,
+               .vsync_len      = 2,
+               .lower_margin   = 525 - 480 - 35,
+               .sync           = FB_SYNC_CLK_LAT_FALL,
+       },
+       {
+               /* Emerging ETQ570G0DH6 320 x 240 display.
+                * 115.2 mm x 86.4 mm display area.
+                */
+               .name           = "ETQ570",
+               .refresh        = 60,
+               .xres           = 320,
+               .yres           = 240,
+               .pixclock       = KHZ2PICOS(6400),
+               .left_margin    = 38,
+               .hsync_len      = 30,
+               .right_margin   = 30,
+               .upper_margin   = 16, /* 15 according to datasheet */
+               .vsync_len      = 3, /* TVP -> 1>x>5 */
+               .lower_margin   = 4, /* 4.5 according to datasheet */
+               .sync           = FB_SYNC_CLK_LAT_FALL,
+       },
+       {
+               /* Emerging ET0700G0DH6 800 x 480 display.
+                * 152.4 mm x 91.44 mm display area.
+                */
+               .name           = "ET0700",
+               .refresh        = 60,
+               .xres           = 800,
+               .yres           = 480,
+               .pixclock       = KHZ2PICOS(33260),
+               .left_margin    = 216 - 128,
+               .hsync_len      = 128,
+               .right_margin   = 1056 - 800 - 216,
+               .upper_margin   = 35 - 2,
+               .vsync_len      = 2,
+               .lower_margin   = 525 - 480 - 35,
+               .sync           = FB_SYNC_CLK_LAT_FALL,
+       },
+       {
+               /* unnamed entry for assigning parameters parsed from 'video_mode' string */
+               .refresh        = 60,
+               .left_margin    = 48,
+               .hsync_len      = 96,
+               .right_margin   = 16,
+               .upper_margin   = 31,
+               .vsync_len      = 2,
+               .lower_margin   = 12,
+               .sync           = FB_SYNC_CLK_LAT_FALL,
+       },
 };
 
 static int lcd_enabled = 1;
@@ -619,11 +735,11 @@ void lcd_enable(void)
        karo_load_splashimage(1);
        if (lcd_enabled) {
                debug("Switching LCD on\n");
-               gpio_set_value(TX6DL_LCD_PWR_GPIO, 1);
+               gpio_set_value(TX6_LCD_PWR_GPIO, 1);
                udelay(100);
-               gpio_set_value(TX6DL_LCD_RST_GPIO, 1);
+               gpio_set_value(TX6_LCD_RST_GPIO, 1);
                udelay(300000);
-               gpio_set_value(TX6DL_LCD_BACKLIGHT_GPIO, 0);
+               gpio_set_value(TX6_LCD_BACKLIGHT_GPIO, 0);
        }
 }
 
@@ -667,9 +783,9 @@ static const iomux_v3_cfg_t stk5_lcd_pads[] = {
 };
 
 static const struct gpio stk5_lcd_gpios[] = {
-       { TX6DL_LCD_RST_GPIO, GPIOF_OUTPUT_INIT_LOW, "LCD RESET", },
-       { TX6DL_LCD_PWR_GPIO, GPIOF_OUTPUT_INIT_LOW, "LCD POWER", },
-       { TX6DL_LCD_BACKLIGHT_GPIO, GPIOF_OUTPUT_INIT_HIGH, "LCD BACKLIGHT", },
+       { TX6_LCD_RST_GPIO, GPIOF_OUTPUT_INIT_LOW, "LCD RESET", },
+       { TX6_LCD_PWR_GPIO, GPIOF_OUTPUT_INIT_LOW, "LCD POWER", },
+       { TX6_LCD_BACKLIGHT_GPIO, GPIOF_OUTPUT_INIT_HIGH, "LCD BACKLIGHT", },
 };
 
 void lcd_ctrl_init(void *lcdbase)
@@ -678,7 +794,8 @@ void lcd_ctrl_init(void *lcdbase)
        char *vm;
        unsigned long val;
        int refresh = 60;
-       struct fb_videomode *p = &tx6dl_fb_mode;
+       struct fb_videomode *p = &tx6_fb_modes[0];
+       struct fb_videomode fb_mode;
        int xres_set = 0, yres_set = 0, bpp_set = 0, refresh_set = 0;
        int pix_fmt = 0;
        ipu_di_clk_parent_t di_clk_parent = DI_PCLK_PLL3;
@@ -695,12 +812,35 @@ void lcd_ctrl_init(void *lcdbase)
                return;
        }
 
+       karo_fdt_move_fdt();
+
        vm = getenv("video_mode");
        if (vm == NULL) {
                debug("Disabling LCD\n");
                lcd_enabled = 0;
                return;
        }
+       if (karo_fdt_get_fb_mode(working_fdt, vm, &fb_mode) == 0) {
+               p = &fb_mode;
+               debug("Using video mode from FDT\n");
+               vm += strlen(vm);
+               if (fb_mode.xres < panel_info.vl_col)
+                       panel_info.vl_col = fb_mode.xres;
+               if (fb_mode.yres < panel_info.vl_row)
+                       panel_info.vl_row = fb_mode.yres;
+       }
+       if (p->name != NULL)
+               debug("Trying compiled-in video modes\n");
+       while (p->name != NULL) {
+               if (strcmp(p->name, vm) == 0) {
+                       debug("Using video mode: '%s'\n", p->name);
+                       vm += strlen(vm);
+                       break;
+               }
+               p++;
+       }
+       if (*vm != '\0')
+               debug("Trying to decode video_mode: '%s'\n", vm);
        while (*vm != '\0') {
                if (*vm >= '0' && *vm <= '9') {
                        char *end;
@@ -781,18 +921,15 @@ void lcd_ctrl_init(void *lcdbase)
                                vm++;
                }
        }
-       switch (color_depth) {
-       case 8:
-               panel_info.vl_bpix = 3;
-               break;
-
-       case 16:
-               panel_info.vl_bpix = 4;
-               break;
-
-       case 18:
-       case 24:
-               panel_info.vl_bpix = 5;
+       if (p->xres == 0 || p->yres == 0) {
+               printf("Invalid video mode: %s\n", getenv("video_mode"));
+               lcd_enabled = 0;
+               printf("Supported video modes are:");
+               for (p = &tx6_fb_modes[0]; p->name != NULL; p++) {
+                       printf(" %s", p->name);
+               }
+               printf("\n");
+               return;
        }
 
        p->pixclock = KHZ2PICOS(refresh *
@@ -853,7 +990,7 @@ static void stk5v5_board_init(void)
        imx_iomux_v3_setup_pad(MX6_PAD_DISP0_DAT0__GPIO_4_21);
 }
 
-static void tx6dl_set_cpu_clock(void)
+static void tx6qdl_set_cpu_clock(void)
 {
        unsigned long cpu_clk = getenv_ulong("cpu_clk", 10, 0);
 
@@ -895,7 +1032,7 @@ int board_late_init(void)
        int ret = 0;
        const char *baseboard;
 
-       tx6dl_set_cpu_clock();
+       tx6qdl_set_cpu_clock();
        karo_fdt_move_fdt();
 
        baseboard = getenv("baseboard");
@@ -923,39 +1060,20 @@ int board_late_init(void)
 exit:
        tx6_init_mac();
 
-       gpio_set_value(TX6DL_RESET_OUT_GPIO, 1);
+       gpio_set_value(TX6_RESET_OUT_GPIO, 1);
        return ret;
 }
 
-#define iomux_field(v,f)       (((iomux_v3_cfg_t)(v) << f##_SHIFT) & f##_MASK)
-
-#define chk_iomux_field(f1,f2) ({                                      \
-       iomux_v3_cfg_t __c = iomux_field(~0, f1);                       \
-       if (__c & f2##_MASK) {                                          \
-               printf("%18s[%016llx] overlaps with:\n%18s[%016llx]\n", \
-                       #f1, f1##_MASK,                                 \
-                       #f2, f2##_MASK);                                \
-       }                                                               \
-       (__c & f2##_MASK) != 0;                                         \
-})
-
-#define chk_iomux_bit(f1,f2)   ({                                      \
-       iomux_v3_cfg_t __c = iomux_field(~0, f1);                       \
-       if (__c & f2) {                                                 \
-               printf("%18s[%016llx] overlaps with:\n%18s[%016llx]\n", \
-                       #f1, f1##_MASK,                                 \
-                       #f2, (iomux_v3_cfg_t)f2);                       \
-       }                                                               \
-       (__c & f2) != 0;                                                \
-})
-
 int checkboard(void)
 {
        print_cpuinfo();
-
+#if defined(CONFIG_MX6Q)
+       printf("Board: Ka-Ro TX6Q\n");
+#elif defined(CONFIG_MX6DL)
        printf("Board: Ka-Ro TX6DL\n");
-
-       printf("mtdparts='%s'\n", MTDPARTS_DEFAULT);
+#else
+#error Unsupported i.MX6 variant selected
+#endif
 
 #ifdef TIMER_TEST
        {
@@ -1024,13 +1142,15 @@ struct node_info nodes[] = {
 #define fdt_fixup_mtdparts(b,n,c) do { } while (0)
 #endif
 
-static void tx6dl_fixup_flexcan(void *blob)
+static void tx6qdl_fixup_flexcan(void *blob)
 {
        const char *baseboard = getenv("baseboard");
 
        if (baseboard && strcmp(baseboard, "stk5-v5") == 0)
                return;
-       /* TODO: handle flexcan transceiver GPIO */
+
+       karo_fdt_del_prop(blob, "fsl,p1010-flexcan", 0x02090000, "transceiver-switch");
+       karo_fdt_del_prop(blob, "fsl,p1010-flexcan", 0x02094000, "transceiver-switch");
 }
 
 void ft_board_setup(void *blob, bd_t *bd)
@@ -1039,7 +1159,7 @@ void ft_board_setup(void *blob, bd_t *bd)
        fdt_fixup_ethernet(blob);
 
        karo_fdt_fixup_touchpanel(blob);
-       karo_fdt_fixup_usb_otg(blob, "", 0);
-       tx6dl_fixup_flexcan(blob);
+       karo_fdt_fixup_usb_otg(blob, "usbotg", "fsl,usbphy");
+       tx6qdl_fixup_flexcan(blob);
 }
 #endif