aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Rakity <prakity@marvell.com>2011-09-01 22:20:01 -0400
committerAnton Vorontsov <cbouatmailru@gmail.com>2011-11-25 19:31:47 -0500
commitb57f2f6108fbf9ce33191fb574fe94b1f3ccbff3 (patch)
treeb1b917221b9ec96ea571f0422f3931f9b184abc5
parent60a1f6e4462bb71b39543ddbca314886a55adb9d (diff)
max8925_power: Do not read random data from chip registers
Reading the voltage, charge etc requires that we tell the chip what property we want to read before reading it according to maxim. Signed-off-by: Philip Rakity <prakity@marvell.com> Signed-off-by: Thomas Liu <Thomas.Liu@maxim-ic.com> Tested-by: Ted Bennett <tbennett@marvell.com> Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
-rw-r--r--drivers/power/max8925_power.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/power/max8925_power.c b/drivers/power/max8925_power.c
index 377d1e633b4a..d87032afcb5a 100644
--- a/drivers/power/max8925_power.c
+++ b/drivers/power/max8925_power.c
@@ -160,25 +160,31 @@ static irqreturn_t max8925_charger_handler(int irq, void *data)
160static int start_measure(struct max8925_power_info *info, int type) 160static int start_measure(struct max8925_power_info *info, int type)
161{ 161{
162 unsigned char buf[2] = {0, 0}; 162 unsigned char buf[2] = {0, 0};
163 int meas_cmd;
163 int meas_reg = 0, ret; 164 int meas_reg = 0, ret;
164 165
165 switch (type) { 166 switch (type) {
166 case MEASURE_VCHG: 167 case MEASURE_VCHG:
168 meas_cmd = MAX8925_CMD_VCHG;
167 meas_reg = MAX8925_ADC_VCHG; 169 meas_reg = MAX8925_ADC_VCHG;
168 break; 170 break;
169 case MEASURE_VBBATT: 171 case MEASURE_VBBATT:
172 meas_cmd = MAX8925_CMD_VBBATT;
170 meas_reg = MAX8925_ADC_VBBATT; 173 meas_reg = MAX8925_ADC_VBBATT;
171 break; 174 break;
172 case MEASURE_VMBATT: 175 case MEASURE_VMBATT:
176 meas_cmd = MAX8925_CMD_VMBATT;
173 meas_reg = MAX8925_ADC_VMBATT; 177 meas_reg = MAX8925_ADC_VMBATT;
174 break; 178 break;
175 case MEASURE_ISNS: 179 case MEASURE_ISNS:
180 meas_cmd = MAX8925_CMD_ISNS;
176 meas_reg = MAX8925_ADC_ISNS; 181 meas_reg = MAX8925_ADC_ISNS;
177 break; 182 break;
178 default: 183 default:
179 return -EINVAL; 184 return -EINVAL;
180 } 185 }
181 186
187 max8925_reg_write(info->adc, meas_cmd, 0);
182 max8925_bulk_read(info->adc, meas_reg, 2, buf); 188 max8925_bulk_read(info->adc, meas_reg, 2, buf);
183 ret = ((buf[0]<<8) | buf[1]) >> 4; 189 ret = ((buf[0]<<8) | buf[1]) >> 4;
184 190