復位控制器 API

簡介

復位控制器是控制到多個外圍裝置的復位訊號的中央單元。 復位控制器 API 分為兩部分:消費者驅動程式介面API 參考),允許外圍裝置驅動程式請求控制其復位輸入訊號;以及 復位控制器驅動程式介面API 參考),供復位控制器裝置的驅動程式用於註冊其復位控制,以提供給消費者。

雖然一些復位控制器硬體單元也實現了系統重啟功能,但重啟處理程式不在復位控制器 API 的範圍內。

術語表

復位控制器 API 使用這些術語具有特定含義

復位線

承載從復位控制器硬體單元到外圍模組的復位訊號的物理復位線。

復位控制

確定一條或多條復位線狀態的控制方法。 最常見的是復位控制器暫存器空間中的單個位,該位允許直接控制復位線的物理狀態,或者可以自動清除,並可用於觸發復位線上的預定脈衝。 在更復雜的復位控制中,單個觸發動作可以在多條復位線上啟動精心定時的脈衝序列。

復位控制器

提供許多復位控制以控制許多復位線的硬體模組。

復位消費者

外圍模組或外部 IC,透過復位線上的訊號將其置於復位狀態。

消費者驅動程式介面

此介面提供類似於核心時鐘框架的 API。 消費者驅動程式使用 get 和 put 操作來獲取和釋放復位控制。 提供了斷言和取消斷言受控復位線、觸發復位脈衝或查詢復位線狀態的函式。

在請求復位控制時,消費者可以使用其復位輸入的符號名稱,這些名稱由核心對映到現有復位控制器裝置上的實際復位控制。

當復位控制器框架未使用時,會提供此 API 的存根版本,以最大限度地減少使用 ifdefs 的需求。

共享和獨佔復位

復位控制器 API 提供引用計數取消斷言和斷言或直接、獨佔控制。 共享和獨佔復位控制之間的區別在於請求復位控制時,透過 devm_reset_control_get_shared() 或透過 devm_reset_control_get_exclusive()。 此選擇決定了使用復位控制進行的 API 呼叫的行為。

共享復位的行為類似於核心時鐘框架中的時鐘。 它們提供引用計數取消斷言,其中只有第一個取消斷言(將取消斷言引用計數遞增到 1)和最後一個斷言(將取消斷言引用計數遞減回零)對復位線產生物理影響。

另一方面,獨佔復位保證直接控制。 也就是說,斷言會導致立即斷言復位線,而取消斷言會導致立即取消斷言復位線。

斷言和取消斷言

消費者驅動程式使用 reset_control_assert()reset_control_deassert() 函式來斷言和取消斷言復位線。 對於共享復位控制,對這兩個函式的呼叫必須平衡。

請注意,由於多個消費者可能正在使用共享復位控制,因此無法保證在共享復位控制上呼叫 reset_control_assert() 實際上會導致斷言復位線。 使用共享復位控制的消費者驅動程式應假定復位線可能始終保持取消斷言狀態。 該 API 僅保證只要任何消費者請求取消斷言,就無法斷言復位線。

觸發

消費者驅動程式使用 reset_control_reset() 在自動取消斷言復位控制上觸發復位脈衝。 通常,這些復位不能在多個消費者之間共享,因為從任何消費者驅動程式請求脈衝都會復位所有連線的外圍裝置。

復位控制器 API 允許請求自動取消斷言復位控制作為共享,但對於這些,只有第一個觸發請求會導致在復位線上發出實際脈衝。 在所有消費者都呼叫 reset_control_rearm() 之前,對此函式的所有進一步呼叫均無效。 對於共享復位控制,對這兩個函式的呼叫必須平衡。 這允許僅在驅動程式被探測或恢復之前的任何時候需要初始復位的裝置共享脈衝復位線。

查詢

只有一些復位控制器支援透過 reset_control_status() 查詢復位線的當前狀態。 如果支援,則如果給定的復位線被斷言,則此函式返回一個正的非零值。 reset_control_status() 函式不接受 復位控制陣列控制代碼作為其輸入引數。

可選復位

通常,外圍裝置在某些平臺上需要復位線,但在其他平臺上不需要。 為此,可以使用 devm_reset_control_get_optional_exclusive()devm_reset_control_get_optional_shared() 請求將復位控制作為可選控制。 如果在裝置樹中未指定請求的復位控制,則這些函式返回一個 NULL 指標而不是錯誤。 將 NULL 指標傳遞給 reset_control 函式會導致它們靜默返回,而不會出現錯誤。

復位控制陣列

某些驅動程式需要以任何特定順序斷言一組復位線。 devm_reset_control_array_get() 返回一個不透明的復位控制控制代碼,該控制代碼可用於一次斷言、取消斷言或觸發所有指定的復位控制。 復位控制 API 不保證處理其中各個控制元件的順序。

復位控制器驅動程式介面

復位控制器模組的驅動程式提供斷言或取消斷言復位訊號、在復位線上觸發復位脈衝或查詢其當前狀態所需的功能。 所有功能都是可選的。

初始化

驅動程式填充結構 reset_controller_dev 並在其探測函式中使用 reset_controller_register() 註冊它。 實際功能透過結構 reset_control_ops 在回撥函式中實現。

API 參考

復位控制器 API 在此處分為兩部分記錄:復位消費者 API復位控制器驅動程式 API

復位消費者 API

復位消費者可以使用不透明的復位控制控制代碼來控制復位線,該控制代碼可以從 devm_reset_control_get_exclusive()devm_reset_control_get_shared() 獲得。 給定復位控制,消費者可以呼叫 reset_control_assert()reset_control_deassert(),使用 reset_control_reset() 觸發復位脈衝,或使用 reset_control_status() 查詢復位線狀態。

struct reset_control_bulk_data

用於批次復位控制操作的資料。

定義:

struct reset_control_bulk_data {
    const char                      *id;
    struct reset_control            *rstc;
};

成員

id

復位控制消費者 ID

rstc

struct reset_control * 用於儲存關聯的復位控制

描述

復位 API 提供了一系列 reset_control_bulk_*() API 呼叫,以便為需要多個復位控制的消費者提供便利。 此結構用於管理這些呼叫的資料。

enum reset_control_flags

可以傳遞給 reset_control_get 函式以確定復位控制型別的標誌。 這些值不能進行 OR 運算。

常量

RESET_CONTROL_EXCLUSIVE

獨佔,已獲取,

RESET_CONTROL_EXCLUSIVE_DEASSERTED

獨佔,已獲取,已取消斷言

RESET_CONTROL_EXCLUSIVE_RELEASED

獨佔,已釋放,

RESET_CONTROL_SHARED

共享

RESET_CONTROL_SHARED_DEASSERTED

共享,已取消斷言

RESET_CONTROL_OPTIONAL_EXCLUSIVE

可選,獨佔,已獲取

RESET_CONTROL_OPTIONAL_EXCLUSIVE_DEASSERTED

可選,獨佔,已獲取,已取消斷言

RESET_CONTROL_OPTIONAL_EXCLUSIVE_RELEASED

可選,獨佔,已釋放

RESET_CONTROL_OPTIONAL_SHARED

可選,共享

RESET_CONTROL_OPTIONAL_SHARED_DEASSERTED

可選,共享,已取消斷言

struct reset_control *reset_control_get_exclusive(struct device *dev, const char *id)

查詢並獲取對復位控制器的獨佔引用。

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

返回一個 struct reset_control 或包含 errno 的 IS_ERR() 條件。 如果為同一 reset_control 多次呼叫此函式,它將返回 -EBUSY。

有關對復位控制的共享引用的詳細資訊,請參見 reset_control_get_shared()

id 名稱的使用是可選的。

int reset_control_bulk_get_exclusive(struct device *dev, int num_rstcs, struct reset_control_bulk_data *rstcs)

查詢並獲取對多個復位控制器的獨佔引用。

引數

struct device *dev

要由控制器復位的裝置

int num_rstcs

rstcs 陣列中的條目數

struct reset_control_bulk_data *rstcs

帶有復位線名稱集的 struct reset_control_bulk_data 陣列

描述

使用指向獨佔復位控制元件的指標填充 rstcs 陣列並返回 0,或包含 errno 的 IS_ERR() 條件。

struct reset_control *reset_control_get_exclusive_released(struct device *dev, const char *id)

查詢並獲取對復位控制器的臨時獨佔引用。

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

返回一個 struct reset_control 或包含 errno 的 IS_ERR() 條件。 此函式返回的復位控制必須在使用前透過 reset_control_acquire() 獲取,之後應透過 reset_control_release() 釋放。

id 名稱的使用是可選的。

int reset_control_bulk_get_exclusive_released(struct device *dev, int num_rstcs, struct reset_control_bulk_data *rstcs)

查詢並獲取多個復位控制器的臨時獨佔引用。

引數

struct device *dev

要由控制器復位的裝置

int num_rstcs

