一、设备电源管理: 两种类型
1、系统睡眠模型:
设备驱动作为系统一部分,会跟随系统进入低功耗状态,suspend (suspend-to-ram)
一些驱动程序可以管理硬件的唤醒事件, 这一特性通过/sys/device/…/power/wakeup文件来开启和关闭
在linxu中,通过 cat /sys/power/state可以看到当前设备支持的节能模式,一般有:
standby:cpu处于浅睡模式,主要针对于cpu功耗
mem:suspend to ram (STR): deep sleep睡眠 ,数据存ram,恢复快
disk:suspend to disk (STD) :hibenation休眠,关机,数据存硬盘,恢复慢
freeze:处理器进入空闲状态,唤醒最快
需要设置以上模式,只需echo mem > /sys/power/state即可
2、runtime电源管理模型:
允许设备在系统运行阶段进入低功耗状态,独立于其他的电源管理活动,不过只有所有的子设备进入suspend之后,父设备才能进入suspend
它是以模块角度来进行省电的,
它有个usage_count计数,当设备驱动被读写使用时就+1,空闲时就-1;计数大于1时就打开该设备的电源,计数等于时就关闭
二、regulator系统:
1、专门的电源管理芯片控制各个模块的电源,regulator系统就是为这个芯片编写驱动,实现电源管理
2、regulator包括voltage regulator 和 current regulator,一般PMIC(power manager IC)会包含一个或者多个regulator,
3、大多regulator可以enable和disable其输出,还可以控制其输出电压和电流
4、cpu内部会集成一些regulator,还会通过 i2c controller 外接多个regulator,
5、调用注册接口regulator_register/devm_regulator_register进行注册regulator
6、regulator的主要功能,是输出电压电流的调整,由于模拟器件的特性,电压电流的改变是需要一些时间的, 对于一些regulatoe,可工作在不同的模式,这些模式有不同的改变速度,速度越大,功耗越高,
#define REGULATOR_MODE_FAST 0x1
#define REGULATOR_MODE_NORMAL 0x2
#define REGULATOR_MODE_IDLE 0x4
#define REGULATOR_MODE_STANDBY 0x8
不是所有的设备都需要专门的电源IC的,所以有的设备另外配置了电源管理IC,那么就需要通过regulator系统来注册电源管理IC对应的驱动,所以当系统睡眠或该设备睡眠时,这种设备的dev_pm_ops回调接口在实现时,需要调用电源管理IC驱动的接口来设置电压/电流的大小/关闭等状态,也就是说可能不仅仅是实现ON和OFF两个状态,还需要实现IC输出不同大小的状态,比如输出1A、2A、3A三种不同电流的状态。
还有一些简单的设备是不需要配置电源管理IC的,所以当系统睡眠或该设备睡眠时,这种设备的dev_pm_ops回调接口在实现时,实现ON和OFF两个状态就可以了