电压和电流调节器 API

作者:

Liam Girdwood

作者:

Mark Brown

简介

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

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

请注意,在 Linux 内核源代码 Documentation/power/regulator 下提供了其他(且目前更完整的)文档。

词汇表

调节器 API 使用了一些可能不熟悉的术语

调节器

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

消费者

消耗调节器提供的电力的电子设备。这些设备可以是静态的,仅需要固定的电源,也可以是动态的,需要在运行时对调节器进行主动管理。

电源域

由给定调节器供电的电子电路,包括调节器和所有消费者设备。调节器的配置在电路中的所有组件之间共享。

电源管理集成电路 (PMIC)

一个包含多个调节器并且通常还包含其他子系统的 IC。在嵌入式系统中,主 PMIC 通常等效于台式系统中的 PSU 和南桥的组合。

消费者驱动程序接口

这提供了类似于内核时钟框架的 API。消费者驱动程序使用 getput 操作来获取和释放调节器。提供了 enabledisable 调节器的函数,以及获取和设置调节器运行时参数的函数。

当请求调节器时,消费者使用其电源的符号名称,例如“Vcc”,这些名称由机器接口映射到实际的调节器设备。

当调节器框架不使用时,会提供此 API 的存根版本,以尽量减少使用 ifdefs 的需要。

启用和禁用

调节器 API 提供对调节器的引用计数启用和禁用。消费者设备使用 regulator_enable()regulator_disable() 函数来启用和禁用调节器。对这两个函数的调用必须是平衡的。

请注意,由于多个消费者可能正在使用调节器,并且机器约束可能不允许禁用调节器,因此不能保证调用 regulator_disable() 实际上会导致禁用调节器提供的电源。消费者驱动程序应假定调节器可能始终处于启用状态。

配置

某些消费者设备可能需要能够动态配置其电源。例如,MMC 驱动程序可能需要为其卡选择正确的操作电压。这可以在调节器启用或禁用时完成。

regulator_set_voltage()regulator_set_current_limit() 函数为此提供主要接口。两者都接受电压和电流范围,支持不需要特定值的驱动程序(例如,CPU 频率缩放通常允许 CPU 在较低频率下使用更广泛的电源电压范围,但不要求降低电源电压)。如果需要精确值,则最小值和最大值应相同。

回调

也可以为诸如调节失败之类的事件注册回调。

调节器驱动程序接口

调节器芯片的驱动程序向调节器核心注册调节器,向核心提供操作结构。通知器接口允许将错误情况报告给核心。

注册应由平台完成的显式设置触发,为调节器提供一个包含约束和电源信息的 struct regulator_init_data

机器接口

此接口提供了一种定义调节器如何在给定系统上连接到消费者以及系统的有效操作参数的方法。

电源

调节器电源使用 regulator_consumer_supply 结构指定。这在驱动程序注册时作为机器约束的一部分完成。

约束

除了定义连接外,机器接口还提供了定义允许客户端执行的操作和可以设置的参数的约束。这是必需的,因为通常调节器设备将提供比在给定系统上安全使用的更大的灵活性,例如支持高于消费者额定值的电源电压。

这是通过在驱动程序注册时提供一个 struct regulation_constraints 来完成的。

约束还可以指定调节器的初始配置,这对于与静态消费者一起使用特别有用。

API 参考

由于内核文档框架的限制以及源代码的现有布局,此处记录了整个调节器 API。

struct pre_voltage_change_data

与 PRE_VOLTAGE_CHANGE 事件一起发送的数据

定义:

struct pre_voltage_change_data {
    unsigned long old_uV;
    unsigned long min_uV;
    unsigned long max_uV;
};

成员

old_uV

更改前的当前电压。

min_uV

我们将要更改到的最小电压。

max_uV

我们将要更改到的最大电压。

struct regulator_bulk_data

用于批量稳压器操作的数据。

定义:

struct regulator_bulk_data {
    const char *supply;
    struct regulator *consumer;
    int init_load_uA;
};

成员

supply

电源的名称。在使用批量稳压器 API 之前由用户初始化。

consumer

电源的稳压器消费者。这将由批量 API 管理。

init_load_uA

在获取稳压器之后,将使用此负载调用 regulator_set_load()。在使用批量稳压器 API 之前由用户初始化。

描述

稳压器 API 提供一系列 regulator_bulk_() API 调用,方便需要多个电源的消费者。此结构用于管理这些调用的数据。

struct regulator_state

低功耗系统状态期间的稳压器状态

定义:

struct regulator_state {
    int uV;
    int min_uV;
    int max_uV;
    unsigned int mode;
    int enabled;
    bool changeable;
};

成员

uV

挂起期间的默认工作电压,可以在 <min_uV, max_uV> 之间调整。

min_uV

可以设置最小挂起电压。

max_uV

可以设置最大挂起电压。

mode

挂起期间的工作模式。

enabled

挂起期间的操作。- DO_NOTHING_IN_SUSPEND - DISABLE_IN_SUSPEND - ENABLE_IN_SUSPEND

changeable

此状态是否可以在启用/禁用之间切换,

描述

这描述了在系统范围的低功耗状态期间稳压器的状态。必须为配置设置启用或禁用其中一个。

struct regulation_constraints

稳压器运行约束。

定义:

struct regulation_constraints {
    const char *name;
    int min_uV;
    int max_uV;
    int uV_offset;
    int min_uA;
    int max_uA;
    int ilim_uA;
    int system_load;
    u32 *max_spread;
    int max_uV_step;
    unsigned int valid_modes_mask;
    unsigned int valid_ops_mask;
    int input_uV;
    struct regulator_state state_disk;
    struct regulator_state state_mem;
    struct regulator_state state_standby;
    struct notification_limit over_curr_limits;
    struct notification_limit over_voltage_limits;
    struct notification_limit under_voltage_limits;
    struct notification_limit temp_limits;
    suspend_state_t initial_state;
    unsigned int initial_mode;
    unsigned int ramp_delay;
    unsigned int settling_time;
    unsigned int settling_time_up;
    unsigned int settling_time_down;
    unsigned int enable_time;
    unsigned int uv_less_critical_window_ms;
    unsigned int active_discharge;
    unsigned always_on:1;
    unsigned boot_on:1;
    unsigned apply_uV:1;
    unsigned ramp_disable:1;
    unsigned soft_start:1;
    unsigned pull_down:1;
    unsigned system_critical:1;
    unsigned over_current_protection:1;
    unsigned over_current_detection:1;
    unsigned over_voltage_detection:1;
    unsigned under_voltage_detection:1;
    unsigned over_temp_detection:1;
};

