mirror of https://gitee.com/openkylin/linux.git
i2c: pxa: Update debug function to dump more info on error
Update i2c_pxa_scream_blue_murder() fn to print more information in case of error. Also, use dev_err variants instead of printk. Signed-off-by: Jett.Zhou <jtzhou@marvell.com> Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org> Cc: Wolfram Sang <wsa@the-dreams.de> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
parent
e2b498fd55
commit
3a2dc1677b
|
@ -132,6 +132,7 @@ struct pxa_i2c {
|
||||||
unsigned int msg_idx;
|
unsigned int msg_idx;
|
||||||
unsigned int msg_ptr;
|
unsigned int msg_ptr;
|
||||||
unsigned int slave_addr;
|
unsigned int slave_addr;
|
||||||
|
unsigned int req_slave_addr;
|
||||||
|
|
||||||
struct i2c_adapter adap;
|
struct i2c_adapter adap;
|
||||||
struct clk *clk;
|
struct clk *clk;
|
||||||
|
@ -253,15 +254,20 @@ static void i2c_pxa_show_state(struct pxa_i2c *i2c, int lno, const char *fname)
|
||||||
static void i2c_pxa_scream_blue_murder(struct pxa_i2c *i2c, const char *why)
|
static void i2c_pxa_scream_blue_murder(struct pxa_i2c *i2c, const char *why)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
printk(KERN_ERR "i2c: error: %s\n", why);
|
struct device *dev = &i2c->adap.dev;
|
||||||
printk(KERN_ERR "i2c: msg_num: %d msg_idx: %d msg_ptr: %d\n",
|
|
||||||
|
dev_err(dev, "slave_0x%x error: %s\n",
|
||||||
|
i2c->req_slave_addr >> 1, why);
|
||||||
|
dev_err(dev, "msg_num: %d msg_idx: %d msg_ptr: %d\n",
|
||||||
i2c->msg_num, i2c->msg_idx, i2c->msg_ptr);
|
i2c->msg_num, i2c->msg_idx, i2c->msg_ptr);
|
||||||
printk(KERN_ERR "i2c: ICR: %08x ISR: %08x\n",
|
dev_err(dev, "IBMR: %08x IDBR: %08x ICR: %08x ISR: %08x\n",
|
||||||
readl(_ICR(i2c)), readl(_ISR(i2c)));
|
readl(_IBMR(i2c)), readl(_IDBR(i2c)), readl(_ICR(i2c)),
|
||||||
printk(KERN_DEBUG "i2c: log: ");
|
readl(_ISR(i2c)));
|
||||||
|
dev_dbg(dev, "log: ");
|
||||||
for (i = 0; i < i2c->irqlogidx; i++)
|
for (i = 0; i < i2c->irqlogidx; i++)
|
||||||
printk("[%08x:%08x] ", i2c->isrlog[i], i2c->icrlog[i]);
|
pr_debug("[%08x:%08x] ", i2c->isrlog[i], i2c->icrlog[i]);
|
||||||
printk("\n");
|
|
||||||
|
pr_debug("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* ifdef DEBUG */
|
#else /* ifdef DEBUG */
|
||||||
|
@ -638,6 +644,7 @@ static inline void i2c_pxa_start_message(struct pxa_i2c *i2c)
|
||||||
* Step 1: target slave address into IDBR
|
* Step 1: target slave address into IDBR
|
||||||
*/
|
*/
|
||||||
writel(i2c_pxa_addr_byte(i2c->msg), _IDBR(i2c));
|
writel(i2c_pxa_addr_byte(i2c->msg), _IDBR(i2c));
|
||||||
|
i2c->req_slave_addr = i2c_pxa_addr_byte(i2c->msg);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Step 2: initiate the write.
|
* Step 2: initiate the write.
|
||||||
|
@ -951,6 +958,7 @@ static void i2c_pxa_irq_txempty(struct pxa_i2c *i2c, u32 isr)
|
||||||
* Write the next address.
|
* Write the next address.
|
||||||
*/
|
*/
|
||||||
writel(i2c_pxa_addr_byte(i2c->msg), _IDBR(i2c));
|
writel(i2c_pxa_addr_byte(i2c->msg), _IDBR(i2c));
|
||||||
|
i2c->req_slave_addr = i2c_pxa_addr_byte(i2c->msg);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* And trigger a repeated start, and send the byte.
|
* And trigger a repeated start, and send the byte.
|
||||||
|
|
Loading…
Reference in New Issue