[Linux 驱动] -- 电源管理芯片之 Regulator 用法 与具体使用实例

一、regulator 用法

1.1、 电源管理 regulator 分成静态和动态:静态不需要改变电压电流,只需要开关电源,用在 BootLoader、frameware、kernel board 阶段等;动态是根据需要改变电压电流。

1.2、 获取设备的 regulator、dev 为驱动对应的设备指针,可以用NULL,Vcc 为电源的 ID,内核会查表找到电源 ID 对应的 regulator。如:struct regulator *ldo; ldo = regualtor_get(NULL, "act_ldo5");

regulator = regulator_get(dev, "Vcc");  //获取设备 regulator

1.3、 regulator_put(regulator); //释放regulator

1.4、 int regulator_enable(regulator); //使能电源输出。调用之前也可能已经使能了。所以用下面函数判断。

1.5、 int regulator_is_enabled(regulator); //判断是否使能, >0 表示已经使能。

1.6、 int regulator_disable(regulator); //关闭电源输出。但是未必立刻关闭,有可能存在电源共享的场景。

1.7、int regulator_force_disable(regulator); //强制关闭电源。

1.8、int regulator_set_volatage(regulator, min_uV, max_uV); //调节电压的最小和最大输出。如果接下去调用 regulator_enable,那么这个值马上就生效,如果调用 regulator_disable 等其他的,要等到下一次调用 regulator_enable 时才能生效。

1.9、int regulator_get_voltage(regulator); //通过此接口获取配置的输出电压。

实例如下:

regulator_set_voltage(ldo_28, 2800000, 2800000); //设置电压
regulator_enable(ldo_28); //使能
int value = regulator_get_voltage(ldo_28); //获取电压值

regulator_put(ldo_28); //释放

二、具体使用实例

2.1 设备树配置如下

ldo8: ldo8 {
        regulator-compatible = "LDO8";
        regulator-name = "ldo8_1v5";
        regulator-min-microvolt = <1500000>;
        regulator-max-microvolt = <1600000>;
        //regulator-boot-on;   //boot 时打开
        //regulator-always-on; //一直打开
        sleep-slot = <15>;
        poweron-slot = <0x20>;
};

2.2 驱动源码如下

//打开
struct regulator *reg;
reg = devm_regulator_get(&i2c->dev, "ldo8_1v5");
regulator_set_volatage(reg, 1500000, 1500000);
regulator_enable(reg);

//关闭
struct regulator *reg;
reg = devm_regualtor_get(&i2c->dev, "ldo8_1v5");
regulator_disable(reg);

注:关于regulator 的详细介绍,可参考 -- 蜗窝科技 -- Linux Regulator Framework 相关章节

猜你喜欢

转载自blog.csdn.net/u014674293/article/details/113866110
今日推荐