Re: [PATCH 1/6] i2c: davinci: Fix smbus Oops with AIC33 usage

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



"Sudhakar Rajashekhara" <sudhakar.raj@xxxxxx> writes:

> Hi,
>
> On Wed, Jan 27, 2010 at 05:11:28, Kevin Hilman wrote:
>> From: Dirk Behme <dirk.behme@xxxxxxxxxxxxxx>
>> 
>> This fixes Oops at kernel startup while "scanning" for TLV320AIC23IDx
>> addresses.
>> 
>> Signed-off-by: Alexander Vasiliev <alexvasiljev@xxxxxxxxx>
>> Signed-off-by: Brad Griffis <bgriffis@xxxxxx>
>> Signed-off-by: Dirk Behme <dirk.behme@xxxxxxxxx>
>> Acked-by: Kevin Hilman <khilman@xxxxxxxxxx>
>> ---
>>  drivers/i2c/busses/i2c-davinci.c |   29 +++++++++++++++++++++++++----
>>  1 files changed, 25 insertions(+), 4 deletions(-)
>> 
>> diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c
>> index c89687a..444a9f2 100644
>> --- a/drivers/i2c/busses/i2c-davinci.c
>> +++ b/drivers/i2c/busses/i2c-davinci.c
>
> [...]
>
>> @@ -290,6 +293,16 @@ i2c_davinci_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg, int stop)
>>  	davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, w);
>>  
>>  	dev->terminate = 0;
>> +
>> +	/* First byte should be set here, not after interrupt,
>> +	 * because transmit-data-ready interrupt can come before
>> +	 * NACK-interrupt during sending of previous message and
>> +	 * ICDXR may have wrong data */
>> +	if ((!(msg->flags & I2C_M_RD)) && dev->buf_len) {
>> +		davinci_i2c_write_reg(dev, DAVINCI_I2C_DXR_REG, *dev->buf++);
>> +		dev->buf_len--;
>> +	}
>> +
>
> I found an issue on DA850 while using this patch. 

ok, I'll drop this one for 2.6.34 until we figure this out.

> I think the above code should come after the
> below lines because an I2C transaction is being carried out before configuring the I2C mode
> register (which has bits to configure Master, Start condition etc), which causes undefined
> behavior.

hmm, are you seeing this behavior on davinci git too?  This is the same
patch that has been in davinci git for some time?

Kevin

>
>>  	/* write the data into mode register */
>>  	davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag);
>>  
>
> Regards,
> Sudhakar
--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux