電壓和電流調節器 API

作者:

Liam Girdwood

作者:

Mark Brown

簡介

此框架旨在提供一個標準的核心介面來控制電壓和電流調節器。

目的是允許系統動態控制調節器的功率輸出,以節省電量並延長電池壽命。 這適用於電壓調節器(其中電壓輸出可控)和電流吸收器(其中電流限制可控)。

請注意,Linux 核心原始碼中提供了其他(且目前更完整的)文件,位於 Documentation/power/regulator 下。

詞彙表

調節器 API 使用了許多可能不熟悉的術語

調節器

向其他裝置供電的電子裝置。 大多數調節器可以啟用和停用其輸出,有些還可以控制其輸出電壓或電流。

消費者

消耗由調節器提供的電力的電子裝置。 這些可以是靜態的,僅需要固定的電源,也可以是動態的,需要在執行時對調節器進行主動管理。

電源域

由給定調節器供電的電子電路,包括調節器和所有消費者裝置。 調節器的配置在電路中的所有元件之間共享。

電源管理積體電路 (PMIC)

包含多個調節器且通常還包含其他子系統的 IC。 在嵌入式系統中,主 PMIC 通常等效於桌面系統中的 PSU 和南橋的組合。

消費者驅動程式介面

這提供了類似於核心時鐘框架的 API。 消費者驅動程式使用 getput 操作來獲取和釋放調節器。 提供了 啟用停用 調節器以及獲取和設定調節器執行時引數的函式。

請求調節器時,消費者使用電源的符號名稱,例如 “Vcc”,這些名稱透過機器介面對映到實際的調節器裝置。

當未使用調節器框架時,會提供此 API 的存根版本,以最大程度地減少使用 ifdefs 的需要。

啟用和停用

調節器 API 提供調節器的引用計數啟用和停用。 消費者裝置使用 regulator_enable()regulator_disable() 函式來啟用和停用調節器。 對這兩個函式的呼叫必須是平衡的。

請注意,由於多個消費者可能正在使用調節器,並且機器約束可能不允許停用調節器,因此不能保證呼叫 regulator_disable() 實際上會導致停用調節器提供的電源。 消費者驅動程式應假定調節器可能始終處於啟用狀態。

配置

某些消費者裝置可能需要能夠動態配置其電源。 例如,MMC 驅動程式可能需要為其卡選擇正確的操作電壓。 這可以在啟用或停用調節器時完成。

regulator_set_voltage()regulator_set_current_limit() 函式提供了此功能的主要介面。 兩者都採用電壓和電流範圍,支援不需要特定值的驅動程式(例如,CPU 頻率縮放通常允許 CPU 在較低頻率下使用更寬的電源電壓範圍,但不要求降低電源電壓)。 如果需要精確值,則最小值和最大值應相同。

回撥

還可以為諸如調節失敗之類的事件註冊回撥。

調節器驅動程式介面

調節器晶片的驅動程式將調節器註冊到調節器核心,從而為核心提供操作結構。 通知程式介面允許將錯誤情況報告給核心。

註冊應由平臺完成的顯式設定觸發,為調節器提供 struct regulator_init_data,其中包含約束和電源資訊。

機器介面

此介面提供了一種定義調節器如何在給定系統上連線到消費者,以及系統的有效操作引數是什麼的方法。

電源

調節器電源使用 struct 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 pw_budget_mW;
    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

最大輸入電流。

pw_budget_mW

調節器的功率預算,單位為 mW。

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 應指示過流情況是由

    不可恢復的錯誤引起的,但 HW 不執行自動關閉。

  • 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 驅動程式的 Value 儲存。 核心不更新此值。 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 用於指示 HW 損壞情況,則最好關閉穩壓器或在錯誤處理重複失敗時重新啟動 SOC。 如果給出了 fatal_cnt,則如果 IRQ 處理失敗 fatal_cnt 次,則中止 IRQ 處理,並呼叫 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 的錯誤和通知,因為核心不清除對映資料。 可以返回 REGULATOR_FAILED_RETRY 以指示從 IC 讀取狀態失敗。 如果重複 fatal_cnt 次,則核心將呼叫 die() 回撥或關閉系統電源作為最後的手段以保護 HW。

renable

重新啟用 IRQ 之前檢查狀態的可選回撥(如果 HW 支援)。 如果已實現,則應清除錯誤標誌,以便更新 regulator_get_error_flags() 獲取的錯誤。 如果未實現回撥,則假定錯誤已清除,並且重新啟用 IRQ。 可以返回 REGULATOR_FAILED_RETRY 以指示從 IC 讀取狀態失敗。 如果對 “fatal_cnt” 重複此操作,則核心將呼叫 die() 回撥,或者如果未填充 die(),則嘗試關閉系統電源作為最後的手段以保護 HW。 返回零表示已解決 HW 中的問題,並且將重新啟用 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()

編碼為 -EOPNOTSUPP,如果 穩壓器 不使用 regmap。

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;或者如果 穩壓器 的電壓無法更改並且電壓回讀失敗,則為負錯誤

數字。

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_get_unclaimed_power_budget(struct regulator *regulator)

獲取穩壓器未宣告的功率預算

引數

struct regulator *regulator

穩壓器源

返回

穩壓器的未宣告功率預算,單位為mW。

int regulator_request_power_budget(struct regulator *regulator, unsigned int pw_req)

請求穩壓器的功率預算

引數

struct regulator *regulator

穩壓器源

unsigned int pw_req

請求的功率

返回

成功時返回 0,失敗時返回負錯誤號。

void regulator_free_power_budget(struct regulator *regulator, unsigned int pw)

釋放穩壓器的功率預算

引數

struct regulator *regulator

穩壓器源

unsigned int pw

要釋放的功率。

返回

穩壓器的功率預算,單位為mW。

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,或者如果無法更改旁路,或者

失敗時為負錯誤號。

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。