我的内核驱动程序需要访问电池的属性(get_property、set_property)。
问题:如何找到电池的power_supply结构体?
我只发现power_supply_get_by_name
电池可能有不同的名称。我需要检查 power_supply 的类型,但这就是我陷入困境的地方。
直接get_by_type
或get_all_power_supplies
自行检查类型或传递get_power_supply_names
给 power_supply_get_by_name 对我来说都很好。
我想避免在内核中访问文件,那么找到 type="battery" power_supply 的更好方法是什么?
我怀疑我应该每次都再次获取供应,因为它可能会改变或消失/重新出现?在某些情况下,该驱动程序可以每隔几秒钟访问一次电源,因此最好不要花很长时间寻找电池。
答案1
聚会迟到了整整一年。 :) 这是循环电源类的所有对象的基本思想。
#include <linux/power_supply.h>
static int power_supply_printer(struct device *dev, const void *data)
{
struct power_supply *psy = dev_get_drvdata(dev);
(void)data;
printk(KERN_INF "power-supply = %s\n", psy->desc->name);
/* Return 1 if found, 0 if this is not valid. */
return 0;
}
static __init int my_driver_init(void)
{
struct device *dev;
dev = class_find_device(power_supply_class, NULL, NULL /* data*/, power_supply_printer);
...
}
该函数将迭代所有power_suppy_class
驱动程序。注意,只要回调函数返回0,它就会检查该类中的下一个可用设备。