mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 22:52:35 +02:00
rk30:phone loquat:Modify ADC calibration algorithm
This commit is contained in:
parent
4008b93611
commit
49a70b05ed
31
drivers/mfd/twl6030-gpadc.c
Normal file → Executable file
31
drivers/mfd/twl6030-gpadc.c
Normal file → Executable 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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user