Add fwnode_get_match_data() which is meant to be used as device_get_match_data for fwnode_operations. Signed-off-by: Clément Léger <clement.leger@xxxxxxxxxxx> --- drivers/base/property.c | 12 ++++++++++++ include/linux/property.h | 3 +++ 2 files changed, 15 insertions(+) diff --git a/drivers/base/property.c b/drivers/base/property.c index 434c2713fd99..6ffb3ac4509c 100644 --- a/drivers/base/property.c +++ b/drivers/base/property.c @@ -1181,6 +1181,18 @@ const struct of_device_id *fwnode_match_node(const struct fwnode_handle *fwnode, } EXPORT_SYMBOL(fwnode_match_node); +const void *fwnode_get_match_data(const struct fwnode_handle *fwnode, + const struct device *dev) +{ + const struct of_device_id *match; + + match = fwnode_match_node(fwnode, dev->driver->of_match_table); + if (!match) + return NULL; + + return match->data; +} + const void *device_get_match_data(struct device *dev) { return fwnode_call_ptr_op(dev_fwnode(dev), device_get_match_data, dev); diff --git a/include/linux/property.h b/include/linux/property.h index 978ecf6be34e..7f727c492602 100644 --- a/include/linux/property.h +++ b/include/linux/property.h @@ -449,6 +449,9 @@ static inline void *device_connection_find_match(struct device *dev, const struct of_device_id *fwnode_match_node(const struct fwnode_handle *fwnode, const struct of_device_id *matches); +const void *fwnode_get_match_data(const struct fwnode_handle *fwnode, + const struct device *dev); + /* -------------------------------------------------------------------------- */ /* Software fwnode support - when HW description is incomplete or missing */ -- 2.34.1