regulator: arizona-ldo1: Add ramp time for HI_PWR
PATCH 1/1 regulator: arizona-ldo1: Add ramp time for HI_PWR
From: Richard Fitzgerald <[email protected]>
For regulators that support HI_PWR we need to ensure that switching to 1.8v allows time for the regulator to reach that voltage.
--- drivers/regulator/arizona-ldo1.c | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-)
drivers/regulator/arizona-ldo1.c +12 -0
@@ -113,6 +113,17 @@ static int arizona_ldo1_hc_get_voltage_sel(struct regulator_dev *rdev)return (val &ARIZONA_LDO1_VSEL_MASK ) >>ARIZONA_LDO1_VSEL_SHIFT ; } +static int arizona_ldo1_hc_set_voltage_time_sel (struct regulator_dev *rdev, +unsigned int old_selector, +unsigned int new_selector) +{ +/* if moving to 1.8v allow time for it to reach voltage */ +if (new_selector == rdev->desc->n_voltages -1 ) +return 25 ; +else +return 0 ; +} +static struct regulator_ops arizona_ldo1_hc_ops = { .list_voltage = arizona_ldo1_hc_list_voltage, .map_voltage = arizona_ldo1_hc_map_voltage,
@@ -120,6 +131,7 @@ static struct regulator_ops arizona_ldo1_hc_ops = { .set_voltage_sel = arizona_ldo1_hc_set_voltage_sel, .get_bypass = regulator_get_bypass_regmap, .set_bypass = regulator_set_bypass_regmap, + .set_voltage_time_sel = arizona_ldo1_hc_set_voltage_time_sel, };static const struct regulator_desc arizona_ldo1_hc = {
Signature · 1 line
1.7.2.5
Mark Brown
maintainerdrivers/regulator/arizona-ldo1.c static int arizona_ldo1_hc_get_voltage_sel(struct regulator_dev *rdev) · line 125
Quoted 10 lines · Charles Keepax
drivers/regulator/arizona-ldo1.c +10
-0+static int arizona_ldo1_hc_set_voltage_time_sel (struct regulator_dev *rdev, +unsigned int old_selector, +unsigned int new_selector) +{ +/* if moving to 1.8v allow time for it to reach voltage */ +if (new_selector == rdev->desc->n_voltages -1 ) +return 25 ; +else +return 0 ; +}
So changes to move to the top voltage always take constant time while all other voltage changes are instantaneous? That doesn't seem right. I'd expect something more like a calculation based on some number of miliseconds per milivolt.
Quoted 17 lines · Mark Brown
drivers/regulator/arizona-ldo1.c static int arizona_ldo1_hc_get_voltage_sel(struct regulator_dev *rdev) · line 125
Quoted 10 lines · Charles Keepax
drivers/regulator/arizona-ldo1.c +10
-0+static int arizona_ldo1_hc_set_voltage_time_sel (struct regulator_dev *rdev, +unsigned int old_selector, +unsigned int new_selector) +{ +/* if moving to 1.8v allow time for it to reach voltage */ +if (new_selector == rdev->desc->n_voltages -1 ) +return 25 ; +else +return 0 ; +}So changes to move to the top voltage always take constant time while all other voltage changes are instantaneous? That doesn't seem right. I'd expect something more like a calculation based on some number of miliseconds per milivolt.
Its more just that this is the only case that we really care about. The reg only ever gets used at 1.2V and 1.8V, and the only case where there is a problem is if we ask for 1.8V and we don't have it yet.
I don't think we really have the data to give for other cases. I could expand the comment perhaps? Or TBH it is fast enough it is unlikely to ever be a problem in practice so we could just drop the patch.
Thanks,
Charles
Mark Brown
maintainerQuoted 12 lines · Charles Keepax
Quoted 4 lines · Mark Brown
So changes to move to the top voltage always take constant time while all other voltage changes are instantaneous? That doesn't seem right. I'd expect something more like a calculation based on some number of miliseconds per milivolt.
Its more just that this is the only case that we really care about. The reg only ever gets used at 1.2V and 1.8V, and the only case where there is a problem is if we ask for 1.8V and we don't have it yet.
Quoted 4 lines
I don't think we really have the data to give for other cases. I could expand the comment perhaps? Or TBH it is fast enough it is unlikely to ever be a problem in practice so we could just drop the patch.
You'll probably find that the ramp is pretty much linear so just changing to something that multiplies out to the expected value will be good enough. I'd rather not have bad examples that other drivers might copy.
Quoted 18 lines · Mark Brown
Quoted 12 lines · Charles Keepax
Quoted 4 lines · Mark Brown
So changes to move to the top voltage always take constant time while all other voltage changes are instantaneous? That doesn't seem right. I'd expect something more like a calculation based on some number of miliseconds per milivolt.
Its more just that this is the only case that we really care about. The reg only ever gets used at 1.2V and 1.8V, and the only case where there is a problem is if we ask for 1.8V and we don't have it yet.
Quoted 4 lines
I don't think we really have the data to give for other cases. I could expand the comment perhaps? Or TBH it is fast enough it is unlikely to ever be a problem in practice so we could just drop the patch.
Quoted 4 lines
You'll probably find that the ramp is pretty much linear so just changing to something that multiplies out to the expected value will be good enough. I'd rather not have bad examples that other drivers might copy.
Cool, I will respin.
Thanks,
Charles
Quoted 24 lines · Charles Keepax
Quoted 17 lines · Mark Brown
drivers/regulator/arizona-ldo1.c static int arizona_ldo1_hc_get_voltage_sel(struct regulator_dev *rdev) · line 125
Quoted 10 lines · Charles Keepax
drivers/regulator/arizona-ldo1.c +10
-0+static int arizona_ldo1_hc_set_voltage_time_sel (struct regulator_dev *rdev, +unsigned int old_selector, +unsigned int new_selector) +{ +/* if moving to 1.8v allow time for it to reach voltage */ +if (new_selector == rdev->desc->n_voltages -1 ) +return 25 ; +else +return 0 ; +}So changes to move to the top voltage always take constant time while all other voltage changes are instantaneous? That doesn't seem right. I'd expect something more like a calculation based on some number of miliseconds per milivolt.
Its more just that this is the only case that we really care about. The reg only ever gets used at 1.2V and 1.8V, and the only case where there is a problem is if we ask for 1.8V and we don't have it yet.
Quoted 4 lines
I don't think we really have the data to give for other cases. I could expand the comment perhaps? Or TBH it is fast enough it is unlikely to ever be a problem in practice so we could just drop the patch.
Oh, I had one other thought, what about if we just returned 25uS as a worse case for the transition. Perhaps that would be nicer, and the 1.2V -> 1.8V transition is almost certainly the slowest of the options available.
Thanks,
Charles
Mark Brown
maintainerQuoted 4 lines · Charles Keepax
Oh, I had one other thought, what about if we just returned 25uS as a worse case for the transition. Perhaps that would be nicer, and the 1.2V -> 1.8V transition is almost certainly the slowest of the options available.
That works too. The problem is returning zero.