rstcs 陣列中的條目數

struct reset_control_bulk_data *rstcs

帶有復位線名稱集的 struct reset_control_bulk_data 陣列

描述

使用指向獨佔復位控制的指標填充 rstcs 陣列並返回 0,或者返回包含 errno 的 IS_ERR() 條件。此函式返回的復位控制器必須在使用前透過 reset_control_bulk_acquire() 獲取,並在之後透過 reset_control_bulk_release() 釋放。

int reset_control_bulk_get_optional_exclusive_released(struct device *dev, int num_rstcs, struct reset_control_bulk_data *rstcs)

查詢並獲取多個復位控制器的可選臨時獨佔引用。

引數

struct device *dev

要由控制器復位的裝置

int num_rstcs

rstcs 陣列中的條目數

struct reset_control_bulk_data *rstcs

帶有復位線名稱集的 struct reset_control_bulk_data 陣列

描述

reset_control_bulk_get_exclusive_released() 的可選變體。如果裝置樹中未指定請求的復位,則此函式返回 0 而不是錯誤,並且缺失的 rtsc 設定為 NULL。

有關更多資訊,請參見 reset_control_bulk_get_exclusive_released()

struct reset_control *reset_control_get_shared(struct device *dev, const char *id)

查詢並獲取對復位控制器的共享引用。

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

返回 struct reset_control 或包含 errno 的 IS_ERR() 條件。此函式旨在與硬體塊之間共享的復位控制器一起使用。

當復位控制器被共享時,reset_control_assert / deassert 的行為會發生改變,復位核心將跟蹤 deassert_count,並且僅在 reset_control_assert 被呼叫的次數與 reset_control_deassert 被呼叫的次數一樣多時,才會(重新)置位復位。另請參見 reset_control_assert 文件中關於共享復位控制的說明。

在共享復位控制上,不允許在未先呼叫 reset_control_deassert 的情況下呼叫 reset_control_assert。在共享復位控制上也不允許呼叫 reset_control_reset。

id 名稱的使用是可選的。

int reset_control_bulk_get_shared(struct device *dev, int num_rstcs, struct reset_control_bulk_data *rstcs)

查詢並獲取對多個復位控制器的共享引用。

引數

struct device *dev

要由控制器復位的裝置

int num_rstcs

rstcs 陣列中的條目數

struct reset_control_bulk_data *rstcs

帶有復位線名稱集的 struct reset_control_bulk_data 陣列

描述

使用指向共享復位控制的指標填充 rstcs 陣列並返回 0,或者返回包含 errno 的 IS_ERR() 條件。

struct reset_control *reset_control_get_optional_exclusive(struct device *dev, const char *id)

reset_control_get_exclusive() 的可選版本

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

reset_control_get_exclusive() 的可選變體。如果裝置樹中未指定請求的復位,則此函式返回 NULL 而不是錯誤。

有關更多資訊,請參見 reset_control_get_exclusive()

int reset_control_bulk_get_optional_exclusive(struct device *dev, int num_rstcs, struct reset_control_bulk_data *rstcs)

reset_control_bulk_get_exclusive() 的可選版本

引數

struct device *dev

要由控制器復位的裝置

int num_rstcs

rstcs 陣列中的條目數

struct reset_control_bulk_data *rstcs

帶有復位線名稱集的 struct reset_control_bulk_data 陣列

描述

reset_control_bulk_get_exclusive() 的可選變體。如果在裝置樹中未指定任何請求的復位,則此函式將它們設定為 NULL 而不是返回錯誤。

有關更多資訊,請參見 reset_control_bulk_get_exclusive()

struct reset_control *reset_control_get_optional_shared(struct device *dev, const char *id)

reset_control_get_shared() 的可選版本

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

reset_control_get_shared() 的可選變體。如果裝置樹中未指定請求的復位,則此函式返回 NULL 而不是錯誤。

有關更多資訊,請參見 reset_control_get_shared()

int reset_control_bulk_get_optional_shared(struct device *dev, int num_rstcs, struct reset_control_bulk_data *rstcs)

reset_control_bulk_get_shared() 的可選版本

引數

struct device *dev

要由控制器復位的裝置

int num_rstcs

rstcs 陣列中的條目數

struct reset_control_bulk_data *rstcs

帶有復位線名稱集的 struct reset_control_bulk_data 陣列

描述

reset_control_bulk_get_shared() 的可選變體。如果裝置樹中未指定請求的復位,則此函式將它們設定為 NULL 而不是返回錯誤。

