dm: scsi: Split out the bus scanning code
authorSimon Glass <sjg@chromium.org>
Thu, 15 Jun 2017 03:28:45 +0000 (21:28 -0600)
committerSimon Glass <sjg@chromium.org>
Tue, 11 Jul 2017 16:08:19 +0000 (10:08 -0600)
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>
drivers/scsi/scsi.c
include/scsi.h

index 80c5ce699e6cf6aded2d3ec578667d3ad76a6fb8..2b87548bd3153b577891863a5b932b03117e5a2d 100644 (file)
@@ -601,9 +601,30 @@ static int do_scsi_scan_one(struct udevice *dev, int id, int lun, bool verbose)
        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 @@ int scsi_scan(bool verbose)
                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;
index 9cdd13c795d3aa881320621ae2780ba96ff88b98..7173912de4a85e85301b5cf1858ed6d20609e0b7 100644 (file)
@@ -219,6 +219,14 @@ int scsi_bus_reset(struct udevice *dev);
  */
 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);