dm: blk: Add probe in blk_first_device/blk_next_device

The description claims that the device is probed but it isn't.

Add the device_probe() call.

Also consolidate the iteration into one function.

Fixes: 8a5cbc065d ("dm: blk: Use uclass_find_first/next_device() in blk_first/next_device()")
Signed-off-by: Michal Suchanek <msuchanek@suse.de>
This commit is contained in:
Michal Suchanek 2022-09-27 23:23:53 +02:00 committed by Simon Glass
parent 499503e157
commit 168a0e45fc

View File

@ -369,45 +369,43 @@ int blk_dselect_hwpart(struct blk_desc *desc, int hwpart)
return blk_select_hwpart(desc->bdev, hwpart);
}
int blk_first_device(int uclass_id, struct udevice **devp)
static int _blk_next_device(int uclass_id, struct udevice **devp)
{
struct blk_desc *desc;
int ret;
int ret = 0;
for (; *devp; uclass_find_next_device(devp)) {
desc = dev_get_uclass_plat(*devp);
if (desc->uclass_id == uclass_id) {
ret = device_probe(*devp);
if (!ret)
return 0;
}
}
ret = uclass_find_first_device(UCLASS_BLK, devp);
if (ret)
return ret;
if (!*devp)
return -ENODEV;
do {
desc = dev_get_uclass_plat(*devp);
if (desc->uclass_id == uclass_id)
return 0;
ret = uclass_find_next_device(devp);
if (ret)
return ret;
} while (*devp);
return -ENODEV;
}
int blk_first_device(int uclass_id, struct udevice **devp)
{
uclass_find_first_device(UCLASS_BLK, devp);
return _blk_next_device(uclass_id, devp);
}
int blk_next_device(struct udevice **devp)
{
struct blk_desc *desc;
int ret, uclass_id;
int uclass_id;
desc = dev_get_uclass_plat(*devp);
uclass_id = desc->uclass_id;
do {
ret = uclass_find_next_device(devp);
if (ret)
return ret;
if (!*devp)
return -ENODEV;
desc = dev_get_uclass_plat(*devp);
if (desc->uclass_id == uclass_id)
return 0;
} while (1);
uclass_find_next_device(devp);
return _blk_next_device(uclass_id, devp);
}
int blk_find_device(int uclass_id, int devnum, struct udevice **devp)