成员

name

约束的描述性名称,用于显示目的。

min_uV

消费者可以设置的最小电压。

max_uV

消费者可以设置的最大电压。

uV_offset

从消费者施加到电压的偏移,以补偿电压下降。

min_uA

消费者可以设置的最小电流。

max_uA

消费者可以设置的最大电流。

ilim_uA

最大输入电流。

system_load

未被任何消费者请求捕获的负载。

max_spread

耦合稳压器之间的最大可能差值

max_uV_step

电压的最大可能阶跃变化

valid_modes_mask

消费者可以配置的模式的掩码。

valid_ops_mask

消费者可以执行的操作。

input_uV

当由另一个稳压器供电时,稳压器的输入电压。

state_disk

当系统在磁盘模式下挂起时,稳压器的状态。

state_mem

当系统在内存模式下挂起时,稳压器的状态。

state_standby

当系统在待机模式下挂起时,稳压器的状态。

over_curr_limits

作用于过电流的限制。

over_voltage_limits

作用于过电压的限制。

under_voltage_limits

作用于欠电压的限制。

temp_limits

作用于过温的限制。

initial_state

默认设置的挂起状态。

initial_mode

启动时设置的模式。

ramp_delay

电压变化后稳定下来的时间(单位:uV/us)

settling_time

电压变化为非线性时,电压变化后稳定下来的时间(单位:微秒)。

settling_time_up

电压增加为非线性时,电压增加后稳定下来的时间(单位:微秒)。

settling_time_down

电压减少为非线性时,电压减少后稳定下来的时间(单位:微秒)。

enable_time

导轨的开启时间(单位:微秒)

uv_less_critical_window_ms

指定在发生临界欠压 (UV) 事件后,系统可以安全执行不太重要的操作(例如,日志记录)的时间窗口(以毫秒为单位)。在此时间窗口之后,应执行更关键的操作(例如,防止硬件损坏)。

active_discharge

启用/禁用主动放电。枚举 regulator_active_discharge 值用于初始化。

always_on

如果稳压器永远不应禁用,则设置此项。

boot_on

如果稳压器在系统初始启动时已启用,则设置此项。如果硬件或引导加载程序未启用稳压器,则在应用约束时将启用它。

apply_uV

初始化时应用电压约束。

ramp_disable

在初始化或设置电压时禁用斜坡延迟。

soft_start

启用软启动,使电压缓慢上升。

pull_down

禁用稳压器时启用下拉。

system_critical

如果稳压器对于系统稳定或功能至关重要,则设置此项。

over_current_protection

在过流事件时自动禁用。

over_current_detection

配置过流限制。

over_voltage_detection

配置过压限制。

under_voltage_detection

配置欠压限制。

over_temp_detection

配置过温限制。

描述

此结构描述稳压器和电路板/机器特定的约束。

struct regulator_consumer_supply

电源 -> 设备映射

定义:

struct regulator_consumer_supply {
    const char *dev_name;
    const char *supply;
};

成员

dev_name

消费者的 dev_name() 的结果。

supply

电源的名称。

描述

这会将电源名称映射到设备。使用 dev_name 可以支持延迟提供 struct device 的总线,例如 I2C。

struct regulator_init_data

稳压器平台初始化数据。

定义:

struct regulator_init_data {
    const char *supply_regulator;
    struct regulation_constraints constraints;
    int num_consumer_supplies;
    struct regulator_consumer_supply *consumer_supplies;
    void *driver_data;
};

成员

supply_regulator

父稳压器。使用稳压器名称指定,该名称显示在 sysfs 的 name 字段中,可以使用约束字段 'name' 显式设置。

constraints

约束。必须为稳压器指定这些约束才能使用。

num_consumer_supplies

消费者设备电源的数量。

consumer_supplies

消费者设备电源配置。

driver_data

传递给 regulator_init 的数据。

描述

初始化约束、我们的电源和消费者电源。

struct regulator_ops

稳压器操作。

定义:

struct regulator_ops {
    int (*list_voltage) (struct regulator_dev *, unsigned selector);
    int (*set_voltage) (struct regulator_dev *, int min_uV, int max_uV, unsigned *selector);
    int (*map_voltage)(struct regulator_dev *, int min_uV, int max_uV);
    int (*set_voltage_sel) (struct regulator_dev *, unsigned selector);
    int (*get_voltage) (struct regulator_dev *);
    int (*get_voltage_sel) (struct regulator_dev *);
    int (*set_current_limit) (struct regulator_dev *, int min_uA, int max_uA);
    int (*get_current_limit) (struct regulator_dev *);
    int (*set_input_current_limit) (struct regulator_dev *, int lim_uA);
    int (*set_over_current_protection)(struct regulator_dev *, int lim_uA, int severity, bool enable);
    int (*set_over_voltage_protection)(struct regulator_dev *, int lim_uV, int severity, bool enable);
    int (*set_under_voltage_protection)(struct regulator_dev *, int lim_uV, int severity, bool enable);
    int (*set_thermal_protection)(struct regulator_dev *, int lim, int severity, bool enable);
    int (*set_active_discharge)(struct regulator_dev *, bool enable);
    int (*enable) (struct regulator_dev *);
    int (*disable) (struct regulator_dev *);
    int (*is_enabled) (struct regulator_dev *);
    int (*set_mode) (struct regulator_dev *, unsigned int mode);
    unsigned int (*get_mode) (struct regulator_dev *);
    int (*get_error_flags)(struct regulator_dev *, unsigned int *flags);
    int (*enable_time) (struct regulator_dev *);
    int (*set_ramp_delay) (struct regulator_dev *, int ramp_delay);
    int (*set_voltage_time) (struct regulator_dev *, int old_uV, int new_uV);
    int (*set_voltage_time_sel) (struct regulator_dev *,unsigned int old_selector, unsigned int new_selector);
    int (*set_soft_start) (struct regulator_dev *);
    int (*get_status)(struct regulator_dev *);
    unsigned int (*get_optimum_mode) (struct regulator_dev *, int input_uV, int output_uV, int load_uA);
    int (*set_load)(struct regulator_dev *, int load_uA);
    int (*set_bypass)(struct regulator_dev *dev, bool enable);
    int (*get_bypass)(struct regulator_dev *dev, bool *enable);
    int (*set_suspend_voltage) (struct regulator_dev *, int uV);
    int (*set_suspend_enable) (struct regulator_dev *);
    int (*set_suspend_disable) (struct regulator_dev *);
    int (*set_suspend_mode) (struct regulator_dev *, unsigned int mode);
    int (*resume)(struct regulator_dev *rdev);
    int (*set_pull_down) (struct regulator_dev *);
};

