diff mbox

[U-Boot,1/6] dm: core: Add a way to set a device name

Message ID 1438285245-15821-2-git-send-email-sjg@chromium.org
State Accepted
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass July 30, 2015, 7:40 p.m. UTC
Some devices are bound entirely by probing and do not have the benefit of
a device tree to give them a name. This is very common with PCI and USB. In
most cases this is fine, but we should add an official way to set a device
name. This should be called in the device's bind() method.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/core/device.c | 10 ++++++++++
 include/dm/device.h   | 15 +++++++++++++++
 2 files changed, 25 insertions(+)

Comments

Bin Meng July 31, 2015, 9:08 a.m. UTC | #1
On Fri, Jul 31, 2015 at 3:40 AM, Simon Glass <sjg@chromium.org> wrote:
> Some devices are bound entirely by probing and do not have the benefit of
> a device tree to give them a name. This is very common with PCI and USB. In
> most cases this is fine, but we should add an official way to set a device
> name. This should be called in the device's bind() method.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  drivers/core/device.c | 10 ++++++++++
>  include/dm/device.h   | 15 +++++++++++++++
>  2 files changed, 25 insertions(+)
>
> diff --git a/drivers/core/device.c b/drivers/core/device.c
> index caaf231..bbe7a94 100644
> --- a/drivers/core/device.c
> +++ b/drivers/core/device.c
> @@ -603,3 +603,13 @@ bool device_is_last_sibling(struct udevice *dev)
>                 return false;
>         return list_is_last(&dev->sibling_node, &parent->child_head);
>  }
> +
> +int device_set_name(struct udevice *dev, const char *name)
> +{
> +       name = strdup(name);
> +       if (!name)
> +               return -ENOMEM;
> +       dev->name = name;
> +
> +       return 0;
> +}
> diff --git a/include/dm/device.h b/include/dm/device.h
> index 38e23f8..5a04379 100644
> --- a/include/dm/device.h
> +++ b/include/dm/device.h
> @@ -468,6 +468,21 @@ bool device_has_active_children(struct udevice *dev);
>   */
>  bool device_is_last_sibling(struct udevice *dev);
>
> +/**
> + * device_set_name() - set the name of a device
> + *
> + * This must be called in the device's bind() method and no later. Normally
> + * this is unnecessary but for probed devices which don't get a useful name
> + * this function can be helpful.
> + *
> + * @dev:       Device to update
> + * @name:      New name (this string is allocated new memory and attached to
> + *             the device)
> + * @return 0 if OK, -ENOMEM if there is not enough memory to allocate the
> + * string
> + */
> +int device_set_name(struct udevice *dev, const char *name);
> +
>  /* device resource management */
>  typedef void (*dr_release_t)(struct udevice *dev, void *res);
>  typedef int (*dr_match_t)(struct udevice *dev, void *res, void *match_data);
> --

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Simon Glass Aug. 9, 2015, 3:07 p.m. UTC | #2
On 31 July 2015 at 03:08, Bin Meng <bmeng.cn@gmail.com> wrote:
> On Fri, Jul 31, 2015 at 3:40 AM, Simon Glass <sjg@chromium.org> wrote:
>> Some devices are bound entirely by probing and do not have the benefit of
>> a device tree to give them a name. This is very common with PCI and USB. In
>> most cases this is fine, but we should add an official way to set a device
>> name. This should be called in the device's bind() method.
>>
>> Signed-off-by: Simon Glass <sjg@chromium.org>
>> ---
>>
>>  drivers/core/device.c | 10 ++++++++++
>>  include/dm/device.h   | 15 +++++++++++++++
>>  2 files changed, 25 insertions(+)
>>
>> diff --git a/drivers/core/device.c b/drivers/core/device.c
>> index caaf231..bbe7a94 100644
>> --- a/drivers/core/device.c
>> +++ b/drivers/core/device.c
>> @@ -603,3 +603,13 @@ bool device_is_last_sibling(struct udevice *dev)
>>                 return false;
>>         return list_is_last(&dev->sibling_node, &parent->child_head);
>>  }
>> +
>> +int device_set_name(struct udevice *dev, const char *name)
>> +{
>> +       name = strdup(name);
>> +       if (!name)
>> +               return -ENOMEM;
>> +       dev->name = name;
>> +
>> +       return 0;
>> +}
>> diff --git a/include/dm/device.h b/include/dm/device.h
>> index 38e23f8..5a04379 100644
>> --- a/include/dm/device.h
>> +++ b/include/dm/device.h
>> @@ -468,6 +468,21 @@ bool device_has_active_children(struct udevice *dev);
>>   */
>>  bool device_is_last_sibling(struct udevice *dev);
>>
>> +/**
>> + * device_set_name() - set the name of a device
>> + *
>> + * This must be called in the device's bind() method and no later. Normally
>> + * this is unnecessary but for probed devices which don't get a useful name
>> + * this function can be helpful.
>> + *
>> + * @dev:       Device to update
>> + * @name:      New name (this string is allocated new memory and attached to
>> + *             the device)
>> + * @return 0 if OK, -ENOMEM if there is not enough memory to allocate the
>> + * string
>> + */
>> +int device_set_name(struct udevice *dev, const char *name);
>> +
>>  /* device resource management */
>>  typedef void (*dr_release_t)(struct udevice *dev, void *res);
>>  typedef int (*dr_match_t)(struct udevice *dev, void *res, void *match_data);
>> --
>
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

Applied to u-boot-dm.
diff mbox

Patch

diff --git a/drivers/core/device.c b/drivers/core/device.c
index caaf231..bbe7a94 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -603,3 +603,13 @@  bool device_is_last_sibling(struct udevice *dev)
 		return false;
 	return list_is_last(&dev->sibling_node, &parent->child_head);
 }
+
+int device_set_name(struct udevice *dev, const char *name)
+{
+	name = strdup(name);
+	if (!name)
+		return -ENOMEM;
+	dev->name = name;
+
+	return 0;
+}
diff --git a/include/dm/device.h b/include/dm/device.h
index 38e23f8..5a04379 100644
--- a/include/dm/device.h
+++ b/include/dm/device.h
@@ -468,6 +468,21 @@  bool device_has_active_children(struct udevice *dev);
  */
 bool device_is_last_sibling(struct udevice *dev);
 
+/**
+ * device_set_name() - set the name of a device
+ *
+ * This must be called in the device's bind() method and no later. Normally
+ * this is unnecessary but for probed devices which don't get a useful name
+ * this function can be helpful.
+ *
+ * @dev:	Device to update
+ * @name:	New name (this string is allocated new memory and attached to
+ *		the device)
+ * @return 0 if OK, -ENOMEM if there is not enough memory to allocate the
+ * string
+ */
+int device_set_name(struct udevice *dev, const char *name);
+
 /* device resource management */
 typedef void (*dr_release_t)(struct udevice *dev, void *res);
 typedef int (*dr_match_t)(struct udevice *dev, void *res, void *match_data);