msm: saw-regulator: Support enable and disable

Enable and disable callbacks are added as an optimization so that
we don't update voltages when the regulator is disabled. The use
case for this is a call sequence during CPU Hotplug like so:

Down:

regulator_disable()
regulator_set_voltage(0)

Up:

regulator_set_voltage(original_voltage)
regulator_enable()

Since the SPM actually enables and disables the regulator when
executing a WFI, we want these calls to actually amount to NOPs.
The calls must exist for consistency with other regulator
implementations that do mandate this sequence.

In order to support this sequence, regulator_disable() will simply
set the device to 'offline'. When a regulator is offline, then
calls to regulator_set_voltage() do not actually adjust the
voltage through the SPM; they simply cache the value that was
specified. Then, during regulator_enable, iff the voltage value
corresponding to the last regulator_set_voltage differs from the
value actually programmed in hardware do we reprogram the
hardware.

These rules support the call sequence above since the last value
written to hardware will occur with the regulator enabled by
acpuclock. When executing Hotplug Down, the
set_voltage(0) call does not take effect since the regulator has
been explicitly disabled. In the Hotplug Up case, the set_voltage
case is also cached since the regulator remains disabled. The
value set by the client here should be equal to the value
previously set in hardware (eg. restore). Lastly, the
regulaor_enable() callback sees that the value are the same, and
therefore does not update hardware.

Change-Id: I071a25e6d0c30e378c5dcddcdd9ae26fe02da04a
Signed-off-by: Michael Bohan <mbohan@codeaurora.org>
diff --git a/arch/arm/mach-msm/board-8930-regulator-pm8917.c b/arch/arm/mach-msm/board-8930-regulator-pm8917.c
index 3ee052b..9a2967a 100644
--- a/arch/arm/mach-msm/board-8930-regulator-pm8917.c
+++ b/arch/arm/mach-msm/board-8930-regulator-pm8917.c
@@ -487,7 +487,8 @@
 	{ \
 		.constraints = { \
 			.name		= _name, \
-			.valid_ops_mask	= REGULATOR_CHANGE_VOLTAGE, \
+			.valid_ops_mask	= REGULATOR_CHANGE_VOLTAGE | \
+					  REGULATOR_CHANGE_STATUS, \
 			.min_uV		= _min_uV, \
 			.max_uV		= _max_uV, \
 		}, \