]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
power: lc70903f: return old temp of device read failed
authorLaxman Dewangan <ldewangan@nvidia.com>
Thu, 22 May 2014 10:02:39 +0000 (15:32 +0530)
committerMrutyunjay Sawant <msawant@nvidia.com>
Wed, 4 Jun 2014 07:34:35 +0000 (00:34 -0700)
It is observed that device read failed once in while when reading
temp from device. The next read success. To resolve the temp read fail
from device, return last temperature read from device.

bug 200006331

Change-Id: Ic305dbc013a44e71490b9c4defe752319cb22b44
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: http://git-master/r/413137
Reviewed-on: http://git-master/r/417766

drivers/power/lc709203f_battery.c

index 55a549df490da07f06241c628c88d412d03d1640..475dddfe43c4b78a00b8f6e72e0b769fc9ada082 100644 (file)
@@ -91,6 +91,7 @@ struct lc709203f_chip {
        int shutdown_complete;
        int charge_complete;
        struct mutex mutex;
+       int read_failed;
 };
 
 static int lc709203f_read_word(struct i2c_client *client, u8 reg)
@@ -198,9 +199,13 @@ static int lc709203f_get_temperature(struct lc709203f_chip *chip)
 
        val = lc709203f_read_word(chip->client, LC709203F_TEMPERATURE);
        if (val < 0) {
+               chip->read_failed++;
                dev_err(&chip->client->dev, "%s: err %d\n", __func__, val);
-               return val;
+               if (chip->read_failed > 50)
+                       return val;
+               return chip->temperature;
        }
+       chip->read_failed = 0;;
        chip->temperature = val;
        return val;
 }