diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-tegra/board-cardhu-power.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-enterprise-power.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-tegra/pm.c | 9 | ||||
-rw-r--r-- | arch/arm/mach-tegra/pm.h | 11 |
4 files changed, 20 insertions, 3 deletions
diff --git a/arch/arm/mach-tegra/board-cardhu-power.c b/arch/arm/mach-tegra/board-cardhu-power.c index e76cbc458914..677b38347514 100644 --- a/arch/arm/mach-tegra/board-cardhu-power.c +++ b/arch/arm/mach-tegra/board-cardhu-power.c @@ -1191,6 +1191,8 @@ int __init cardhu_suspend_init(void) 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; diff --git a/arch/arm/mach-tegra/board-enterprise-power.c b/arch/arm/mach-tegra/board-enterprise-power.c index c154841eba93..3475452adc5a 100644 --- a/arch/arm/mach-tegra/board-enterprise-power.c +++ b/arch/arm/mach-tegra/board-enterprise-power.c @@ -822,6 +822,7 @@ static struct tegra_suspend_platform_data enterprise_suspend_data = { .lp1_core_volt_low = 0x1D, .lp1_core_volt_high = 0x33, #endif + .cpu_wake_freq = CPU_WAKE_FREQ_LOW, }; static void enterprise_init_deep_sleep_mode(void) diff --git a/arch/arm/mach-tegra/pm.c b/arch/arm/mach-tegra/pm.c index b20b51245d50..88dd501689af 100644 --- a/arch/arm/mach-tegra/pm.c +++ b/arch/arm/mach-tegra/pm.c @@ -178,7 +178,6 @@ struct suspend_context tegra_sctx; #define MC_SECURITY_SIZE 0x70 #define MC_SECURITY_CFG2 0x7c -#define AWAKE_CPU_FREQ_MIN 51000 static struct pm_qos_request_list awake_cpu_freq_req; struct dvfs_rail *tegra_cpu_rail; @@ -1105,13 +1104,17 @@ void __init tegra_init_suspend(struct tegra_suspend_platform_data *plat) u32 reg; u32 mode; + if (plat->cpu_wake_freq == 0) + plat->cpu_wake_freq = CPU_WAKE_FREQ_HIGH; + tegra_cpu_rail = tegra_dvfs_get_rail_by_name("vdd_cpu"); tegra_core_rail = tegra_dvfs_get_rail_by_name("vdd_core"); pm_qos_add_request(&awake_cpu_freq_req, PM_QOS_CPU_FREQ_MIN, - AWAKE_CPU_FREQ_MIN); + plat->cpu_wake_freq); tegra_pclk = clk_get_sys(NULL, "pclk"); BUG_ON(IS_ERR(tegra_pclk)); + pdata = plat; (void)reg; (void)mode; @@ -1383,7 +1386,7 @@ static void pm_late_resume(struct early_suspend *h) { if (clk_wake) clk_enable(clk_wake); - pm_qos_update_request(&awake_cpu_freq_req, (s32)AWAKE_CPU_FREQ_MIN); + pm_qos_update_request(&awake_cpu_freq_req, (s32)pdata->cpu_wake_freq); } static struct early_suspend pm_early_suspender = { diff --git a/arch/arm/mach-tegra/pm.h b/arch/arm/mach-tegra/pm.h index 5ea2b7f843a2..401c0aaf061f 100644 --- a/arch/arm/mach-tegra/pm.h +++ b/arch/arm/mach-tegra/pm.h @@ -33,6 +33,16 @@ #define PMC_SCRATCH1 0x54 #define PMC_SCRATCH4 0x60 +/* The following two constants are for setting the CPU freq + * floor when display is on. 204000Khz is for tablet and + * 102000KHz is for phones. The reason for different values + * for tablet and phone is due to phones usually have smart + * displays that requires less CPU activity for refreshing + * the screen + */ + +#define CPU_WAKE_FREQ_HIGH 204000 +#define CPU_WAKE_FREQ_LOW 102000 enum tegra_suspend_mode { TEGRA_SUSPEND_NONE = 0, TEGRA_SUSPEND_LP2, /* CPU voltage off */ @@ -73,6 +83,7 @@ struct tegra_suspend_platform_data { unsigned int lp1_core_volt_low; unsigned int lp1_core_volt_high; #endif + int cpu_wake_freq; }; /* clears io dpd settings before kernel code */ |