u32 cpurev = get_cpu_rev();
char *cpu_str = "?";
- switch ((cpurev >> 12) & 0xff) {
- case MXC_CPU_MX6SL:
+ if (is_cpu_type(MXC_CPU_MX6SL)) {
cpu_str = "SL";
tx6_mod_suffix = "?";
- break;
- case MXC_CPU_MX6DL:
+ } else if (is_cpu_type(MXC_CPU_MX6DL)) {
cpu_str = "DL";
tx6_mod_suffix = "U";
- break;
- case MXC_CPU_MX6SOLO:
+ } else if (is_cpu_type(MXC_CPU_MX6SOLO)) {
cpu_str = "SOLO";
tx6_mod_suffix = "S";
- break;
- case MXC_CPU_MX6Q:
+ } else if (is_cpu_type(MXC_CPU_MX6Q)) {
cpu_str = "Q";
tx6_mod_suffix = "Q";
- break;
}
printf("CPU: Freescale i.MX6%s rev%d.%d at %d MHz\n",
debug("%s@%d: \n", __func__, __LINE__);
-// i2c_init_all();
-
for (i = 0; i < ARRAY_SIZE(tx6_mod_revs); i++) {
u8 i2c_addr = tx6_mod_revs[i].addr;
int ret = i2c_probe(i2c_addr);
int board_init(void)
{
int ret;
- u32 cpurev = get_cpu_rev();
- int cpu_variant = (cpurev >> 12) & 0xff;
int pmic_id;
debug("%s@%d: \n", __func__, __LINE__);
pmic_id = tx6_pmic_probe();
- if (pmic_id >= 0)
+ if (pmic_id >= 0 && pmic_id < ARRAY_SIZE(tx6_mod_revs))
pmic_addr = tx6_mod_revs[pmic_id].addr;
printf("Board: Ka-Ro TX6%s-%d%d%d%c\n",
tx6_mod_suffix,
- cpu_variant == MXC_CPU_MX6Q ? 1 : 8,
+ is_cpu_type(MXC_CPU_MX6Q) ? 1 : 8,
is_lvds(), tx6_get_mod_rev(pmic_id),
tx6_mem_suffix());
return 0;
}
- ret = tx6_pmic_init(pmic_addr);
+ ret = tx6_pmic_init(pmic_addr, NULL, 0);
if (ret) {
printf("Failed to setup PMIC voltages: %d\n", ret);
hang();
};
#ifdef CONFIG_LCD
-static u16 tx6_cmap[256];
vidinfo_t panel_info = {
/* set to max. size supported by SoC */
.vl_col = 1920,
.vl_row = 1080,
.vl_bpix = LCD_COLOR32, /* Bits per pixel, 0: 1bpp, 1: 2bpp, 2: 4bpp, 3: 8bpp ... */
- .cmap = tx6_cmap,
};
static struct fb_videomode tx6_fb_modes[] = {
if (!lcd_enabled) {
debug("LCD disabled\n");
+ goto disable;
return;
}
debug("Disabling LCD\n");
lcd_enabled = 0;
setenv("splashimage", NULL);
+ goto disable;
return;
}
if (video_mode == NULL) {
debug("Disabling LCD\n");
lcd_enabled = 0;
+ goto disable;
return;
}
vm = video_mode;
fb_mode.xres, fb_mode.yres,
panel_info.vl_col, panel_info.vl_row);
lcd_enabled = 0;
+ goto disable;
return;
}
}
printf(" %s", p->name);
}
printf("\n");
+ goto disable;
return;
}
if (p->xres > panel_info.vl_col || p->yres > panel_info.vl_row) {
printf("video resolution: %dx%d exceeds hardware limits: %dx%d\n",
p->xres, p->yres, panel_info.vl_col, panel_info.vl_row);
lcd_enabled = 0;
+ goto disable;
return;
}
panel_info.vl_col = p->xres;
lcd_enabled = 0;
printf("Invalid %s bus width: %d\n", is_lvds() ? "LVDS" : "LCD",
lcd_bus_width);
+ goto disable;
return;
}
if (is_lvds()) {
if (lvds_chan_mask == 0) {
printf("No LVDS channel active\n");
lcd_enabled = 0;
+ goto disable;
return;
}
} else {
debug("Skipping initialization of LCD controller\n");
}
+ return;
+
+disable:
+ lcd_enabled = 0;
+ panel_info.vl_col = 0;
+ panel_info.vl_row = 0;
+
}
#else
#define lcd_enabled 0
int board_late_init(void)
{
- int ret = 0;
const char *baseboard;
-#if 1
- /* override secure_boot fuse */
- struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR;
- struct fuse_bank0_regs *fuse = (void *)ocotp->bank[0].fuse_regs;
-
- writel(0x12, &fuse->cfg5);
-#endif
debug("%s@%d: \n", __func__, __LINE__);
} else {
printf("WARNING: Unsupported baseboard: '%s'\n",
baseboard);
- ret = -EINVAL;
+ if (!had_ctrlc())
+ return -EINVAL;
}
exit:
gpio_set_value(TX6_RESET_OUT_GPIO, 1);
clear_ctrlc();
- return ret;
+ return 0;
}
#ifdef CONFIG_SERIAL_TAG