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??
Troy _______________________________________________ Davinci-linux-open-source mailing list [email protected] http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
