summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-tegra/cpu-tegra.c8
-rw-r--r--drivers/power/tegra_bpc_mgmt.c5
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));