有關更多資訊,請參見 reset_control_bulk_get_shared()

struct reset_control *of_reset_control_get_exclusive(struct device_node *node, const char *id)

查詢並獲取對復位控制器的獨佔引用。

引數

struct device_node *node

要由控制器復位的裝置

const char *id

復位線名稱

描述

返回 struct reset_control 或包含 errno 的 IS_ERR() 條件。

id 名稱的使用是可選的。

struct reset_control *of_reset_control_get_optional_exclusive(struct device_node *node, const char *id)

查詢並獲取對復位控制器的可選獨佔引用。

引數

struct device_node *node

要由控制器復位的裝置

const char *id

復位線名稱

描述

of_reset_control_get_exclusive() 的可選變體。如果裝置樹中未指定請求的復位,則此函式返回 NULL 而不是錯誤。

返回 struct reset_control 或包含 errno 的 IS_ERR() 條件。

id 名稱的使用是可選的。

struct reset_control *of_reset_control_get_shared(struct device_node *node, const char *id)

查詢並獲取對復位控制器的共享引用。

引數

struct device_node *node

要由控制器復位的裝置

const char *id

復位線名稱

描述

當復位控制器被共享時,reset_control_assert / deassert 的行為會發生改變,復位核心將跟蹤 deassert_count,並且僅在 reset_control_assert 被呼叫的次數與 reset_control_deassert 被呼叫的次數一樣多時,才會(重新)置位復位。另請參見 reset_control_assert 文件中關於共享復位控制的說明。

在共享復位控制上,不允許在未先呼叫 reset_control_deassert 的情況下呼叫 reset_control_assert。在共享復位控制上也不允許呼叫 reset_control_reset。返回 struct reset_control 或包含 errno 的 IS_ERR() 條件。

id 名稱的使用是可選的。

struct reset_control *of_reset_control_get_exclusive_by_index(struct device_node *node, int index)

透過索引查詢並獲取對復位控制器的獨佔引用。

引數

struct device_node *node

要由控制器復位的裝置

int index

復位控制器的索引

描述

這用於以任何順序為裝置或電源域執行一系列復位。返回 struct reset_control 或包含 errno 的 IS_ERR() 條件。

struct reset_control *of_reset_control_get_shared_by_index(struct device_node *node, int index)

透過索引查詢並獲取對復位控制器的共享引用。

引數

struct device_node *node

要由控制器復位的裝置

int index

復位控制器的索引

描述

當復位控制器被共享時,reset_control_assert / deassert 的行為會發生改變,復位核心將跟蹤 deassert_count,並且僅在 reset_control_assert 被呼叫的次數與 reset_control_deassert 被呼叫的次數一樣多時,才會(重新)置位復位。另請參見 reset_control_assert 文件中關於共享復位控制的說明。

在共享復位控制上,不允許在未先呼叫 reset_control_deassert 的情況下呼叫 reset_control_assert。在共享復位控制上也不允許呼叫 reset_control_reset。返回 struct reset_control 或包含 errno 的 IS_ERR() 條件。

這用於以任何順序為裝置或電源域執行一系列復位。返回 struct reset_control 或包含 errno 的 IS_ERR() 條件。

struct reset_control *devm_reset_control_get_exclusive(struct device *dev, const char *id)

資源管理的 reset_control_get_exclusive()

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

託管的 reset_control_get_exclusive()。對於從此函式返回的復位控制器,在驅動程式分離時會自動呼叫 reset_control_put()

有關更多資訊,請參見 reset_control_get_exclusive()

struct reset_control *devm_reset_control_get_exclusive_deasserted(struct device *dev, const char *id)

資源管理的 reset_control_get_exclusive() + reset_control_deassert()

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

託管的 reset_control_get_exclusive() + reset_control_deassert()。對於從此函式返回的復位控制器,在驅動程式分離時會自動呼叫 reset_control_assert() + reset_control_put()

有關更多資訊,請參見 reset_control_get_exclusive()

int devm_reset_control_bulk_get_exclusive(struct device *dev, int num_rstcs, struct reset_control_bulk_data *rstcs)

資源管理的 reset_control_bulk_get_exclusive()

引數

struct device *dev

要由控制器復位的裝置

int num_rstcs

rstcs 陣列中的條目數

struct reset_control_bulk_data *rstcs

帶有復位線名稱集的 struct reset_control_bulk_data 陣列

描述

已管理 reset_control_bulk_get_exclusive()。對於從此函式返回的復位控制器,reset_control_put() 在驅動程式分離時會自動呼叫。

