[RK3288][Android6.0] DeviceTree中的status属性使用规则

时间:2022-04-21 17:55:33

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

有看到网友在讨论device tree中的status到底该如何设置,默认状态是什么,知识点如下:

  1. 默认情况下不设置status属性的话表示此节点的功能是enable的
  2. 如果要设置status,那么值必须是”okay”或者”ok”
  3. 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;
}

参考:
Linux Device Tree: What those status = “okay” are about