|
|
|
@ -473,6 +473,19 @@ int blk_find_max_devnum(enum if_type if_type) |
|
|
|
|
return max_devnum; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int blk_next_free_devnum(enum if_type if_type) |
|
|
|
|
{ |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
ret = blk_find_max_devnum(if_type); |
|
|
|
|
if (ret == -ENODEV) |
|
|
|
|
return 0; |
|
|
|
|
if (ret < 0) |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|
return ret + 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int blk_create_device(struct udevice *parent, const char *drv_name, |
|
|
|
|
const char *name, int if_type, int devnum, int blksz, |
|
|
|
|
lbaint_t size, struct udevice **devp) |
|
|
|
@ -482,13 +495,10 @@ int blk_create_device(struct udevice *parent, const char *drv_name, |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
if (devnum == -1) { |
|
|
|
|
ret = blk_find_max_devnum(if_type); |
|
|
|
|
if (ret == -ENODEV) |
|
|
|
|
devnum = 0; |
|
|
|
|
else if (ret < 0) |
|
|
|
|
ret = blk_next_free_devnum(if_type); |
|
|
|
|
if (ret < 0) |
|
|
|
|
return ret; |
|
|
|
|
else |
|
|
|
|
devnum = ret + 1; |
|
|
|
|
devnum = ret; |
|
|
|
|
} |
|
|
|
|
ret = device_bind_driver(parent, drv_name, name, &dev); |
|
|
|
|
if (ret) |
|
|
|
|