复位控制器 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

查找数组中的条目数