[U-Boot-Users] [PATCH] soft_i2c/i2c_probe(): Perform reads instead of writes

Hi,
The following little patch makes the i2c_probe function use reads instead of writes to match the comment (broken in r1.2).
* Patch by Peter Korsgaard, 26 May 2005: Use reads instead of writes for probe in soft_i2c.

Peter,
I believe the implementation was correct but the comment was wrong. It should be a write transaction with just address byte. After the address byte is transmitted the I2C slave will acknowledge (if present) and we finish the transaction by generating the stop condition. i.e. fake write.
Best regards, Tolunay
Peter Korsgaard wrote:
Hi,
The following little patch makes the i2c_probe function use reads instead of writes to match the comment (broken in r1.2).
- Patch by Peter Korsgaard, 26 May 2005: Use reads instead of writes for probe in soft_i2c.
Index: common/soft_i2c.c
RCS file: /cvsroot/u-boot/u-boot/common/soft_i2c.c,v retrieving revision 1.5 diff -u -p -u -r1.5 soft_i2c.c --- common/soft_i2c.c 21 Nov 2004 00:06:35 -0000 1.5 +++ common/soft_i2c.c 26 May 2005 19:45:05 -0000 @@ -290,7 +290,7 @@ int i2c_probe(uchar addr)
/* perform 1 byte read transaction */ send_start();
- rc = write_byte ((addr << 1) | 0);
rc = write_byte ((addr << 1) | 1); send_stop();
return (rc ? 1 : 0);

"Tolunay" == Tolunay Orkun listmember@orkun.us writes:
Hi, and sorry for the slow response!
Tolunay> Peter, I believe the implementation was correct but the Tolunay> comment was wrong. It should be a write transaction with Tolunay> just address byte. After the address byte is transmitted the Tolunay> I2C slave will acknowledge (if present) and we finish the Tolunay> transaction by generating the stop condition. i.e. fake Tolunay> write.
Why write? Wouldn't a zero byte read transaction be safer?

Peter Korsgaard wrote:
"Tolunay" == Tolunay Orkun listmember@orkun.us writes:
Hi, and sorry for the slow response!
Tolunay> Peter, I believe the implementation was correct but the Tolunay> comment was wrong. It should be a write transaction with Tolunay> just address byte. After the address byte is transmitted the Tolunay> I2C slave will acknowledge (if present) and we finish the Tolunay> transaction by generating the stop condition. i.e. fake Tolunay> write.
Why write? Wouldn't a zero byte read transaction be safer?
I have read somewhere (that I cannot find now), that some device would lock up on 0-byte read vs 0-byte write. Since the current code is working as it is unless there is demonstrable problem with it, I would fix the comment only.

On Tue, Jun 14, 2005 at 04:34:38PM -0500, Tolunay Orkun wrote:
Peter Korsgaard wrote:
>"Tolunay" == Tolunay Orkun listmember@orkun.us writes: > >
Hi, and sorry for the slow response!
Tolunay> Peter, I believe the implementation was correct but the Tolunay> comment was wrong. It should be a write transaction with Tolunay> just address byte. After the address byte is transmitted the Tolunay> I2C slave will acknowledge (if present) and we finish the Tolunay> transaction by generating the stop condition. i.e. fake Tolunay> write.
Why write? Wouldn't a zero byte read transaction be safer?
I have read somewhere (that I cannot find now), that some device would lock up on 0-byte read vs 0-byte write. Since the current code is working as it is unless there is demonstrable problem with it, I would fix the comment only.
Ebony (PPC440GP eval board) has a device like this, IIRC it's a clock driver, zero-read locks the bus completely.
In general, zero write is safer, also SMBUS spec defines such transaction as SMBUS QUICK; interestingly, there is no read equivalent :).
Also, from personal testing, using zero-write as detection hack, yields more devices than zero-read.

"Tolunay" == Tolunay Orkun listmember@orkun.us writes:
Why write? Wouldn't a zero byte read transaction be safer?
Tolunay> I have read somewhere (that I cannot find now), that some Tolunay> device would lock up on 0-byte read vs 0-byte write. Since Tolunay> the current code is working as it is unless there is Tolunay> demonstrable problem with it, I would fix the comment only.
Ok, here's then a tiny patch to do that:
* Patch by Peter Korsgaard, 15 June 2005: Fix comment to match implementation for probe in soft_i2c.

In message 87ekbt3g7h.fsf@p4.48ers.dk you wrote:
- Patch by Peter Korsgaard, 26 May 2005: Use reads instead of writes for probe in soft_i2c.
Rejected. Tolunay's explanation was correct: only the comment was wrong. Fixed the comment now.
Best regards,
Wolfgang Denk
participants (4)
-
Eugene Surovegin
-
Peter Korsgaard
-
Tolunay Orkun
-
Wolfgang Denk