通用输入/输出 (GPIO)¶
目录
核心¶
-
struct gpio_irq_chip¶
GPIO 中断控制器
定义:
struct gpio_irq_chip {
struct irq_chip *chip;
struct irq_domain *domain;
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY;
struct fwnode_handle *fwnode;
struct irq_domain *parent_domain;
int (*child_to_parent_hwirq)(struct gpio_chip *gc,unsigned int child_hwirq,unsigned int child_type,unsigned int *parent_hwirq, unsigned int *parent_type);
int (*populate_parent_alloc_arg)(struct gpio_chip *gc,union gpio_irq_fwspec *fwspec,unsigned int parent_hwirq, unsigned int parent_type);
unsigned int (*child_offset_to_irq)(struct gpio_chip *gc, unsigned int pin);
struct irq_domain_ops child_irq_domain_ops;
#endif;
irq_flow_handler_t handler;
unsigned int default_type;
struct lock_class_key *lock_key;
struct lock_class_key *request_key;
irq_flow_handler_t parent_handler;
union {
void *parent_handler_data;
void **parent_handler_data_array;
};
unsigned int num_parents;
unsigned int *parents;
unsigned int *map;
bool threaded;
bool per_parent_data;
bool initialized;
bool domain_is_allocated_externally;
int (*init_hw)(struct gpio_chip *gc);
void (*init_valid_mask)(struct gpio_chip *gc,unsigned long *valid_mask, unsigned int ngpios);
unsigned long *valid_mask;
unsigned int first;
void (*irq_enable)(struct irq_data *data);
void (*irq_disable)(struct irq_data *data);
void (*irq_unmask)(struct irq_data *data);
void (*irq_mask)(struct irq_data *data);
};
成员
chip
GPIO IRQ 芯片实现,由 GPIO 驱动程序提供。
domain
中断转换域;负责在 GPIO hwirq 编号和 Linux IRQ 编号之间进行映射。
fwnode
与此 gpiochip/irqchip 对应的固件节点,对于分层 irqdomain 支持是必需的。
parent_domain
如果非 NULL,将设置为此 GPIO 中断控制器的 IRQ 域的父域,以建立分层中断域。 它的存在将激活分层中断支持。
child_to_parent_hwirq
此回调将子硬件 IRQ 偏移量转换为分层中断芯片上的父硬件 IRQ 偏移量。 子硬件 IRQ 对应于 GPIO 索引 0..ngpio-1(请参阅
struct gpio_chip
的 ngpio 字段),相应的父硬件 IRQ 和类型(例如 IRQ_TYPE_*)应由驱动程序返回。 驱动程序可以从偏移量或使用查找表或最适合此芯片的任何方法来计算此值。 在驱动程序中成功转换后返回 0。如果某些硬件 IRQ 范围没有相应的父 HWIRQ,则返回 -EINVAL,但也要确保填写 **valid_mask** 和 **need_valid_mask** 以使这些 GPIO 线无法用于转换。
populate_parent_alloc_arg
此可选回调分配并填充父级的 IRQ 域的特定结构。 如果未指定,则将使用
gpiochip_populate_parent_fwspec_twocell
。 还有一个名为gpiochip_populate_parent_fwspec_fourcell
的四单元变体可用。child_offset_to_irq
此可选回调用于将 GPIO 芯片上的子 GPIO 线偏移量转换为 GPIO to_irq() 回调的 IRQ 编号。 如果未指定,则将提供一个默认回调,该回调将返回行偏移量。
child_irq_domain_ops
将用于此 GPIO IRQ 芯片的 IRQ 域操作。 如果未提供任何操作,则将填充默认回调以设置 IRQ 层次结构。 一些驱动程序需要提供自己的转换函数。
handler
用于 GPIO IRQ 的 IRQ 处理程序(通常是预定义 IRQ 核心函数),由 GPIO 驱动程序提供。
default_type
在 GPIO 驱动程序初始化期间应用的默认 IRQ 触发类型,由 GPIO 驱动程序提供。
lock_key
每个 GPIO IRQ 芯片的 lockdep 类用于 IRQ 锁定。
request_key
每个 GPIO IRQ 芯片的 lockdep 类用于 IRQ 请求。
parent_handler
GPIO 芯片的父中断的中断处理程序,如果父中断是嵌套的而不是级联的,则可以为 NULL。
{unnamed_union}
anonymous
parent_handler_data
如果 per_parent_data 为 false,则 parent_handler_data 是一个用作与每个父中断关联的数据的单个指针。
parent_handler_data_array
如果 per_parent_data 为 true,则 parent_handler_data_array 是一个 num_parents 指针数组,用于为每个父级关联不同的数据。 如果 per_parent_data 为 true,则不能为 NULL。
num_parents
GPIO 芯片的父中断的数量。
parents
GPIO 芯片的父中断列表。 这由驱动程序拥有,因此核心只会引用此列表,而不会修改它。
map
GPIO 芯片的每条线的父中断列表。
threaded
如果设置了中断处理使用嵌套线程,则为 True。
per_parent_data
如果 parent_handler_data_array 描述一个要用作父数据的 num_parents 大小的数组,则为 True。
initialized
跟踪 GPIO 芯片 irq 成员初始化的标志。 此标志将确保在初始化之前不使用 GPIO 芯片 irq 成员。
domain_is_allocated_externally
如果 irq_domain 是在 gpiolib 之外分配的,则为 True,在这种情况下,gpiolib 不会自行释放 irq_domain。
init_hw
在添加 IRQ 芯片之前初始化硬件的可选例程。 当特定驱动程序想要清除 IRQ 相关寄存器以避免不必要的事件时,这非常有用。
init_valid_mask
用于初始化 valid_mask 的可选例程,如果不是所有 GPIO 线都是有效的中断,则使用该例程。 有时,某些线只是无法触发中断,并且此例程(如果已定义)会在 “valid_mask” 中传递一个位图,并且它将从 0..(ngpios-1) 设置 ngpios 位为 “1”,就像有效一样。 然后,回调可以直接将某些位设置为 “0”,如果它们不能用于中断。
valid_mask
如果不是
NULL
,则保存位掩码,指示哪些 GPIO 可以包含在芯片的 IRQ 域中。first
静态 IRQ 分配所必需。 如果设置,
irq_domain_create_simple()
将在初始化期间分配和映射所有 IRQ。irq_enable
存储旧的 irq_chip irq_enable 回调
irq_disable
存储旧的 irq_chip irq_disable 回调
irq_unmask
存储旧的 irq_chip irq_unmask 回调
irq_mask
存储旧的 irq_chip irq_mask 回调
-
struct gpio_chip¶
抽象 GPIO 控制器
定义:
struct gpio_chip {
const char *label;
struct gpio_device *gpiodev;
struct device *parent;
struct fwnode_handle *fwnode;
struct module *owner;
int (*request)(struct gpio_chip *gc, unsigned int offset);
void (*free)(struct gpio_chip *gc, unsigned int offset);
int (*get_direction)(struct gpio_chip *gc, unsigned int offset);
int (*direction_input)(struct gpio_chip *gc, unsigned int offset);
int (*direction_output)(struct gpio_chip *gc, unsigned int offset, int value);
int (*get)(struct gpio_chip *gc, unsigned int offset);
int (*get_multiple)(struct gpio_chip *gc,unsigned long *mask, unsigned long *bits);
void (*set)(struct gpio_chip *gc, unsigned int offset, int value);
void (*set_multiple)(struct gpio_chip *gc,unsigned long *mask, unsigned long *bits);
int (*set_rv)(struct gpio_chip *gc,unsigned int offset, int value);
int (*set_multiple_rv)(struct gpio_chip *gc,unsigned long *mask, unsigned long *bits);
int (*set_config)(struct gpio_chip *gc,unsigned int offset, unsigned long config);
int (*to_irq)(struct gpio_chip *gc, unsigned int offset);
void (*dbg_show)(struct seq_file *s, struct gpio_chip *gc);
int (*init_valid_mask)(struct gpio_chip *gc,unsigned long *valid_mask, unsigned int ngpios);
int (*add_pin_ranges)(struct gpio_chip *gc);
int (*en_hw_timestamp)(struct gpio_chip *gc,u32 offset, unsigned long flags);
int (*dis_hw_timestamp)(struct gpio_chip *gc,u32 offset, unsigned long flags);
int base;
u16 ngpio;
u16 offset;
const char *const *names;
bool can_sleep;
#if IS_ENABLED(CONFIG_GPIO_GENERIC);
unsigned long (*read_reg)(void __iomem *reg);
void (*write_reg)(void __iomem *reg, unsigned long data);
bool be_bits;
void __iomem *reg_dat;
void __iomem *reg_set;
void __iomem *reg_clr;
void __iomem *reg_dir_out;
void __iomem *reg_dir_in;
bool bgpio_dir_unreadable;
bool bgpio_pinctrl;
int bgpio_bits;
raw_spinlock_t bgpio_lock;
unsigned long bgpio_data;
unsigned long bgpio_dir;
#endif ;
#ifdef CONFIG_GPIOLIB_IRQCHIP;
struct gpio_irq_chip irq;
#endif ;
#if defined(CONFIG_OF_GPIO);
unsigned int of_gpio_n_cells;
bool (*of_node_instance_match)(struct gpio_chip *gc, unsigned int i);
int (*of_xlate)(struct gpio_chip *gc, const struct of_phandle_args *gpiospec, u32 *flags);
#endif ;
};
成员
label
GPIO 设备的功能名称,例如零件号或实现它的 SoC IP 块的名称。
gpiodev
内部状态保持器,不透明结构
parent
提供 GPIO 的可选父设备
fwnode
可选的 fwnode 提供此控制器的属性
owner
有助于防止删除导出活动 GPIO 的模块
request
芯片特定激活的可选钩子,例如启用模块电源和时钟;可能会休眠;成功时必须返回 0,失败时返回负错误编号
free
芯片特定停用的可选钩子,例如禁用模块电源和时钟;可能会休眠
get_direction
返回信号 “offset” 的方向,0=输出,1=输入(与 GPIO_LINE_DIRECTION_OUT / GPIO_LINE_DIRECTION_IN 相同),或负错误。 建议始终实现此函数,即使在仅输入或仅输出 gpio 芯片上也是如此。
direction_input
将信号 “offset” 配置为输入,成功时返回 0 或负错误编号。 可以在仅输入或仅输出 gpio 芯片上省略此项。
direction_output
将信号 “offset” 配置为输出,成功时返回 0 或负错误编号。 可以在仅输入或仅输出 gpio 芯片上省略此项。
get
返回信号 “offset” 的值,0=低,1=高,或负错误
get_multiple
读取由 “mask” 定义的多个信号的值,并将它们存储在 “bits” 中,成功时返回 0 或负错误
set
已弃用 - 请改用 set_rv()
set_multiple
已弃用 - 请改用 set_multiple_rv()
set_rv
分配信号 “offset” 的输出值,成功时返回 0 或负错误值
set_multiple_rv
分配由 “mask” 定义的多个信号的输出值,成功时返回 0 或负错误值
set_config
用于各种设置的可选钩子。 使用与通用 pinconf 相同的打包配置格式。 成功时必须返回 0,失败时返回负错误编号。
to_irq
支持非静态
gpiod_to_irq()
映射的可选钩子;实现可能不会休眠dbg_show
在 debugfs 中显示内容的可选例程;省略此项时将使用默认代码,但自定义代码可以显示额外的状态(例如上拉/下拉配置)。
init_valid_mask
用于初始化 valid_mask 的可选例程,如果不是所有 GPIO 都有效,则使用该例程。
add_pin_ranges
初始化引脚范围的可选例程,当需要提供 GPIO 功能的引脚的特殊映射时使用。 它在添加 GPIO 芯片之后和添加 IRQ 芯片之前调用。
en_hw_timestamp
依赖于 GPIO 芯片,用于启用硬件时间戳的可选例程。
dis_hw_timestamp
依赖于 GPIO 芯片,用于禁用硬件时间戳的可选例程。
base
标识此芯片处理的第一个 GPIO 编号;或者,如果在注册期间为负,则请求动态 ID 分配。 弃用:提供任何非负值并锁定 GPIO 芯片的基本偏移量已弃用。 请传递 -1 作为 base,以便 gpiolib 在所有可能的情况下选择芯片 base。 我们希望从长远来看摆脱静态 GPIO 编号空间。
ngpio
此控制器处理的 GPIO 的数量;处理的最后一个 GPIO 是 (base + ngpio - 1)。
offset
当多个 gpio 芯片属于同一设备时,可以使用此值作为设备中的偏移量,以便可以正确分配友好的名称。
names
如果设置,则必须是要用作此芯片中 GPIO 的备用名称的字符串数组。 如果 GPIO 没有别名,则数组中的任何条目都可以为 NULL,但是数组的长度必须为 ngpio 条目。
can_sleep
如果 get()/set() 方法休眠,则必须设置标志,因为它们必须通过 I2C 或 SPI 访问 GPIO 扩展芯片时休眠。 这意味着如果芯片支持 IRQ,则需要对这些 IRQ 进行线程处理,因为芯片访问可能会在休眠时(例如,读取 IRQ 状态寄存器)休眠。
read_reg
通用 GPIO 的读取器函数
write_reg
通用 GPIO 的写入器函数
be_bits
如果通用 GPIO 具有大端位顺序(位 31 表示行 0,位 30 表示行 1 ... 位 0 表示行 31),则通用 GPIO 核心会将其设置为 true。 它仅用于内部管理。
reg_dat
通用 GPIO 的数据(输入)寄存器
reg_set
通用 GPIO 的输出设置寄存器(输出=高)
reg_clr
通用 GPIO 的输出清除寄存器(输出=低)
reg_dir_out
通用 GPIO 的方向输出设置寄存器
reg_dir_in
通用 GPIO 的方向输入设置寄存器
bgpio_dir_unreadable
指示方向寄存器无法读取,我们需要依赖于我们的内部状态跟踪。
bgpio_pinctrl
通用 GPIO 使用引脚控制后端。
bgpio_bits
用于通用 GPIO 的寄存器位数,即 <寄存器宽度> * 8
bgpio_lock
用于锁定 chip->bgpio_data。 此外,需要将阴影数据寄存器和实际数据寄存器写入在一起。
bgpio_data
通用 GPIO 的阴影数据寄存器,用于安全地清除/设置位。
bgpio_dir
通用 GPIO 的阴影方向寄存器,用于安全地清除/设置方向。 此字中的 “1” 表示该行设置为输出。
irq
将中断芯片功能与 GPIO 芯片集成。 可用于处理大多数实际情况的 IRQ。
of_gpio_n_cells
用于形成 GPIO 说明符的单元格数。 标准为 2 个单元格
gpios = <
gpio
偏移量标志>;一些复杂的 GPIO 控制器为每个设备树节点实例化多个芯片,并具有 3 个单元格
gpios = <
gpio
实例偏移量标志>;旧式 GPIO 控制器甚至可能具有 1 个单元格
gpios = <
gpio
偏移量>;of_node_instance_match
确定芯片是否是正确的实例。 必须由每个设备树节点使用多个 gpio_chip 的任何驱动程序实现。 如果 gc 是 i 指示的实例(这是 GPIO 线和 gpio-ranges 的 phandles 中的第一个单元格),则返回 true。
of_xlate
回调以将设备树 GPIO 说明符转换为芯片相关的 GPIO 编号和标志。
描述
gpio_chip 可以帮助平台抽象各种 GPIO 源,以便可以通过通用编程接口访问它们。 示例源包括 SOC 控制器、FPGA、多功能芯片、专用 GPIO 扩展器等。
每个芯片控制多个信号,这些信号在方法调用中由 0..(ngpio - 1) 范围内的 “offset” 值标识。 当通过诸如 gpio_get_value(gpio) 之类的调用引用这些信号时,offset 是通过从 gpio 编号中减去 base 来计算的。
-
for_each_hwgpio_in_range¶
for_each_hwgpio_in_range (_chip, _i, _base, _size, _label)
迭代给定范围内的所有 GPIO
参数
_chip
要迭代的芯片。
_i
循环计数器。
_base
游侠中的第一个 GPIO。
_size
要从 base 开始检查的 GPIO 的数量。
_label
如果请求了 GPIO,则存储标签地址的位置。 对于未使用的 GPIO,设置为 NULL。
-
for_each_hwgpio¶
for_each_hwgpio (_chip, _i, _label)
迭代给定芯片的所有 GPIO。
参数
_chip
要迭代的芯片。
_i
循环计数器。
_label
如果请求了 GPIO,则存储标签地址的位置。 对于未使用的 GPIO,设置为 NULL。
-
for_each_requested_gpio_in_range¶
for_each_requested_gpio_in_range (_chip, _i, _base, _size, _label)
迭代给定范围内的已请求 GPIO
参数
_chip
要查询的芯片
_i
循环变量
_base
范围内的第一个 GPIO
_size
要从 base 开始检查的 GPIO 的数量
_label
当前 GPIO 的标签
-
gpiochip_add_data¶
gpiochip_add_data (gc, data)
注册一个 gpio_chip
参数
gc
要注册的芯片,需要初始化 gc->base
data
与此芯片关联的驱动私有数据
上下文
可能在中断工作之前
描述
当 gpiochip_add_data()
在启动过程中很早被调用,以便可以自由使用 GPIO,gc->parent 设备必须在 gpio 框架的 arch_initcall() 之前注册。否则,GPIO 的 sysfs 初始化将粗鲁地失败。
gpiochip_add_data()
必须仅在 gpiolib 初始化之后调用,即在 core_initcall() 之后。
如果 gc->base 为负,则表示请求动态分配一系列有效的 GPIO。
返回值
如果无法注册芯片,则返回一个负 errno,例如因为 gc->base 无效或已与不同的芯片关联。 否则,它返回零作为成功代码。
-
struct gpio_pin_range¶
由 gpio 芯片控制的引脚范围
定义:
struct gpio_pin_range {
struct list_head node;
struct pinctrl_dev *pctldev;
struct pinctrl_gpio_range range;
};
成员
node
用于维护引脚范围集的列表,内部使用
pctldev
处理相应引脚的 pinctrl 设备
range
由 GPIO 控制器控制的实际引脚范围
-
struct gpio_desc *gpio_to_desc(unsigned gpio)¶
将 GPIO 编号转换为其描述符
参数
unsigned gpio
全局 GPIO 编号
返回值
与给定 GPIO 关联的 GPIO 描述符。如果系统中不存在具有给定编号的 GPIO,则为 NULL
。
-
struct gpio_desc *gpio_device_get_desc(struct gpio_device *gdev, unsigned int hwnum)¶
获取此 GPIO 设备的给定硬件编号对应的 GPIO 描述符
参数
struct gpio_device *gdev
从中获取描述符的 GPIO 设备
unsigned int hwnum
此芯片的 GPIO 的硬件编号
返回值
指向 GPIO 描述符的指针。如果指定硬件编号的给定芯片中不存在 GPIO,则为 EINVAL
。如果基础芯片已消失,则为 ENODEV
。
描述
struct gpio_device 的引用计数NOT增加,就像请求 GPIO 以供独占使用时一样。调用者需要确保 GPIO 设备与其返回的描述符一起保持活动状态。
-
int desc_to_gpio(const struct gpio_desc *desc)¶
将 GPIO 描述符转换为整数命名空间
参数
const struct gpio_desc *desc
GPIO 描述符
描述
这应该在将来消失,但由于我们仍然使用 GPIO 编号进行错误消息和 sysfs 节点,因此是必需的。
返回值
由其描述符指定的 GPIO 的全局 GPIO 编号。
参数
const struct gpio_desc *desc
要返回芯片的描述符
描述
已弃用 此函数不安全,不应使用。 在不采用 SRCU 读取锁的情况下使用芯片地址可能会导致取消引用悬空指针。
返回值
支持此设备的 GPIO 芯片的地址。
-
struct gpio_device *gpiod_to_gpio_device(struct gpio_desc *desc)¶
返回此描述符所属的 GPIO 设备。
参数
struct gpio_desc *desc
要返回 GPIO 设备的描述符。
描述
这DOES NOT增加 GPIO 设备的引用计数,因为期望请求描述符,并且用户已经持有对设备的引用。
返回值
拥有此描述符的 GPIO 设备的地址。
-
bool gpiod_is_equal(struct gpio_desc *desc, struct gpio_desc *other)¶
检查两个 GPIO 描述符是否引用同一个引脚。
参数
struct gpio_desc *desc
要比较的描述符。
struct gpio_desc *other
要比较的第二个描述符。
返回值
如果描述符引用同一个物理引脚,则为 True。否则为 False。
-
int gpio_device_get_base(struct gpio_device *gdev)¶
获取此设备分配的基本 GPIO 编号
参数
struct gpio_device *gdev
GPIO 设备
返回值
此设备在全局 GPIO 编号空间中的第一个 GPIO 编号。
-
const char *gpio_device_get_label(struct gpio_device *gdev)¶
获取此 GPIO 设备的标签
参数
struct gpio_device *gdev
GPIO 设备
返回值
指向包含 GPIO 设备标签的字符串的指针。字符串的生存期与基础 GPIO 设备的生存期相关联。
参数
struct gpio_device *gdev
GPIO 设备
返回值
支持此设备的 GPIO 芯片的地址。
描述
已弃用 在我们可以摆脱 struct gpio_chip
的所有非驱动程序用户之前,我们必须提供一种从 struct gpio_device 检索指向它的指针的方法。这NOT安全,因为 GPIO API 被认为是可热插拔的,并且芯片可能随时消失(与引用计数的 struct gpio_device 不同)。
使用风险自负。
-
int gpiod_get_direction(struct gpio_desc *desc)¶
返回 GPIO 的当前方向
参数
struct gpio_desc *desc
要获取方向的 GPIO
返回值
输出为 0,输入为 1,如果出错,则为错误代码。
描述
如果 gpiod_cansleep()
为真,此函数可能会睡眠。
参数
const struct gpio_chip *gc
查询其有效性信息的 GPIO 芯片
返回值
表示有效 GPIO 的位图。如果所有 GPIO 都有效,则为 NULL。
描述
某些 GPIO 芯片可能支持某些引脚不可用的配置。 这些芯片可以设置 valid_mask 以表示有效的 GPIO。 此函数可用于检索此信息。
参数
struct gpio_chip *gc
GPIO 芯片
返回值
芯片的每个子驱动程序数据。
参数
struct gpio_chip *gc
要注销的芯片
描述
不能删除具有任何仍被请求的 GPIO 的 gpio_chip。
-
struct gpio_device *gpio_device_find(const void *data, int (*match)(struct gpio_chip *gc, const void *data))¶
查找特定的 GPIO 设备
参数
const void *data
要传递给匹配函数的数据
int (*match)(struct gpio_chip *gc, const void *data)
用于检查 gpio_chip 的回调函数
返回值
struct gpio_device 的新引用。
描述
类似于 bus_find_device()
。它根据用户提供的 match 回调返回对 gpio_device 的引用。如果设备不匹配,回调应返回 0,如果匹配,则返回非零值。如果回调返回非零值,则此函数将返回给调用者,并且不会遍历任何更多的 gpio_devices。
回调函数将 GPIO 芯片结构作为参数。在回调函数执行期间,芯片受到保护,免于被释放。TODO:这实际上尚未实现。
如果该函数返回非 NULL,则必须使用 gpio_device_put()
释放返回的引用。
-
struct gpio_device *gpio_device_find_by_label(const char *label)¶
围绕
gpio_device_find()
的包装器,通过其支持芯片的标签查找 GPIO 设备
-
struct gpio_device *gpio_device_find_by_fwnode(const struct fwnode_handle *fwnode)¶
围绕
gpio_device_find()
的包装器,通过其 fwnode 查找 GPIO 设备
-
struct gpio_device *gpio_device_get(struct gpio_device *gdev)¶
增加此 GPIO 设备的引用计数
参数
struct gpio_device *gdev
要增加引用计数的 GPIO 设备
返回值
指向 gdev 的指针。
-
void gpio_device_put(struct gpio_device *gdev)¶
减少此 GPIO 设备的引用计数,并可能释放与之关联的所有资源。
参数
struct gpio_device *gdev
要减少引用计数的 GPIO 设备
-
struct device *gpio_device_to_device(struct gpio_device *gdev)¶
检索基础
struct device
的地址。
参数
struct gpio_device *gdev
要返回地址的 GPIO 设备。
描述
这不会增加 GPIO 设备或基础 struct device
的引用计数。
返回值
支持此 GPIO 设备的 struct device
的地址。
-
int gpiochip_irqchip_add_domain(struct gpio_chip *gc, struct irq_domain *domain)¶
将一个 irqdomain 添加到一个 gpiochip
参数
struct gpio_chip *gc
要向其添加 irqchip 的 gpiochip
struct irq_domain *domain
要添加到 gpiochip 的 irqdomain
描述
此函数将一个 IRQ 域添加到 gpiochip。
返回值
成功时返回 0,失败时返回负的 errno。
参数
struct gpio_chip *gc
拥有 GPIO 的 gpiochip
unsigned int offset
要为 GPIO 功能请求的 GPIO 偏移量
返回值
成功时返回 0,失败时返回负的 errno。
参数
struct gpio_chip *gc
要为其请求 gpio 功能的 gpiochip
unsigned int offset
要从 GPIO 功能释放的 GPIO 偏移量
-
int gpiochip_generic_config(struct gpio_chip *gc, unsigned int offset, unsigned long config)¶
应用引脚的配置
参数
struct gpio_chip *gc
拥有 GPIO 的 gpiochip
unsigned int offset
要应用配置的 GPIO 偏移量
unsigned long config
要应用的配置
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiochip_add_pingroup_range(struct gpio_chip *gc, struct pinctrl_dev *pctldev, unsigned int gpio_offset, const char *pin_group)¶
添加 GPIO <-> 引脚映射的范围
参数
struct gpio_chip *gc
要为其添加范围的 gpiochip
struct pinctrl_dev *pctldev
要映射到的引脚控制器
unsigned int gpio_offset
当前 gpio_chip 编号空间中的起始偏移量
const char *pin_group
引脚控制器内的引脚组的名称
描述
直接从 DeviceTree 支持的 pinctrl 驱动程序调用此函数已被弃用。请参阅 Documentation/devicetree/bindings/gpio/gpio.txt 的第 2.1 节,了解如何通过 “gpio-ranges” 属性绑定 pinctrl 和 gpio 驱动程序。
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiochip_add_pin_range(struct gpio_chip *gc, const char *pinctl_name, unsigned int gpio_offset, unsigned int pin_offset, unsigned int npins)¶
添加 GPIO <-> 引脚映射的范围
参数
struct gpio_chip *gc
要为其添加范围的 gpiochip
const char *pinctl_name
要映射到的引脚控制器的
dev_name()
unsigned int gpio_offset
当前 gpio_chip 编号空间中的起始偏移量
unsigned int pin_offset
引脚控制器编号空间中的起始偏移量
unsigned int npins
从每个引脚空间(GPIO 和引脚控制器)的偏移量开始,在此范围内累积的引脚数
描述
直接从 DeviceTree 支持的 pinctrl 驱动程序调用此函数已被弃用。请参阅 Documentation/devicetree/bindings/gpio/gpio.txt 的第 2.1 节,了解如何通过 “gpio-ranges” 属性绑定 pinctrl 和 gpio 驱动程序。
返回值
成功时返回 0,失败时返回负的 errno。
参数
struct gpio_chip *gc
要为其删除所有映射的芯片
参数
struct gpio_chip *gc
控制此行的 GPIO 芯片。
unsigned int offset
该行的硬件偏移量。
返回值
指向使用者标签副本的指针(如果已请求该行),否则为 NULL。如果返回了有效的指针,则必须使用 kfree()
释放它。如果发生内存分配错误,该函数将返回 ENOMEM
。
描述
不得从原子上下文中调用。
-
struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *gc, unsigned int hwnum, const char *label, enum gpio_lookup_flags lflags, enum gpiod_flags dflags)¶
允许 GPIO 芯片请求自己的描述符
参数
struct gpio_chip *gc
GPIO 芯片
unsigned int hwnum
要为其请求描述符的 GPIO 的硬件编号
const char *label
GPIO 的标签
enum gpio_lookup_flags lflags
此 GPIO 的查找标志,如果为默认值则为 0,这可用于指定诸如具有机器标志(例如 GPIO_OUT_LOW)的线路反转语义
enum gpiod_flags dflags
此 GPIO 的描述符请求标志,如果为默认值则为 0,这可用于指定使用者语义,例如开漏
描述
函数允许 GPIO 芯片驱动程序通过 gpiolib API 请求并使用它们自己的 GPIO 描述符。与 gpiod_request() 的区别在于,此函数不会增加 GPIO 芯片模块的引用计数。这允许根据需要卸载 GPIO 芯片模块(我们假设 GPIO 芯片驱动程序处理释放它已请求的 GPIO)。
返回值
指向 GPIO 描述符的指针,或者指向 ERR_PTR()
编码的负错误代码(如果失败)。
-
void gpiochip_free_own_desc(struct gpio_desc *desc)¶
释放芯片驱动程序请求的 GPIO
-
int gpiod_direction_input(struct gpio_desc *desc)¶
将 GPIO 方向设置为输入
参数
struct gpio_desc *desc
要设置为输入的 GPIO
描述
将传递的 GPIO 的方向设置为输入,例如可以在其上安全地调用 gpiod_get_value()
。
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiod_direction_output_raw(struct gpio_desc *desc, int value)¶
将 GPIO 方向设置为输出
参数
struct gpio_desc *desc
要设置为输出的 GPIO
int value
GPIO 的初始输出值
描述
将传递的 GPIO 的方向设置为输出,例如可以在其上安全地调用 gpiod_set_value()
。输出的初始值必须指定为物理线路上的原始值,而不考虑 ACTIVE_LOW 状态。
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiod_direction_output(struct gpio_desc *desc, int value)¶
将 GPIO 方向设置为输出
参数
struct gpio_desc *desc
要设置为输出的 GPIO
int value
GPIO 的初始输出值
描述
将传递的 GPIO 的方向设置为输出,例如可以在其上安全地调用 gpiod_set_value()
。输出的初始值必须指定为 GPIO 的逻辑值,即考虑其 ACTIVE_LOW 状态。
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiod_enable_hw_timestamp_ns(struct gpio_desc *desc, unsigned long flags)¶
以纳秒为单位启用硬件时间戳。
参数
struct gpio_desc *desc
要启用的 GPIO。
unsigned long flags
与 GPIO 边沿相关的标志。
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiod_disable_hw_timestamp_ns(struct gpio_desc *desc, unsigned long flags)¶
禁用硬件时间戳。
参数
struct gpio_desc *desc
要禁用的 GPIO。
unsigned long flags
与 GPIO 边沿相关的标志,与启用调用期间使用的值相同。
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiod_set_config(struct gpio_desc *desc, unsigned long config)¶
为 GPIO 设置 config
参数
struct gpio_desc *desc
要为其设置配置的 GPIO 的描述符
unsigned long config
与通用 pinconf 相同的压缩配置格式
返回值
成功时返回 0,如果控制器不支持设置配置,则返回 -ENOTSUPP
。
-
int gpiod_set_debounce(struct gpio_desc *desc, unsigned int debounce)¶
为 GPIO 设置 debounce 时间
参数
struct gpio_desc *desc
要为其设置 debounce 时间的 GPIO 的描述符
unsigned int debounce
以微秒为单位的 debounce 时间
返回值
成功时返回 0,如果控制器不支持设置 debounce 时间,则返回 -ENOTSUPP
。
-
int gpiod_is_active_low(const struct gpio_desc *desc)¶
测试 GPIO 是否为低电平有效
参数
const struct gpio_desc *desc
要测试的 gpio 描述符
返回值
如果 GPIO 为低电平有效,则返回 1,否则返回 0。
-
void gpiod_toggle_active_low(struct gpio_desc *desc)¶
切换 GPIO 是否为低电平有效
参数
struct gpio_desc *desc
要更改的 gpio 描述符
-
int gpiod_get_raw_value(const struct gpio_desc *desc)¶
返回 gpio 的原始值
参数
const struct gpio_desc *desc
将返回其值的 gpio
返回值
GPIO 的原始值,即物理线路的值,不考虑其 ACTIVE_LOW 状态,如果失败,则返回负的 errno。
描述
此函数可以从我们无法休眠的上下文中调用,并且如果 GPIO 芯片函数可能休眠,则会发出警告。
-
int gpiod_get_value(const struct gpio_desc *desc)¶
返回 gpio 的值
参数
const struct gpio_desc *desc
将返回其值的 gpio
返回值
GPIO 的逻辑值,即考虑 ACTIVE_LOW 状态,如果失败,则返回负的 errno。
描述
此函数可以从我们无法休眠的上下文中调用,并且如果 GPIO 芯片函数可能休眠,则会发出警告。
-
int gpiod_get_raw_array_value(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
从 GPIO 数组读取原始值
参数
unsigned int array_size
描述符数组/值位图中的元素数量
struct gpio_desc **desc_array
将要读取值的 GPIO 描述符数组
struct gpio_array *array_info
关于快速位图处理路径的适用性的信息
unsigned long *value_bitmap
用于存储读取的值的位图
描述
读取 GPIO 的原始值,即物理线路的值,而不考虑其 ACTIVE_LOW 状态。
此函数可以从我们无法睡眠的上下文调用,如果 GPIO 芯片函数可能睡眠,它会报错。
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiod_get_array_value(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
从 GPIO 数组读取值
参数
unsigned int array_size
描述符数组/值位图中的元素数量
struct gpio_desc **desc_array
将要读取值的 GPIO 描述符数组
struct gpio_array *array_info
关于快速位图处理路径的适用性的信息
unsigned long *value_bitmap
用于存储读取的值的位图
描述
读取 GPIO 的逻辑值,即考虑其 ACTIVE_LOW 状态。
此函数可以从我们无法睡眠的上下文调用,如果 GPIO 芯片函数可能睡眠,它会报错。
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiod_set_raw_value(struct gpio_desc *desc, int value)¶
分配 GPIO 的原始值
参数
struct gpio_desc *desc
将要分配值的 GPIO
int value
要分配的值
描述
设置 GPIO 的原始值,即物理线路的值,而不考虑其 ACTIVE_LOW 状态。
此函数可以从我们无法休眠的上下文中调用,并且如果 GPIO 芯片函数可能休眠,则会发出警告。
返回值
成功时为 0,失败时为负错误号。
-
int gpiod_set_value(struct gpio_desc *desc, int value)¶
分配 GPIO 的值
参数
struct gpio_desc *desc
将要分配值的 GPIO
int value
要分配的值
描述
设置 GPIO 的逻辑值,即考虑其 ACTIVE_LOW、OPEN_DRAIN 和 OPEN_SOURCE 标志。
此函数可以从我们无法休眠的上下文中调用,并且如果 GPIO 芯片函数可能休眠,则会发出警告。
返回值
成功时为 0,失败时为负错误号。
-
int gpiod_set_raw_array_value(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
为 GPIO 数组分配值
参数
unsigned int array_size
描述符数组/值位图中的元素数量
struct gpio_desc **desc_array
将要分配值的 GPIO 描述符数组
struct gpio_array *array_info
关于快速位图处理路径的适用性的信息
unsigned long *value_bitmap
要分配的值的位图
描述
设置 GPIO 的原始值,即物理线路的值,而不考虑其 ACTIVE_LOW 状态。
此函数可以从我们无法休眠的上下文中调用,并且如果 GPIO 芯片函数可能休眠,则会发出警告。
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiod_set_array_value(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
为 GPIO 数组分配值
参数
unsigned int array_size
描述符数组/值位图中的元素数量
struct gpio_desc **desc_array
将要分配值的 GPIO 描述符数组
struct gpio_array *array_info
关于快速位图处理路径的适用性的信息
unsigned long *value_bitmap
要分配的值的位图
描述
设置 GPIO 的逻辑值,即考虑其 ACTIVE_LOW 状态。
此函数可以从我们无法休眠的上下文中调用,并且如果 GPIO 芯片函数可能休眠,则会发出警告。
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiod_cansleep(const struct gpio_desc *desc)¶
报告 GPIO 值访问是否可能睡眠
参数
const struct gpio_desc *desc
要检查的 GPIO
返回值
不可睡眠时为 0,可睡眠时为 1,如果出错则为错误代码。
-
int gpiod_set_consumer_name(struct gpio_desc *desc, const char *name)¶
设置描述符的使用者名称
参数
struct gpio_desc *desc
要在其上设置使用者名称的 GPIO
const char *name
新的使用者名称
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiod_to_irq(const struct gpio_desc *desc)¶
返回与 GPIO 对应的 IRQ
参数
const struct gpio_desc *desc
将返回其 IRQ 的 GPIO(已请求)
返回值
与传递的 GPIO 对应的 IRQ,如果出错则为错误代码。
参数
struct gpio_chip *gc
要锁定的 GPIO 所属的芯片
unsigned int offset
要锁定为 IRQ 的 GPIO 的偏移量
描述
这由希望锁定某个 GPIO 线路以用于 IRQ 的 GPIO 驱动程序直接使用。
返回值
成功时返回 0,失败时返回负的 errno。
参数
struct gpio_chip *gc
要锁定的 GPIO 所属的芯片
unsigned int offset
要锁定为 IRQ 的 GPIO 的偏移量
描述
这由希望指示某个 GPIO 不再专门用于 IRQ 的 GPIO 驱动程序直接使用。
-
int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)¶
返回 gpio 的原始值
参数
const struct gpio_desc *desc
将返回其值的 gpio
返回值
GPIO 的原始值,即物理线路的值,不考虑其 ACTIVE_LOW 状态,如果失败,则返回负的 errno。
描述
此函数应从可以睡眠的上下文调用。
-
int gpiod_get_value_cansleep(const struct gpio_desc *desc)¶
返回 gpio 的值
参数
const struct gpio_desc *desc
将返回其值的 gpio
返回值
GPIO 的逻辑值,即考虑 ACTIVE_LOW 状态,如果失败,则返回负的 errno。
描述
此函数应从可以睡眠的上下文调用。
-
int gpiod_get_raw_array_value_cansleep(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
从 GPIO 数组读取原始值
参数
unsigned int array_size
描述符数组/值位图中的元素数量
struct gpio_desc **desc_array
将要读取值的 GPIO 描述符数组
struct gpio_array *array_info
关于快速位图处理路径的适用性的信息
unsigned long *value_bitmap
用于存储读取的值的位图
描述
读取 GPIO 的原始值,即物理线路的值,而不考虑其 ACTIVE_LOW 状态。
此函数应从可以睡眠的上下文调用。
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiod_get_array_value_cansleep(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
从 GPIO 数组读取值
参数
unsigned int array_size
描述符数组/值位图中的元素数量
struct gpio_desc **desc_array
将要读取值的 GPIO 描述符数组
struct gpio_array *array_info
关于快速位图处理路径的适用性的信息
unsigned long *value_bitmap
用于存储读取的值的位图
描述
读取 GPIO 的逻辑值,即考虑其 ACTIVE_LOW 状态。
此函数应从可以睡眠的上下文调用。
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value)¶
分配 GPIO 的原始值
参数
struct gpio_desc *desc
将要分配值的 GPIO
int value
要分配的值
描述
设置 GPIO 的原始值,即物理线路的值,而不考虑其 ACTIVE_LOW 状态。
此函数应从可以睡眠的上下文调用。
返回值
成功时为 0,失败时为负错误号。
-
int gpiod_set_value_cansleep(struct gpio_desc *desc, int value)¶
分配 GPIO 的值
参数
struct gpio_desc *desc
将要分配值的 GPIO
int value
要分配的值
描述
设置 GPIO 的逻辑值,即考虑其 ACTIVE_LOW 状态
此函数应从可以睡眠的上下文调用。
返回值
成功时为 0,失败时为负错误号。
-
int gpiod_set_raw_array_value_cansleep(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
为 GPIO 数组分配值
参数
unsigned int array_size
描述符数组/值位图中的元素数量
struct gpio_desc **desc_array
将要分配值的 GPIO 描述符数组
struct gpio_array *array_info
关于快速位图处理路径的适用性的信息
unsigned long *value_bitmap
要分配的值的位图
描述
设置 GPIO 的原始值,即物理线路的值,而不考虑其 ACTIVE_LOW 状态。
此函数应从可以睡眠的上下文调用。
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiod_set_array_value_cansleep(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
为 GPIO 数组分配值
参数
unsigned int array_size
描述符数组/值位图中的元素数量
struct gpio_desc **desc_array
将要分配值的 GPIO 描述符数组
struct gpio_array *array_info
关于快速位图处理路径的适用性的信息
unsigned long *value_bitmap
要分配的值的位图
描述
设置 GPIO 的逻辑值,即考虑其 ACTIVE_LOW 状态。
此函数应从可以睡眠的上下文调用。
返回值
成功时返回 0,失败时返回负的 errno。
-
void gpiod_add_lookup_table(struct gpiod_lookup_table *table)¶
注册 GPIO 设备使用者
参数
struct gpiod_lookup_table *table
要注册的使用者表
-
void gpiod_remove_lookup_table(struct gpiod_lookup_table *table)¶
注销 GPIO 设备使用者
参数
struct gpiod_lookup_table *table
要注销的使用者表
-
void gpiod_add_hogs(struct gpiod_hog *hogs)¶
从机器代码注册一组 GPIO hogs
参数
struct gpiod_hog *hogs
GPIO hog 条目的表,末尾有一个置零的哨兵
-
struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode, const char *con_id, int index, enum gpiod_flags flags, const char *label)¶
从固件节点获取 GPIO
参数
struct fwnode_handle *fwnode
固件节点的句柄
const char *con_id
GPIO 使用者内部的函数
int index
为使用者获取的 GPIO 的索引
enum gpiod_flags flags
GPIO 初始化标志
const char *label
附加到请求的 GPIO 的标签
描述
此函数可用于从不透明固件获取其配置的驱动程序。
该函数正确地使用任何底层固件接口查找相应的 GPIO,然后确保在将 GPIO 描述符返回给调用者之前请求它。
如果发生错误,则返回 ERR_PTR()
。
返回值
成功请求后,GPIO 引脚将根据提供的 flags 进行配置。
参数
struct device *dev
GPIO 使用者,对于系统全局 GPIO 可以为 NULL
const char *con_id
GPIO 使用者内部的函数
返回值
与设备/功能关联的 GPIO 的数量,如果请求的功能未分配 GPIO,则返回 -ENOENT。
-
struct gpio_desc *gpiod_get(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
获取给定 GPIO 功能的 GPIO
参数
struct device *dev
GPIO 使用者,对于系统全局 GPIO 可以为 NULL
const char *con_id
GPIO 使用者内部的函数
enum gpiod_flags flags
可选的 GPIO 初始化标志
返回值
对应于设备 dev 的函数 con_id 的 GPIO 描述符;如果请求的功能未分配 GPIO,则返回 -ENOENT;如果尝试获取 GPIO 时发生错误,则返回另一个 IS_ERR()
代码。
-
struct gpio_desc *gpiod_get_optional(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
获取给定 GPIO 功能的可选 GPIO
参数
struct device *dev
GPIO 使用者,对于系统全局 GPIO 可以为 NULL
const char *con_id
GPIO 使用者内部的函数
enum gpiod_flags flags
可选的 GPIO 初始化标志
描述
这等效于 gpiod_get()
,不同之处在于当没有 GPIO 分配给请求的功能时,它将返回 NULL。 这对于需要处理可选 GPIO 的驱动程序来说很方便。
返回值
对应于设备 dev 的函数 con_id 的 GPIO 描述符;如果请求的功能未分配 GPIO,则返回 NULL;如果尝试获取 GPIO 时发生错误,则返回另一个 IS_ERR()
代码。
-
struct gpio_desc *gpiod_get_index(struct device *dev, const char *con_id, unsigned int idx, enum gpiod_flags flags)¶
从多索引 GPIO 功能获取 GPIO
参数
struct device *dev
GPIO 使用者,对于系统全局 GPIO 可以为 NULL
const char *con_id
GPIO 使用者内部的函数
unsigned int idx
在使用者中要获取的 GPIO 的索引
enum gpiod_flags flags
可选的 GPIO 初始化标志
描述
此 gpiod_get()
的变体允许访问为定义了多个 GPIO 的函数定义的第一个以外的 GPIO。
返回值
有效的 GPIO 描述符;如果请求的功能和/或索引未分配 GPIO,则返回 -ENOENT;如果尝试获取 GPIO 时发生错误,则返回另一个 IS_ERR()
代码。
-
struct gpio_desc *gpiod_get_index_optional(struct device *dev, const char *con_id, unsigned int index, enum gpiod_flags flags)¶
从多索引 GPIO 功能获取可选 GPIO
参数
struct device *dev
GPIO 使用者,对于系统全局 GPIO 可以为 NULL
const char *con_id
GPIO 使用者内部的函数
unsigned int index
在使用者中要获取的 GPIO 的索引
enum gpiod_flags flags
可选的 GPIO 初始化标志
描述
这等效于 gpiod_get_index()
,不同之处在于当没有具有指定索引的 GPIO 分配给请求的功能时,它将返回 NULL。 这对于需要处理可选 GPIO 的驱动程序来说很方便。
返回值
有效的 GPIO 描述符;如果请求的功能和/或索引未分配 GPIO,则返回 NULL;如果尝试获取 GPIO 时发生错误,则返回另一个 IS_ERR()
代码。
-
struct gpio_descs *gpiod_get_array(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
从多索引 GPIO 功能获取多个 GPIO
参数
struct device *dev
GPIO 使用者,对于系统全局 GPIO 可以为 NULL
const char *con_id
GPIO 使用者内部的函数
enum gpiod_flags flags
可选的 GPIO 初始化标志
描述
此函数获取在给定功能下定义的所有 GPIO。
返回值
对应于设备 dev 的函数 con_id 的 GPIO 描述符;如果请求的功能未分配 GPIO,则返回 -ENOENT;如果尝试获取 GPIO 时发生错误,则返回另一个 IS_ERR()
代码。
-
struct gpio_descs *gpiod_get_array_optional(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
从多索引 GPIO 功能获取多个 GPIO
参数
struct device *dev
GPIO 使用者,对于系统全局 GPIO 可以为 NULL
const char *con_id
GPIO 使用者内部的函数
enum gpiod_flags flags
可选的 GPIO 初始化标志
描述
这等效于 gpiod_get_array()
,不同之处在于当没有 GPIO 分配给请求的功能时,它将返回 NULL。
返回值
对应于设备 dev 的函数 con_id 的 GPIO 描述符;如果请求的功能未分配 GPIO,则返回 NULL;如果尝试获取 GPIO 时发生错误,则返回另一个 IS_ERR()
代码。
-
void gpiod_put(struct gpio_desc *desc)¶
处置 GPIO 描述符
-
void gpiod_put_array(struct gpio_descs *descs)¶
处置多个 GPIO 描述符
参数
struct gpio_descs *descs
包含描述符数组的 struct gpio_descs
ACPI 支持¶
-
bool acpi_gpio_get_io_resource(struct acpi_resource *ares, struct acpi_resource_gpio **agpio)¶
如果 ACPI 资源是 GPIO I/O 资源,则获取其详细信息,否则返回 False。
参数
struct acpi_resource *ares
指向要获取的 ACPI 资源的指针
struct acpi_resource_gpio **agpio
指向
struct acpi_resource_gpio
的指针,用于存储输出指针
返回值
如果找到 GpioIo 资源,则返回 true
,否则返回 false
。
参数
struct gpio_chip *chip
GPIO 芯片
描述
ACPI5 平台可以使用 GPIO 信号 ACPI 事件。 这些 GPIO 中断由 ACPI 事件方法处理,这些方法需要从 GPIO 芯片的中断处理程序中调用。 acpi_gpiochip_request_interrupts()
找出哪些 GPIO 引脚具有 ACPI 事件方法,并分配调用这些引脚的 ACPI 事件方法的中断处理程序。
参数
struct gpio_chip *chip
GPIO 芯片
描述
释放与给定 GPIO 芯片的 GPIO ACPI 事件方法关联的中断。
-
int acpi_dev_gpio_irq_wake_get_by(struct acpi_device *adev, const char *con_id, int index, bool *wake_capable)¶
查找 GpioInt 并将其转换为 Linux IRQ 编号
参数
struct acpi_device *adev
指向要从中获取 IRQ 的 ACPI 设备的指针
const char *con_id
GpioInt 资源的可选名称
int index
GpioInt 资源的索引(从
0
开始)bool *wake_capable
如果 IRQ 具有唤醒功能,则设置为 true
描述
如果设备具有一个或多个 GpioInt 资源,则可以使用此函数将资源中的 GPIO 偏移量转换为 Linux IRQ 编号。
该函数是幂等的,但每次运行它都会根据 GpioInt 资源中的标志配置 GPIO 引脚方向。
该函数采用可选的 con_id 参数。 如果资源在属性中具有 con_id,则只会考虑这些资源。
如果 GpioInt 资源指定 SharedAndWake 或 ExclusiveAndWake,则认为 GPIO 具有唤醒功能。
返回值
成功时返回 Linux IRQ 编号(> 0),失败时返回负 errno。
设备树支持¶
-
int of_get_named_gpio(const struct device_node *np, const char *propname, int index)¶
获取用于 GPIO API 的 GPIO 编号
参数
const struct device_node *np
要从中获取 GPIO 的设备节点
const char *propname
包含 gpio 说明符的属性的名称
int index
GPIO 的索引
描述
已弃用 此函数已弃用,不得在新代码中使用。
返回值
要与 Linux 通用 GPIO API 结合使用的 GPIO 编号,或者错误情况下返回的 errno 值之一。
-
int of_mm_gpiochip_add_data(struct device_node *np, struct of_mm_gpio_chip *mm_gc, void *data)¶
添加内存映射 GPIO 芯片(库)
参数
struct device_node *np
GPIO 芯片的设备节点
struct of_mm_gpio_chip *mm_gc
指向已分配的 of_mm_gpio_chip 结构的指针
void *data
要存储在
struct gpio_chip
中的驱动程序数据
描述
要使用此函数,应分配并填充 mm_gc,其中包含
在 gpio_chip 结构中: - 所有回调 - of_gpio_n_cells - of_xlate 回调(可选)
在 of_mm_gpio_chip 结构中: - save_regs 回调(可选)
如果成功,此函数将映射库的内存,并为您完成所有必要的工作。 然后,您将能够使用 .regs 从回调管理 GPIO。
返回值
成功时返回 0,失败时返回负的 errno。
-
void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc)¶
移除内存映射 GPIO 芯片(组)
参数
struct of_mm_gpio_chip *mm_gc
指向已分配的 of_mm_gpio_chip 结构的指针
设备管理 API¶
-
struct gpio_desc *devm_gpiod_get(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
资源管理
gpiod_get()
参数
struct device *dev
GPIO 使用者
const char *con_id
GPIO 使用者内部的函数
enum gpiod_flags flags
可选的 GPIO 初始化标志
描述
托管的 gpiod_get()
。从此函数返回的 GPIO 描述符会在驱动程序分离时自动释放。有关行为和返回值的详细信息,请参阅 gpiod_get()
。
返回值
与设备 dev 的函数 con_id 对应的 GPIO 描述符,如果未将任何 GPIO 分配给所请求的函数,则为 -ENOENT
,如果在尝试获取 GPIO 时发生错误,则为另一个 IS_ERR()
代码。
-
struct gpio_desc *devm_gpiod_get_optional(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
资源管理
gpiod_get_optional()
参数
struct device *dev
GPIO 使用者
const char *con_id
GPIO 使用者内部的函数
enum gpiod_flags flags
可选的 GPIO 初始化标志
描述
托管的 gpiod_get_optional()
。从此函数返回的 GPIO 描述符会在驱动程序分离时自动释放。有关行为和返回值的详细信息,请参阅 gpiod_get_optional()
。
返回值
对应于设备 dev 的函数 con_id 的 GPIO 描述符;如果请求的功能未分配 GPIO,则返回 NULL;如果尝试获取 GPIO 时发生错误,则返回另一个 IS_ERR()
代码。
-
struct gpio_desc *devm_gpiod_get_index(struct device *dev, const char *con_id, unsigned int idx, enum gpiod_flags flags)¶
资源管理
gpiod_get_index()
参数
struct device *dev
GPIO 使用者
const char *con_id
GPIO 使用者内部的函数
unsigned int idx
在使用者中要获取的 GPIO 的索引
enum gpiod_flags flags
可选的 GPIO 初始化标志
描述
托管的 gpiod_get_index()
。从此函数返回的 GPIO 描述符会在驱动程序分离时自动释放。有关行为和返回值的详细信息,请参阅 gpiod_get_index()
。
返回值
与设备 dev 的函数 con_id 对应的 GPIO 描述符,如果未将任何 GPIO 分配给所请求的函数,则为 -ENOENT
,如果在尝试获取 GPIO 时发生错误,则为另一个 IS_ERR()
代码。
-
struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev, struct fwnode_handle *fwnode, const char *con_id, int index, enum gpiod_flags flags, const char *label)¶
从给定节点获取 GPIO 描述符
参数
struct device *dev
GPIO 使用者
struct fwnode_handle *fwnode
包含 GPIO 引用的固件节点
const char *con_id
GPIO 使用者内部的函数
int index
在使用者中要获取的 GPIO 的索引
enum gpiod_flags flags
GPIO 初始化标志
const char *label
附加到请求的 GPIO 的标签
描述
从此函数返回的 GPIO 描述符会在驱动程序分离时自动释放。
返回值
与设备 dev 的函数 con_id 对应的 GPIO 描述符,如果未将任何 GPIO 分配给所请求的函数,则为 -ENOENT
,如果在尝试获取 GPIO 时发生错误,则为另一个 IS_ERR()
代码。
-
struct gpio_desc *devm_gpiod_get_index_optional(struct device *dev, const char *con_id, unsigned int index, enum gpiod_flags flags)¶
参数
struct device *dev
GPIO 使用者
const char *con_id
GPIO 使用者内部的函数
unsigned int index
在使用者中要获取的 GPIO 的索引
enum gpiod_flags flags
可选的 GPIO 初始化标志
描述
托管的 gpiod_get_index_optional()
。从此函数返回的 GPIO 描述符会在驱动程序分离时自动释放。有关行为和返回值的详细信息,请参阅 gpiod_get_index_optional()
。
返回值
与设备 dev 的函数 con_id 对应的 GPIO 描述符,如果未将任何 GPIO 分配给所请求的函数,则为 NULL
,如果在尝试获取 GPIO 时发生错误,则为另一个 IS_ERR()
代码。
-
struct gpio_descs *devm_gpiod_get_array(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
资源管理
gpiod_get_array()
参数
struct device *dev
GPIO 使用者
const char *con_id
GPIO 使用者内部的函数
enum gpiod_flags flags
可选的 GPIO 初始化标志
描述
托管的 gpiod_get_array()
。从此函数返回的 GPIO 描述符会在驱动程序分离时自动释放。有关行为和返回值的详细信息,请参阅 gpiod_get_array()
。
返回值
与设备 dev 的函数 con_id 对应的 GPIO 描述符,如果未将任何 GPIO 分配给所请求的函数,则为 -ENOENT
,如果在尝试获取 GPIO 时发生错误,则为另一个 IS_ERR()
代码。
-
struct gpio_descs *devm_gpiod_get_array_optional(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
参数
struct device *dev
GPIO 使用者
const char *con_id
GPIO 使用者内部的函数
enum gpiod_flags flags
可选的 GPIO 初始化标志
描述
托管的 gpiod_get_array_optional()
。从此函数返回的 GPIO 描述符会在驱动程序分离时自动释放。有关行为和返回值的详细信息,请参阅 gpiod_get_array_optional()
。
返回值
与设备 dev 的函数 con_id 对应的 GPIO 描述符,如果未将任何 GPIO 分配给所请求的函数,则为 NULL
,如果在尝试获取 GPIO 时发生错误,则为另一个 IS_ERR()
代码。
-
void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)¶
资源管理
gpiod_put()
参数
struct device *dev
GPIO 使用者
struct gpio_desc *desc
要处置的 GPIO 描述符
描述
释放使用 devm_gpiod_get()
或 devm_gpiod_get_index()
获取的 GPIO 描述符。通常不会调用此函数,因为 GPIO 将由资源管理代码释放。
参数
struct device *dev
GPIO 使用者
struct gpio_desc *desc
要从中移除资源管理的 GPIO 描述符
描述
已弃用 不应使用此函数。它作为调节器框架中资源所有权问题的变通方法提供,应该用更好的解决方案代替。
从 GPIO 描述符中移除资源管理。当您想将描述符的生命周期管理交给另一种机制时,需要这样做。
-
void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs)¶
资源管理
gpiod_put_array()
参数
struct device *dev
GPIO 使用者
struct gpio_descs *descs
要释放的 GPIO 描述符数组
描述
释放使用 devm_gpiod_get_array()
获取的 GPIO 描述符数组。通常不会调用此函数,因为 GPIO 将由资源管理代码释放。
-
int devm_gpiochip_add_data_with_key(struct device *dev, struct gpio_chip *gc, void *data, struct lock_class_key *lock_key, struct lock_class_key *request_key)¶
资源管理 gpiochip_add_data_with_key()
参数
struct device *dev
gpio_chip 所属设备的指针。
struct gpio_chip *gc
要注册的 GPIO 芯片
void *data
与此芯片关联的驱动私有数据
struct lock_class_key *lock_key
IRQ 锁的 lockdep 类
struct lock_class_key *request_key
IRQ 请求的 lockdep 类
上下文
可能在中断工作之前
描述
当设备解除绑定时,gpio 芯片会自动释放。
返回值
如果无法注册芯片,则返回一个负 errno,例如因为 gc->base 无效或已与不同的芯片关联。 否则,它返回零作为成功代码。
sysfs 助手¶
-
int gpiod_export(struct gpio_desc *desc, bool direction_may_change)¶
通过 sysfs 导出 GPIO
参数
struct gpio_desc *desc
要提供的 GPIO,已请求
bool direction_may_change
如果用户空间可以更改 GPIO 方向,则为 true
上下文
arch_initcall 或更高版本
描述
当驱动程序想要在请求 GPIO 后使其可供用户空间访问时(可能是在调试时,或者作为其公共接口的一部分),它们可以使用此例程。如果 GPIO 可以更改方向(有些不能)并且调用者允许,用户空间将看到可用于更改 GPIO 方向的“direction” sysfs 属性。始终会提供“value”属性。
返回值
成功时返回 0,失败时返回负的 errno。
-
int gpiod_export_link(struct device *dev, const char *name, struct gpio_desc *desc)¶
创建一个指向已导出 GPIO 节点的 sysfs 链接
参数
struct device *dev
创建符号链接的设备
const char *name
符号链接的名称
struct gpio_desc *desc
要创建符号链接的目标 GPIO,必须已导出
描述
创建一个从 /sys/.../dev/name 到 /sys/class/gpio/gpioN 节点的符号链接。调用者负责取消链接。
返回值
成功时返回 0,失败时返回负的 errno。
-
void gpiod_unexport(struct gpio_desc *desc)¶
撤销
gpiod_export()
的效果
参数
struct gpio_desc *desc
要设为不可用的 GPIO
描述
这在 gpiod_free() 上是隐式的。