diff options
-rw-r--r-- | arch/arm/include/asm/arch-tegra2/pmu.h | 4 | ||||
-rw-r--r-- | board/toradex/common/board.c | 29 |
2 files changed, 32 insertions, 1 deletions
diff --git a/arch/arm/include/asm/arch-tegra2/pmu.h b/arch/arm/include/asm/arch-tegra2/pmu.h index 0faf07c3db4..6cf363df7d5 100644 --- a/arch/arm/include/asm/arch-tegra2/pmu.h +++ b/arch/arm/include/asm/arch-tegra2/pmu.h @@ -27,6 +27,10 @@ #define DVC_I2C_BUS_NUMBER 0 #define PMU_I2C_ADDRESS 0x34 +#define PMU_SUPPLYENE 0x14 +#define PMU_SUPPLYENE_SYSINEN (1<<5) +#define PMU_SUPPLYENE_EXITSLREQ (1<<1) + #define PMU_CORE_VOLTAGE_REG 0x26 #define PMU_CPU_VOLTAGE_REG 0x23 #define PMU_SUPPLY_CONTROL_REG1 0x20 diff --git a/board/toradex/common/board.c b/board/toradex/common/board.c index ea70dbdc117..a48c0efb7e0 100644 --- a/board/toradex/common/board.c +++ b/board/toradex/common/board.c @@ -1,5 +1,5 @@ /* - * (C) Copyright 2012 + * (C) Copyright 2012-2014 * Toradex, Inc. * * See file CREDITS for list of people who contributed to this @@ -341,6 +341,30 @@ static TrdxBootDevice board_get_current_bootdev(void) return boot_device; } +/* Disable PMIC sleep mode on low supply voltage for Colibri T20 */ +static void board_disable_pmic_sleep(void) { +#ifdef CONFIG_TEGRA2 + uchar reg, data_buffer[1]; + int i; + + i2c_set_bus_num(DVC_I2C_BUS_NUMBER); /* PMU is on bus 0 */ + + reg = PMU_SUPPLYENE; + for (i = 0; i < MAX_I2C_RETRY; ++i) { + if (!i2c_read(PMU_I2C_ADDRESS, reg, 1, data_buffer, 1)) + break; + udelay(100); + } + data_buffer[0] &= ~PMU_SUPPLYENE_SYSINEN; + data_buffer[0] |= PMU_SUPPLYENE_EXITSLREQ; + for (i = 0; i < MAX_I2C_RETRY; ++i) { + if (!i2c_write(PMU_I2C_ADDRESS, reg, 1, data_buffer, 1)) + break; + udelay(100); + } +#endif +} + /* * Routine: board_init * Description: Early hardware init. @@ -373,6 +397,9 @@ int board_init(void) i2c_init_board(); #endif + /* Disable PMIC sleep mode on low supply voltage */ + board_disable_pmic_sleep(); + #ifdef CONFIG_TEGRA_CLOCK_SCALING pmu_set_nominal(); arch_full_speed(); |