charger-manager.c
1.概念
Regulator : 电源芯片, 比如电压转换芯片
Consumer : 消费者,使用电源的部件, Regulator是给Consumer供电的
machine : 单板,上面焊接有Regulator和Consumer
Constraints : 约束, 比如某个电源管理芯片输出的电压范围
Supply : 提供电源的部件, Regulator就是一个Supply; Regulator A可以给Regulator B供电, 那么Regulator B的Supply就是A
regulaor :常用的为电压调节器,总共有以下几类
ldo :输入/输出电压差别不大时使用,电路简单,转换效率较低,如果输入/输出电压相差较大损耗就高,造成芯片发烫
dcdc:输入/输出压差别较大时使用,电路比较复杂,转换效率高
pmu : 集成了多个ldo、dcdc,可以工资每个单元电压的输出大小
2.framwork
主要作用: 给外设(consumer)供电
framwork层次:主要分为 machine、regulator、consumer三部分
machine
(1) 指定了regulaor和consumer的对应关系
(consumer dev的name和给consumer 引脚供电的引脚名字)
(2) 约束调节:regulator的电压范围等等
驱动要做的事情:
注册一个platform_device: 在它的私有数据里指定regulator和consume的对应关系(这个电源芯片给哪一个部件供电)
指定约束条件(比如电压范围)
regulator
电源芯片本身的驱动实现的fops
.enable
.disable
.set_votage
.set_current
regulator_register 后在 regulator_list 里就有了consumer dev的name和给consumer 引脚供电的引脚名字
驱动要做的事情:
注册一个platform_driver: 在它的probe函数里分配、设置、注册一个regulator
“设置”里要做的事情: 实现regulator的操作, 比如enable, disable, set_voltage
consumer
使用即可
regulator_get, regulator_enable, regulator_disable, regulator_set_voltage
regulator_get(struct device *dev, const char *id) // dev中包含了name,id指定了这个regulator给consumer那个电源引脚供电
3.regulator_register流程分析
// 分配regulator_dev
rdev = kzalloc(sizeof(struct regulator_dev), GFP_KERNEL);
/* set regulator constraints */
set_machine_constraints
add_regulator_attributes
/* add consumers devices */
set_consumer_device_supply
//在regulator_map_list链表里生成一项regulator_map: 它里面有dev_name(consumer的名字),supply(cosumer的电源引脚名字)
// 把regulator_dev放入regulator_list
list_add(&rdev->list, ®ulator_list);