查找类型的 power_supply

查找类型的 power_supply

我的内核驱动程序需要访问电池的属性(get_property、set_property)。
问题:如何找到电池的power_supply结构体?

我只发现power_supply_get_by_name电池可能有不同的名称。我需要检查 power_supply 的类型,但这就是我陷入困境的地方。

直接get_by_typeget_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,它就会检查该类中的下一个可用设备。

相关内容