2.22. V4L2 异步 kAPI¶
-
enum v4l2_async_match_type¶
用于标识匹配的异步子设备逻辑的类型
常量
V4L2_ASYNC_MATCH_TYPE_I2C
匹配将检查 I2C 适配器 ID 和地址
V4L2_ASYNC_MATCH_TYPE_FWNODE
匹配将使用固件节点
描述
此枚举由异步连接逻辑使用,以定义将用于匹配异步设备的算法。
-
struct v4l2_async_match_desc¶
异步连接匹配信息
定义:
struct v4l2_async_match_desc {
enum v4l2_async_match_type type;
union {
struct fwnode_handle *fwnode;
struct {
int adapter_id;
unsigned short address;
} i2c;
};
};
成员
type
将要使用的匹配类型
{unnamed_union}
匿名
fwnode
指向要匹配的
struct fwnode_handle
的指针。如果 match_type 为V4L2_ASYNC_MATCH_TYPE_FWNODE
,则使用。i2c
带有要匹配的 I2C 参数的嵌入结构。match.i2c.adapter_id 和 match.i2c.address 都应匹配。如果 match_type 为
V4L2_ASYNC_MATCH_TYPE_I2C
,则使用。
i2c.adapter_id
要匹配的 I2C 适配器 ID。如果 match_type 为
V4L2_ASYNC_MATCH_TYPE_I2C
,则使用。
i2c.address
要匹配的 I2C 地址。如果 match_type 为
V4L2_ASYNC_MATCH_TYPE_I2C
,则使用。
-
struct v4l2_async_connection¶
子设备连接描述符,桥接器已知
定义:
struct v4l2_async_connection {
struct v4l2_async_match_desc match;
struct v4l2_async_notifier *notifier;
struct list_head asc_entry;
struct list_head asc_subdev_entry;
struct v4l2_subdev *sd;
};
成员
match
匹配类型和每个总线类型的匹配数据集合的结构
notifier
连接相关的异步通知器
asc_entry
用于将
struct v4l2_async_connection
对象添加到通知器的 waiting_list 或 done_listasc_subdev_entry
在 struct v4l2_async_subdev.asc_list 列表中的条目
sd
相关的子设备
描述
当此结构用作驱动程序特定结构中的成员时,驱动程序特定结构应将 struct v4l2_async_connection
作为其第一个成员。
-
struct v4l2_async_notifier_operations¶
异步 V4L2 通知器操作
定义:
struct v4l2_async_notifier_operations {
int (*bound)(struct v4l2_async_notifier *notifier,struct v4l2_subdev *subdev, struct v4l2_async_connection *asc);
int (*complete)(struct v4l2_async_notifier *notifier);
void (*unbind)(struct v4l2_async_notifier *notifier,struct v4l2_subdev *subdev, struct v4l2_async_connection *asc);
void (*destroy)(struct v4l2_async_connection *asc);
};
成员
bound
子设备已由给定的连接绑定
complete
所有连接已成功绑定。complete 回调仅针对根通知器执行。
unbind
子设备正在离开
destroy
asc 即将被释放
-
struct v4l2_async_notifier¶
v4l2_device 通知器数据
定义:
struct v4l2_async_notifier {
const struct v4l2_async_notifier_operations *ops;
struct v4l2_device *v4l2_dev;
struct v4l2_subdev *sd;
struct v4l2_async_notifier *parent;
struct list_head waiting_list;
struct list_head done_list;
struct list_head notifier_entry;
};
成员
ops
通知器操作
v4l2_dev
根通知器的 v4l2_device,否则为 NULL
sd
注册通知器的子设备,否则为 NULL
parent
父通知器
waiting_list
等待其驱动程序的
struct v4l2_async_connection
的列表done_list
已探测的
struct v4l2_subdev
的列表notifier_entry
全局通知器列表中的成员
-
struct v4l2_async_subdev_endpoint¶
子设备的 fwnode 列表中的条目
定义:
struct v4l2_async_subdev_endpoint {
struct list_head async_subdev_endpoint_entry;
struct fwnode_handle *endpoint;
};
成员
async_subdev_endpoint_entry
在
struct v4l2_subdev
的 async_subdev_endpoint_list 中的条目endpoint
要匹配子设备的端点 fwnode
-
void v4l2_async_debug_init(struct dentry *debugfs_dir)¶
初始化调试工具。
参数
struct dentry *debugfs_dir
指向父 debugfs
struct dentry
的指针
-
void v4l2_async_nf_init(struct v4l2_async_notifier *notifier, struct v4l2_device *v4l2_dev)¶
初始化通知器。
参数
struct v4l2_async_notifier *notifier
指向
struct v4l2_async_notifier
的指针struct v4l2_device *v4l2_dev
指向
struct v4l2_device
的指针
描述
此函数初始化通知器 asc_entry。必须先调用此函数,然后才能使用以下函数之一向通知器添加子设备:v4l2_async_nf_add_fwnode_remote()
、v4l2_async_nf_add_fwnode()
或 v4l2_async_nf_add_i2c()
。
-
void v4l2_async_subdev_nf_init(struct v4l2_async_notifier *notifier, struct v4l2_subdev *sd)¶
初始化一个子设备通知器。
参数
struct v4l2_async_notifier *notifier
指向
struct v4l2_async_notifier
的指针struct v4l2_subdev *sd
指向
struct v4l2_subdev
的指针
描述
此函数初始化通知器 asc_list。必须先调用此函数,然后才能使用以下函数之一向通知器添加子设备:v4l2_async_nf_add_fwnode_remote()
、v4l2_async_nf_add_fwnode()
或 v4l2_async_nf_add_i2c()
。
-
v4l2_async_nf_add_fwnode¶
v4l2_async_nf_add_fwnode (notifier, fwnode, type)
分配一个 fwnode 异步子设备并将其添加到通知器的主 asc_list 中。
参数
notifier
指向
struct v4l2_async_notifier
的指针fwnode
要匹配的子设备的 fwnode 句柄,指向
struct fwnode_handle
的指针type
驱动程序的异步子设备或连接结构的类型。
struct v4l2_async_connection
应为驱动程序的异步结构的第一个成员,即两者都从相同的内存地址开始。
描述
分配一个大小为 asc_struct_size 的 fwnode 匹配的 asc,并将其添加到通知器的 asc_list 中。该函数还会获取对 fwnode 的引用,该引用将在通知器清理时释放。
-
v4l2_async_nf_add_fwnode_remote¶
v4l2_async_nf_add_fwnode_remote (notifier, ep, type)
分配一个 fwnode 远程异步子设备并将其添加到通知器的主 asc_list 中。
参数
notifier
指向
struct v4l2_async_notifier
的指针ep
指向要匹配的远程连接的本地端点,指向
struct fwnode_handle
的指针type
驱动程序的异步连接结构的类型。
struct v4l2_async_connection
应为驱动程序的异步连接结构的第一个成员,即两者都从相同的内存地址开始。
描述
获取给定本地端点的远程端点,将其设置为 fwnode 匹配,并将异步连接添加到通知器的 asc_list 中。该函数还会获取对 fwnode 的引用,该引用将在通知器清理时释放。
这与 v4l2_async_nf_add_fwnode()
类似,但唯一的区别是 fwnode 指的是本地端点,而不是远程端点。
-
v4l2_async_nf_add_i2c¶
v4l2_async_nf_add_i2c (notifier, adapter, address, type)
分配一个 i2c 异步子设备并将其添加到通知器的主 asc_list 中。
参数
notifier
指向
struct v4l2_async_notifier
的指针adapter
要匹配的 I2C 适配器 ID
address
要匹配的连接的 I2C 地址
type
驱动程序的异步连接结构的类型。
struct v4l2_async_connection
应为驱动程序的异步连接结构的第一个成员,即两者都从相同的内存地址开始。
描述
与 v4l2_async_nf_add_fwnode()
相同,但用于 I2C 匹配的连接。
-
int v4l2_async_subdev_endpoint_add(struct v4l2_subdev *sd, struct fwnode_handle *fwnode)¶
将端点 fwnode 添加到异步子设备匹配列表
参数
struct v4l2_subdev *sd
子设备
struct fwnode_handle *fwnode
要匹配的端点 fwnode
描述
将 fwnode 添加到异步子设备的匹配列表。这允许从单个设备注册多个异步子设备。
请注意,如果端点已添加到子设备的 fwnode 匹配列表中,则作为子设备清理的一部分调用 v4l2_subdev_cleanup()
。
失败时返回错误,成功时返回 0。
-
struct v4l2_async_connection *v4l2_async_connection_unique(struct v4l2_subdev *sd)¶
为子设备返回唯一的
struct v4l2_async_connection
参数
struct v4l2_subdev *sd
子设备
描述
当只有一个子设备时,返回该子设备的异步连接。
-
int v4l2_async_nf_register(struct v4l2_async_notifier *notifier)¶
注册一个子设备异步通知器
参数
struct v4l2_async_notifier *notifier
指向
struct v4l2_async_notifier
的指针
-
void v4l2_async_nf_unregister(struct v4l2_async_notifier *notifier)¶
注销一个子设备异步通知器
参数
struct v4l2_async_notifier *notifier
指向
struct v4l2_async_notifier
的指针
-
void v4l2_async_nf_cleanup(struct v4l2_async_notifier *notifier)¶
清理通知器资源
参数
struct v4l2_async_notifier *notifier
要清理其资源的通知器
描述
释放与通知器相关的内存资源,包括为通知器的目的而分配的异步连接,但不包括通知器本身。用户负责在调用 v4l2_async_nf_add_fwnode_remote()
、v4l2_async_nf_add_fwnode()
或 v4l2_async_nf_add_i2c()
之后调用此函数来清理通知器。
在其他情况下调用 v4l2_async_nf_cleanup()
是没有害处的,只要它的内存在分配后已被清零。
-
v4l2_async_register_subdev¶
v4l2_async_register_subdev (sd)
将子设备注册到异步子设备框架
参数
sd
指向
struct v4l2_subdev
的指针
-
int v4l2_async_register_subdev_sensor(struct v4l2_subdev *sd)¶
将传感器子设备注册到异步子设备框架并解析设置与传感器相关的常用设备
参数
struct v4l2_subdev *sd
指向结构体
v4l2_subdev
的指针
描述
此函数与 v4l2_async_register_subdev()
类似,区别在于调用此函数还会使用 v4l2_async_nf_parse_fwnode_sensor() 解析固件接口以查找远程引用,并注册异步子设备。同样,可以通过调用 v4l2_async_unregister_subdev()
来注销子设备。
在注册期间,子设备模块会被标记为正在使用。
如果尝试注册模块时该模块不再加载,则会返回错误。
-
void v4l2_async_unregister_subdev(struct v4l2_subdev *sd)¶
从异步子设备框架注销一个子设备
参数
struct v4l2_subdev *sd
指向
struct v4l2_subdev
的指针