summaryrefslogtreecommitdiffstats
path: root/drivers/base
diff options
context:
space:
mode:
authorBjorn Andersson <bjorn.andersson@linaro.org>2022-04-23 00:23:46 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-04-26 13:47:12 +0200
commitbcd6a517aacae7e708a1be019a0c3ab9f4371c2b (patch)
treeb26330660afe44aa12e5352718f1cff327ec93f6 /drivers/base
parentdevice property: Add helper to match multiple connections (diff)
downloadlinux-bcd6a517aacae7e708a1be019a0c3ab9f4371c2b.tar.xz
linux-bcd6a517aacae7e708a1be019a0c3ab9f4371c2b.zip
device property: Use multi-connection matchers for single case
The newly introduced helpers for searching for matches in the case of multiple connections can be resused by the single-connection case, so do this to save some duplication. Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> Link: https://lore.kernel.org/r/20220422222351.1297276-3-bjorn.andersson@linaro.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/property.c55
1 files changed, 5 insertions, 50 deletions
diff --git a/drivers/base/property.c b/drivers/base/property.c
index 08da5ca49e9c..47659764c8a1 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -1193,31 +1193,6 @@ const void *device_get_match_data(struct device *dev)
}
EXPORT_SYMBOL_GPL(device_get_match_data);
-static void *
-fwnode_graph_devcon_match(struct fwnode_handle *fwnode, const char *con_id,
- void *data, devcon_match_fn_t match)
-{
- struct fwnode_handle *node;
- struct fwnode_handle *ep;
- void *ret;
-
- fwnode_graph_for_each_endpoint(fwnode, ep) {
- node = fwnode_graph_get_remote_port_parent(ep);
- if (!fwnode_device_is_available(node)) {
- fwnode_handle_put(node);
- continue;
- }
-
- ret = match(node, con_id, data);
- fwnode_handle_put(node);
- if (ret) {
- fwnode_handle_put(ep);
- return ret;
- }
- }
- return NULL;
-}
-
static unsigned int fwnode_graph_devcon_matches(struct fwnode_handle *fwnode,
const char *con_id, void *data,
devcon_match_fn_t match,
@@ -1252,28 +1227,6 @@ static unsigned int fwnode_graph_devcon_matches(struct fwnode_handle *fwnode,
return count;
}
-static void *
-fwnode_devcon_match(struct fwnode_handle *fwnode, const char *con_id,
- void *data, devcon_match_fn_t match)
-{
- struct fwnode_handle *node;
- void *ret;
- int i;
-
- for (i = 0; ; i++) {
- node = fwnode_find_reference(fwnode, con_id, i);
- if (IS_ERR(node))
- break;
-
- ret = match(node, NULL, data);
- fwnode_handle_put(node);
- if (ret)
- return ret;
- }
-
- return NULL;
-}
-
static unsigned int fwnode_devcon_matches(struct fwnode_handle *fwnode,
const char *con_id, void *data,
devcon_match_fn_t match,
@@ -1320,16 +1273,18 @@ void *fwnode_connection_find_match(struct fwnode_handle *fwnode,
const char *con_id, void *data,
devcon_match_fn_t match)
{
+ unsigned int count;
void *ret;
if (!fwnode || !match)
return NULL;
- ret = fwnode_graph_devcon_match(fwnode, con_id, data, match);
- if (ret)
+ count = fwnode_graph_devcon_matches(fwnode, con_id, data, match, &ret, 1);
+ if (count)
return ret;
- return fwnode_devcon_match(fwnode, con_id, data, match);
+ count = fwnode_devcon_matches(fwnode, con_id, data, match, &ret, 1);
+ return count ? ret : NULL;
}
EXPORT_SYMBOL_GPL(fwnode_connection_find_match);