9
0
Fork 0

OF: Port of_match_device() and of_device_get_match_data()

Port of_match_device() and of_device_get_match_data() from Linux kernel
code.

Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Acked-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Andrey Smirnov 2016-04-25 22:37:00 -07:00 committed by Sascha Hauer
parent 9aa9049cfd
commit bd55401e97
3 changed files with 82 additions and 1 deletions

View File

@ -1,4 +1,4 @@
obj-y += address.o base.o fdt.o platform.o
obj-y += address.o base.o fdt.o platform.o device.o
obj-$(CONFIG_OFTREE_MEM_GENERIC) += mem_generic.o
obj-$(CONFIG_OF_GPIO) += of_gpio.o
obj-$(CONFIG_OF_PCI) += of_pci.o

33
drivers/of/device.c Normal file
View File

@ -0,0 +1,33 @@
#include <common.h>
#include <of.h>
/**
* of_match_device - Tell if a struct device matches an of_device_id list
* @ids: array of of device match structures to search in
* @dev: the of device structure to match against
*
* Used by a driver to check whether an platform_device present in the
* system is in its list of supported devices.
*/
const struct of_device_id *of_match_device(const struct of_device_id *matches,
const struct device_d *dev)
{
if ((!matches) || (!dev->device_node))
return NULL;
return of_match_node(matches, dev->device_node);
}
EXPORT_SYMBOL(of_match_device);
const void *of_device_get_match_data(const struct device_d *dev)
{
const struct of_device_id *match;
match = of_match_device(dev->driver->of_compatible, dev);
if (!match)
return NULL;
return match->data;
}
EXPORT_SYMBOL(of_device_get_match_data);

48
include/of_device.h Normal file
View File

@ -0,0 +1,48 @@
#ifndef __OF_DEVICE_H
#define __OF_DEVICE_H
#include <driver.h>
#include <of.h>
#ifdef CONFIG_OFTREE
extern const struct of_device_id *of_match_device(
const struct of_device_id *matches, const struct device_d *dev);
/**
* of_driver_match_device - Tell if a driver's of_match_table matches a device.
* @drv: the device_driver structure to test
* @dev: the device structure to match against
*/
static inline int of_driver_match_device(struct device_d *dev,
const struct driver_d *drv)
{
return of_match_device(drv->of_compatible, dev) != NULL;
}
extern const void *of_device_get_match_data(const struct device_d *dev);
#else /* CONFIG_OF */
static inline int of_driver_match_device(struct device_d *dev,
const struct device_d *drv)
{
return 0;
}
static inline const void *of_device_get_match_data(const struct device_d *dev)
{
return NULL;
}
static inline const struct of_device_id *__of_match_device(
const struct of_device_id *matches, const struct device_d *dev)
{
return NULL;
}
#define of_match_device(matches, dev) \
__of_match_device(of_match_ptr(matches), (dev))
#endif /* CONFIG_OF */
#endif /* _LINUX_OF_DEVICE_H */