成员

list_voltage

返回支持的电压之一,单位为微伏;如果选择器指示此系统上不可用的电压,则返回零;或者返回负 errno。选择器的范围从零到小于 regulator_desc.n_voltages 的值。可以按任何顺序报告电压。

set_voltage

在指定范围内设置稳压器的电压。驱动程序应选择最接近 min_uV 的电压。

map_voltage

将电压转换为选择器

set_voltage_sel

使用指定选择器设置稳压器的电压。

get_voltage

返回稳压器的当前配置电压;如果稳压器在启动时无法读取且尚未设置,则返回 -ENOTRECOVERABLE。

get_voltage_sel

返回稳压器的当前配置电压选择器;如果稳压器在启动时无法读取且尚未设置,则返回 -ENOTRECOVERABLE。

set_current_limit

为限流稳压器配置限制。驱动程序应选择最接近 max_uA 的电流。

get_current_limit

获取限流稳压器的配置限制。

set_input_current_limit

配置输入限制。

set_over_current_protection

支持启用和设置过流情况检测的限制。可以为三个严重级别配置检测。

  • REGULATOR_SEVERITY_PROT 应自动关闭稳压器。

  • REGULATOR_SEVERITY_ERR 应指示过流情况是

    由不可恢复的错误导致,但硬件不执行自动关闭。

  • REGULATOR_SEVERITY_WARN 应指示硬件

    仍然认为没有损坏,但需要执行特定于电路板的恢复操作的情况。如果 lim_uA 为 0,则不应更改限制,而应仅根据请求启用/禁用检测。

set_over_voltage_protection

支持启用和设置过压情况检测的限制。可以为与过流保护相同的严重级别配置检测。单位为 uV。

set_under_voltage_protection

支持启用和设置欠压情况检测的限制。可以为与过流保护相同的严重级别配置检测。单位为 uV。

set_thermal_protection

支持启用和设置过温情况检测的限制。可以为与过流保护相同的严重级别配置检测。单位为开尔文度。

set_active_discharge

设置稳压器的主动放电启用/禁用。

enable

将稳压器配置为已启用。

disable

将稳压器配置为已禁用。

is_enabled

如果稳压器已启用,则返回 1,否则返回 0。也可能返回负 errno。

set_mode

设置稳压器的配置工作模式。

get_mode

获取稳压器的配置工作模式。

get_error_flags

获取稳压器的当前错误。

enable_time

稳压器电压输出电压在启用后稳定所需的时间,单位为微秒。

set_ramp_delay

设置稳压器的斜坡延迟。驱动程序应选择等于或小于(最接近)ramp_delay 的斜坡延迟。

set_voltage_time

稳压器电压输出电压在设置为新值后稳定所需的时间,单位为微秒。该函数接收来自和目标电压作为输入,它应该返回最坏的情况。

set_voltage_time_sel

稳压器电压输出电压在设置为新值后稳定所需的时间,单位为微秒。该函数接收来自和目标电压选择器作为输入,它应该返回最坏的情况。

set_soft_start

启用稳压器的软启动。

get_status

返回稳压器的实际(非配置)状态,作为 REGULATOR_STATUS 值(或负 errno)

get_optimum_mode

获取使用指定参数运行时稳压器的最高效工作模式。

set_load

设置稳压器的负载。

set_bypass

将稳压器设置为旁路模式。

get_bypass

获取稳压器的旁路模式状态。

set_suspend_voltage

设置系统挂起时稳压器的电压。

set_suspend_enable

标记稳压器在系统挂起时启用。

set_suspend_disable

标记稳压器在系统挂起时禁用。

set_suspend_mode

设置系统挂起时稳压器的工作模式。

resume

恢复挂起稳压器的运行。

set_pull_down

配置稳压器在禁用时下拉。

描述

此结构体描述了稳压器芯片驱动程序可以实现的稳压器操作。

struct regulator_desc

静态稳压器描述符

定义:

struct regulator_desc {
    const char *name;
    const char *supply_name;
    const char *of_match;
    bool of_match_full_name;
    const char *regulators_node;
    int (*of_parse_cb)(struct device_node *,const struct regulator_desc *, struct regulator_config *);
    int (*init_cb)(struct regulator_dev *, struct regulator_config *);
    int id;
    unsigned int continuous_voltage_range:1;
    unsigned n_voltages;
    unsigned int n_current_limits;
    const struct regulator_ops *ops;
    int irq;
    enum regulator_type type;
    struct module *owner;
    unsigned int min_uV;
    unsigned int uV_step;
    unsigned int linear_min_sel;
    int fixed_uV;
    unsigned int ramp_delay;
    int min_dropout_uV;
    const struct linear_range *linear_ranges;
    const unsigned int *linear_range_selectors_bitfield;
    int n_linear_ranges;
    const unsigned int *volt_table;
    const unsigned int *curr_table;
    unsigned int vsel_range_reg;
    unsigned int vsel_range_mask;
    bool range_applied_by_vsel;
    unsigned int vsel_reg;
    unsigned int vsel_mask;
    unsigned int vsel_step;
    unsigned int csel_reg;
    unsigned int csel_mask;
    unsigned int apply_reg;
    unsigned int apply_bit;
    unsigned int enable_reg;
    unsigned int enable_mask;
    unsigned int enable_val;
    unsigned int disable_val;
    bool enable_is_inverted;
    unsigned int bypass_reg;
    unsigned int bypass_mask;
    unsigned int bypass_val_on;
    unsigned int bypass_val_off;
    unsigned int active_discharge_on;
    unsigned int active_discharge_off;
    unsigned int active_discharge_mask;
    unsigned int active_discharge_reg;
    unsigned int soft_start_reg;
    unsigned int soft_start_mask;
    unsigned int soft_start_val_on;
    unsigned int pull_down_reg;
    unsigned int pull_down_mask;
    unsigned int pull_down_val_on;
    unsigned int ramp_reg;
    unsigned int ramp_mask;
    const unsigned int *ramp_delay_table;
    unsigned int n_ramp_values;
    unsigned int enable_time;
    unsigned int off_on_delay;
    unsigned int poll_enabled_time;
    unsigned int (*of_map_mode)(unsigned int mode);
};

成员

name

稳压器的标识名称。

supply_name

标识稳压器电源

of_match

用于在 DT 中标识稳压器的名称。

of_match_full_name

一个标志,指示如果存在 of_match 字符串,则应将其与节点 full_name 进行匹配。

regulators_node

包含 DT 中稳压器定义的节点的名称。

