当前位置: 技术问答>linux和unix
请教:怎么会有这样的问题?
来源: 互联网 发布时间:2016-07-17
本文导语: 今天在学习i2c通信,发现在i2c总线驱动中,加入一个printk程序段,i2c通信正常,否则,i2c通信失败,怎么会有这样的问题???郁闷了半天了! 各位有人知道怎么回事么? 附代码: static int at91_xfer(struct i2c_...
今天在学习i2c通信,发现在i2c总线驱动中,加入一个printk程序段,i2c通信正常,否则,i2c通信失败,怎么会有这样的问题???郁闷了半天了! 各位有人知道怎么回事么?
附代码:
static int at91_xfer(struct i2c_adapter *adap, struct i2c_msg *pmsg, int num)
{
int i, ret;
dev_dbg(&adap->dev, "at91_xfer: processing %d messages:n", num);
down(&twi_lock);
for (i = 0; i buf[j]);
}
at91_twi_write(AT91_TWI_MMR, (pmsg->addr len && pmsg->buf)
{ /* sanity check */
ret = checkIadrType(pmsg->buf,pmsg->len);
pmsg->len -= ret;
// printk("at91_xfer : ret = %d n", ret);
if (pmsg->flags & I2C_M_RD)
{
ret = xfer_read(adap, pmsg->buf+ret, pmsg->len);
}
else
{
ret = xfer_write(adap, pmsg->buf+ret, pmsg->len);
}
if (ret)
{
up(&twi_lock);
return ret;
}
/* Wait until transfer is finished */
if (!at91_poll_status(AT91_TWI_TXCOMP)) {
dev_dbg(&adap->dev, "TXCOMP timeoutn");
up(&twi_lock);
return -ETIMEDOUT;
}
}
dev_dbg(&adap->dev, "transfer completen");
pmsg++; /* next message */
}
up(&twi_lock);
return i;
}
附代码:
static int at91_xfer(struct i2c_adapter *adap, struct i2c_msg *pmsg, int num)
{
int i, ret;
dev_dbg(&adap->dev, "at91_xfer: processing %d messages:n", num);
down(&twi_lock);
for (i = 0; i buf[j]);
}
at91_twi_write(AT91_TWI_MMR, (pmsg->addr len && pmsg->buf)
{ /* sanity check */
ret = checkIadrType(pmsg->buf,pmsg->len);
pmsg->len -= ret;
// printk("at91_xfer : ret = %d n", ret);
if (pmsg->flags & I2C_M_RD)
{
ret = xfer_read(adap, pmsg->buf+ret, pmsg->len);
}
else
{
ret = xfer_write(adap, pmsg->buf+ret, pmsg->len);
}
if (ret)
{
up(&twi_lock);
return ret;
}
/* Wait until transfer is finished */
if (!at91_poll_status(AT91_TWI_TXCOMP)) {
dev_dbg(&adap->dev, "TXCOMP timeoutn");
up(&twi_lock);
return -ETIMEDOUT;
}
}
dev_dbg(&adap->dev, "transfer completen");
pmsg++; /* next message */
}
up(&twi_lock);
return i;
}
|
加延时