summaryrefslogtreecommitdiffstats
path: root/drivers/of
diff options
context:
space:
mode:
authorXiubo Li <Li.Xiubo@freescale.com>2014-01-13 11:07:28 +0800
committerGrant Likely <grant.likely@linaro.org>2014-01-16 17:29:24 +0000
commit42ccd781bb206804501ff490fd771bb940ca9969 (patch)
tree9b28cb56cbbd04c2dc0d0f426050ef0241df71e2 /drivers/of
parent482c43419fc204b4b658fa4acb80cd502e5fcbac (diff)
downloadlinux-42ccd781bb206804501ff490fd771bb940ca9969.tar.gz
linux-42ccd781bb206804501ff490fd771bb940ca9969.tar.bz2
linux-42ccd781bb206804501ff490fd771bb940ca9969.zip
of: Fix __of_device_is_available check
From IEEE 1275, there defined a standard 'status' property indicating the operational status of one device. The 'status' property has four possible values: 'okay/ok', 'disabled', 'fail' and 'fail-xxx'. If it is absent, that means the status of the device is unknown or okay. The __of_device_is_available checks the state of the 'status' property of a device. If the property is absent or set to 'okay/ok', it returns 1. Otherwise it returns 0. While in __of_device_is_available: > status = of_get_property(device, "status", &statlen); > if (status == NULL) > return 1; The status value returned from 'of_get_property()' will be NULL in two cases: Firstly: the 'device' value (device node) is NULL. Secondly: the 'status' property is actaully not exist. If the device node is NULL, the __of_device_is_available will return true, that will mean the absent state of the 'status' property. So this add the device node check before checking the 'status' property's state, and if the device node is not exist, 0 will be returned. Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com> Signed-off-by: Grant Likely <grant.likely@linaro.org>
Diffstat (limited to 'drivers/of')
-rw-r--r--drivers/of/base.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c
index f807d0edabf3..ba195fbce4c6 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -415,6 +415,9 @@ static int __of_device_is_available(const struct device_node *device)
const char *status;
int statlen;
+ if (!device)
+ return 0;
+
status = __of_get_property(device, "status", &statlen);
if (status == NULL)
return 1;