有關更多資訊,請參見 reset_control_bulk_get_exclusive()

struct reset_control *devm_reset_control_get_exclusive_released(struct device *dev, const char *id)

資源管理型 reset_control_get_exclusive_released()

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

已管理 reset_control_get_exclusive_released()。對於從此函式返回的復位控制器,reset_control_put() 在驅動程式分離時會自動呼叫。

有關更多資訊,請參見 reset_control_get_exclusive_released()

int devm_reset_control_bulk_get_exclusive_released(struct device *dev, int num_rstcs, struct reset_control_bulk_data *rstcs)

資源管理型 reset_control_bulk_get_exclusive_released()

引數

struct device *dev

要由控制器復位的裝置

int num_rstcs

rstcs 陣列中的條目數

struct reset_control_bulk_data *rstcs

帶有復位線名稱集的 struct reset_control_bulk_data 陣列

描述

已管理 reset_control_bulk_get_exclusive_released()。對於從此函式返回的復位控制器,reset_control_put() 在驅動程式分離時會自動呼叫。

有關更多資訊,請參見 reset_control_bulk_get_exclusive_released()

struct reset_control *devm_reset_control_get_optional_exclusive_released(struct device *dev, const char *id)

資源管理型 reset_control_get_optional_exclusive_released()

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

reset_control_get_exclusive_released() 的託管和可選變體。對於從此函式返回的復位控制器,reset_control_put() 在驅動程式分離時會自動呼叫。

有關更多資訊,請參見 reset_control_get_exclusive_released()

int devm_reset_control_bulk_get_optional_exclusive_released(struct device *dev, int num_rstcs, struct reset_control_bulk_data *rstcs)

資源管理型 reset_control_bulk_optional_get_exclusive_released()

引數

struct device *dev

要由控制器復位的裝置

int num_rstcs

rstcs 陣列中的條目數

struct reset_control_bulk_data *rstcs

帶有復位線名稱集的 struct reset_control_bulk_data 陣列

描述

已管理 reset_control_bulk_optional_get_exclusive_released()。對於從此函式返回的復位控制器,reset_control_put() 在驅動程式分離時會自動呼叫。

有關更多資訊,請參見 reset_control_bulk_optional_get_exclusive_released()。

struct reset_control *devm_reset_control_get_shared(struct device *dev, const char *id)

資源管理型 reset_control_get_shared()

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

已管理 reset_control_get_shared()。對於從此函式返回的復位控制器,reset_control_put() 在驅動程式分離時會自動呼叫。有關更多資訊,請參見 reset_control_get_shared()

struct reset_control *devm_reset_control_get_shared_deasserted(struct device *dev, const char *id)

資源管理型 reset_control_get_shared() + reset_control_deassert()

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

已管理 reset_control_get_shared() + reset_control_deassert()。對於從此函式返回的復位控制器,reset_control_assert() + reset_control_put() 在驅動程式分離時會自動呼叫。

有關更多資訊,請參見 devm_reset_control_get_shared()

int devm_reset_control_bulk_get_shared(struct device *dev, int num_rstcs, struct reset_control_bulk_data *rstcs)

資源管理型 reset_control_bulk_get_shared()

引數

struct device *dev

要由控制器復位的裝置

int num_rstcs

rstcs 陣列中的條目數

struct reset_control_bulk_data *rstcs

帶有復位線名稱集的 struct reset_control_bulk_data 陣列

描述

已管理 reset_control_bulk_get_shared()。對於從此函式返回的復位控制器,reset_control_put() 在驅動程式分離時會自動呼叫。

有關更多資訊,請參見 reset_control_bulk_get_shared()

int devm_reset_control_bulk_get_shared_deasserted(struct device *dev, int num_rstcs, struct reset_control_bulk_data *rstcs)

資源管理型 reset_control_bulk_get_shared() + reset_control_bulk_deassert()

引數

struct device *dev

要由控制器復位的裝置

int num_rstcs

rstcs 陣列中的條目數

struct reset_control_bulk_data *rstcs

帶有復位線名稱集的 struct reset_control_bulk_data 陣列

描述

已管理 reset_control_bulk_get_shared() + reset_control_bulk_deassert()。對於從此函式返回的復位控制器,reset_control_bulk_assert() + reset_control_bulk_put() 在驅動程式分離時會自動呼叫。

有關更多資訊,請參見 devm_reset_control_bulk_get_shared()

struct reset_control *devm_reset_control_get_optional_exclusive(struct device *dev, const char *id)

