Linux 电压和电流调节器框架

关于

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

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

  1. 2008 Wolfson Microelectronics PLC.

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

术语

本文档中使用的一些术语

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

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

  • PMIC
    • 电源管理 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。

      这表示一种“供电”关系

      Domain-1 --> Domain-2 --> Domain-3.

      一个电源域可能包含由其他调节器供电的调节器。例如:

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

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

      • 域 1:调节器-2,用电设备 B。

      • 域 2:用电设备 A。

      以及一种“供电”关系

      Domain-1 --> Domain-2

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

      调节器层面:这由调节器硬件操作参数定义,并指定在调节器数据手册中。例如:

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

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

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

      • 域-1 电压为 3300mV

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

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

      用电设备层面:这由用电设备驱动程序动态设置电压或电流限制级别来定义。

      例如,用电设备背光驱动程序要求将电流从 5mA 增加到 10mA 以提高 LCD 照明。这通过以下层面传递:-

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

      电源域:新的电流限制是否在此电源域和系统状态(例如电池供电、USB 供电)的域操作限制内?

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

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

设计

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

  1. 用电设备驱动程序接口。

    这使用与内核时钟接口类似的 API,用电设备驱动程序可以获取和释放调节器(就像它们当前处理时钟一样),并获取/设置电压、电流限制、模式、启用和禁用。这应允许用电设备完全控制其供电电压和电流限制。如果未使用,此功能也会被编译排除,因此驱动程序可以在没有基于调节器的电源控制的系统中重复使用。

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

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

  3. 机器接口。

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

  4. 用户空间 ABI。

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