From ca36d91718b465e71f1d67eaeb68c0a8c9dfcd4c Mon Sep 17 00:00:00 2001 From: kfx Date: Tue, 8 May 2012 09:13:31 +0800 Subject: [PATCH] rk30: i2c: add log information --- drivers/i2c/busses/i2c-rk30-adapter.c | 14 +++++++++----- drivers/i2c/busses/i2c-rk30.h | 1 + 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/i2c/busses/i2c-rk30-adapter.c b/drivers/i2c/busses/i2c-rk30-adapter.c index 7bdfc885425b..fbb432f57d5b 100755 --- a/drivers/i2c/busses/i2c-rk30-adapter.c +++ b/drivers/i2c/busses/i2c-rk30-adapter.c @@ -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<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<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<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<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; } diff --git a/drivers/i2c/busses/i2c-rk30.h b/drivers/i2c/busses/i2c-rk30.h index 8446969b5e7c..afb2d33721bc 100755 --- a/drivers/i2c/busses/i2c-rk30.h +++ b/drivers/i2c/busses/i2c-rk30.h @@ -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; -- 2.34.1