diff options
author | Bjorn Andersson <bjorn.andersson@linaro.org> | 2016-09-02 01:28:02 +0300 |
---|---|---|
committer | Bjorn Andersson <bjorn.andersson@linaro.org> | 2016-09-09 08:15:22 +0300 |
commit | 8b881c07cb805e1a126d434359706e45864ea2df (patch) | |
tree | b293450e26a612bbd9a04524e65e7b451b17e915 /drivers/rpmsg/rpmsg_core.c | |
parent | c9bd6f422090b874b5877b4cedcd7757eac33117 (diff) | |
download | linux-8b881c07cb805e1a126d434359706e45864ea2df.tar.xz |
rpmsg: Move helper for finding rpmsg devices to core
Extract and move the helper function for finding rpmsg child devices to
the core.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Diffstat (limited to 'drivers/rpmsg/rpmsg_core.c')
-rw-r--r-- | drivers/rpmsg/rpmsg_core.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c index 3bee8e03a387..81101775fed0 100644 --- a/drivers/rpmsg/rpmsg_core.c +++ b/drivers/rpmsg/rpmsg_core.c @@ -22,6 +22,8 @@ #include <linux/kernel.h> #include <linux/rpmsg.h> +#include "rpmsg_internal.h" + /** * rpmsg_create_ept() - create a new rpmsg_endpoint * @rpdev: rpmsg channel device @@ -229,3 +231,34 @@ int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst, return ept->ops->trysend_offchannel(ept, src, dst, data, len); } EXPORT_SYMBOL(rpmsg_trysend_offchannel); + +/* + * match an rpmsg channel with a channel info struct. + * this is used to make sure we're not creating rpmsg devices for channels + * that already exist. + */ +static int rpmsg_device_match(struct device *dev, void *data) +{ + struct rpmsg_channel_info *chinfo = data; + struct rpmsg_device *rpdev = to_rpmsg_device(dev); + + if (chinfo->src != RPMSG_ADDR_ANY && chinfo->src != rpdev->src) + return 0; + + if (chinfo->dst != RPMSG_ADDR_ANY && chinfo->dst != rpdev->dst) + return 0; + + if (strncmp(chinfo->name, rpdev->id.name, RPMSG_NAME_SIZE)) + return 0; + + /* found a match ! */ + return 1; +} + +struct device *rpmsg_find_device(struct device *parent, + struct rpmsg_channel_info *chinfo) +{ + return device_find_child(parent, chinfo, rpmsg_device_match); + +} +EXPORT_SYMBOL(rpmsg_find_device); |