|
@@ -9,6 +9,17 @@
|
|
|
|
|
|
#include <twl6030.h>
|
|
|
|
|
|
+static struct twl6030_data *twl;
|
|
|
+
|
|
|
+static struct twl6030_data twl6030_info = {
|
|
|
+ .chip_type = chip_TWL6030,
|
|
|
+ .adc_rbase = GPCH0_LSB,
|
|
|
+ .adc_ctrl = CTRL_P2,
|
|
|
+ .adc_enable = CTRL_P2_SP2,
|
|
|
+ .vbat_mult = TWL6030_VBAT_MULT,
|
|
|
+ .vbat_shift = TWL6030_VBAT_SHIFT,
|
|
|
+};
|
|
|
+
|
|
|
static int twl6030_gpadc_read_channel(u8 channel_no)
|
|
|
{
|
|
|
u8 lsb = 0;
|
|
@@ -16,12 +27,12 @@ static int twl6030_gpadc_read_channel(u8 channel_no)
|
|
|
int ret = 0;
|
|
|
|
|
|
ret = twl6030_i2c_read_u8(TWL6030_CHIP_ADC,
|
|
|
- GPCH0_LSB + channel_no * 2, &lsb);
|
|
|
+ twl->adc_rbase + channel_no * 2, &lsb);
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
ret = twl6030_i2c_read_u8(TWL6030_CHIP_ADC,
|
|
|
- GPCH0_MSB + channel_no * 2, &msb);
|
|
|
+ twl->adc_rbase + 1 + channel_no * 2, &msb);
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
@@ -33,7 +44,8 @@ static int twl6030_gpadc_sw2_trigger(void)
|
|
|
u8 val;
|
|
|
int ret = 0;
|
|
|
|
|
|
- ret = twl6030_i2c_write_u8(TWL6030_CHIP_ADC, CTRL_P2, CTRL_P2_SP2);
|
|
|
+ ret = twl6030_i2c_write_u8(TWL6030_CHIP_ADC,
|
|
|
+ twl->adc_ctrl, twl->adc_enable);
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
@@ -41,7 +53,8 @@ static int twl6030_gpadc_sw2_trigger(void)
|
|
|
val = CTRL_P2_BUSY;
|
|
|
|
|
|
while (!((val & CTRL_P2_EOCP2) && (!(val & CTRL_P2_BUSY)))) {
|
|
|
- ret = twl6030_i2c_read_u8(TWL6030_CHIP_ADC, CTRL_P2, &val);
|
|
|
+ ret = twl6030_i2c_read_u8(TWL6030_CHIP_ADC,
|
|
|
+ twl->adc_ctrl, &val);
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
udelay(1000);
|
|
@@ -116,7 +129,7 @@ int twl6030_get_battery_voltage(void)
|
|
|
printf("Failed to read battery voltage\n");
|
|
|
return ret;
|
|
|
}
|
|
|
- battery_volt = (battery_volt * 25 * 1000) >> (10 + 2);
|
|
|
+ battery_volt = (battery_volt * twl->vbat_mult) >> twl->vbat_shift;
|
|
|
printf("Battery Voltage: %d mV\n", battery_volt);
|
|
|
|
|
|
return battery_volt;
|
|
@@ -128,6 +141,8 @@ void twl6030_init_battery_charging(void)
|
|
|
int battery_volt = 0;
|
|
|
int ret = 0;
|
|
|
|
|
|
+ twl = &twl6030_info;
|
|
|
+
|
|
|
/* Enable VBAT measurement */
|
|
|
twl6030_i2c_write_u8(TWL6030_CHIP_PM, MISC1, VBAT_MEAS);
|
|
|
|