|
@@ -16,6 +16,7 @@
|
|
|
|
|
|
#define pr_fmt(fmt) "OF: " fmt
|
|
|
|
|
|
+#include <linux/bitmap.h>
|
|
|
#include <linux/console.h>
|
|
|
#include <linux/ctype.h>
|
|
|
#include <linux/cpu.h>
|
|
@@ -1942,6 +1943,57 @@ int of_alias_get_id(struct device_node *np, const char *stem)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(of_alias_get_id);
|
|
|
|
|
|
+/**
|
|
|
+ * of_alias_get_alias_list - Get alias list for the given device driver
|
|
|
+ * @matches: Array of OF device match structures to search in
|
|
|
+ * @stem: Alias stem of the given device_node
|
|
|
+ * @bitmap: Bitmap field pointer
|
|
|
+ * @nbits: Maximum number of alias ID which can be recorded it bitmap
|
|
|
+ *
|
|
|
+ * The function travels the lookup table to record alias ids for the given
|
|
|
+ * device match structures and alias stem.
|
|
|
+ *
|
|
|
+ * Return: 0 or -ENOSYS when !CONFIG_OF
|
|
|
+ */
|
|
|
+int of_alias_get_alias_list(const struct of_device_id *matches,
|
|
|
+ const char *stem, unsigned long *bitmap,
|
|
|
+ unsigned int nbits)
|
|
|
+{
|
|
|
+ struct alias_prop *app;
|
|
|
+
|
|
|
+ /* Zero bitmap field to make sure that all the time it is clean */
|
|
|
+ bitmap_zero(bitmap, nbits);
|
|
|
+
|
|
|
+ mutex_lock(&of_mutex);
|
|
|
+ pr_debug("%s: Looking for stem: %s\n", __func__, stem);
|
|
|
+ list_for_each_entry(app, &aliases_lookup, link) {
|
|
|
+ pr_debug("%s: stem: %s, id: %d\n",
|
|
|
+ __func__, app->stem, app->id);
|
|
|
+
|
|
|
+ if (strcmp(app->stem, stem) != 0) {
|
|
|
+ pr_debug("%s: stem comparison doesn't passed %s\n",
|
|
|
+ __func__, app->stem);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (app->id >= nbits) {
|
|
|
+ pr_debug("%s: ID %d greater then bitmap field %d\n",
|
|
|
+ __func__, app->id, nbits);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (of_match_node(matches, app->np)) {
|
|
|
+ pr_debug("%s: Allocated ID %d\n", __func__, app->id);
|
|
|
+ set_bit(app->id, bitmap);
|
|
|
+ }
|
|
|
+ /* Alias exist but it not compatible with matches */
|
|
|
+ }
|
|
|
+ mutex_unlock(&of_mutex);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(of_alias_get_alias_list);
|
|
|
+
|
|
|
/**
|
|
|
* of_alias_get_highest_id - Get highest alias id for the given stem
|
|
|
* @stem: Alias stem to be examined
|