資源管理型 reset_control_get_optional_exclusive()

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

已管理 reset_control_get_optional_exclusive()。對於從此函式返回的復位控制器,reset_control_put() 在驅動程式分離時會自動呼叫。

有關更多資訊,請參見 reset_control_get_optional_exclusive()

struct reset_control *devm_reset_control_get_optional_exclusive_deasserted(struct device *dev, const char *id)

資源管理型 reset_control_get_optional_exclusive() + reset_control_deassert()

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

已管理 reset_control_get_optional_exclusive() + reset_control_deassert()。對於從此函式返回的復位控制器,reset_control_assert() + reset_control_put() 在驅動程式分離時會自動呼叫。

有關更多資訊,請參見 devm_reset_control_get_optional_exclusive()

int devm_reset_control_bulk_get_optional_exclusive(struct device *dev, int num_rstcs, struct reset_control_bulk_data *rstcs)

資源管理型 reset_control_bulk_get_optional_exclusive()

引數

struct device *dev

要由控制器復位的裝置

int num_rstcs

rstcs 陣列中的條目數

struct reset_control_bulk_data *rstcs

帶有復位線名稱集的 struct reset_control_bulk_data 陣列

描述

已管理 reset_control_bulk_get_optional_exclusive()。對於從此函式返回的復位控制器,reset_control_put() 在驅動程式分離時會自動呼叫。

有關更多資訊,請參見 reset_control_bulk_get_optional_exclusive()

struct reset_control *devm_reset_control_get_optional_shared(struct device *dev, const char *id)

資源管理型 reset_control_get_optional_shared()

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

已管理 reset_control_get_optional_shared()。對於從此函式返回的復位控制器,reset_control_put() 在驅動程式分離時會自動呼叫。

有關更多資訊,請參見 reset_control_get_optional_shared()

struct reset_control *devm_reset_control_get_optional_shared_deasserted(struct device *dev, const char *id)

資源管理 reset_control_get_optional_shared() + reset_control_deassert()

引數

struct device *dev

要由控制器復位的裝置

const char *id

復位線名稱

描述

已管理 reset_control_get_optional_shared() + reset_control_deassert()。 對於從此函式返回的復位控制器, reset_control_assert() + reset_control_put() 在驅動程式分離時自動呼叫。

有關更多資訊,請參閱 devm_reset_control_get_optional_shared()

int devm_reset_control_bulk_get_optional_shared(struct device *dev, int num_rstcs, struct reset_control_bulk_data *rstcs)

資源管理 reset_control_bulk_get_optional_shared()

引數

struct device *dev

要由控制器復位的裝置

int num_rstcs

rstcs 陣列中的條目數

struct reset_control_bulk_data *rstcs

帶有復位線名稱集的 struct reset_control_bulk_data 陣列

描述

已管理 reset_control_bulk_get_optional_shared()。 對於從此函式返回的復位控制器, reset_control_put() 在驅動程式分離時自動呼叫。

有關更多資訊,請參閱 reset_control_bulk_get_optional_shared()

struct reset_control *devm_reset_control_get_exclusive_by_index(struct device *dev, int index)

資源管理的 reset_control_get_exclusive()

引數

struct device *dev

要由控制器復位的裝置

int index

復位控制器的索引

描述

託管的 reset_control_get_exclusive()。對於從此函式返回的復位控制器,在驅動程式分離時會自動呼叫 reset_control_put()

有關更多資訊,請參見 reset_control_get_exclusive()

struct reset_control *devm_reset_control_get_shared_by_index(struct device *dev, int index)

資源管理 reset_control_get_shared

引數

struct device *dev

要由控制器復位的裝置

int index

復位控制器的索引

描述

已管理 reset_control_get_shared()。對於從此函式返回的復位控制器,reset_control_put() 在驅動程式分離時會自動呼叫。有關更多資訊,請參見 reset_control_get_shared()

int reset_control_reset(struct reset_control *rstc)

復位受控裝置

引數

struct reset_control *rstc

復位控制器

描述

在共享的復位線上,實際的復位脈衝僅針對 reset_control 例項的生命週期觸發一次:對於除第一個呼叫者之外的所有呼叫者,這是一個空操作。當使用了 reset_control_reset 時,消費者不得在共享的復位線上使用 reset_control_(de)assert。

如果 rstc 為 NULL,則這是一個可選的復位,該函式將只返回 0。

int reset_control_rearm(struct reset_control *rstc)

允許重新觸發共享復位線”

引數

