w1: fix data abort if no one wire bus master present

When the "w1 bus" command is used with no bus master present
a data abort may occur.

This is because uclass_first_device() returns zero, but sets the output
struct udevice pointer to NULL in the no device found case.

Fix w1_get_bus() to account for this and return an error code
as is expected by the callers.

Signed-off-by: Martin Fuzzey <martin.fuzzey@flowbird.group>
Reviewed-by: Eugen Hristev <eugen.hristev@microchip.com>
This commit is contained in:
Martin Fuzzey 2018-10-22 18:31:08 +02:00 committed by Tom Rini
parent 586d4b010e
commit 65b60897a7

View File

@ -115,17 +115,19 @@ int w1_get_bus(int busnum, struct udevice **busp)
struct udevice *dev;
for (ret = uclass_first_device(UCLASS_W1, &dev);
!ret;
uclass_next_device(&dev), i++) {
if (ret) {
debug("Cannot find w1 bus %d\n", busnum);
return ret;
}
dev && !ret;
ret = uclass_next_device(&dev), i++) {
if (i == busnum) {
*busp = dev;
return 0;
}
}
if (!ret) {
debug("Cannot find w1 bus %d\n", busnum);
ret = -ENODEV;
}
return ret;
}