Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
有看到网友在讨论device tree中的status到底该如何设置,默认状态是什么,知识点如下:
- 默认情况下不设置status属性的话表示此节点的功能是enable的
- 如果要设置status,那么值必须是”okay”或者”ok”
- dts里的status属性值会覆盖dtsi中的值(编译dtb的时候会覆盖)
对应代码在kernel/drivers/of/base.c:
/**
* 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)
{
unsigned long flags;
int res;
raw_spin_lock_irqsave(&devtree_lock, flags);
res = __of_device_is_available(device);
raw_spin_unlock_irqrestore(&devtree_lock, flags);
return res;
}
__of_device_is_available():
/**
* __of_device_is_available - check if a device is available for use
*
* @device: Node to check for availability, with locks already held
*
* Returns 1 if the status property is absent or set to "okay" or "ok",
* 0 otherwise
*/
static 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;
}