struct reset_control *rstc

復位控制器

描述

在共享復位線上,實際復位脈衝僅針對 reset_control 例項的生命週期觸發一次,除非使用了此呼叫。

對該函式的呼叫必須與對 reset_control_reset 的呼叫相平衡,如果 triggered_count 降到 0 以下,則會丟擲警告。

當使用了 reset_control_reset 或 reset_control_rearm 時,消費者不得在共享的復位線上使用 reset_control_(de)assert。

如果 rstc 為 NULL,則該函式將只返回 0。

int reset_control_assert(struct reset_control *rstc)

置位復位線

引數

struct reset_control *rstc

復位控制器

描述

在獨佔復位控制器上呼叫此函式可確保復位將被置位。當在共享復位控制器上呼叫時,只要其他使用者保持這樣做,該線路仍然可能被取消置位。

對於共享的復位控制元件,驅動程式不能期望硬體的暫存器和內部狀態被複位,但必須準備好發生這種情況。當使用了 reset_control_(de)assert 時,消費者不得在共享的復位線上使用 reset_control_reset。

如果 rstc 為 NULL,則這是一個可選的復位,該函式將只返回 0。

int reset_control_deassert(struct reset_control *rstc)

取消置位復位線

引數

struct reset_control *rstc

復位控制器

描述

在呼叫此函式後,保證復位被取消置位。當使用了 reset_control_(de)assert 時,消費者不得在共享的復位線上使用 reset_control_reset。

如果 rstc 為 NULL,則這是一個可選的復位,該函式將只返回 0。

int reset_control_status(struct reset_control *rstc)

如果不支援則返回負的 errno,如果復位線被置位則返回正值,或者如果復位線未被置位或者 desc 為 NULL(可選的復位),則返回零。

引數

struct reset_control *rstc

復位控制器

int reset_control_acquire(struct reset_control *rstc)

獲取復位控制元件以供獨佔使用

引數

struct reset_control *rstc

復位控制元件

描述

這用於顯式地獲取復位控制元件以供獨佔使用。 請注意,預設情況下,獨佔復位被請求為已獲取。 為了使第二個使用者能夠控制復位,第一個使用者必須首先釋放它。 通常,實現此目的的最簡單方法是呼叫 reset_control_get_exclusive_released() 以獲取復位控制元件的例項。 預設情況下,此類復位控制元件未被獲取。

實現對獨佔復位的共享訪問的使用者需要遵循特定的協議才能協同工作。 在使用者可以更改復位之前,他們必須使用 reset_control_acquire() 獲取獨佔訪問許可權。 在完成復位操作後,他們必須透過呼叫 reset_control_release() 來釋放獨佔訪問許可權。 只要另一個使用者尚未釋放復位,使用者就不會被授予對復位的獨佔訪問許可權。

另請參閱:reset_control_release()

void reset_control_release(struct reset_control *rstc)

釋放對復位控制元件的獨佔訪問許可權

引數

struct reset_control *rstc

復位控制元件

描述

釋放先前透過呼叫 reset_control_acquire() 獲得的對復位控制元件的獨佔訪問許可權。 在使用者呼叫此函式之前,不會向其他使用者授予獨佔訪問許可權。

另請參閱:reset_control_acquire()

void reset_control_put(struct reset_control *rstc)

釋放復位控制器

引數

struct reset_control *rstc

復位控制器

int of_reset_control_get_count(struct device_node *node)

計算裝置可用的復位次數

引數

struct device_node *node

包含“resets”的裝置節點。

描述

成功時返回正復位計數,失敗和計數為零時返回錯誤號。

struct reset_control *of_reset_control_array_get(struct device_node *np, enum reset_control_flags flags)

使用裝置節點獲取復位控制元件列表。

引數

struct device_node *np

請求復位控制元件陣列的裝置的裝置節點

enum reset_control_flags flags

復位控制元件是否共享、可選、已獲取

描述

成功時返回指向已分配的 reset_control 的指標,失敗時返回錯誤

struct reset_control *devm_reset_control_array_get(struct device *dev, enum reset_control_flags flags)

資源管理復位控制元件陣列獲取

引數

struct device *dev

請求復位控制元件列表的裝置

enum reset_control_flags flags

復位控制元件是否共享、可選、已獲取

描述

復位控制元件陣列 API 適用於只需置位或取消置位的復位列表,而對順序沒有任何要求。

成功時返回指向已分配的 reset_control 的指標,失敗時返回錯誤

int reset_control_get_count(struct device *dev)

