mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 04:06:26 +00:00
driver core: Add fwnode_to_dev() to look up device from fwnode
It's often useful to look up a device that corresponds to a fwnode. So add an API to do that irrespective of the bus on which the device has been added to. Signed-off-by: Saravana Kannan <saravanak@google.com> Link: https://lore.kernel.org/r/20190904211126.47518-2-saravanak@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
54ecb8f702
commit
372a67c0c5
@ -2198,6 +2198,10 @@ int device_add(struct device *dev)
|
|||||||
BUS_NOTIFY_ADD_DEVICE, dev);
|
BUS_NOTIFY_ADD_DEVICE, dev);
|
||||||
|
|
||||||
kobject_uevent(&dev->kobj, KOBJ_ADD);
|
kobject_uevent(&dev->kobj, KOBJ_ADD);
|
||||||
|
|
||||||
|
if (dev->fwnode && !dev->fwnode->dev)
|
||||||
|
dev->fwnode->dev = dev;
|
||||||
|
|
||||||
bus_probe_device(dev);
|
bus_probe_device(dev);
|
||||||
if (parent)
|
if (parent)
|
||||||
klist_add_tail(&dev->p->knode_parent,
|
klist_add_tail(&dev->p->knode_parent,
|
||||||
@ -2342,6 +2346,9 @@ void device_del(struct device *dev)
|
|||||||
kill_device(dev);
|
kill_device(dev);
|
||||||
device_unlock(dev);
|
device_unlock(dev);
|
||||||
|
|
||||||
|
if (dev->fwnode && dev->fwnode->dev == dev)
|
||||||
|
dev->fwnode->dev = NULL;
|
||||||
|
|
||||||
/* Notify clients of device removal. This call must come
|
/* Notify clients of device removal. This call must come
|
||||||
* before dpm_sysfs_remove().
|
* before dpm_sysfs_remove().
|
||||||
*/
|
*/
|
||||||
|
@ -17,6 +17,7 @@ struct device;
|
|||||||
struct fwnode_handle {
|
struct fwnode_handle {
|
||||||
struct fwnode_handle *secondary;
|
struct fwnode_handle *secondary;
|
||||||
const struct fwnode_operations *ops;
|
const struct fwnode_operations *ops;
|
||||||
|
struct device *dev;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -123,5 +124,6 @@ struct fwnode_operations {
|
|||||||
if (fwnode_has_op(fwnode, op)) \
|
if (fwnode_has_op(fwnode, op)) \
|
||||||
(fwnode)->ops->op(fwnode, ## __VA_ARGS__); \
|
(fwnode)->ops->op(fwnode, ## __VA_ARGS__); \
|
||||||
} while (false)
|
} while (false)
|
||||||
|
#define get_dev_from_fwnode(fwnode) get_device((fwnode)->dev)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user