of_parse_cb

可选的回调函数,仅当 of_match 存在时才调用。在 init_data 解析期间,将为从 DT 解析的每个稳压器调用此回调函数。传递给回调函数的 regulator_config 将是传递给 regulator_register 的配置的副本,仅对本次特定调用有效。回调函数可以自由更改配置,但不能将其存储以供以后使用。回调函数应在成功时返回 0,或在失败时返回负 ERRNO。

init_cb

解析 init_data 后调用的可选回调函数。允许稳压器执行运行时初始化(如果需要),例如同步稳压器和已解析的约束。回调函数应在成功时返回 0,或在失败时返回负 ERRNO。

id

稳压器的数值标识符。

continuous_voltage_range

指示稳压器是否可以在约束范围内设置任何电压。

n_voltages

可用于 ops.list_voltage() 的选择器数量。

n_current_limits

可用于电流限制的选择器数量

ops

稳压器操作表。

irq

稳压器的中断号。

type

指示稳压器是电压稳压器还是电流稳压器。

owner

提供稳压器的模块,用于引用计数。

min_uV

由最低选择器给出的电压(如果为线性映射)

uV_step

每个选择器电压的增加量(如果为线性映射)

linear_min_sel

开始线性映射的最小选择器

fixed_uV

轨道的固定电压。

ramp_delay

电压变化后稳定下来的时间(单位:uV/us)

min_dropout_uV

此稳压器可以处理的最小压降电压

linear_ranges

可能电压范围的常量表。

linear_range_selectors_bitfield

电压范围选择器的常量表,作为位域值。如果使用可选择的范围,则每个范围必须在此处具有相应的选择器。

n_linear_ranges

linear_ranges(和 linear_range_selectors_bitfield,如果使用)表中的条目数。

volt_table

电压映射表(如果为基于表的映射)

curr_table

电流限制映射表(如果为基于表的映射)

vsel_range_reg

当使用可选择的范围和 regulator_map_*_voltage_*_pickable 函数时,用于范围选择器的寄存器。

vsel_range_mask

用于范围选择器的寄存器位域的掩码

range_applied_by_vsel

一个标志,指示对 vsel_range_reg 的更改仅在写入 vsel_reg 后才生效

vsel_reg

当使用 regulator_map_*_voltage_* 时,用于选择器的寄存器

vsel_mask

用于选择器的寄存器位域的掩码

vsel_step

指定设置电压时选择器步进的分辨率。如果为 0,则不进行步进(直接设置请求的选择器),如果 >0,则稳压器 API 将在每次以指定步进值增大/减小选择器时,逐步升高/降低电压。

csel_reg

使用 regmap set_current_limit 时,用于电流限制选择器的寄存器

csel_mask

用于电流限制选择器的寄存器位域的掩码

apply_reg

当使用 regulator_set_voltage_sel_regmap 时,用于启动输出电压变化的寄存器

apply_bit

当使用 regulator_set_voltage_sel_regmap 时,用于启动输出电压变化的寄存器位域

enable_reg

当使用 regmap 启用/禁用操作时,用于控制的寄存器

enable_mask

当使用 regmap 启用/禁用操作时,用于控制的掩码

enable_val

当使用 regmap 启用/禁用操作时,用于控制的启用值

disable_val

当使用 regmap 启用/禁用操作时,用于控制的禁用值

enable_is_inverted

一个标志,指示当使用 regulator_enable_regmap 及相关 API 时,将 enable_mask 位设置为禁用。

bypass_reg

当使用 regmap set_bypass 时,用于控制的寄存器

bypass_mask

当使用 regmap set_bypass 时,用于控制的掩码

bypass_val_on

当使用 regmap set_bypass 时,用于控制的启用值

bypass_val_off

当使用 regmap set_bypass 时,用于控制的禁用值

active_discharge_on

当使用 regmap set_active_discharge 时,用于控制的禁用值

active_discharge_off

当使用 regmap set_active_discharge 时,用于控制的启用值

active_discharge_mask

当使用 regmap set_active_discharge 时,用于控制的掩码

active_discharge_reg

当使用 regmap set_active_discharge 时,用于控制的寄存器

soft_start_reg

当使用 regmap set_soft_start 时,用于控制的寄存器

soft_start_mask

当使用 regmap set_soft_start 时,用于控制的掩码

soft_start_val_on

当使用 regmap set_soft_start 时,用于控制的启用值

pull_down_reg

当使用 regmap set_pull_down 时,用于控制的寄存器

pull_down_mask

当使用 regmap set_pull_down 时,用于控制的掩码

pull_down_val_on

当使用 regmap set_pull_down 时,用于控制的启用值

ramp_reg

用于控制稳压器斜率的寄存器。

ramp_mask

斜率控制寄存器的位掩码。

ramp_delay_table

用于映射稳压器斜率值的表。值应以 V/S (uV/uS) 为单位给出。请参阅 regulator_set_ramp_delay_regmap()。

n_ramp_values

ramp_delay_table 中的元素数量。

enable_time

稳压器初始启用所需的时间(以 uS 为单位)。

off_on_delay

重新启用稳压器之前的保护时间(以 uS 为单位)

poll_enabled_time

在检查稳压器是否实际启用时使用的轮询间隔(以 uS 为单位)。最大值达到 enable_time。

of_map_mode

将 DeviceTree 中定义的硬件模式映射到标准模式

描述

核心中注册的每个稳压器都使用此类型的结构体和 struct regulator_config 进行描述。此结构体包含稳压器描述的非可变部分。

struct regulator_config

动态稳压器描述符

定义:

struct regulator_config {
    struct device *dev;
    const struct regulator_init_data *init_data;
    void *driver_data;
    struct device_node *of_node;
    struct regmap *regmap;
    struct gpio_desc *ena_gpiod;
};

成员

dev

稳压器的 struct device

init_data

平台提供的初始化数据,由驱动程序传递

driver_data

私有稳压器数据

of_node

用于解析设备树绑定的 OpenFirmware 节点(可以为 NULL)。

regmap

如果 dev_get_regmap() 不足,则用于核心 regmap 助手的 regmap。

ena_gpiod

控制稳压器启用的 GPIO。

描述

核心中注册的每个稳压器都使用此类型的结构体和 struct regulator_desc 进行描述。此结构体包含稳压器描述的运行时可变部分。

struct regulator_err_state

稳压器错误/通知状态

定义:

struct regulator_err_state {
    struct regulator_dev *rdev;
    unsigned long notifs;
    unsigned long errors;
    int possible_errs;
};

成员

rdev

指示状态的稳压器。

