Skip to content

Commit

Permalink
of: add helper function to retrive match data
Browse files Browse the repository at this point in the history
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: Joachim Eastwood <manabian@gmail.com>
[robh: add missing inline to dummmy declaration]
Signed-off-by: Rob Herring <robh@kernel.org>
  • Loading branch information
manabian authored and robherring committed May 28, 2015
1 parent 31712c9 commit 3386e0f
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
12 changes: 12 additions & 0 deletions drivers/of/device.c
Expand Up @@ -163,6 +163,18 @@ void of_device_unregister(struct platform_device *ofdev)
}
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)
{
const char *compat;
Expand Down
7 changes: 7 additions & 0 deletions include/linux/of_device.h
Expand Up @@ -33,6 +33,8 @@ extern int of_device_add(struct platform_device *pdev);
extern int of_device_register(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,
char *str, ssize_t len);

Expand Down Expand Up @@ -65,6 +67,11 @@ static inline int of_driver_match_device(struct device *dev,
static inline void of_device_uevent(struct device *dev,
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,
char *str, ssize_t len)
{
Expand Down

0 comments on commit 3386e0f

Please sign in to comment.