rk30: i2c: add log information
authorkfx <kfx@rock-chips.com>
Tue, 8 May 2012 01:13:31 +0000 (09:13 +0800)
committerkfx <kfx@rock-chips.com>
Tue, 8 May 2012 01:13:31 +0000 (09:13 +0800)
drivers/i2c/busses/i2c-rk30-adapter.c
drivers/i2c/busses/i2c-rk30.h

index 7bdfc885425b7de073f6c1d55c65c2bc900d2517..fbb432f57d5b3ad4c144c0246aa6e83d3a1c6ab2 100755 (executable)
@@ -300,7 +300,7 @@ static void rk30_i2c_irq_nextblock(struct rk30_i2c *i2c, unsigned int ipd)
                         i2c_writel(I2C_IPD_ALL_CLEAN, i2c->regs + I2C_IPD);
                         goto out;
                 }
-
+                i2c->complete_what |= 1<<i2c->state;
                 i2c_writel(I2C_STARTIPD, i2c->regs + I2C_IPD);
                 rk30_i2c_clean_start(i2c);
                 if(i2c->mode ==  I2C_CON_MOD_TX){
@@ -320,6 +320,7 @@ static void rk30_i2c_irq_nextblock(struct rk30_i2c *i2c, unsigned int ipd)
                         i2c_writel(I2C_IPD_ALL_CLEAN, i2c->regs + I2C_IPD);
                         goto out;
                 }
+                i2c->complete_what |= 1<<i2c->state;
                 i2c_writel(I2C_MBTFIPD, i2c->regs + I2C_IPD);
 prepare_write:
                 rk30_irq_write_prepare(i2c);
@@ -332,6 +333,7 @@ prepare_write:
                         i2c_writel(I2C_IPD_ALL_CLEAN, i2c->regs + I2C_IPD);
                         goto out;
                 }
+                i2c->complete_what |= 1<<i2c->state;
                 i2c_writel(I2C_MBRFIPD, i2c->regs + I2C_IPD);
                 rk30_irq_read_get_data(i2c);
 prepare_read:
@@ -349,6 +351,7 @@ prepare_read:
                 i2c_writel(I2C_STOPIPD, i2c->regs + I2C_IPD);
                 i2c->state = STATE_IDLE;
                i2c->is_busy = 0;
+                i2c->complete_what |= 1<<i2c->state;
                wake_up(&i2c->wait);
                 break;
         default:
@@ -467,6 +470,7 @@ static int rk30_i2c_doxfer(struct rk30_i2c *i2c,
         i2c->error = 0;
        i2c->is_busy = 1;
         i2c->state = STATE_START;
+        i2c->complete_what = 0;
         i2c_writel(I2C_STARTIEN, i2c->regs + I2C_IEN);
        spin_unlock_irqrestore(&i2c->lock, flags);
 
@@ -479,8 +483,8 @@ static int rk30_i2c_doxfer(struct rk30_i2c *i2c,
        spin_unlock_irqrestore(&i2c->lock, flags);
 
        if (timeout == 0){
-                dev_err(i2c->dev, "addr[0x%02x] wait event timeout, state: %d, is_busy: %d, error: %d\n", 
-                                msgs[0].addr, i2c->state, i2c->is_busy, i2c->error);  
+                dev_err(i2c->dev, "addr[0x%02x] wait event timeout, state: %d, is_busy: %d, error: %d, complete_what: 0x%x\n", 
+                                msgs[0].addr, i2c->state, i2c->is_busy, i2c->error, i2c->complete_what);  
                 i2c->state = STATE_IDLE;
                 if(i2c->error < 0) i2c->error = -ETIMEDOUT;
                 rk30_i2c_send_stop(i2c);
@@ -490,8 +494,8 @@ static int rk30_i2c_doxfer(struct rk30_i2c *i2c,
         rk30_i2c_disable(i2c);
 
         if(i2c->error == -EAGAIN)
-                dev_err(i2c->dev, "No ack(retry %d), Maybe slave(addr: 0x%02x) not exist or abnormal power-on\n",
-                                i2c->adap.retries + 1, i2c->addr);
+                dev_err(i2c->dev, "No ack(retry: %d, complete_what: 0x%x), Maybe slave(addr: 0x%02x) not exist or abnormal power-on\n",
+                                i2c->adap.retries + 1, i2c->complete_what, i2c->addr);
        return i2c->error;
 }
 
index 8446969b5e7c209513a5c85bfd245e89a3d2c241..afb2d33721bc9e1782a7113366a12530c6d391ce 100755 (executable)
@@ -76,6 +76,7 @@ struct rk30_i2c {
        unsigned int            irq;
 
        enum rk30_i2c_state     state;
+        unsigned int            complete_what;
        unsigned long           clkrate;
 
        void __iomem            *regs;