notifs

稳压器上发生的事件。

errors

稳压器上处于活动状态的错误。

possible_errs

可以发出信号的错误(通过给定的 IRQ)。

struct regulator_irq_data

稳压器错误/通知状态数据

定义:

struct regulator_irq_data {
    struct regulator_err_state *states;
    int num_states;
    void *data;
    long opaque;
};

成员

states

每个关联稳压器的状态结构体。

num_states

关联稳压器的数量。

data

在 regulator_irq_desc 处给出的驱动程序数据指针。

opaque

IC 驱动程序的值存储。核心不更新此值。IC 可能希望在 map_event 时在此处存储状态寄存器值,并在“renable”回调中比较内容,以查看是否已将新问题添加到状态。如果是这种情况,则可能需要返回 REGULATOR_ERROR_CLEARED 而不是 REGULATOR_ERROR_ON,以允许 IRQ 再次触发,并为新问题生成通知。

描述

此结构体传递给“map_event”和“renable”回调函数,以向核心报告稳压器状态。

struct regulator_irq_desc

基于 IRQ 事件的通知发送器。

定义:

struct regulator_irq_desc {
    const char *name;
    int fatal_cnt;
    int reread_ms;
    int irq_off_ms;
    bool skip_off;
    bool high_prio;
    void *data;
    int (*die)(struct regulator_irq_data *rid);
    int (*map_event)(int irq, struct regulator_irq_data *rid, unsigned long *dev_mask);
    int (*renable)(struct regulator_irq_data *rid);
};

成员

name

IRQ 的可见名称

fatal_cnt

如果此 IRQ 用于指示硬件损坏情况,则最好关闭稳压器或重启 SOC,如果错误处理重复失败。如果给定了 fatal_cnt,则当 IRQ 处理失败 fatal_cnt 次后会中止,并调用 die() 回调(如果已填充)。如果 die() 未填充,则会尝试关闭系统电源,以防止进一步损坏。

reread_ms

如果 IC 读取失败,在工作线程尝试重新读取状态之前等待的时间。如果未指定时间,则会立即重新读取。

irq_off_ms

对于在错误期间保持 IRQ 禁用的设备,IRQ 保持禁用的时间,之后会重新评估状态。如果未给出此值,则 IRQ 将保持启用,并且不会调用 renable。

skip_off

如果设置为 true,则 IRQ 处理程序会在执行其他操作之前尝试检查是否启用了任何关联的稳压器。如果没有启用稳压器且此项设置为 true,则会假定为虚假 IRQ 并返回 IRQ_NONE。

high_prio

指示应使用高优先级 WQ 的布尔值。

data

驱动程序私有数据指针,它将作为 regulator_irq_data 中的 renable、map_event 和 die 回调的参数传递。

die

保护回调。如果 IC 状态读取或恢复操作失败 fatal_cnt 次,则会调用此回调或关闭系统电源。此回调应实现最终保护尝试,例如禁用稳压器。如果保护成功,die() 可以返回 0。如果返回其他值,则核心会假定最终保护失败,并尝试执行电源关闭作为最后手段。

map_event

驱动程序回调,用于将 IRQ 状态映射到具有事件/错误的稳压器设备。注意:回调必须初始化所有 rdev 的错误和通知,这些 rdev 表示有活动事件,因为核心不清除映射数据。可以返回 REGULATOR_FAILED_RETRY 以指示从 IC 读取状态失败。如果此操作重复 fatal_cnt 次,则核心将调用 die() 回调或关闭系统电源作为最后手段来保护硬件。

renable

可选的回调,用于在重新启用 IRQ 之前检查状态(如果硬件支持)。如果实现此回调,则应清除错误标志,以便更新 regulator_get_error_flags() 获取的错误。如果未实现回调,则假定错误已清除,并且 IRQ 会重新启用。可以返回 REGULATOR_FAILED_RETRY 以指示从 IC 读取状态失败。如果此操作重复 ‘fatal_cnt’ 次,则核心将调用 die() 回调,如果 die() 未填充,则会尝试关闭系统电源作为最后手段来保护硬件。返回零表示硬件中的问题已解决,并且 IRQ 将重新启用。返回 REGULATOR_ERROR_ON 表示错误条件仍然有效,并保持 IRQ 禁用。请注意,返回 REGULATOR_ERROR_ON 不会重新触发评估哪些事件处于活动状态或重新发送通知。如果需要这样做,您可能希望返回零并允许 IRQ 重新触发,从而导致重新评估和重新发送事件。

描述

此结构用于注册稳压器 IRQ 通知助手。

struct regulator *regulator_get(struct device *dev, const char *id)

查找并获取对稳压器的引用。

参数

struct device *dev

稳压器“消费者”的设备

const char *id

电源名称或稳压器 ID。

描述

强烈建议使用通过 set_consumer_device_supply() 配置的电源名称。建议使用的电源名称应与数据表中用于电源和/或相关设备引脚的名称匹配。

返回

指向与稳压器对应的 struct regulator 的指针

生产者,或一个 ERR_PTR() 编码的负错误号。

struct regulator *regulator_get_exclusive(struct device *dev, const char *id)

获取对稳压器的独占访问权限。

参数

struct device *dev

稳压器“消费者”的设备

const char *id

电源名称或稳压器 ID。

描述

在持有此引用时,其他消费者将无法获得此稳压器,并且稳压器的使用计数将初始化以反映稳压器的当前状态。

这旨在供无法容忍稳压器共享使用的消费者使用,例如那些需要强制关闭稳压器以使其控制的硬件正常运行的消费者。

强烈建议使用通过 set_consumer_device_supply() 配置的电源名称。建议使用的电源名称应与数据表中用于电源和/或相关设备引脚的名称匹配。

返回

指向与稳压器对应的 struct regulator 的指针

生产者,或一个 ERR_PTR() 编码的负错误号。

struct regulator *regulator_get_optional(struct device *dev, const char *id)

获取对稳压器的可选访问权限。

参数

struct device *dev

稳压器“消费者”的设备

const char *id

电源名称或稳压器 ID。

描述

这旨在供那些在正常使用中某些电源可以断开连接的设备(例如某些 MMC 设备)的消费者使用。它可以允许稳压器核心为使用普通 regulator_get() 调用请求的其他电源提供存根电源,而不会中断可以处理不存在的电源的驱动程序的运行。

强烈建议使用通过 set_consumer_device_supply() 配置的电源名称。建议使用的电源名称应与数据表中用于电源和/或相关设备引脚的名称匹配。

返回

指向与稳压器对应的 struct regulator 的指针

