内核ACPI函数API之acpi_dev_present

内核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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值