浏览代码

dm: core: Add a way to set a device name

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>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Simon Glass 10 年之前
父节点
当前提交
f5c67ea036
共有 2 个文件被更改,包括 25 次插入0 次删除
  1. 10 0
      drivers/core/device.c
  2. 15 0
      include/dm/device.h

+ 10 - 0
drivers/core/device.c

@@ -603,3 +603,13 @@ bool device_is_last_sibling(struct udevice *dev)
 		return false;
 		return false;
 	return list_is_last(&dev->sibling_node, &parent->child_head);
 	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;
+}

+ 15 - 0
include/dm/device.h

@@ -470,6 +470,21 @@ bool device_has_active_children(struct udevice *dev);
  */
  */
 bool device_is_last_sibling(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 */
 /* device resource management */
 typedef void (*dr_release_t)(struct udevice *dev, void *res);
 typedef void (*dr_release_t)(struct udevice *dev, void *res);
 typedef int (*dr_match_t)(struct udevice *dev, void *res, void *match_data);
 typedef int (*dr_match_t)(struct udevice *dev, void *res, void *match_data);