Troy Kisky wrote:
Dirk Behme wrote:
Remove I2C zero length transfer "HACK" and do real zero length
transfers. This fixes Oops at kernel startup while "scanning" for
TLV320AIC23IDx addresses.
Signed-off-by: Alexander Vasiliev <[EMAIL PROTECTED]>
Signed-off-by: Brad Griffis <[EMAIL PROTECTED]>
Signed-off-by: Dirk Behme <[EMAIL PROTECTED]>
------------------------------------------------------------------------
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
-static inline void terminate_write(struct davinci_i2c_dev *dev)
-{
- u16 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
- w |= DAVINCI_I2C_MDR_RM|DAVINCI_I2C_MDR_STP;
- davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
-
- if (!dev->terminate)
- dev_err(dev->dev, "TDR IRQ while no data to send\n");
-}
/*
* Interrupt service routine. This gets called whenever an I2C interrupt
@@ -449,6 +424,14 @@ static irqreturn_t i2c_davinci_isr(int t
case DAVINCI_I2C_IVR_ARDY:
davinci_i2c_write_reg(dev,
DAVINCI_I2C_STR_REG, DAVINCI_I2C_STR_ARDY);
+ if (((dev->buf_len == 0) && (dev->stop != 0)) ||
+ (dev->cmd_err & DAVINCI_I2C_STR_NACK)) {
+ w = davinci_i2c_read_reg(dev,
+ DAVINCI_I2C_MDR_REG);
+ MOD_REG_BIT(w, DAVINCI_I2C_MDR_STP, 1);
+ davinci_i2c_write_reg(dev,
+ DAVINCI_I2C_MDR_REG, w);
+ }
complete(&dev->cmd_complete);
break;
@@ -484,9 +467,6 @@ static irqreturn_t i2c_davinci_isr(int t
davinci_i2c_write_reg(dev,
DAVINCI_I2C_IMR_REG,
w);
- } else {
- /* signal can terminate transfer */
- terminate_write(dev);
}
Why remove terminate write??
Is it causing problems, or just no longer needed??
If I understand it correctly, just no longer needed.
From discussion with Alexander and Brad:
"terminate_write isn't needed, because new transmit-message always
refresh transmit register."
Thanks for looking at the patch,
Dirk
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source