Linux 电压和电流调节器框架

关于

此框架旨在提供一个标准的内核接口来控制电压和电流调节器。

其目的是允许系统动态控制调节器的功率输出,以节省功耗并延长电池寿命。 这适用于电压调节器(电压输出可控)和电流吸收器(电流限制可控)。

  1. 2008 Wolfson Microelectronics PLC.

作者:Liam Girdwood <lrg@slimlogic.co.uk>

命名法

本文档中使用的一些术语

  • 调节器
    • 为其他设备供电的电子设备。 大多数调节器可以启用和禁用其输出,而一些调节器可以控制其输出电压和/或电流。

      输入电压 -> 调节器 -> 输出电压

  • PMIC
    • 电源管理 IC。 包含多个调节器并且通常包含其他子系统的 IC。

  • 消费者
    • 由调节器供电的电子设备。 消费者可以分为两种类型:-

      静态:消费者不改变其供电电压或电流限制。 它只需要启用或禁用其电源。 其供电电压由硬件、引导加载程序、固件或内核板初始化代码设置。

      动态:消费者需要更改其供电电压或电流限制以满足操作需求。

  • 电源域
    • 电子电路,其输入电源由调节器、开关或其他电源域的输出功率提供。

      供电调节器可能位于开关之后。 即

      Regulator -+-> Switch-1 -+-> Switch-2 --> [Consumer A]
                 |             |
                 |             +-> [Consumer B], [Consumer C]
                 |
                 +-> [Consumer D], [Consumer E]
      

      这是一个调节器和三个电源域

      • 域 1:开关-1,消费者 D & E。

      • 域 2:开关-2,消费者 B & C。

      • 域 3:消费者 A。

      这表示一种“供应”关系

      域-1 --> 域-2 --> 域-3。

      一个电源域可能具有由其他调节器供电的调节器。 即

      Regulator-1 -+-> Regulator-2 -+-> [Consumer A]
                   |
                   +-> [Consumer B]
      

      这给了我们两个调节器和两个电源域

      • 域 1:调节器-2,消费者 B。

      • 域 2:消费者 A。

      以及一种“供应”关系

      域-1 --> 域-2

  • 约束
    • 约束用于定义性能和硬件保护的功率级别。 约束存在于三个级别

      调节器级别:这由调节器硬件操作参数定义,并在调节器数据表中指定。 即

      • 电压输出范围为 800mV -> 3500mV。

      • 调节器电流输出限制为 20mA @ 5V,但为 10mA @ 10V。

      电源域级别:这在软件中由内核级板初始化代码定义。 它用于将电源域限制在特定的功率范围内。 即

      • 域-1 电压为 3300mV

      • 域-2 电压为 1400mV -> 1600mV

      • 域-3 电流限制为 0mA -> 20mA。

      消费者级别:这由消费者驱动程序动态设置电压或电流限制级别定义。

      例如,一个消费者背光驱动程序请求电流从 5mA 增加到 10mA,以增加 LCD 照明。 这通过以下级别传递:-

      消费者:需要增加 LCD 亮度。 查找并请求亮度表中下一个电流 mA 值(消费者驱动程序可以基于相同的参考设备在几种不同的个性上使用)。

      电源域:新电流限制是否在域的操作限制范围内,适用于此域和系统状态(例如,电池电量、USB 电源)

      调节器域:新电流限制是否在输入/输出电压的调节器操作参数范围内。

      如果调节器请求通过所有约束测试,则应用新的调节器值。

设计

该框架是为基于 SoC 的设备设计和定位的,但也可能与非 SoC 设备相关,并分为以下四个接口:-

  1. 消费者驱动程序接口。

    这使用类似于内核时钟接口的 API,消费者驱动程序可以获取和释放调节器(就像它们使用时钟一样),并获取/设置电压、电流限制、模式、启用和禁用。 这应该允许消费者完全控制其供电电压和电流限制。 如果不使用,这也会编译出来,因此驱动程序可以在没有基于调节器的电源控制的系统中重用。

  2. 调节器驱动程序接口。

    这允许调节器驱动程序注册其调节器并向核心提供操作。 它还具有一个通知器调用链,用于将调节器事件传播给客户端。

  3. 机器接口。

    此接口用于特定于机器的代码,并允许为每个调节器创建电压/电流域(带有约束)。 它可以提供调节器约束,以防止由于有缺陷的客户端驱动程序导致的过压或过流造成的设备损坏。 它还允许创建调节器树,其中一些调节器由其他调节器供电(类似于时钟树)。

  4. 用户空间 ABI。

    该框架还通过 sysfs 向用户空间导出大量有用的电压/电流/opmode 数据。 这可用于帮助监视设备功耗和状态。

    请参阅 Documentation/ABI/testing/sysfs-class-regulator