From bc53d2637e5477ca3cd63ab942ef6038615a8e01 Mon Sep 17 00:00:00 2001 From: Tien Fong Chee Date: Fri, 6 Jul 2018 16:26:36 +0800 Subject: [PATCH] block: Add a function to find block device descriptor Add a function to find the block device descriptor of the parent device. Signed-off-by: Tien Fong Chee [trini: Move function declaration to avoid warning] Signed-off-by: Tom Rini --- drivers/block/blk-uclass.c | 23 +++++++++++++++++++++++ include/blk.h | 9 +++++++++ 2 files changed, 32 insertions(+) diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c index 9e0c823..facf527 100644 --- a/drivers/block/blk-uclass.c +++ b/drivers/block/blk-uclass.c @@ -132,6 +132,29 @@ struct blk_desc *blk_get_devnum_by_typename(const char *if_typename, int devnum) } /** + * blk_get_by_device() - Get the block device descriptor for the given device + * @dev: Instance of a storage device + * + * Return: With block device descriptor on success , NULL if there is no such + * block device. + */ +struct blk_desc *blk_get_by_device(struct udevice *dev) +{ + struct udevice *child_dev, *next; + + device_foreach_child_safe(child_dev, next, dev) { + if (device_get_uclass_id(child_dev) != UCLASS_BLK) + continue; + + return dev_get_uclass_platdata(child_dev); + } + + debug("%s: No block device found\n", __func__); + + return NULL; +} + +/** * get_desc() - Get the block device descriptor for the given device number * * @if_type: Interface type diff --git a/include/blk.h b/include/blk.h index 86f6d50..6af2196 100644 --- a/include/blk.h +++ b/include/blk.h @@ -406,6 +406,15 @@ int blk_select_hwpart(struct udevice *dev, int hwpart); */ int blk_get_from_parent(struct udevice *parent, struct udevice **devp); +/** + * blk_get_by_device() - Get the block device descriptor for the given device + * @dev: Instance of a storage device + * + * Return: With block device descriptor on success , NULL if there is no such + * block device. + */ +struct blk_desc *blk_get_by_device(struct udevice *dev); + #else #include /*