w1: fix occasional enumeration failure
authorMartin Fuzzey <martin.fuzzey@flowbird.group>
Fri, 23 Nov 2018 09:53:06 +0000 (10:53 +0100)
committerTom Rini <trini@konsulko.com>
Thu, 6 Dec 2018 22:15:15 +0000 (17:15 -0500)
Sometimes enumeration fails (about 1 in 50 times on my custom board).

The underlying reason is probably electrical but Linux does not have
the problem.

Comparing the Linux / u-boot implementations shows that Linux
retries the error case whereas u-boot aborts early.

Removing the early abort in u-boot fixes the problem.

Signed-off-by: Martin Fuzzey <martin.fuzzey@flowbird.group>
drivers/w1/w1-uclass.c

index cb41b68..042b3b5 100644 (file)
@@ -84,10 +84,6 @@ static int w1_enumerate(struct udevice *bus)
                        rn |= (tmp64 << i);
                }
 
-               /* last device or error, aborting here */
-               if ((triplet_ret & 0x03) == 0x03)
-                       last_device = true;
-
                if ((triplet_ret & 0x03) != 0x03) {
                        if (desc_bit == last_zero || last_zero < 0) {
                                last_device = 1;