regulator: TPS65910: Fix VDD1/2 voltage selector count
Count of selector voltage is required for regulator_set_voltage to work via set_voltage_sel. VDD1/2 currently have it as zero, so regulator_set_voltage won't work for VDD1/2. Update count (n_voltages) for VDD1/2. Output Voltage = (step value * 12.5 mV + 562.5 mV) * gain With above expr, number of voltages that can be selected is step value count * gain count constant for gain count will be called VDD1_2_NUM_VOLT_COARSE existing constant for step value count is VDD1_2_NUM_VOLTS, use VDD1_2_NUM_VOLT_FINE instead to make clear that step value is not the only component in deciding selectable voltage count Signed-off-by: Afzal Mohammed <afzal@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
cfcfc9eca2
commit
780dc9ba4e
|
@ -664,10 +664,10 @@ static int tps65910_set_voltage_dcdc(struct regulator_dev *dev,
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case TPS65910_REG_VDD1:
|
case TPS65910_REG_VDD1:
|
||||||
dcdc_mult = (selector / VDD1_2_NUM_VOLTS) + 1;
|
dcdc_mult = (selector / VDD1_2_NUM_VOLT_FINE) + 1;
|
||||||
if (dcdc_mult == 1)
|
if (dcdc_mult == 1)
|
||||||
dcdc_mult--;
|
dcdc_mult--;
|
||||||
vsel = (selector % VDD1_2_NUM_VOLTS) + 3;
|
vsel = (selector % VDD1_2_NUM_VOLT_FINE) + 3;
|
||||||
|
|
||||||
tps65910_modify_bits(pmic, TPS65910_VDD1,
|
tps65910_modify_bits(pmic, TPS65910_VDD1,
|
||||||
(dcdc_mult << VDD1_VGAIN_SEL_SHIFT),
|
(dcdc_mult << VDD1_VGAIN_SEL_SHIFT),
|
||||||
|
@ -675,10 +675,10 @@ static int tps65910_set_voltage_dcdc(struct regulator_dev *dev,
|
||||||
tps65910_reg_write(pmic, TPS65910_VDD1_OP, vsel);
|
tps65910_reg_write(pmic, TPS65910_VDD1_OP, vsel);
|
||||||
break;
|
break;
|
||||||
case TPS65910_REG_VDD2:
|
case TPS65910_REG_VDD2:
|
||||||
dcdc_mult = (selector / VDD1_2_NUM_VOLTS) + 1;
|
dcdc_mult = (selector / VDD1_2_NUM_VOLT_FINE) + 1;
|
||||||
if (dcdc_mult == 1)
|
if (dcdc_mult == 1)
|
||||||
dcdc_mult--;
|
dcdc_mult--;
|
||||||
vsel = (selector % VDD1_2_NUM_VOLTS) + 3;
|
vsel = (selector % VDD1_2_NUM_VOLT_FINE) + 3;
|
||||||
|
|
||||||
tps65910_modify_bits(pmic, TPS65910_VDD2,
|
tps65910_modify_bits(pmic, TPS65910_VDD2,
|
||||||
(dcdc_mult << VDD2_VGAIN_SEL_SHIFT),
|
(dcdc_mult << VDD2_VGAIN_SEL_SHIFT),
|
||||||
|
@ -756,9 +756,9 @@ static int tps65910_list_voltage_dcdc(struct regulator_dev *dev,
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case TPS65910_REG_VDD1:
|
case TPS65910_REG_VDD1:
|
||||||
case TPS65910_REG_VDD2:
|
case TPS65910_REG_VDD2:
|
||||||
mult = (selector / VDD1_2_NUM_VOLTS) + 1;
|
mult = (selector / VDD1_2_NUM_VOLT_FINE) + 1;
|
||||||
volt = VDD1_2_MIN_VOLT +
|
volt = VDD1_2_MIN_VOLT +
|
||||||
(selector % VDD1_2_NUM_VOLTS) * VDD1_2_OFFSET;
|
(selector % VDD1_2_NUM_VOLT_FINE) * VDD1_2_OFFSET;
|
||||||
break;
|
break;
|
||||||
case TPS65911_REG_VDDCTRL:
|
case TPS65911_REG_VDDCTRL:
|
||||||
volt = VDDCTRL_MIN_VOLT + (selector * VDDCTRL_OFFSET);
|
volt = VDDCTRL_MIN_VOLT + (selector * VDDCTRL_OFFSET);
|
||||||
|
@ -947,6 +947,8 @@ static __devinit int tps65910_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
if (i == TPS65910_REG_VDD1 || i == TPS65910_REG_VDD2) {
|
if (i == TPS65910_REG_VDD1 || i == TPS65910_REG_VDD2) {
|
||||||
pmic->desc[i].ops = &tps65910_ops_dcdc;
|
pmic->desc[i].ops = &tps65910_ops_dcdc;
|
||||||
|
pmic->desc[i].n_voltages = VDD1_2_NUM_VOLT_FINE *
|
||||||
|
VDD1_2_NUM_VOLT_COARSE;
|
||||||
} else if (i == TPS65910_REG_VDD3) {
|
} else if (i == TPS65910_REG_VDD3) {
|
||||||
if (tps65910_chip_id(tps65910) == TPS65910)
|
if (tps65910_chip_id(tps65910) == TPS65910)
|
||||||
pmic->desc[i].ops = &tps65910_ops_vdd3;
|
pmic->desc[i].ops = &tps65910_ops_vdd3;
|
||||||
|
|
|
@ -243,7 +243,8 @@
|
||||||
|
|
||||||
|
|
||||||
/*Registers VDD1, VDD2 voltage values definitions */
|
/*Registers VDD1, VDD2 voltage values definitions */
|
||||||
#define VDD1_2_NUM_VOLTS 73
|
#define VDD1_2_NUM_VOLT_FINE 73
|
||||||
|
#define VDD1_2_NUM_VOLT_COARSE 3
|
||||||
#define VDD1_2_MIN_VOLT 6000
|
#define VDD1_2_MIN_VOLT 6000
|
||||||
#define VDD1_2_OFFSET 125
|
#define VDD1_2_OFFSET 125
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue