内核ACPI函数API之acpi_dev_present
bool acpi_dev_present(const char *hid, const char *uid, s64 hrv) 这个函数用于查找形参指定
hid/uid/drv 的device是否存在,acpi_dev_found 这个函数同样也用于查找acpi device,却别在于acpi_device_present 查找的device 必须在dsdt table中,并且没有disable。而acpi_dev_fount 只要device在dsdt table中就行,不管是enable 还是disable
其使用的例程如下:
for (i = 0; i < ARRAY_SIZE(acpi_ac_blacklist); i++)
if (acpi_dev_present(acpi_ac_blacklist[i].hid, "1",
acpi_ac_blacklist[i].hrv)) {
pr_info(PREFIX "AC: found native %s PMIC, not loading\n",
acpi_ac_blacklist[i].hid);
return -ENODEV;
}
这边code 遍历查找是否存在acpi_ac_blacklist 中定义的HID 为INT33F4和INT34D3 的设备
static const struct acpi_ac_bl acpi_ac_blacklist[] = {
{ "INT33F4", -1 }, /* X-Powers AXP288 PMIC */
{ "INT34D3", 3 }, /* Intel Cherrytrail Whiskey Cove PMIC */
};
其源码分析如下:
bool acpi_dev_present(const char *hid, const char *uid, s64 hrv)
{
#这里在查找acpi_device的时候会填充一个acpi_dev_match_info 的结构体,在比较的时候
#分别比较这个结构体中的成员变量是否相等
struct acpi_dev_match_info match = {};
struct device *dev;
#给match 结构体赋值
strlcpy(match.hid[0].id, hid, sizeof(match.hid[0].id));
match.uid = uid;
match.hrv = hrv;
#原来最终还是通过bus_find_device #来查找设备,这里比较形参指定的device是否找到的函数是
#acpi_dev_match_cb
dev = bus_find_device(&acpi_bus_type, NULL, &match, acpi_dev_match_cb);
#返回true or faild 分别表示dev是否被找到
return !!dev;
}
内核ACPI函数API之acpi_dev_present
最新推荐文章于 2021-07-09 04:53:46 发布