計算裝置可用的復位次數

引數

struct device *dev

為其返回復位次數的裝置

描述

成功時返回正復位計數,失敗和計數為零時返回錯誤號。

復位控制器驅動程式 API

復位控制器驅動程式應在靜態常量結構 reset_control_ops 中實現必要的功能,分配並填寫 struct reset_controller_dev,並使用 devm_reset_controller_register() 註冊它。

struct reset_control_ops

復位控制器驅動程式回撥

定義:

struct reset_control_ops {
    int (*reset)(struct reset_controller_dev *rcdev, unsigned long id);
    int (*assert)(struct reset_controller_dev *rcdev, unsigned long id);
    int (*deassert)(struct reset_controller_dev *rcdev, unsigned long id);
    int (*status)(struct reset_controller_dev *rcdev, unsigned long id);
};

成員

復位

對於自動取消置位的復位,執行復位裝置所需的所有操作

置位

如果支援,則手動置位復位線

取消置位

如果支援,則手動取消置位復位線

狀態

如果支援,則返回復位線的狀態

struct reset_control_lookup

表示單個查詢條目

定義:

struct reset_control_lookup {
    struct list_head list;
    const char *provider;
    unsigned int index;
    const char *dev_id;
    const char *con_id;
};

成員

列表

所有復位查詢條目的內部列表

提供程式

控制此復位線的復位控制器裝置的名稱

索引

復位控制器裝置中復位控制器的 ID

dev_id

與此復位線關聯的裝置的名稱

con_id

復位線的名稱(可以為 NULL)

struct reset_controller_dev

可以提供多個復位控制元件的復位控制器實體

定義:

struct reset_controller_dev {
    const struct reset_control_ops *ops;
    struct module *owner;
    struct list_head list;
    struct list_head reset_control_head;
    struct device *dev;
    struct device_node *of_node;
    const struct of_phandle_args *of_args;
    int of_reset_n_cells;
    int (*of_xlate)(struct reset_controller_dev *rcdev, const struct of_phandle_args *reset_spec);
    unsigned int nr_resets;
};

成員

操作

指向裝置特定的 struct reset_control_ops 的指標

所有者

復位控制器驅動程式的核心模組

列表

復位控制器裝置的內部列表

reset_control_head

請求的復位控制元件的內部列表的頭

開發

相應的驅動程式模型裝置 struct

of_node

相應的裝置樹節點作為 phandle 目標

of_args

對於 reset-gpios 控制器:帶有 of_node 的相應 phandle 引數和補充 of_node 的 GPIO 編號;應該存在此引數或 of_node

of_reset_n_cells

復位線說明符中的單元格數

of_xlate

轉換函式,用於將裝置樹中找到的說明符轉換為賦予復位控制操作的 ID,預設為 of_reset_simple_xlate()

nr_resets

此復位控制器裝置中的復位控制元件數

int of_reset_simple_xlate(struct reset_controller_dev *rcdev, const struct of_phandle_args *reset_spec)

將 reset_spec 轉換為復位線編號

引數

struct reset_controller_dev *rcdev

指向復位控制器裝置的指標

const struct of_phandle_args *reset_spec

裝置樹中找到的復位線說明符

描述

如果在 reset_controller_dev 中未設定 of_xlate,則預設使用此靜態轉換函式。 它適用於具有 1:1 對映的所有復位控制器,其中復位線可以透過數字進行索引,而沒有間隔。

int reset_controller_register(struct reset_controller_dev *rcdev)

註冊復位控制器裝置

引數

struct reset_controller_dev *rcdev

指向已初始化的復位控制器裝置的指標

void reset_controller_unregister(struct reset_controller_dev *rcdev)

登出一個復位控制器裝置

引數

struct reset_controller_dev *rcdev

指向復位控制器裝置的指標

int devm_reset_controller_register(struct device *dev, struct reset_controller_dev *rcdev)

資源管理 reset_controller_register()

引數

struct device *dev

註冊此復位控制器的裝置

struct reset_controller_dev *rcdev

指向已初始化的復位控制器裝置的指標

描述

託管的 reset_controller_register()。對於由此函式註冊的復位控制器,會在驅動程式分離時自動呼叫 reset_controller_unregister()。有關更多資訊,請參見 reset_controller_register()

void reset_controller_add_lookup(struct reset_control_lookup *lookup, unsigned int num_entries)

註冊一組查詢條目

引數

struct reset_control_lookup *lookup

復位查詢條目陣列

unsigned int num_entries

查詢陣列中的條目數