Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Joachim Eastwood <manabian@gmail.com>
[robh: add missing inline to dummmy declaration]
Signed-off-by: Rob Herring <robh@kernel.org>

authored by

Joachim Eastwood and committed by
Rob Herring
3386e0fa 31712c98

+19
+12
drivers/of/device.c
··· 163 163 } 164 164 EXPORT_SYMBOL(of_device_unregister); 165 165 166 + const void *of_device_get_match_data(const struct device *dev) 167 + { 168 + const struct of_device_id *match; 169 + 170 + match = of_match_device(dev->driver->of_match_table, dev); 171 + if (!match) 172 + return NULL; 173 + 174 + return match->data; 175 + } 176 + EXPORT_SYMBOL(of_device_get_match_data); 177 + 166 178 ssize_t of_device_get_modalias(struct device *dev, char *str, ssize_t len) 167 179 { 168 180 const char *compat;
+7
include/linux/of_device.h
··· 33 33 extern int of_device_register(struct platform_device *ofdev); 34 34 extern void of_device_unregister(struct platform_device *ofdev); 35 35 36 + extern const void *of_device_get_match_data(const struct device *dev); 37 + 36 38 extern ssize_t of_device_get_modalias(struct device *dev, 37 39 char *str, ssize_t len); 38 40 ··· 66 64 67 65 static inline void of_device_uevent(struct device *dev, 68 66 struct kobj_uevent_env *env) { } 67 + 68 + static inline const void *of_device_get_match_data(const struct device *dev) 69 + { 70 + return NULL; 71 + } 69 72 70 73 static inline int of_device_get_modalias(struct device *dev, 71 74 char *str, ssize_t len)