X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fof%2Fbase.c;h=23ffb7c0caf24148277ddd19c7430b5c90fb6fcb;hb=1ff8419871ea757ae0298aa296bcff9b2ca48561;hp=80c9deca5f35aa3313245d099215d5f387c687b1;hpb=f0f1b3364ae7f48084bdf2837fb979ff59622523;p=linux-2.6 diff --git a/drivers/of/base.c b/drivers/of/base.c index 80c9deca5f..23ffb7c0ca 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -65,6 +65,9 @@ struct property *of_find_property(const struct device_node *np, { struct property *pp; + if (!np) + return NULL; + read_lock(&devtree_lock); for (pp = np->properties; pp != 0; pp = pp->next) { if (of_prop_cmp(pp->name, name) == 0) { @@ -116,6 +119,32 @@ int of_device_is_compatible(const struct device_node *device, } EXPORT_SYMBOL(of_device_is_compatible); +/** + * of_device_is_available - check if a device is available for use + * + * @device: Node to check for availability + * + * Returns 1 if the status property is absent or set to "okay" or "ok", + * 0 otherwise + */ +int of_device_is_available(const struct device_node *device) +{ + const char *status; + int statlen; + + status = of_get_property(device, "status", &statlen); + if (status == NULL) + return 1; + + if (statlen > 0) { + if (!strcmp(status, "okay") || !strcmp(status, "ok")) + return 1; + } + + return 0; +} +EXPORT_SYMBOL(of_device_is_available); + /** * of_get_parent - Get a node's parent if any * @node: Node to get parent