From 7ddd7f619e68d0c1fc8665e6a9b72db292ac752a Mon Sep 17 00:00:00 2001 From: Alex Frid Date: Sun, 11 Mar 2012 00:02:33 -0800 Subject: power: bpcm: Re-try setting BPC limit Check returned value from BPC set limit api, and re-try again on error. Keep CPU throttled while re-trying. Signed-off-by: Alex Frid (cherry picked from commit 8d5e5a36a03587e3e9374ad8cec6958bd3617f0c) Change-Id: I29b24a92b87cbd41d68473d0c9ef4c8d6add992f Reviewed-on: http://git-master/r/93732 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Aleksandr Frid Tested-by: Aleksandr Frid Reviewed-by: Yu-Huan Hsu --- arch/arm/mach-tegra/cpu-tegra.c | 8 +++++--- drivers/power/tegra_bpc_mgmt.c | 5 ++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/arch/arm/mach-tegra/cpu-tegra.c b/arch/arm/mach-tegra/cpu-tegra.c index b4ba093952c7..d35c18e533d9 100644 --- a/arch/arm/mach-tegra/cpu-tegra.c +++ b/arch/arm/mach-tegra/cpu-tegra.c @@ -262,13 +262,15 @@ int tegra_system_edp_alarm(bool alarm) system_edp_alarm = alarm; /* Update cpu rate if cpufreq (at least on cpu0) is already started - and cancel emergency throttling after edp limit is applied */ + and cancel emergency throttling after either edp limit is applied + or alarm is canceled */ if (target_cpu_speed[0]) { edp_update_limit(); ret = tegra_cpu_set_speed_cap(NULL); - if (!ret && alarm) - tegra_edp_throttle_cpu_now(0); } + if (!ret || !alarm) + tegra_edp_throttle_cpu_now(0); + mutex_unlock(&tegra_cpu_lock); return ret; diff --git a/drivers/power/tegra_bpc_mgmt.c b/drivers/power/tegra_bpc_mgmt.c index 0d9ddeee282e..fba0cfef277a 100644 --- a/drivers/power/tegra_bpc_mgmt.c +++ b/drivers/power/tegra_bpc_mgmt.c @@ -27,15 +27,18 @@ static irqreturn_t tegra_bpc_mgmt_bh(int irq, void *data) { + int ret = -1; int gpio_val = 0; struct tegra_bpc_mgmt_platform_data *bpc_platform_data; bpc_platform_data = (struct tegra_bpc_mgmt_platform_data *)data; - tegra_system_edp_alarm(true); /** * Keep on checking whether event has passed or not. */ while (!gpio_val) { + if (ret) + ret = tegra_system_edp_alarm(true); + set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(msecs_to_jiffies( bpc_platform_data->bpc_mgmt_timeout)); -- cgit v1.2.3