diff options
Diffstat (limited to 'drivers/base/core.c')
| -rw-r--r-- | drivers/base/core.c | 23 | 
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/base/core.c b/drivers/base/core.c index bbecaf9293be..8dde934f8d15 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -981,12 +981,9 @@ out:  static ssize_t uevent_store(struct device *dev, struct device_attribute *attr,  			    const char *buf, size_t count)  { -	enum kobject_action action; +	if (kobject_synth_uevent(&dev->kobj, buf, count)) +		dev_err(dev, "uevent: failed to send synthetic uevent\n"); -	if (kobject_action_type(buf, count, &action) == 0) -		kobject_uevent(&dev->kobj, action); -	else -		dev_err(dev, "uevent: unknown action-string\n");  	return count;  }  static DEVICE_ATTR_RW(uevent); @@ -2884,3 +2881,19 @@ void set_secondary_fwnode(struct device *dev, struct fwnode_handle *fwnode)  	else  		dev->fwnode = fwnode;  } + +/** + * device_set_of_node_from_dev - reuse device-tree node of another device + * @dev: device whose device-tree node is being set + * @dev2: device whose device-tree node is being reused + * + * Takes another reference to the new device-tree node after first dropping + * any reference held to the old node. + */ +void device_set_of_node_from_dev(struct device *dev, const struct device *dev2) +{ +	of_node_put(dev->of_node); +	dev->of_node = of_node_get(dev2->of_node); +	dev->of_node_reused = true; +} +EXPORT_SYMBOL_GPL(device_set_of_node_from_dev);  |