Commit 71c5498e authored by Kevin Hao's avatar Kevin Hao Committed by Grant Likely

Revert "of: search the best compatible match first in __of_match_node()"

This reverts commit 06b29e76.
As pointed out by Grant Likely, we should also take the type and name
into account when searching the best compatible match. That means the
match with compatible, type and name should be better than the match
just with the same compatible string. So revert this and we will
implement another method to find the best match entry.
Signed-off-by: default avatarKevin Hao <haokexin@gmail.com>
Signed-off-by: default avatarGrant Likely <grant.likely@linaro.org>
parent 60f76eab
...@@ -730,49 +730,13 @@ struct device_node *of_find_node_with_property(struct device_node *from, ...@@ -730,49 +730,13 @@ struct device_node *of_find_node_with_property(struct device_node *from,
} }
EXPORT_SYMBOL(of_find_node_with_property); EXPORT_SYMBOL(of_find_node_with_property);
static const struct of_device_id *
of_match_compatible(const struct of_device_id *matches,
const struct device_node *node)
{
const char *cp;
int cplen, l;
const struct of_device_id *m;
cp = __of_get_property(node, "compatible", &cplen);
while (cp && (cplen > 0)) {
m = matches;
while (m->name[0] || m->type[0] || m->compatible[0]) {
/* Only match for the entries without type and name */
if (m->name[0] || m->type[0] ||
of_compat_cmp(m->compatible, cp,
strlen(m->compatible)))
m++;
else
return m;
}
/* Get node's next compatible string */
l = strlen(cp) + 1;
cp += l;
cplen -= l;
}
return NULL;
}
static static
const struct of_device_id *__of_match_node(const struct of_device_id *matches, const struct of_device_id *__of_match_node(const struct of_device_id *matches,
const struct device_node *node) const struct device_node *node)
{ {
const struct of_device_id *m;
if (!matches) if (!matches)
return NULL; return NULL;
m = of_match_compatible(matches, node);
if (m)
return m;
while (matches->name[0] || matches->type[0] || matches->compatible[0]) { while (matches->name[0] || matches->type[0] || matches->compatible[0]) {
int match = 1; int match = 1;
if (matches->name[0]) if (matches->name[0])
...@@ -796,12 +760,7 @@ const struct of_device_id *__of_match_node(const struct of_device_id *matches, ...@@ -796,12 +760,7 @@ const struct of_device_id *__of_match_node(const struct of_device_id *matches,
* @matches: array of of device match structures to search in * @matches: array of of device match structures to search in
* @node: the of device structure to match against * @node: the of device structure to match against
* *
* Low level utility function used by device matching. We have two ways * Low level utility function used by device matching.
* of matching:
* - Try to find the best compatible match by comparing each compatible
* string of device node with all the given matches respectively.
* - If the above method failed, then try to match the compatible by using
* __of_device_is_compatible() besides the match in type and name.
*/ */
const struct of_device_id *of_match_node(const struct of_device_id *matches, const struct of_device_id *of_match_node(const struct of_device_id *matches,
const struct device_node *node) const struct device_node *node)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment