dm: scsi: Split out the bus scanning code

Split out the code that scans a single SCSI bus into a separate function.
This will allow it to be used from driver model.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
index 80c5ce6..2b87548 100644
--- a/drivers/scsi/scsi.c
+++ b/drivers/scsi/scsi.c
@@ -601,9 +601,30 @@
 	return 0;
 }
 
+int scsi_scan_dev(struct udevice *dev, bool verbose)
+{
+	struct scsi_platdata *uc_plat; /* scsi controller platdata */
+	int ret;
+	int i;
+	int lun;
+
+	/* probe SCSI controller driver */
+	ret = device_probe(dev);
+	if (ret)
+		return ret;
+
+	/* Get controller platdata */
+	uc_plat = dev_get_uclass_platdata(dev);
+
+	for (i = 0; i < uc_plat->max_id; i++)
+		for (lun = 0; lun < uc_plat->max_lun; lun++)
+			do_scsi_scan_one(dev, i, lun, verbose);
+
+	return 0;
+}
+
 int scsi_scan(bool verbose)
 {
-	unsigned char i, lun;
 	struct uclass *uc;
 	struct udevice *dev; /* SCSI controller */
 	int ret;
@@ -618,19 +639,9 @@
 		return ret;
 
 	uclass_foreach_dev(dev, uc) {
-		struct scsi_platdata *plat; /* scsi controller platdata */
-
-		/* probe SCSI controller driver */
-		ret = device_probe(dev);
+		ret = scsi_scan_dev(dev, verbose);
 		if (ret)
 			return ret;
-
-		/* Get controller platdata */
-		plat = dev_get_uclass_platdata(dev);
-
-		for (i = 0; i < plat->max_id; i++)
-			for (lun = 0; lun < plat->max_lun; lun++)
-				do_scsi_scan_one(dev, i, lun, verbose);
 	}
 
 	return 0;
diff --git a/include/scsi.h b/include/scsi.h
index 9cdd13c..7173912 100644
--- a/include/scsi.h
+++ b/include/scsi.h
@@ -219,6 +219,14 @@
  */
 int scsi_scan(bool verbose);
 
+/**
+ * scsi_scan_dev() - scan a SCSI bus and create devices
+ *
+ * @dev:	SCSI bus
+ * @verbose:	true to show information about each device found
+ */
+int scsi_scan_dev(struct udevice *dev, bool verbose);
+
 #ifndef CONFIG_DM_SCSI
 void scsi_low_level_init(int busdevfunc);
 void scsi_init(void);