diff options
author | Simon Glass <sjg@chromium.org> | 2015-01-25 08:27:06 -0700 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2015-01-29 17:09:55 -0700 |
commit | dac8db2ce66944828e441cccf25703b262a256cd (patch) | |
tree | 44a5625d8577254adb38364944372b55ad2549df /drivers/core | |
parent | 9cc36a2b89ebe5148d69d521745c1e1d26365c3a (diff) | |
download | u-boot-imx-dac8db2ce66944828e441cccf25703b262a256cd.zip u-boot-imx-dac8db2ce66944828e441cccf25703b262a256cd.tar.gz u-boot-imx-dac8db2ce66944828e441cccf25703b262a256cd.tar.bz2 |
dm: core: Allow uclasses to specify private data for a device's children
In many cases the per-child private data for a device's children is defined
by the uclass rather than the individual driver. For example, a SPI bus
needs to store information about each of its children, but all SPI drivers
store the same information. It makes sense to allow the uclass to define
this data.
If the driver provides a size value for its per-child private data, then use
it. Failng that, fall back to that provided by the uclass.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Diffstat (limited to 'drivers/core')
-rw-r--r-- | drivers/core/device-remove.c | 4 | ||||
-rw-r--r-- | drivers/core/device.c | 4 |
2 files changed, 8 insertions, 0 deletions
diff --git a/drivers/core/device-remove.c b/drivers/core/device-remove.c index 56c358a..3a5f48d 100644 --- a/drivers/core/device-remove.c +++ b/drivers/core/device-remove.c @@ -126,6 +126,10 @@ void device_free(struct udevice *dev) } if (dev->parent) { size = dev->parent->driver->per_child_auto_alloc_size; + if (!size) { + size = dev->parent->uclass->uc_drv-> + per_child_auto_alloc_size; + } if (size) { free(dev->parent_priv); dev->parent_priv = NULL; diff --git a/drivers/core/device.c b/drivers/core/device.c index f78b78a..78bc460 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -201,6 +201,10 @@ int device_probe_child(struct udevice *dev, void *parent_priv) /* Ensure all parents are probed */ if (dev->parent) { size = dev->parent->driver->per_child_auto_alloc_size; + if (!size) { + size = dev->parent->uclass->uc_drv-> + per_child_auto_alloc_size; + } if (size) { dev->parent_priv = calloc(1, size); if (!dev->parent_priv) { |