生产者,或一个 ERR_PTR() 编码的负错误号。

void regulator_put(struct regulator *regulator)

“释放”稳压器源

参数

struct regulator *regulator

稳压器源

注意

驱动程序必须确保在此稳压器源上进行的所有 regulator_enable 调用都在调用此函数之前由 regulator_disable 调用进行平衡。

int regulator_register_supply_alias(struct device *dev, const char *id, struct device *alias_dev, const char *alias_id)

为电源查找提供设备别名

参数

struct device *dev

将作为稳压器“消费者”给出的设备

const char *id

电源名称或稳压器 ID

struct device *alias_dev

应用于查找电源的设备

const char *alias_id

应用于查找电源的电源名称或稳压器 ID

描述

对 dev 上 id 的所有查找都将改为对 alias_dev 上的 alias_id 进行。

返回

成功时返回 0,失败时返回负错误号。

void regulator_unregister_supply_alias(struct device *dev, const char *id)

删除设备别名

参数

struct device *dev

将作为稳压器“消费者”给出的设备

const char *id

电源名称或稳压器 ID

描述

如果 dev 上存在 id 的查找别名,则删除该别名。

int regulator_bulk_register_supply_alias(struct device *dev, const char *const *id, struct device *alias_dev, const char *const *alias_id, int num_id)

注册多个别名

参数

struct device *dev

将作为稳压器“消费者”给出的设备

const char *const *id

电源名称或稳压器 ID 列表

struct device *alias_dev

应用于查找电源的设备

const char *const *alias_id

用于查找电源的电源名称或稳压器 ID 列表

int num_id

要注册的别名数量

描述

此辅助函数允许驱动程序在一个操作中注册多个电源别名。如果任何别名无法注册,则在返回调用者之前,将删除所有已注册的别名。

返回

成功时返回 0,失败时返回负错误号。

void regulator_bulk_unregister_supply_alias(struct device *dev, const char *const *id, int num_id)

取消注册多个别名

参数

struct device *dev

将作为稳压器“消费者”给出的设备

const char *const *id

电源名称或稳压器 ID 列表

int num_id

要取消注册的别名数量

描述

此辅助函数允许驱动程序在一个操作中取消注册多个电源别名。

int regulator_enable(struct regulator *regulator)

启用稳压器输出

参数

struct regulator *regulator

稳压器源

描述

请求启用稳压器,使其输出为预定义的电压或电流值。对 regulator_enable() 的调用必须与对 regulator_disable() 的调用相平衡。

注意

输出值可以由其他驱动程序、引导加载程序设置,也可以在稳压器中硬连线。

返回

成功时返回 0,失败时返回负错误号。

int regulator_disable(struct regulator *regulator)

禁用稳压器输出

参数

struct regulator *regulator

稳压器源

描述

禁用稳压器输出电压或电流。对 regulator_enable() 的调用必须与对 regulator_disable() 的调用相平衡。

注意

仅当没有其他使用者设备启用稳压器、稳压器设备支持禁用且机器约束允许此操作时,才会禁用稳压器输出。

返回

成功时返回 0,失败时返回负错误号。

int regulator_force_disable(struct regulator *regulator)

强制禁用稳压器输出

参数

struct regulator *regulator

稳压器源

描述

强制禁用稳压器输出电压或电流。

注意

即使其他使用者设备启用了稳压器,这也禁用稳压器输出。当稳压器未禁用时,可能会发生设备损坏的情况(例如,温度过高)时,应使用此功能。

返回

成功时返回 0,失败时返回负错误号。

int regulator_disable_deferred(struct regulator *regulator, int ms)

延迟禁用稳压器输出

参数

struct regulator *regulator

稳压器源

int ms

直到禁用稳压器的毫秒数

描述

在延迟后对稳压器执行 regulator_disable()。这适用于需要一些时间才能静止的设备。

注意

仅当没有其他使用者设备启用稳压器、稳压器设备支持禁用且机器约束允许此操作时,才会禁用稳压器输出。

返回

成功时返回 0,失败时返回负错误号。

int regulator_is_enabled(struct regulator *regulator)

是否启用了稳压器输出

参数

struct regulator *regulator

稳压器源

描述

请注意,支持此稳压器句柄的设备可以有多个用户,因此即使从未为此特定源调用 regulator_enable(),也可能启用它。

返回

如果稳压器驱动程序支持源/客户端

已请求启用该设备,则为正数;如果未请求,则为零;否则为负错误号。

int regulator_count_voltages(struct regulator *regulator)

计数 regulator_list_voltage() 选择器

参数

struct regulator *regulator

稳压器源

返回

稳压器的选择器数量,或负错误号。

描述

选择器从零开始编号,通常对应于硬件寄存器中的位字段。

int regulator_list_voltage(struct regulator *regulator, unsigned selector)

枚举支持的电压

参数

struct regulator *regulator

稳压器源

unsigned selector

标识要列出的电压

上下文

可以睡眠

返回

可以传递到 regulator_set_voltage() 的 选择器 的电压,

如果 选择器 不能在此系统上使用,则为 0;如果失败,则为负错误号。

struct regmap *regulator_get_regmap(struct regulator *regulator)

获取稳压器的寄存器映射

参数

struct regulator *regulator

稳压器源

返回

指向 稳压器struct regmap 的指针,或 ERR_PTR()

如果 稳压器 不使用 regmap,则编码为 -EOPNOTSUPP

int regulator_get_hardware_vsel_register(struct regulator *regulator, unsigned *vsel_reg, unsigned *vsel_mask)

获取硬件电压选择器寄存器

参数

struct regulator *regulator

稳压器源

unsigned *vsel_reg

电压选择器寄存器,输出参数

unsigned *vsel_mask

电压选择器位域的掩码,输出参数

描述

返回用于设置稳压器电压的硬件寄存器偏移和位掩码。当配置电压缩放硬件或固件时,这可能很有用,例如,这些硬件或固件可以在内核背后发出 I2C 请求。

成功时,输出参数 vsel_regvsel_mask 将被填充,并返回 0,否则返回一个负错误号。

返回

成功返回 0,如果稳压器不支持电压选择器,则返回 -EOPNOTSUPP

电压选择器。

int regulator_list_hardware_vsel(struct regulator *regulator, unsigned selector)

获取选择器的硬件特定寄存器值

参数

struct regulator *regulator

稳压器源

unsigned selector

标识要列出的电压

描述

将选择器转换为可以直接写入稳压器寄存器的硬件特定电压选择器。电压寄存器的地址可以通过调用 regulator_get_hardware_vsel_register 来确定。

返回

