
Hi Simon,
Perhaps a typo in this subject, too
dm: core: Allow uclasses to specific the private data for a device's children
s/to specific/to specify/ ??
On Mon, 19 Jan 2015 20:12:41 -0700 Simon Glass sjg@chromium.org wrote:
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
Changes in v2: None
drivers/core/device-remove.c | 4 ++++ drivers/core/device.c | 4 ++++ include/dm/uclass.h | 4 ++++ test/dm/bus.c | 31 +++++++++++++++++++++++++++++-- 4 files changed, 41 insertions(+), 2 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;}
Hmm, do we need to check the per_child_auto_alloc_size? Is it better and simpler to check dev->parent_priv like this?
if (dev->parent && !dev->parent_priv) { free(dev->parent_priv); dev->parent_priv = NULL; }
Or further more simpily
if (dev->parent) { free(dev->parent_priv); dev->parent_priv = NULL; }
When free() is given with NULL pointer, it returns without doing anything, I think.
Best Regards Masahiro Yamada