rk30:phone loquat:Modify ADC calibration algorithm

This commit is contained in:
张晴
2012-06-11 12:49:38 +08:00
parent 4008b93611
commit 49a70b05ed

31
drivers/mfd/twl6030-gpadc.c Normal file → Executable file
View File

@@ -640,6 +640,13 @@ twl6030_gpadc_start_conversion(struct twl6030_gpadc_data *gpadc,
}
}
static int twl6030_gpadc_is_conversion_ready(
struct twl6030_gpadc_data *gpadc, u8 status_reg)
{
u8 reg = twl6030_gpadc_read(gpadc, status_reg);
return !(reg & TWL6030_GPADC_BUSY) && (reg & TWL6030_GPADC_EOC_SW);
}
static int twl6030_gpadc_wait_conversion_ready(
struct twl6030_gpadc_data *gpadc,
unsigned int timeout_ms, u8 status_reg)
@@ -648,14 +655,16 @@ static int twl6030_gpadc_wait_conversion_ready(
timeout = jiffies + msecs_to_jiffies(timeout_ms);
do {
u8 reg;
reg = twl6030_gpadc_read(gpadc, status_reg);
if (!(reg & TWL6030_GPADC_BUSY) && (reg & TWL6030_GPADC_EOC_SW))
if (twl6030_gpadc_is_conversion_ready(gpadc, status_reg))
return 0;
msleep_interruptible(1);
} while (!time_after(jiffies, timeout));
return -EAGAIN;
/* one more checking against scheduler-caused timeout */
if (twl6030_gpadc_is_conversion_ready(gpadc, status_reg))
return 0;
else
return -EAGAIN;
}
/* locks held by caller */
@@ -1199,11 +1208,11 @@ static int twl6032_calibration(struct twl6030_gpadc_data *gpadc)
/* D1 */
d1 = (trim_regs[11] & 0x0F) << 3;
d1 |= (trim_regs[9] & 0x0E) >> 1;
if (trim_regs[1] & 0x01)
if (trim_regs[9] & 0x01)
d1 = -d1;
/* D2 */
d2 = (trim_regs[15] & 0x0F) << 2;
d2 = (trim_regs[15] & 0x0F) << 3;
d2 |= (trim_regs[13] & 0x0E) >> 1;
if (trim_regs[13] & 0x01)
d2 = -d2;
@@ -1216,8 +1225,8 @@ static int twl6032_calibration(struct twl6030_gpadc_data *gpadc)
if (trim_regs[1] & 0x01)
temp = -temp;
d1 = (trim_regs[1] & 0x7E) >> 1;
if (trim_regs[12] & 0x01)
d1 = (trim_regs[5] & 0x7E) >> 1;
if (trim_regs[5] & 0x01)
d1 = -d1;
d1 += temp;
@@ -1228,8 +1237,8 @@ static int twl6032_calibration(struct twl6030_gpadc_data *gpadc)
if (trim_regs[2] & 0x01)
temp = -temp;
d2 = (trim_regs[6] & 0x7F) >> 1;
if (trim_regs[14] & 0x01)
d2 = (trim_regs[6] & 0xFF) >> 1;
if (trim_regs[6] & 0x01)
d2 = -d2;
d2 += temp;