summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorEric Bénard <eric@eukrea.com>2014-02-08 15:16:08 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2014-02-10 09:13:31 +0100
commitb43dee1a4323aa0d9460a68f5bbdf6e5681f4d30 (patch)
tree06b0b3990dc95e6548b25df61e6a1794cf54b10e /arch
parent1c15af075f627c52d1e1e167115baa62dea97837 (diff)
downloadbarebox-b43dee1a4323aa0d9460a68f5bbdf6e5681f4d30.tar.gz
barebox-b43dee1a4323aa0d9460a68f5bbdf6e5681f4d30.tar.xz
ARM: mx53-qsrb: fix USB
- configure the MC34708 properly so that USB can work (the sequence is taken from u-boot) - add the required defines to the mc13xxx include file Signed-off-by: Eric Bénard <eric@eukrea.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/boards/freescale-mx53-qsb/board.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/arch/arm/boards/freescale-mx53-qsb/board.c b/arch/arm/boards/freescale-mx53-qsb/board.c
index 69036dafcf..74826e4a5e 100644
--- a/arch/arm/boards/freescale-mx53-qsb/board.c
+++ b/arch/arm/boards/freescale-mx53-qsb/board.c
@@ -93,11 +93,56 @@ static int loco_late_init(void)
mc34708 = mc13xxx_get();
if (mc34708) {
+ unsigned int val;
+ int ret;
/* get the board revision from fuse */
rev = readl(MX53_IIM_BASE_ADDR + 0x878);
set_board_rev(rev);
printf("MCIMX53-START-R board 1.0 rev %c\n", (rev == 1) ? 'A' : 'B' );
armlinux_set_revision(loco_system_rev);
+ /* Set VDDGP to 1.25V for 1GHz on SW1 */
+ mc13xxx_reg_read(mc34708, MC13892_REG_SW_0, &val);
+ val = (val & ~SWx_VOLT_MASK_MC34708) | SWx_1_250V_MC34708;
+ ret = mc13xxx_reg_write(mc34708, MC13892_REG_SW_0, val);
+ if (ret) {
+ printf("Writing to REG_SW_0 failed: %d\n", ret);
+ return ret;
+ }
+
+ /* Set VCC as 1.30V on SW2 */
+ mc13xxx_reg_read(mc34708, MC13892_REG_SW_1, &val);
+ val = (val & ~SWx_VOLT_MASK_MC34708) | SWx_1_300V_MC34708;
+ ret = mc13xxx_reg_write(mc34708, MC13892_REG_SW_1, val);
+ if (ret) {
+ printf("Writing to REG_SW_1 failed: %d\n", ret);
+ return ret;
+ }
+
+ /* Set global reset timer to 4s */
+ mc13xxx_reg_read(mc34708, MC13892_REG_POWER_CTL2, &val);
+ val = (val & ~TIMER_MASK_MC34708) | TIMER_4S_MC34708;
+ ret = mc13xxx_reg_write(mc34708, MC13892_REG_POWER_CTL2, val);
+ if (ret) {
+ printf("Writing to REG_POWER_CTL2 failed: %d\n", ret);
+ return ret;
+ }
+
+ /* Set VUSBSEL and VUSBEN for USB PHY supply*/
+ mc13xxx_reg_read(mc34708, MC13892_REG_MODE_0, &val);
+ val |= (VUSBSEL_MC34708 | VUSBEN_MC34708);
+ ret = mc13xxx_reg_write(mc34708, MC13892_REG_MODE_0, val);
+ if (ret) {
+ printf("Writing to REG_MODE_0 failed: %d\n", ret);
+ return ret;
+ }
+
+ /* Set SWBST to 5V in auto mode */
+ val = SWBST_AUTO;
+ ret = mc13xxx_reg_write(mc34708, SWBST_CTRL, val);
+ if (ret) {
+ printf("Writing to SWBST_CTRL failed: %d\n", ret);
+ return ret;
+ }
} else {
/* so we have a DA9053 based board */
printf("MCIMX53-START board 1.0\n");