成功返回 0,如果选择器超出支持的范围,则返回 -EINVAL,或者如果稳压器不支持电压选择器,则返回 -EOPNOTSUPP

范围。

int regulator_hardware_enable(struct regulator *regulator, bool enable)

访问硬件以启用/禁用稳压器

参数

struct regulator *regulator

稳压器源

bool enable

true 为启用,false 为禁用

描述

请求以预定义的电压或电流值启用/禁用稳压器输出。

返回

成功时返回 0,失败时返回负错误号。

unsigned int regulator_get_linear_step(struct regulator *regulator)

返回 VSEL 值之间的电压步长

参数

struct regulator *regulator

稳压器源

返回

线性稳压器的 VSEL 值之间的电压步长,

如果稳压器不是线性稳压器,则返回 0。

int regulator_is_supported_voltage(struct regulator *regulator, int min_uV, int max_uV)

检查是否支持电压范围

参数

struct regulator *regulator

要检查的稳压器。

int min_uV

最小所需电压,单位为 uV。

int max_uV

最大所需电压,单位为 uV。

返回

如果支持电压范围,则返回 1,如果不支持,则返回 0,或者如果无法更改 regulator 的电压并且电压回读失败,则返回负错误号。

number if regulator’s voltage can’t be changed and voltage readback failed.

int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV)

设置稳压器输出电压

参数

struct regulator *regulator

稳压器源

int min_uV

最小所需电压,单位为 uV

int max_uV

最大可接受电压,单位为 uV

描述

将稳压器设置为所需的输出电压。这可以在任何稳压器状态下设置。IOW,稳压器可以禁用或启用。

如果稳压器已启用,则电压将立即更改为新值,否则如果稳压器已禁用,则稳压器在启用时将以新电压输出。

注意

如果稳压器在多个设备之间共享,则将使用满足系统约束的最低请求电压。必须为此稳压器设置稳压器系统约束,然后才能调用此函数,否则此调用将失败。

返回

成功时返回 0,失败时返回负错误号。

int regulator_set_voltage_time(struct regulator *regulator, int old_uV, int new_uV)

获取上升/下降时间

参数

struct regulator *regulator

稳压器源

int old_uV

起始电压,单位为微伏

int new_uV

目标电压,单位为微伏

描述

提供起始电压和结束电压,此函数尝试计算上升或下降到此新电压所需的微秒时间。

返回

以微秒为单位的斜坡时间,如果计算失败,则为负错误号。

int regulator_set_voltage_time_sel(struct regulator_dev *rdev, unsigned int old_selector, unsigned int new_selector)

获取上升/下降时间

参数

struct regulator_dev *rdev

稳压器源设备

unsigned int old_selector

起始电压的选择器

unsigned int new_selector

目标电压的选择器

描述

提供起始电压和目标电压选择器,此函数返回上升或下降到此新电压所需的微秒时间

在 regulation_constraints 中提供 ramp_delay 的驱动程序可以使用此操作作为其 set_voltage_time_sel() 操作。

返回

以微秒为单位的斜坡时间,如果计算失败,则为负错误号。

int regulator_sync_voltage(struct regulator *regulator)

重新应用上次稳压器输出电压

参数

struct regulator *regulator

稳压器源

描述

重新应用上次配置的电压。这旨在用于某些外部控制源与使用者合作导致配置的电压发生变化的情况。

返回

成功时返回 0,失败时返回负错误号。

int regulator_get_voltage(struct regulator *regulator)

获取稳压器输出电压

参数

struct regulator *regulator

稳压器源

返回

当前稳压器电压,单位为 uV,失败时为负错误号。

注意

如果稳压器被禁用,它将返回电压值。此函数不应用于确定稳压器状态。

int regulator_set_current_limit(struct regulator *regulator, int min_uA, int max_uA)

设置稳压器输出电流限制

参数

struct regulator *regulator

稳压器源

int min_uA

最小支持电流,单位为 uA

int max_uA

最大支持电流,单位为 uA

描述

将当前电流输出设置为所需的输出电流。这可以在任何稳压器状态下设置。也就是说,稳压器可以禁用或启用。

如果稳压器已启用,则电流将立即更改为新值;否则,如果稳压器已禁用,则稳压器将在启用时以新电流输出。

注意

在调用此函数之前,必须为该稳压器设置稳压器系统约束,否则此调用将失败。

返回

成功时返回 0,失败时返回负错误号。

int regulator_get_current_limit(struct regulator *regulator)

获取稳压器输出电流

参数

struct regulator *regulator

稳压器源

返回

指定电流吸收器提供的电流,单位为 uA,

或失败时返回负错误号。

注意

如果稳压器被禁用,它将返回当前值。此函数不应用于确定稳压器状态。

int regulator_set_mode(struct regulator *regulator, unsigned int mode)

设置稳压器工作模式

参数

struct regulator *regulator

稳压器源

unsigned int mode

工作模式 - REGULATOR_MODE 常量之一

描述

设置稳压器工作模式以提高稳压器效率或改善稳压性能。

注意

在调用此函数之前,必须为该稳压器设置稳压器系统约束,否则此调用将失败。

返回

成功时返回 0,失败时返回负错误号。

unsigned int regulator_get_mode(struct regulator *regulator)

获取稳压器工作模式

参数

struct regulator *regulator

稳压器源

描述

获取当前稳压器工作模式。

返回

当前工作模式为 REGULATOR_MODE_* 值,

或失败时返回负错误号。

int regulator_get_error_flags(struct regulator *regulator, unsigned int *flags)

获取稳压器错误信息

参数

struct regulator *regulator

稳压器源

unsigned int *flags

用于存储错误标志的指针

描述

获取当前稳压器错误信息。

返回

成功时返回 0,失败时返回负错误号。

int regulator_set_load(struct regulator *regulator, int uA_load)

设置稳压器负载

参数

struct regulator *regulator

稳压器源

int uA_load

负载电流

描述

通知稳压器核心新的设备负载。然后,DRMS(如果约束启用)会使用该负载来为新的稳压器负载设置最有效的稳压器工作模式。

当消费者设备更改操作状态并因此更改电源状态时,它们会通知其供电稳压器它们将需要的最大功率(可以从设备数据手册中的功耗表中获取)。可能影响功耗的操作状态更改示例包括:-

o 设备已打开/关闭。o 设备 I/O 即将开始或刚刚完成。o 设备在工作之间空闲。

此信息也通过 sysfs 导出到用户空间。

如果平台约束允许,DRMS 将汇总稳压器上的总请求负载,并更改为最有效的工作模式。

