diff options
Diffstat (limited to 'arch/arm/mach-tegra/board-cardhu-power.c')
-rw-r--r-- | arch/arm/mach-tegra/board-cardhu-power.c | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/arch/arm/mach-tegra/board-cardhu-power.c b/arch/arm/mach-tegra/board-cardhu-power.c index ace103f5ba6b..677b38347514 100644 --- a/arch/arm/mach-tegra/board-cardhu-power.c +++ b/arch/arm/mach-tegra/board-cardhu-power.c @@ -538,7 +538,10 @@ static struct regulator_consumer_supply fixed_reg_en_3v3_sys_supply[] = { REGULATOR_SUPPLY("hvdd_pex_pmu", NULL), REGULATOR_SUPPLY("avdd_hdmi", NULL), REGULATOR_SUPPLY("vpp_fuse", NULL), - REGULATOR_SUPPLY("avdd_usb", NULL), + REGULATOR_SUPPLY("avdd_usb", "tegra-udc.0"), + REGULATOR_SUPPLY("avdd_usb", "tegra-ehci.0"), + REGULATOR_SUPPLY("avdd_usb", "tegra-ehci.1"), + REGULATOR_SUPPLY("avdd_usb", "tegra-ehci.2"), REGULATOR_SUPPLY("vdd_ddr_rx", NULL), REGULATOR_SUPPLY("vcore_nand", NULL), REGULATOR_SUPPLY("hvdd_sata", NULL), @@ -1131,15 +1134,25 @@ static struct tegra_suspend_platform_data cardhu_suspend_data = { .cpu_lp2_min_residency = 2000, .board_suspend = cardhu_board_suspend, .board_resume = cardhu_board_resume, +#ifdef CONFIG_TEGRA_LP1_950 + .lp1_lowvolt_support = false, + .i2c_base_addr = 0, + .pmuslave_addr = 0, + .core_reg_addr = 0, + .lp1_core_volt_low = 0, + .lp1_core_volt_high = 0, +#endif }; int __init cardhu_suspend_init(void) { struct board_info board_info; struct board_info pmu_board_info; + struct board_info display_board_info; tegra_get_board_info(&board_info); tegra_get_pmu_board_info(&pmu_board_info); + tegra_get_display_board_info(&display_board_info); /* For PMU Fab A03, A04 and A05 make core_pwr_req to high */ if ((pmu_board_info.fab == BOARD_FAB_A03) || @@ -1158,25 +1171,43 @@ int __init cardhu_suspend_init(void) if (board_info.fab == BOARD_FAB_A03) cardhu_suspend_data.corereq_high = true; if (board_info.fab < BOARD_FAB_A03) - /* post E1291-A02 revisions WAKE19/USB1-VBUS wake supported */ + /* post E1291-A02 revisions VBUS wake supported */ tegra_disable_wake_source(TEGRA_WAKE_USB1_VBUS); break; case BOARD_E1198: if (board_info.fab < BOARD_FAB_A02) - /* post E1198-A01 revisions WAKE19/USB1-VBUS wake supported */ + /* post E1198-A01 revisions VBUS wake supported */ tegra_disable_wake_source(TEGRA_WAKE_USB1_VBUS); break; case BOARD_PM269: +#ifdef CONFIG_TEGRA_LP1_950 + /* AP37 board supports the LP1_950mV feature */ + if (is_display_board_dsi(display_board_info.board_id)) { + cardhu_suspend_data.lp1_lowvolt_support = true; + cardhu_suspend_data.i2c_base_addr = TEGRA_I2C5_BASE; + cardhu_suspend_data.pmuslave_addr = 0xC0; + cardhu_suspend_data.core_reg_addr = 0x03; + cardhu_suspend_data.lp1_core_volt_low = 0x2D; + cardhu_suspend_data.lp1_core_volt_high = 0x50; + } +#endif + if (is_display_board_dsi(display_board_info.board_id)) + cardhu_suspend_data.cpu_wake_freq = CPU_WAKE_FREQ_LOW; case BOARD_PM305: case BOARD_PM311: break; - case BOARD_E1187: - case BOARD_E1186: case BOARD_E1256: case BOARD_E1257: cardhu_suspend_data.cpu_timer = 5000; cardhu_suspend_data.cpu_off_timer = 5000; break; + case BOARD_E1187: + case BOARD_E1186: + /* VBUS repeated wakeup seen on older E1186 boards */ + tegra_disable_wake_source(TEGRA_WAKE_USB1_VBUS); + cardhu_suspend_data.cpu_timer = 5000; + cardhu_suspend_data.cpu_off_timer = 5000; + break; default: break; } |