Linux 内核 regulator 机制

本文详细介绍了Linux内核中的regulator机制,包括regulator的载体、regulator的抽象概念以及其实现方式。主要内容涉及regulator在硬件层面的连接,如CPU与TI电源管理芯片的交互,以及regulator系统在machine、supply和consumer部分的划分。文章还讨论了regulator的注册过程和消费者如何使用regulator操作函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一部分 regulator系统的总体概览
在这里插入图片描述

彩色框代表最终的regulator抽象,它的前一级表示regulator的载体(可以是PMIC、CPU、等等)。
a)CPU通过I2C controller,连接一个降压控制器(TI tps51632),该控制器输出名称为“vdd-cpu”的电压,就称作vdd-cpu regulator

b)CPU通过I2C controller,连接一个前端电源管理芯片(TI tps65090),该芯片除了具备充电管理功能外,内置了多个regulator,例如dcdc1、dcdc2等等。

c)CPU通过I2C controller,连接另一个电源管理芯片(TI tps65913), 该芯片具有两个功能:GPIO输出和PMIC。PMIC内置了多个regulator,如vddio-ddr、vdd-core等等。(由是观之, 电源管理芯片也是挂在i2c上的)

d)CPU内部也集成了一些regulator,如vdd_ac_bat等等。

regulator是虚拟出的设备,是supply,可用consumer上的受电引脚表示(比如vdd),而consumer则是消耗此supply的设备(比如"lcd")。
regulator系统分为machine部分,supply部分和consumer部分。machine部分主要描述了单板的constraints和consumer_supply的对应关系

第一部分 machine部分的描述(DTS形式)

1)tps51632 下有个regulator

   2: i2c@7000d000 {
   3:         status = "okay";
   4:         clock-frequency = <400000>;
   6:         tps51632@43 {
   7:                 compatible = "ti,tps51632";
   8:                 reg = <0x43>;
   9:                 regulator-name = "vdd-cpu";
  10:                 regulator-min-microvolt = <500000>;
  11:                 regulator-max-microvolt = <1520000>;
  12:                 regulator-boot-on;
  13:                 regulator-always-on;
  14:         };
  16: }

tps51632下面以“regulator-”为前缀的字段,是regulator特有的字段。
kernel在初始化时,只会为二级node(即“/”下面的节点,本文的例子是“i2c@7000d000”)创建platform设备,至于三级node(这里的“tps51632@43”),则由其bus(i2c)创建。

2)tps65090
  tps65090包含charger和regulator,我们看看其DTS怎么写的:

 i2c@7000d000 {
   2:         status = "okay";
   3:         ...
   4:  
   5:         tps65090@48 {
   6:                 compatible = "ti,tps65090";
   7:                 reg = <0x48>;
   9:  
  10:                 charger: charger {                   
  11:                         compatible = "ti,tps65090-charger";
  12:                         ti,enable-low-current-chrg;
  13:                 };
  14:                 
  15:                 regulators {                      // 两个regulator引脚
  16:                         tps65090_dcdc1_reg: dcdc1 {
  17:                                 regulator-name = "vdd-sys-5v0";
  18:                                 regulator-always-on;
  19:                                 regulator-boot-on;
  20:                         };
  21:                 
  22:                         tps65090_dcdc2_reg: dcdc2 {
  23:                                 regulator-name = "vdd-sys-3v3";
  24:                                 regulator-always-on;
  25:                                 regulator-boot-on;
  26:                         };
  28:                 }
  29:         }
  30: }

驱动处理部分代码“drivers/mfd/tps65090.c”、“drivers/power/tps65090-charger.c”和“drivers/regulator/tps65090-regulator.c”,这里面还涉及了MFD(multi-function device,多功能设备)。

虽然这里的regulators没有compatible字段,也会创建相应的 device(具体可参考“drivers/mfd/tps65090.c”)
再来看regulators中子node----regulator,由于数量比较多,就没必要创建 device了。(引脚没必要创建platform_device)

第二部分 regulator的注册

注册主要传入2个参数,regulator_desc 和 regulator_config, regulator_des

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值