return CMD_RET_USAGE;
        }
 
-       ret = get_device(argv[0], argv[1], &desc);
+       ret = blk_get_device_by_str(argv[0], argv[1], &desc);
        if (ret < 0)
                return 1;
 
 
        part = simple_strtoul(argv[2], NULL, 0);
 
-       ret = get_device(argv[0], argv[1], &desc);
+       ret = blk_get_device_by_str(argv[0], argv[1], &desc);
        if (ret < 0)
                return 1;
 
 
        part = simple_strtoul(argv[2], NULL, 0);
 
-       ret = get_device(argv[0], argv[1], &desc);
+       ret = blk_get_device_by_str(argv[0], argv[1], &desc);
        if (ret < 0)
                return 1;
 
 
        return -1;
 }
 
-int get_device(const char *ifname, const char *dev_hwpart_str,
-              struct blk_desc **dev_desc)
+int blk_get_device_by_str(const char *ifname, const char *dev_hwpart_str,
+                         struct blk_desc **dev_desc)
 {
        char *ep;
        char *dup_str = NULL;
        }
 
        /* Look up the device */
-       dev = get_device(ifname, dev_str, dev_desc);
+       dev = blk_get_device_by_str(ifname, dev_str, dev_desc);
        if (dev < 0)
                goto cleanup;
 
 
 void print_part(struct blk_desc *dev_desc);
 void init_part(struct blk_desc *dev_desc);
 void dev_print(struct blk_desc *dev_desc);
-int get_device(const char *ifname, const char *dev_str,
-              struct blk_desc **dev_desc);
+
+/**
+ * blk_get_device_by_str() - Get a block device given its interface/hw partition
+ *
+ * Each interface allocates its own devices and typically struct blk_desc is
+ * contained with the interface's data structure. There is no global
+ * numbering for block devices, so the interface name must be provided.
+ *
+ * The hardware parition is not related to the normal software partitioning
+ * of a device - each hardware partition is effectively a separately
+ * accessible block device. When a hardware parition is selected on MMC the
+ * other hardware partitions become inaccessible. The same block device is
+ * used to access all hardware partitions, but its capacity may change when a
+ * different hardware partition is selected.
+ *
+ * When a hardware partition number is given, the block device switches to
+ * that hardware partition.
+ *
+ * @ifname:    Interface name (e.g. "ide", "scsi")
+ * @dev_str:   Device and optional hw partition. This can either be a string
+ *             containing the device number (e.g. "2") or the device number
+ *             and hardware partition number (e.g. "2.4") for devices that
+ *             support it (currently only MMC).
+ * @dev_desc:  Returns a pointer to the block device on success
+ * @return block device number (local to the interface), or -1 on error
+ */
+int blk_get_device_by_str(const char *ifname, const char *dev_str,
+                         struct blk_desc **dev_desc);
 int get_device_and_partition(const char *ifname, const char *dev_part_str,
                             struct blk_desc **dev_desc,
                             disk_partition_t *info, int allow_whole_dev);
 static inline void print_part(struct blk_desc *dev_desc) {}
 static inline void init_part(struct blk_desc *dev_desc) {}
 static inline void dev_print(struct blk_desc *dev_desc) {}
-static inline int get_device(const char *ifname, const char *dev_str,
-                            struct blk_desc **dev_desc)
+static inline int blk_get_device_by_str(const char *ifname, const char *dev_str,
+                                       struct blk_desc **dev_desc)
 { return -1; }
 static inline int get_device_and_partition(const char *ifname,
                                           const char *dev_part_str,
 
        state_set_skip_delays(true);
        ut_assertok(usb_init());
        ut_assertok(uclass_get_device(UCLASS_MASS_STORAGE, 0, &dev));
-       ut_assertok(get_device("usb", "0", &dev_desc));
+       ut_assertok(blk_get_device_by_str("usb", "0", &dev_desc));
 
        /* Read a few blocks and look for the string we expect */
        ut_asserteq(512, dev_desc->blksz);