msm: rpm-regulator: Add sleep-set force mode parameter
Add a new sleep_set_force_mode parameter into the rpm-regulator
driver platform data structure. Modify sleep-set requests to use
this value for force mode.
This parameter is intended to be used to capture platform
specific mode requirements for certain regulators which cannot
be managed by modifying peak current (ip) alone.
Change-Id: I7f25e546ae7feef1b5e8312a4198e855312a58c7
Signed-off-by: David Collins <collinsd@codeaurora.org>
diff --git a/arch/arm/mach-msm/include/mach/rpm-regulator.h b/arch/arm/mach-msm/include/mach/rpm-regulator.h
index d56f1b6..f9fc487 100644
--- a/arch/arm/mach-msm/include/mach/rpm-regulator.h
+++ b/arch/arm/mach-msm/include/mach/rpm-regulator.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
+/* Copyright (c) 2010-2012, Code Aurora Forum. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -100,6 +100,9 @@
* @pin_fn: action to perform when pin control pin(s) is/are active
* @force_mode: used to specify a force mode which overrides the votes
* of other RPM masters.
+ * @sleep_set_force_mode: force mode to use in sleep-set requests
+ * @power_mode: mode to use as HPM (typically PWM or hysteretic) when
+ * utilizing Auto mode selection
* @default_uV: initial voltage to set the regulator to if enable is
* called before set_voltage (e.g. when boot_on or
* always_on is set).
@@ -120,6 +123,7 @@
unsigned pin_ctrl;
int pin_fn;
int force_mode;
+ int sleep_set_force_mode;
int power_mode;
int default_uV;
unsigned peak_uA;
diff --git a/arch/arm/mach-msm/rpm-regulator.c b/arch/arm/mach-msm/rpm-regulator.c
index fa369b3..719ea8a 100644
--- a/arch/arm/mach-msm/rpm-regulator.c
+++ b/arch/arm/mach-msm/rpm-regulator.c
@@ -327,6 +327,12 @@
vreg->req[1].value &= ~mask1;
vreg->req[1].value |= val1 & mask1;
+ /* Set the force mode field based on which set is being requested. */
+ if (set == MSM_RPM_CTX_SET_0)
+ SET_PART(vreg, fm, vreg->pdata.force_mode);
+ else
+ SET_PART(vreg, fm, vreg->pdata.sleep_set_force_mode);
+
if (update_voltage)
min_uV_vote[voter] = voltage_from_req(vreg);