Commit 3386e0fa authored by Joachim Eastwood's avatar Joachim Eastwood Committed by Rob Herring

of: add helper function to retrive match data

It's a common operation for device drivers to retrive the data
member from of_device_id struct in their probe function.

Most driver end up doing:
    const struct of_device_id *match;
    match = of_match_device(driver_of_match, &pdev->dev);
    driver->data = match->data;

With the of_device_get_match_data helper function all this can
done in one go.
Signed-off-by: default avatarJoachim Eastwood <manabian@gmail.com>
[robh: add missing inline to dummmy declaration]
Signed-off-by: default avatarRob Herring <robh@kernel.org>
parent 31712c98
...@@ -163,6 +163,18 @@ void of_device_unregister(struct platform_device *ofdev) ...@@ -163,6 +163,18 @@ void of_device_unregister(struct platform_device *ofdev)
} }
EXPORT_SYMBOL(of_device_unregister); EXPORT_SYMBOL(of_device_unregister);
const void *of_device_get_match_data(const struct device *dev)
{
const struct of_device_id *match;
match = of_match_device(dev->driver->of_match_table, dev);
if (!match)
return NULL;
return match->data;
}
EXPORT_SYMBOL(of_device_get_match_data);
ssize_t of_device_get_modalias(struct device *dev, char *str, ssize_t len) ssize_t of_device_get_modalias(struct device *dev, char *str, ssize_t len)
{ {
const char *compat; const char *compat;
......
...@@ -33,6 +33,8 @@ extern int of_device_add(struct platform_device *pdev); ...@@ -33,6 +33,8 @@ extern int of_device_add(struct platform_device *pdev);
extern int of_device_register(struct platform_device *ofdev); extern int of_device_register(struct platform_device *ofdev);
extern void of_device_unregister(struct platform_device *ofdev); extern void of_device_unregister(struct platform_device *ofdev);
extern const void *of_device_get_match_data(const struct device *dev);
extern ssize_t of_device_get_modalias(struct device *dev, extern ssize_t of_device_get_modalias(struct device *dev,
char *str, ssize_t len); char *str, ssize_t len);
...@@ -65,6 +67,11 @@ static inline int of_driver_match_device(struct device *dev, ...@@ -65,6 +67,11 @@ static inline int of_driver_match_device(struct device *dev,
static inline void of_device_uevent(struct device *dev, static inline void of_device_uevent(struct device *dev,
struct kobj_uevent_env *env) { } struct kobj_uevent_env *env) { }
static inline const void *of_device_get_match_data(const struct device *dev)
{
return NULL;
}
static inline int of_device_get_modalias(struct device *dev, static inline int of_device_get_modalias(struct device *dev,
char *str, ssize_t len) char *str, ssize_t len)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment