diff options
author | Axel Lin <axel.lin@gmail.com> | 2012-03-08 18:05:41 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-03-11 16:49:35 -0400 |
commit | 85c5d86d0e87bd843d711dcb7427c6ba64f736d1 (patch) | |
tree | 8bd583198dd550c655746e1bf8e824875a8c5403 /drivers/regulator | |
parent | 5b5e977ce71cab973d9f8c7d5303832a2bafa92c (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')
-rw-r--r-- | drivers/regulator/tps65912-regulator.c | 70 |
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 { | |||
125 | static int tps65912_get_range(struct tps65912_reg *pmic, int id) | 122 | static 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 | ||
170 | static unsigned long tps65912_vsel_to_uv_range0(u8 vsel) | 152 | static 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: |