dm: core: Export a new function to read platdata 40/268140/1
authorSimon Glass <sjg@chromium.org>
Mon, 30 Dec 2019 04:19:20 +0000 (21:19 -0700)
committerJaehoon Chung <jh80.chung@samsung.com>
Thu, 16 Dec 2021 11:38:28 +0000 (20:38 +0900)
Add a new internal function, device_ofdata_to_platdata() to handle
allocating private space associated with each device and reading the
platform data from the device tree.

Call this new function from device_probe().

Change-Id: I3331c818298a0458cf1e554fcd5d663e540f8ae9
Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/core/device.c
include/dm/device-internal.h

index 190d1fc..86cd213 100644 (file)
@@ -305,13 +305,12 @@ static void *alloc_priv(int size, uint flags)
        return priv;
 }
 
-int device_probe(struct udevice *dev)
+int device_ofdata_to_platdata(struct udevice *dev)
 {
        struct power_domain pd;
        const struct driver *drv;
        int size = 0;
        int ret;
-       int seq;
 
        if (!dev)
                return -EINVAL;
@@ -364,6 +363,32 @@ int device_probe(struct udevice *dev)
                        goto fail;
        }
 
+       return 0;
+fail:
+       device_free(dev);
+
+       return ret;
+}
+
+int device_probe(struct udevice *dev)
+{
+       const struct driver *drv;
+       int ret;
+       int seq;
+
+       if (!dev)
+               return -EINVAL;
+
+       if (dev->flags & DM_FLAG_ACTIVATED)
+               return 0;
+
+       drv = dev->driver;
+       assert(drv);
+
+       ret = device_ofdata_to_platdata(dev);
+       if (ret)
+               goto fail;
+
        /* Ensure all parents are probed */
        if (dev->parent) {
                ret = device_probe(dev->parent);
index ee2b24a..294d6c1 100644 (file)
@@ -84,6 +84,22 @@ int device_bind_by_name(struct udevice *parent, bool pre_reloc_only,
                        const struct driver_info *info, struct udevice **devp);
 
 /**
+ * device_ofdata_to_platdata() - Read platform data for a device
+ *
+ * Read platform data for a device (typically from the device tree) so that
+ * the information needed to probe the device is present.
+ *
+ * This may cause some others devices to be probed if this one depends on them,
+ * e.g. a GPIO line will cause a GPIO device to be probed.
+ *
+ * All private data associated with the device is allocated.
+ *
+ * @dev: Pointer to device to process
+ * @return 0 if OK, -ve on error
+ */
+int device_ofdata_to_platdata(struct udevice *dev);
+
+/**
  * device_probe() - Probe a device, activating it
  *
  * Activate a device so that it is ready for use. All its parents are probed