of_device_is_compatible() will return zero on mismatch and a positive value up to and including (INT_MAX / 2) on match. Knowledge of the upper bound can be useful to callers, because if inside a loop a maximum score was achieved, there's usually no point in continuing the search. Therefore add a macro for INT_MAX / 2 and document it for potential users. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- drivers/of/base.c | 6 ++++-- include/of.h | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/of/base.c b/drivers/of/base.c index 463db1058ae9..8a42fcee1d40 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -546,7 +546,9 @@ struct device_node *of_get_cpu_node(int cpu, unsigned int *thread) EXPORT_SYMBOL(of_get_cpu_node); /** Checks if the given "compat" string matches one of the strings in - * the device's "compatible" property + * the device's "compatible" property. Returns 0 on mismatch and a + * positive score on match with the maximum being OF_DEVICE_COMPATIBLE_MAX_SCORE, + * which is only returned if the first compatible matched. */ int of_device_is_compatible(const struct device_node *device, const char *compat) @@ -559,7 +561,7 @@ int of_device_is_compatible(const struct device_node *device, for (cp = of_prop_next_string(prop, NULL); cp; cp = of_prop_next_string(prop, cp), index++) { if (of_compat_cmp(cp, compat, strlen(compat)) == 0) { - score = INT_MAX/2 - (index << 2); + score = OF_DEVICE_COMPATIBLE_MAX_SCORE - (index << 2); break; } } diff --git a/include/of.h b/include/of.h index 7d1df462d8cf..19b8e7c038a4 100644 --- a/include/of.h +++ b/include/of.h @@ -5,6 +5,7 @@ #include <fdt.h> #include <errno.h> #include <linux/types.h> +#include <linux/limits.h> #include <linux/list.h> #include <linux/err.h> #include <asm/byteorder.h> @@ -124,6 +125,9 @@ int of_fixup_reserved_memory(struct device_node *node, void *data); struct cdev; +/* Maximum score returned by of_device_is_compatible() */ +#define OF_DEVICE_COMPATIBLE_MAX_SCORE (INT_MAX / 2) + #ifdef CONFIG_OFTREE extern struct device_node *of_read_file(const char *filename); extern struct of_reserve_map *of_get_reserve_map(void); -- 2.39.2