]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
staging: iio: adc: palmas: add debug prints when ADC failed.
authorLaxman Dewangan <ldewangan@nvidia.com>
Thu, 26 Jun 2014 11:44:14 +0000 (17:14 +0530)
committerDhiren Parmar <dparmar@nvidia.com>
Thu, 3 Jul 2014 07:16:21 +0000 (00:16 -0700)
Prints the ADC status and irq status when ADC conversion failed
with timeout. This helps on debugging the issue when such failure
occurs.

bug 1527322

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

drivers/staging/iio/adc/palmas_gpadc.c

index f726f483d7094fd5016c52b9f254631d083325aa..c99bc5ea5865b15e2b063c1d17773e1b49a4956a 100644 (file)
@@ -106,6 +106,7 @@ struct palmas_gpadc {
        struct dentry                   *dentry;
        bool is_shutdown;
        struct mutex lock;
+       bool isr_done;
 };
 
 /*
@@ -167,6 +168,7 @@ static irqreturn_t palmas_gpadc_irq(int irq, void *data)
 {
        struct palmas_gpadc *adc = data;
 
+       adc->isr_done = true;
        complete(&adc->conv_completion);
        return IRQ_HANDLED;
 }
@@ -538,6 +540,7 @@ static int palmas_gpadc_start_convertion(struct palmas_gpadc *adc, int adc_chan)
        unsigned int val;
        int ret;
 
+       adc->isr_done = false;
        INIT_COMPLETION(adc->conv_completion);
        ret = palmas_update_bits(adc->palmas, PALMAS_GPADC_BASE,
                                PALMAS_GPADC_SW_SELECT,
@@ -552,6 +555,19 @@ static int palmas_gpadc_start_convertion(struct palmas_gpadc *adc, int adc_chan)
                                ADC_CONVERTION_TIMEOUT);
        if (ret == 0) {
                dev_err(adc->dev, "ADC conversion not completed\n");
+               dev_err(adc->dev, "Channel %d ISR status %d\n", adc_chan, adc->isr_done);
+               ret = palmas_read(adc->palmas, PALMAS_GPADC_BASE,
+                               PALMAS_GPADC_STATUS, &val);
+               dev_err(adc->dev, "GPADC_STATUS read st %d and val 0x%02x\n", ret, val);
+               ret = palmas_read(adc->palmas, PALMAS_GPADC_BASE,
+                               PALMAS_GPADC_SW_SELECT, &val);
+               dev_err(adc->dev, "GPADC_SW_SELECT read st %d and val 0x%02x\n", ret, val);
+               ret = palmas_read(adc->palmas, PALMAS_GPADC_BASE,
+                               PALMAS_GPADC_AUTO_CTRL, &val);
+               dev_err(adc->dev, "GPADC_AUTO_CTRL read st %d and val 0x%02x\n", ret, val);
+               ret = palmas_read(adc->palmas, PALMAS_GPADC_BASE,
+                               PALMAS_GPADC_RT_CTRL, &val);
+               dev_err(adc->dev, "GPADC_RT_CTRL read st %d and val 0x%02x\n", ret, val);
                ret = -ETIMEDOUT;
                return ret;
        }