diff options
-rw-r--r-- | drivers/of/base.c | 43 |
1 files changed, 1 insertions, 42 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c index 10b51106c854..ba195fbce4c6 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c | |||
@@ -730,49 +730,13 @@ out: | |||
730 | } | 730 | } |
731 | EXPORT_SYMBOL(of_find_node_with_property); | 731 | EXPORT_SYMBOL(of_find_node_with_property); |
732 | 732 | ||
733 | static const struct of_device_id * | ||
734 | of_match_compatible(const struct of_device_id *matches, | ||
735 | const struct device_node *node) | ||
736 | { | ||
737 | const char *cp; | ||
738 | int cplen, l; | ||
739 | const struct of_device_id *m; | ||
740 | |||
741 | cp = __of_get_property(node, "compatible", &cplen); | ||
742 | while (cp && (cplen > 0)) { | ||
743 | m = matches; | ||
744 | while (m->name[0] || m->type[0] || m->compatible[0]) { | ||
745 | /* Only match for the entries without type and name */ | ||
746 | if (m->name[0] || m->type[0] || | ||
747 | of_compat_cmp(m->compatible, cp, | ||
748 | strlen(m->compatible))) | ||
749 | m++; | ||
750 | else | ||
751 | return m; | ||
752 | } | ||
753 | |||
754 | /* Get node's next compatible string */ | ||
755 | l = strlen(cp) + 1; | ||
756 | cp += l; | ||
757 | cplen -= l; | ||
758 | } | ||
759 | |||
760 | return NULL; | ||
761 | } | ||
762 | |||
763 | static | 733 | static |
764 | const struct of_device_id *__of_match_node(const struct of_device_id *matches, | 734 | const struct of_device_id *__of_match_node(const struct of_device_id *matches, |
765 | const struct device_node *node) | 735 | const struct device_node *node) |
766 | { | 736 | { |
767 | const struct of_device_id *m; | ||
768 | |||
769 | if (!matches) | 737 | if (!matches) |
770 | return NULL; | 738 | return NULL; |
771 | 739 | ||
772 | m = of_match_compatible(matches, node); | ||
773 | if (m) | ||
774 | return m; | ||
775 | |||
776 | while (matches->name[0] || matches->type[0] || matches->compatible[0]) { | 740 | while (matches->name[0] || matches->type[0] || matches->compatible[0]) { |
777 | int match = 1; | 741 | int match = 1; |
778 | if (matches->name[0]) | 742 | if (matches->name[0]) |
@@ -796,12 +760,7 @@ const struct of_device_id *__of_match_node(const struct of_device_id *matches, | |||
796 | * @matches: array of of device match structures to search in | 760 | * @matches: array of of device match structures to search in |
797 | * @node: the of device structure to match against | 761 | * @node: the of device structure to match against |
798 | * | 762 | * |
799 | * Low level utility function used by device matching. We have two ways | 763 | * Low level utility function used by device matching. |
800 | * of matching: | ||
801 | * - Try to find the best compatible match by comparing each compatible | ||
802 | * string of device node with all the given matches respectively. | ||
803 | * - If the above method failed, then try to match the compatible by using | ||
804 | * __of_device_is_compatible() besides the match in type and name. | ||
805 | */ | 764 | */ |
806 | const struct of_device_id *of_match_node(const struct of_device_id *matches, | 765 | const struct of_device_id *of_match_node(const struct of_device_id *matches, |
807 | const struct device_node *node) | 766 | const struct device_node *node) |