]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
iio: adc: retry the ads1015 configuration
authorShardar Shariff Md <smohammed@nvidia.com>
Thu, 3 Mar 2016 11:40:17 +0000 (17:10 +0530)
committermobile promotions <svcmobile_promotions@nvidia.com>
Mon, 14 Mar 2016 22:54:25 +0000 (15:54 -0700)
Dont return for the first No ack error instead
retry the ads1015 configuration for 5 times.

Bug 200171619

Change-Id: I96f743dd418d9b7f9e9994ac23f538714a94bbe3
Signed-off-by: Shardar Shariff Md <smohammed@nvidia.com>
Reviewed-on: http://git-master/r/1023364
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
drivers/staging/iio/adc/ads1015.c

index 118b869f804d885fb4f1e43bee085263f16b5840..8fa427f288dfac409a27bd5220341f7866ae48bc 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Driver for TI,ADS1015 ADC
  *
- * Copyright (c) 2014 - 2015, NVIDIA Corporation. All rights reserved.
+ * Copyright (c) 2014 - 2016, NVIDIA Corporation. All rights reserved.
  *
  * Author: Mallikarjun Kasoju <mkasoju@nvidia.com>
  *         Laxman Dewangan <ldewangan@nvidia.com>
@@ -399,6 +399,7 @@ static int ads1015_configure(struct ads1015 *adc)
        int ret, val;
        u16 reg_val = 0;
        u16 os_val = 0;
+       int retries = 5;
 
        /* Set PGA */
        reg_val |= (adc->adc_cont_prop.pga << ADS1015_AMPLIFIER_GAIN_SHIFT);
@@ -420,10 +421,14 @@ static int ads1015_configure(struct ads1015 *adc)
        reg_val |= (adc->adc_cont_prop.comparator_queue <<
                                ADS1015_COMPARATOR_QUEUE_SHIFT);
 
-       ret = ads1015_write(adc->rmap, ADS1015_CONFIG_REG, reg_val);
-       if (ret < 0) {
-               dev_err(adc->dev, "CONFIG reg write failed %d\n", ret);
-               return ret;
+       while (retries--) {
+               ret = ads1015_write(adc->rmap, ADS1015_CONFIG_REG, reg_val);
+               if (ret < 0)
+                       dev_err(adc->dev, "CONFIG reg write failed %d\n", ret);
+               else
+                       break;
+               if (!retries)
+                       return ret;
        }
        adc->cont_config = reg_val;