From 49a70b05ed92e15513e08ddc1edfb4b2dbf506fe Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E5=BC=A0=E6=99=B4?= Date: Mon, 11 Jun 2012 12:49:38 +0800 Subject: [PATCH] rk30:phone loquat:Modify ADC calibration algorithm --- drivers/mfd/twl6030-gpadc.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) mode change 100644 => 100755 drivers/mfd/twl6030-gpadc.c diff --git a/drivers/mfd/twl6030-gpadc.c b/drivers/mfd/twl6030-gpadc.c old mode 100644 new mode 100755 index 645731627f69..5265763ae0db --- a/drivers/mfd/twl6030-gpadc.c +++ b/drivers/mfd/twl6030-gpadc.c @@ -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; -- 2.34.1