如果稳压器是始终开启的稳压器,则如果该消费者完全禁用,则仍将删除单个消费者的负载。

注意

当稳压器消费者请求禁用稳压器时,该消费者请求的任何负载都不再计入总请求负载。如果重新启用稳压器,则先前请求的负载将再次开始计数。

返回

成功时返回 0,失败时返回负错误号。

int regulator_allow_bypass(struct regulator *regulator, bool enable)

允许稳压器进入旁路模式

参数

struct regulator *regulator

要配置的稳压器

bool enable

启用或禁用旁路模式

描述

如果稳压器的所有其他消费者也启用了旁路模式,并且机器约束允许,则允许稳压器进入旁路模式。旁路模式意味着稳压器只是将输入直接传递到输出,而没有稳压。

返回

成功时返回 0,或者如果无法更改旁路,则返回 0,或者

失败时返回负错误号。

int regulator_register_notifier(struct regulator *regulator, struct notifier_block *nb)

注册稳压器事件通知器

参数

struct regulator *regulator

稳压器源

struct notifier_block *nb

通知器块

描述

注册通知器块以接收稳压器事件。

返回

成功时返回 0,失败时返回负错误号。

int regulator_unregister_notifier(struct regulator *regulator, struct notifier_block *nb)

注销稳压器事件通知器

参数

struct regulator *regulator

稳压器源

struct notifier_block *nb

通知器块

描述

注销稳压器事件通知器块。

返回

成功时返回 0,失败时返回负错误号。

int regulator_bulk_get(struct device *dev, int num_consumers, struct regulator_bulk_data *consumers)

获取多个稳压器消费者

参数

struct device *dev

要提供的设备

int num_consumers

要注册的消费者数量

struct regulator_bulk_data *consumers

消费者的配置;客户端存储在此处。

描述

此辅助函数允许驱动程序在一个操作中获取多个稳压器消费者。如果无法获取任何稳压器,则将在返回调用方之前释放已分配的任何稳压器。

返回

成功时返回 0,失败时返回负错误号。

int regulator_bulk_enable(int num_consumers, struct regulator_bulk_data *consumers)

启用多个稳压器消费者

参数

int num_consumers

消费者数量

struct regulator_bulk_data *consumers

消费者数据;客户端存储在此处。

描述

此便捷 API 允许消费者在单个 API 调用中启用多个稳压器客户端。如果无法启用任何消费者,则在返回之前,将再次禁用已启用的任何其他消费者。

返回

成功时返回 0,失败时返回负错误号。

int regulator_bulk_disable(int num_consumers, struct regulator_bulk_data *consumers)

禁用多个稳压器消费者

参数

int num_consumers

消费者数量

struct regulator_bulk_data *consumers

消费者数据;客户端存储在此处。

描述

此便捷 API 允许消费者在单个 API 调用中禁用多个稳压器客户端。如果无法禁用任何消费者,则在返回之前,将再次启用已禁用的任何其他消费者。

返回

成功时返回 0,失败时返回负错误号。

int regulator_bulk_force_disable(int num_consumers, struct regulator_bulk_data *consumers)

强制禁用多个稳压器消费者

参数

int num_consumers

消费者数量

struct regulator_bulk_data *consumers

消费者数据;客户端存储在此处。

描述

此便捷 API 允许消费者在单个 API 调用中强制禁用多个稳压器客户端。

注意

当如果不禁用稳压器则可能会发生设备损坏时(例如,过温),应使用此方法。尽管对某些消费者的 regulator_force_disable 函数调用可能会返回错误号,但该函数会针对所有消费者调用。

返回

成功时返回 0,失败时返回负错误号。

void regulator_bulk_free(int num_consumers, struct regulator_bulk_data *consumers)

释放多个稳压器使用者

参数

int num_consumers

消费者数量

struct regulator_bulk_data *consumers

消费者数据;客户端存储在此处。

描述

这个便捷的 API 允许使用者通过单个 API 调用来释放多个稳压器客户端。

int regulator_notifier_call_chain(struct regulator_dev *rdev, unsigned long event, void *data)

调用稳压器事件通知器

参数

struct regulator_dev *rdev

稳压器源

unsigned long event

通知器块

void *data

回调特定的数据。

描述

由稳压器驱动程序调用,以通知客户端发生了稳压器事件。

返回

NOTIFY_DONE.

int regulator_mode_to_status(unsigned int mode)

将稳压器模式转换为状态

参数

unsigned int mode

要转换的模式

描述

将稳压器模式转换为状态。

返回

对应于给定模式的 REGULATOR_STATUS_* 值。

struct regulator_dev *regulator_register(struct device *dev, const struct regulator_desc *regulator_desc, const struct regulator_config *cfg)

注册稳压器

参数

struct device *dev

驱动稳压器的设备

const struct regulator_desc *regulator_desc

要注册的稳压器

const struct regulator_config *cfg

稳压器的运行时配置

描述

由稳压器驱动程序调用以注册稳压器。

返回

成功时指向有效的 struct regulator_dev 的指针,或

失败时指向 ERR_PTR() 编码的负错误号的指针。

void regulator_unregister(struct regulator_dev *rdev)

注销稳压器

参数

struct regulator_dev *rdev

要注销的稳压器

描述

由稳压器驱动程序调用以注销稳压器。

void regulator_has_full_constraints(void)

系统具有完全指定的约束

参数

void

无参数

描述

调用此函数将导致稳压器 API 在 late_initcall 中禁用所有使用计数为零且没有 always_on 约束的稳压器。

其目的是使其成为未来内核版本中的默认行为,因此鼓励用户现在使用此功能。

void *rdev_get_drvdata(struct regulator_dev *rdev)

获取 rdev 稳压器驱动程序数据

参数

struct regulator_dev *rdev

稳压器

描述

获取 rdev 稳压器驱动程序私有数据。此调用可以在稳压器驱动程序上下文中使用。

返回

指向稳压器驱动程序私有数据的指针。

void *regulator_get_drvdata(struct regulator *regulator)

获取稳压器驱动程序数据

参数

struct regulator *regulator

稳压器

描述

获取稳压器驱动程序私有数据。当需要调用非 API 稳压器特定函数时,此调用可以在使用者驱动程序上下文中使用。

返回

指向稳压器驱动程序私有数据的指针。

void regulator_set_drvdata(struct regulator *regulator, void *data)

设置稳压器驱动程序数据

参数

struct regulator *regulator

稳压器

void *data

data

int rdev_get_id(struct regulator_dev *rdev)

获取稳压器 ID

参数

struct regulator_dev *rdev

稳压器

返回

rdev 的稳压器 ID。