W1: ds2490.c simplify and fix ds_touch_bit
authorDavid Fries <david@fries.net>
Thu, 16 Oct 2008 05:05:05 +0000 (22:05 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 16 Oct 2008 18:21:50 +0000 (11:21 -0700)
commit6e10f65427ed800ad1026dbf8064ca536ea98afc
tree8233bae8c0bbb54bbdfe6f3a3f7b4c79d73dac5f
parenta08e2d338bab17ac5c51a8f2f25185da18f6710c
W1: ds2490.c simplify and fix ds_touch_bit

Simplify and fix ds_touch_bit.  If a device is attached in the middle of a
bus search the status register will return more than the default 16 bytes.
 The additional bytes indicate that it has detected a new device.  The way
ds_wait_status is coded, if it doesn't read 16 status bytes it returns an
error value.  ds_touch_bit then will detect that error and return an
error.  In that case it doesn't read the input buffer and returns
uninitialized data.  It doesn't stop there.  The next transaction will not
expect the extra byte in the input buffer and the short read will cause an
error and clear out both the old byte and new data in the input buffer.

Just ignore the value of ds_wait_status.  It is still required to wait
until ds2490 is again idle and there is data to read when ds_recv_data is
called.  This also removes the while loop.  None of the other commands
wait and verify that the issued command is in the status register.

Signed-off-by: David Fries <david@fries.net>
Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/w1/masters/ds2490.c