[lm-sensors] [PATCH] sensors-detect: Check for 1-register-only device (testers wanted)

Jean Delvare khali at linux-fr.org
Fri May 9 23:02:15 CEST 2008

Hi Hans,

On Fri, 09 May 2008 07:06:23 +0200, Hans de Goede wrote:
> Hans de Goede wrote:
> > About the potential for doing an i2c read of 1 byte from a device which expects 
> > a write reg address to read, then read 1 byte style transactions, causing 
> > problems, I don't think this will cause issues, normally these kind of devices 
> > are implemented using a read ptr, which tells the device where to start reading 
> > in its internal memory map when an i2c read transaction is done. With the write 
> > addr, then read cycle, the write sets that read ptr, so reading without the 
> > write would give one the contents of a random register address and should not 
> > be a problem otherwise.

This is what I hope and expect, yes.

> > Some devices may have additional checks build in though, and only accept a read 
> > if there was a write before it within the same transaction (so in i2c terms:
> > { start, write register address, repeated-start, read register contents, stop }
> > 
> > I've seen devices which wouldn't work if the repeated-start above was a { stop, 
> > start } (dallas ds1621 temp sensor) Note: 1 this is not an smbus device, 2 I 
> > don't remember how it failed.

I happen to have a DS1621 at hand so I did the test. SMBus receive byte
returns value 0x09 all the time, but it doesn't hang the device nor the
bus. I have no idea what this value is supposed to mean, it doesn't
correspond to any register value as far as I can see.

I have also tested my modified sensors-detect script on it and it is
still detected successfully. Good news.

I agree that it is possible that some devices don't like being read
from before being written to. I simply hope that they will just ignore
the request and won't hang themselves nor the bus. The only way to know
if I am right, is by testing on more systems.

> > But given that some smbus devices may be like the ds1621 and demand an address 
> > write before a read in one transaction (so seperated by a repeated start), it 
> > could be that the initial read in this proposed patch fails in that case with 
> > an error because the sensor at 0x2e refuses the read and thus does not ack when 
> > it gets addressed for the read transfer.
> And the point I was trying to make here but didn't is that I thus believe that 
> the first 1 byte read in the new detection code should have error handling 
> added, because it might fail (due to no ack) in which case we clearly do not 
> have a 1 reg device.

It could still be a 1-register-only device, but write-only. But your
point is valid anyway, my heuristic won't work for such chips, so I'd
rather handle the error cleanly.

I've just uploaded an updated script at:

Thank you,
Jean Delvare

More information about the lm-sensors mailing list