@@ -319,7 +319,7 @@ dt_match_node(const struct dt_device_match *matches,
return NULL;
while ( matches->path || matches->type ||
- matches->compatible || matches->not_available )
+ matches->compatible || matches->not_available || matches->prop)
{
bool_t match = 1;
@@ -335,6 +335,9 @@ dt_match_node(const struct dt_device_match *matches,
if ( matches->not_available )
match &= !dt_device_is_available(node);
+ if ( matches->prop )
+ match &= dt_find_property(node, matches->prop, NULL) != NULL;
+
if ( match )
return matches;
matches++;
@@ -29,6 +29,11 @@ struct dt_device_match {
const char *type;
const char *compatible;
const bool_t not_available;
+ /*
+ * Property name to search for. We only search for the property's
+ * existence.
+ */
+ const char *prop;
const void *data;
};
@@ -36,11 +41,13 @@ struct dt_device_match {
#define __DT_MATCH_TYPE(typ) .type = typ
#define __DT_MATCH_COMPATIBLE(compat) .compatible = compat
#define __DT_MATCH_NOT_AVAILABLE() .not_available = 1
+#define __DT_MATCH_PROP(p) .prop = p
#define DT_MATCH_PATH(p) { __DT_MATCH_PATH(p) }
#define DT_MATCH_TYPE(typ) { __DT_MATCH_TYPE(typ) }
#define DT_MATCH_COMPATIBLE(compat) { __DT_MATCH_COMPATIBLE(compat) }
#define DT_MATCH_NOT_AVAILABLE() { __DT_MATCH_NOT_AVAILABLE() }
+#define DT_MATCH_PROP(p) { __DT_MATCH_PROP(p) }
typedef u32 dt_phandle;