regulator: core: add support for configuring turn-on time through constraints

The turn-on time of the regulator depends on the regulator device's
electrical characteristics. Sometimes regulator turn-on time also
depends on the capacitive load on the given platform and it can be
more than the datasheet value.

The driver provides the enable-time as per datasheet.

Add support for configure the enable ramp time through regulator
constraints so that regulator core can take this value for enable
time for that regulator.

Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Acked-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
This commit is contained in:
Laxman Dewangan 2013-09-18 18:18:02 +05:30 committed by Mark Brown
parent 272b98c645
commit 00c877c69b
4 changed files with 15 additions and 0 deletions

View File

@ -14,6 +14,11 @@ Optional properties:
- regulator-ramp-delay: ramp delay for regulator(in uV/uS) - regulator-ramp-delay: ramp delay for regulator(in uV/uS)
For hardwares which support disabling ramp rate, it should be explicitly For hardwares which support disabling ramp rate, it should be explicitly
intialised to zero (regulator-ramp-delay = <0>) for disabling ramp delay. intialised to zero (regulator-ramp-delay = <0>) for disabling ramp delay.
- regulator-enable-ramp-delay: The time taken, in microseconds, for the supply
rail to reach the target voltage, plus/minus whatever tolerance the board
design requires. This property describes the total system ramp time
required due to the combination of internal ramping of the regulator itself,
and board design issues such as trace capacitance and load on the supply.
Deprecated properties: Deprecated properties:
- regulator-compatible: If a regulator chip contains multiple - regulator-compatible: If a regulator chip contains multiple

View File

@ -1186,6 +1186,8 @@ overflow_err:
static int _regulator_get_enable_time(struct regulator_dev *rdev) static int _regulator_get_enable_time(struct regulator_dev *rdev)
{ {
if (rdev->constraints && rdev->constraints->enable_time)
return rdev->constraints->enable_time;
if (!rdev->desc->ops->enable_time) if (!rdev->desc->ops->enable_time)
return rdev->desc->enable_time; return rdev->desc->enable_time;
return rdev->desc->ops->enable_time(rdev); return rdev->desc->ops->enable_time(rdev);

View File

@ -23,6 +23,8 @@ static void of_get_regulation_constraints(struct device_node *np,
const __be32 *min_uA, *max_uA, *ramp_delay; const __be32 *min_uA, *max_uA, *ramp_delay;
struct property *prop; struct property *prop;
struct regulation_constraints *constraints = &(*init_data)->constraints; struct regulation_constraints *constraints = &(*init_data)->constraints;
int ret;
u32 pval;
constraints->name = of_get_property(np, "regulator-name", NULL); constraints->name = of_get_property(np, "regulator-name", NULL);
@ -73,6 +75,10 @@ static void of_get_regulation_constraints(struct device_node *np,
else else
constraints->ramp_disable = true; constraints->ramp_disable = true;
} }
ret = of_property_read_u32(np, "regulator-enable-ramp-delay", &pval);
if (!ret)
constraints->enable_time = pval;
} }
/** /**

View File

@ -95,6 +95,7 @@ struct regulator_state {
* @initial_state: Suspend state to set by default. * @initial_state: Suspend state to set by default.
* @initial_mode: Mode to set at startup. * @initial_mode: Mode to set at startup.
* @ramp_delay: Time to settle down after voltage change (unit: uV/us) * @ramp_delay: Time to settle down after voltage change (unit: uV/us)
* @enable_time: Turn-on time of the rails (unit: microseconds)
*/ */
struct regulation_constraints { struct regulation_constraints {
@ -129,6 +130,7 @@ struct regulation_constraints {
unsigned int initial_mode; unsigned int initial_mode;
unsigned int ramp_delay; unsigned int ramp_delay;
unsigned int enable_time;
/* constraint flags */ /* constraint flags */
unsigned always_on:1; /* regulator never off when system is on */ unsigned always_on:1; /* regulator never off when system is on */