[04/13] i2c/i2c-nomadik: corrrect returned error numbers

Message ID BANLkTinvOy_fOsb7X=n978vKg4Y3TnEkAQ@mail.gmail.com
State Accepted
Headers show

Commit Message

Linus Walleij May 10, 2011, 11:44 p.m.
---------- Forwarded message ----------
From: Linus Walleij <linus.walleij@linaro.org>
Date: 2011/5/9
Subject: [PATCH 04/13] i2c/i2c-nomadik: corrrect returned error numbers
To: Ben Dooks <ben-linux@fluff.org>, linux-i2c@vger.kernel.org
Kopia: Virupax Sadashivpetimath
<virupax.sadashivpetimath@stericsson.com>, Linus Walleij
<linus.walleij@linaro.org>


From: Virupax Sadashivpetimath <virupax.sadashivpetimath@stericsson.com>

The code was returning bad error numbers or just -1 in some cases.

Signed-off-by: Virupax Sadashivpetimath
<virupax.sadashivpetimath@stericsson.com>
Reviewed-by: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
 drivers/i2c/busses/i2c-nomadik.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

--
1.7.5.1

--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/i2c/busses/i2c-nomadik.c b/drivers/i2c/busses/i2c-nomadik.c
index 3bf95b9..a02141a 100644
--- a/drivers/i2c/busses/i2c-nomadik.c
+++ b/drivers/i2c/busses/i2c-nomadik.c
@@ -615,6 +615,8 @@  static int nmk_i2c_xfer(struct i2c_adapter *i2c_adap,
                               cause >= ARRAY_SIZE(abort_causes)
                               ? "unknown reason" : abort_causes[cause]);

+                       status = status ? status : dev->result;
+
                       goto out;
               }
               udelay(I2C_DELAY);
@@ -759,7 +761,7 @@  static irqreturn_t i2c_irq_handler(int irq, void *arg)
                                       | I2C_IT_RXFF | I2C_IT_RXFE));

               if (dev->cli.count) {
-                       dev->result = -1;
+                       dev->result = -EIO;
                       dev_err(&dev->pdev->dev, "%lu bytes still remain to be"
                                       "xfered\n", dev->cli.count);
                       (void) init_hw(dev);
@@ -770,7 +772,7 @@  static irqreturn_t i2c_irq_handler(int irq, void *arg)

       /* Master Arbitration lost interrupt */
       case I2C_IT_MAL:
-               dev->result = -1;
+               dev->result = -EIO;
               (void) init_hw(dev);

               i2c_set_bit(dev->virtbase + I2C_ICR, I2C_IT_MAL);
@@ -784,7 +786,7 @@  static irqreturn_t i2c_irq_handler(int irq, void *arg)
        * during the transaction.
        */
       case I2C_IT_BERR:
-               dev->result = -1;
+               dev->result = -EIO;
               /* get the status */
               if (((readl(dev->virtbase + I2C_SR) >> 2) & 0x3) == I2C_ABORT)
                       (void) init_hw(dev);
@@ -800,7 +802,7 @@  static irqreturn_t i2c_irq_handler(int irq, void *arg)
        * the Tx FIFO is full.
        */
       case I2C_IT_TXFOVR:
-               dev->result = -1;
+               dev->result = -EIO;
               (void) init_hw(dev);

               dev_err(&dev->pdev->dev, "Tx Fifo Over run\n");