aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/regulator/tps65912-regulator.c
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@gmail.com>2012-03-08 18:05:41 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-03-11 16:49:35 -0400
commit85c5d86d0e87bd843d711dcb7427c6ba64f736d1 (patch)
tree8bd583198dd550c655746e1bf8e824875a8c5403 /drivers/regulator/tps65912-regulator.c
parent5b5e977ce71cab973d9f8c7d5303832a2bafa92c (diff)
regulator: Use array to store dcdc_range settings for tps65912
Then we can use the regulator id as array index to access the array. This change makes the code simpler. Signed-off-by: Axel Lin <axel.lin@gmail.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'drivers/regulator/tps65912-regulator.c')
-rw-r--r--drivers/regulator/tps65912-regulator.c70
1 files changed, 20 insertions, 50 deletions
diff --git a/drivers/regulator/tps65912-regulator.c b/drivers/regulator/tps65912-regulator.c
index 679709536408..3ab1722c78b7 100644
--- a/drivers/regulator/tps65912-regulator.c
+++ b/drivers/regulator/tps65912-regulator.c
@@ -114,10 +114,7 @@ struct tps65912_reg {
114 struct mutex io_lock; 114 struct mutex io_lock;
115 int mode; 115 int mode;
116 int (*get_ctrl_reg)(int); 116 int (*get_ctrl_reg)(int);
117 int dcdc1_range; 117 int dcdc_range[TPS65912_NUM_DCDC];
118 int dcdc2_range;
119 int dcdc3_range;
120 int dcdc4_range;
121 int pwm_mode_reg; 118 int pwm_mode_reg;
122 int eco_reg; 119 int eco_reg;
123}; 120};
@@ -125,46 +122,31 @@ struct tps65912_reg {
125static int tps65912_get_range(struct tps65912_reg *pmic, int id) 122static int tps65912_get_range(struct tps65912_reg *pmic, int id)
126{ 123{
127 struct tps65912 *mfd = pmic->mfd; 124 struct tps65912 *mfd = pmic->mfd;
128 125 int range;
129 if (id > TPS65912_REG_DCDC4)
130 return 0;
131 126
132 switch (id) { 127 switch (id) {
133 case TPS65912_REG_DCDC1: 128 case TPS65912_REG_DCDC1:
134 pmic->dcdc1_range = tps65912_reg_read(mfd, 129 range = tps65912_reg_read(mfd, TPS65912_DCDC1_LIMIT);
135 TPS65912_DCDC1_LIMIT); 130 break;
136 if (pmic->dcdc1_range < 0)
137 return pmic->dcdc1_range;
138 pmic->dcdc1_range = (pmic->dcdc1_range &
139 DCDC_LIMIT_RANGE_MASK) >> DCDC_LIMIT_RANGE_SHIFT;
140 return pmic->dcdc1_range;
141 case TPS65912_REG_DCDC2: 131 case TPS65912_REG_DCDC2:
142 pmic->dcdc2_range = tps65912_reg_read(mfd, 132 range = tps65912_reg_read(mfd, TPS65912_DCDC2_LIMIT);
143 TPS65912_DCDC2_LIMIT); 133 break;
144 if (pmic->dcdc2_range < 0)
145 return pmic->dcdc2_range;
146 pmic->dcdc2_range = (pmic->dcdc2_range &
147 DCDC_LIMIT_RANGE_MASK) >> DCDC_LIMIT_RANGE_SHIFT;
148 return pmic->dcdc2_range;
149 case TPS65912_REG_DCDC3: 134 case TPS65912_REG_DCDC3:
150 pmic->dcdc3_range = tps65912_reg_read(mfd, 135 range = tps65912_reg_read(mfd, TPS65912_DCDC3_LIMIT);
151 TPS65912_DCDC3_LIMIT); 136 break;
152 if (pmic->dcdc3_range < 0)
153 return pmic->dcdc3_range;
154 pmic->dcdc3_range = (pmic->dcdc3_range &
155 DCDC_LIMIT_RANGE_MASK) >> DCDC_LIMIT_RANGE_SHIFT;
156 return pmic->dcdc3_range;
157 case TPS65912_REG_DCDC4: 137 case TPS65912_REG_DCDC4:
158 pmic->dcdc4_range = tps65912_reg_read(mfd, 138 range = tps65912_reg_read(mfd, TPS65912_DCDC4_LIMIT);
159 TPS65912_DCDC4_LIMIT); 139 break;
160 if (pmic->dcdc4_range < 0)
161 return pmic->dcdc4_range;
162 pmic->dcdc4_range = (pmic->dcdc4_range &
163 DCDC_LIMIT_RANGE_MASK) >> DCDC_LIMIT_RANGE_SHIFT;
164 return pmic->dcdc4_range;
165 default: 140 default:
166 return 0; 141 return 0;
167 } 142 }
143
144 if (range >= 0)
145 range = (range & DCDC_LIMIT_RANGE_MASK)
146 >> DCDC_LIMIT_RANGE_SHIFT;
147
148 pmic->dcdc_range[id] = range;
149 return range;
168} 150}
169 151
170static unsigned long tps65912_vsel_to_uv_range0(u8 vsel) 152static unsigned long tps65912_vsel_to_uv_range0(u8 vsel)
@@ -512,22 +494,10 @@ static int tps65912_list_voltage_dcdc(struct regulator_dev *dev,
512 struct tps65912_reg *pmic = rdev_get_drvdata(dev); 494 struct tps65912_reg *pmic = rdev_get_drvdata(dev);
513 int range, voltage = 0, id = rdev_get_id(dev); 495 int range, voltage = 0, id = rdev_get_id(dev);
514 496
515 switch (id) { 497 if (id > TPS65912_REG_DCDC4)
516 case TPS65912_REG_DCDC1:
517 range = pmic->dcdc1_range;
518 break;
519 case TPS65912_REG_DCDC2:
520 range = pmic->dcdc2_range;
521 break;
522 case TPS65912_REG_DCDC3:
523 range = pmic->dcdc3_range;
524 break;
525 case TPS65912_REG_DCDC4:
526 range = pmic->dcdc4_range;
527 break;
528 default:
529 return -EINVAL; 498 return -EINVAL;
530 } 499
500 range = pmic->dcdc_range[id];
531 501
532 switch (range) { 502 switch (range) {
533 case 0: 503 case 0: