2.23. V4L2 fwnode kAPI¶
-
struct v4l2_fwnode_endpoint¶
端点数据结构
定义:
struct v4l2_fwnode_endpoint {
struct fwnode_endpoint base;
enum v4l2_mbus_type bus_type;
struct {
struct v4l2_mbus_config_parallel parallel;
struct v4l2_mbus_config_mipi_csi1 mipi_csi1;
struct v4l2_mbus_config_mipi_csi2 mipi_csi2;
} bus;
u64 *link_frequencies;
unsigned int nr_of_link_frequencies;
};
成员
base
v4l2_fwnode 的 fwnode 端点
bus_type
总线类型
bus
总线配置数据结构
bus.parallel
嵌入的
struct v4l2_mbus_config_parallel
。如果总线是并行总线,则使用此项。bus.mipi_csi1
嵌入的
struct v4l2_mbus_config_mipi_csi1
。如果总线是 MIPI 联盟的相机串行接口版本 1 (MIPI CSI1) 或标准移动成像架构的紧凑型相机端口 2 (SMIA CCP2),则使用此项。bus.mipi_csi2
嵌入的
struct v4l2_mbus_config_mipi_csi2
。如果总线是 MIPI 联盟的相机串行接口版本 2 (MIPI CSI2),则使用此项。link_frequencies
支持的链路频率数组
nr_of_link_frequencies
link_frequenccies 数组中的元素数量
-
V4L2_FWNODE_PROPERTY_UNSET¶
V4L2_FWNODE_PROPERTY_UNSET
-
enum v4l2_fwnode_orientation¶
可能的设备方向
常量
V4L2_FWNODE_ORIENTATION_FRONT
设备安装在正面
V4L2_FWNODE_ORIENTATION_BACK
设备安装在背面
V4L2_FWNODE_ORIENTATION_EXTERNAL
设备位于外部
-
struct v4l2_fwnode_device_properties¶
fwnode 设备属性
定义:
struct v4l2_fwnode_device_properties {
enum v4l2_fwnode_orientation orientation;
unsigned int rotation;
};
成员
orientation
设备方向。请参阅
enum v4l2_fwnode_orientation
rotation
设备旋转
-
struct v4l2_fwnode_link¶
两个端点之间的链接
定义:
struct v4l2_fwnode_link {
struct fwnode_handle *local_node;
unsigned int local_port;
unsigned int local_id;
struct fwnode_handle *remote_node;
unsigned int remote_port;
unsigned int remote_id;
};
成员
local_node
指向此端点的 device_node 的指针
local_port
此端点所属的端口的标识符
local_id
此端点所属的 id 的标识符
remote_node
指向远程端点的 device_node 的指针
remote_port
远程端点所属的端口的标识符
remote_id
远程端点所属的 id 的标识符
-
enum v4l2_connector_type¶
连接器类型
常量
V4L2_CONN_UNKNOWN
未知连接器类型,没有 V4L2 连接器配置
V4L2_CONN_COMPOSITE
模拟复合连接器
V4L2_CONN_SVIDEO
模拟 svideo 连接器
-
struct v4l2_connector_link¶
连接器链接数据结构
定义:
struct v4l2_connector_link {
struct list_head head;
struct v4l2_fwnode_link fwnode_link;
};
成员
head
用于将链接添加到
struct v4l2_fwnode_connector
的结构fwnode_link
连接器和连接器所属的设备之间的
struct v4l2_fwnode_link
链接。
-
struct v4l2_fwnode_connector_analog¶
模拟连接器数据结构
定义:
struct v4l2_fwnode_connector_analog {
v4l2_std_id sdtv_stds;
};
成员
sdtv_stds
此连接器支持的 sdtv 标准,如果未指定限制,则设置为 V4L2_STD_ALL。
-
struct v4l2_fwnode_connector¶
连接器数据结构
定义:
struct v4l2_fwnode_connector {
const char *name;
const char *label;
enum v4l2_connector_type type;
struct list_head links;
unsigned int nr_of_links;
union {
struct v4l2_fwnode_connector_analog analog;
} connector;
};
成员
name
连接器设备名称
label
可选连接器标签
type
连接器类型
links
所有连接器
struct v4l2_connector_link
链接的列表nr_of_links
链接总数
connector
连接器配置
connector.analog
-
enum v4l2_fwnode_bus_type¶
固件属性定义的视频总线类型
常量
V4L2_FWNODE_BUS_TYPE_GUESS
如果未指定总线类型 fwnode 属性,则为默认值
V4L2_FWNODE_BUS_TYPE_CSI2_CPHY
MIPI CSI-2 总线,C-PHY 物理层
V4L2_FWNODE_BUS_TYPE_CSI1
MIPI CSI-1 总线
V4L2_FWNODE_BUS_TYPE_CCP2
SMIA 紧凑型相机端口 2 总线
V4L2_FWNODE_BUS_TYPE_CSI2_DPHY
MIPI CSI-2 总线,D-PHY 物理层
V4L2_FWNODE_BUS_TYPE_PARALLEL
相机并行接口总线
V4L2_FWNODE_BUS_TYPE_BT656
BT.656 视频格式总线类型
V4L2_FWNODE_BUS_TYPE_DPI
视频并行接口总线
NR_OF_V4L2_FWNODE_BUS_TYPE
总线类型数量
-
int v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode, struct v4l2_fwnode_endpoint *vep)¶
解析所有 fwnode 节点属性
参数
struct fwnode_handle *fwnode
指向端点的 fwnode 句柄的指针
struct v4l2_fwnode_endpoint *vep
指向 V4L2 fwnode 数据结构的指针
描述
此函数从固件解析 V4L2 fwnode 端点特定的参数。有两种使用此函数的方法,要么让它获取总线类型(通过将 vep.bus_type 字段设置为 V4L2_MBUS_UNKNOWN),要么明确指定总线类型为 enum v4l2_mbus_type
类型之一。
当 vep.bus_type 为 V4L2_MBUS_UNKNOWN 时,如果 “bus-type” 属性可用,该函数将使用该属性来确定类型。调用者负责在调用返回后验证 vep.bus_type 字段的内容。
作为一种已弃用的功能,为了支持旧的 DT 绑定,对于支持多种类型的设备,没有 “bus-type” 属性时,如果 “bus-type” 属性不存在,该函数将尝试根据可用的端点属性来猜测类型。**在新的驱动程序或绑定中,永远不要依赖猜测总线类型。**
也可以将 vep.bus_type 设置为对应于实际的总线。在这种情况下,该函数将仅尝试解析与此总线相关的属性,并且如果 “bus-type” 属性的值对应于不同的总线,则将返回错误。
调用者需要初始化 vep 的所有字段,可以使用显式值,也可以将它们置零。
如果函数失败,它不会更改 V4L2 fwnode 端点状态。
注意
此函数不解析 “link-frequencies” 属性,因为其大小事先未知。如果需要可变大小的属性,请使用 v4l2_fwnode_endpoint_alloc_parse()
。
返回值
- 成功时返回
0
,失败时返回负错误代码 内存分配失败时返回
-ENOMEM
,解析失败时返回-EINVAL
,总线类型不匹配时返回-ENXIO
-
void v4l2_fwnode_endpoint_free(struct v4l2_fwnode_endpoint *vep)¶
释放
v4l2_fwnode_endpoint_alloc_parse()
获取的 V4L2 fwnode
参数
struct v4l2_fwnode_endpoint *vep
要释放资源的 V4L2 fwnode
描述
可以使用 NULL 参数或解析失败的 V4L2 fwnode 安全地调用此函数。
-
int v4l2_fwnode_endpoint_alloc_parse(struct fwnode_handle *fwnode, struct v4l2_fwnode_endpoint *vep)¶
解析所有 fwnode 节点属性
参数
struct fwnode_handle *fwnode
指向端点的 fwnode 句柄的指针
struct v4l2_fwnode_endpoint *vep
指向 V4L2 fwnode 数据结构的指针
描述
此函数从固件解析 V4L2 fwnode 端点特定的参数。有两种使用此函数的方法,要么让它获取总线类型(通过将 vep.bus_type 字段设置为 V4L2_MBUS_UNKNOWN),要么明确指定总线类型为 enum v4l2_mbus_type
类型之一。
当 vep.bus_type 为 V4L2_MBUS_UNKNOWN 时,如果 “bus-type” 属性可用,该函数将使用该属性来确定类型。调用者负责在调用返回后验证 vep.bus_type 字段的内容。
作为一种已弃用的功能,为了支持旧的 DT 绑定,对于支持多种类型的设备,没有 “bus-type” 属性时,如果 “bus-type” 属性不存在,该函数将尝试根据可用的端点属性来猜测类型。**在新的驱动程序或绑定中,永远不要依赖猜测总线类型。**
也可以将 vep.bus_type 设置为对应于实际的总线。在这种情况下,该函数将仅尝试解析与此总线相关的属性,并且如果 “bus-type” 属性的值对应于不同的总线,则将返回错误。
调用者需要初始化 vep 的所有字段,可以使用显式值,也可以将它们置零。
如果函数失败,它不会更改 V4L2 fwnode 端点状态。
v4l2_fwnode_endpoint_alloc_parse()
与 v4l2_fwnode_endpoint_parse()
有两个重要区别
它还解析可变大小的数据。
当不再需要时,必须使用
v4l2_fwnode_endpoint_free()
释放它分配的用于存储可变大小数据的内存。
返回值
- 成功时返回
0
,失败时返回负错误代码 内存分配失败时返回
-ENOMEM
,解析失败时返回-EINVAL
,总线类型不匹配时返回-ENXIO
-
int v4l2_fwnode_parse_link(struct fwnode_handle *fwnode, struct v4l2_fwnode_link *link)¶
解析两个端点之间的链接
参数
struct fwnode_handle *fwnode
指向链接本地端的端点的 fwnode 的指针
struct v4l2_fwnode_link *link
指向 V4L2 fwnode 链接数据结构的指针
描述
使用本地和远程节点以及端口号填充链接结构。local_node 和 remote_node 字段设置为分别指向本地和远程端口的父节点(如果端口的父节点不是 “ports” 节点,则端口的父节点是端口节点的父节点,否则是端口节点的祖父节点)。
本地和远程节点都进行了引用,当链接使用完毕时,调用者必须使用 v4l2_fwnode_put_link()
删除引用。
返回值
成功时返回 0,如果找不到远程端点 fwnode,则返回 -ENOLINK。
-
void v4l2_fwnode_put_link(struct v4l2_fwnode_link *link)¶
删除链接中节点的引用
参数
struct v4l2_fwnode_link *link
指向 V4L2 fwnode 链接数据结构的指针
描述
删除链接中本地和远程节点的引用。必须在每个使用 v4l2_fwnode_parse_link()
解析的链接上调用此函数。
-
void v4l2_fwnode_connector_free(struct v4l2_fwnode_connector *connector)¶
释放 V4L2 连接器已获取的内存
参数
struct v4l2_fwnode_connector *connector
要释放资源的 V4L2 连接器
描述
释放 v4l2_fwnode_connector_parse()
和 v4l2_fwnode_connector_add_link()
获取的所有已分配内存并删除所有已获取的链接。
可以使用 NULL 参数或解析失败的 V4L2 连接器安全地调用此函数。
-
int v4l2_fwnode_connector_parse(struct fwnode_handle *fwnode, struct v4l2_fwnode_connector *connector)¶
参数
struct fwnode_handle *fwnode
指向连接器所连接到的子设备端点的 fwnode 句柄或连接器端点 fwnode 句柄的指针。
struct v4l2_fwnode_connector *connector
指向 V4L2 fwnode 连接器数据结构的指针
描述
使用连接器类型、标签和所有 enum v4l2_connector_type
特定连接器数据填充 struct v4l2_fwnode_connector
。标签是可选的,如果未找到标签,则设置为 NULL
。该函数将链接初始化为零。通过调用 v4l2_fwnode_connector_add_link()
向连接器添加链接。
不再需要标签分配的内存时必须释放它。通过 v4l2_fwnode_connector_free()
完成内存的释放。
返回值
成功时返回
0
,失败时返回负错误代码如果 fwnode 无效,则返回
-EINVAL
如果连接器类型未知或找不到连接器设备,则返回
-ENOTCONN
-
int v4l2_fwnode_connector_add_link(struct fwnode_handle *fwnode, struct v4l2_fwnode_connector *connector)¶
在连接器节点和 v4l2-subdev 节点之间添加链接。
参数
struct fwnode_handle *fwnode
指向子设备端点 fwnode 句柄的指针,连接器连接到该句柄
struct v4l2_fwnode_connector *connector
指向 V4L2 fwnode 连接器数据结构的指针
描述
向 struct v4l2_fwnode_connector
连接器链接列表添加一个新的 struct v4l2_connector_link
链接。链接 local_node 指向连接器节点,remote_node 指向主机 v4l2(子)设备。
当不再需要时,必须释放对 remote_node 和 local_node 的引用,并且必须释放分配的内存。这两项操作都通过调用 v4l2_fwnode_connector_free()
完成。
返回值
成功时返回
0
,失败时返回负错误代码如果 fwnode 或 connector 无效,或者 connector 类型未知,则返回
-EINVAL
如果链接内存分配失败,则返回
-ENOMEM
如果找不到远程连接器设备,则返回
-ENOTCONN
如果 v4l2(子)设备和连接器之间的链接解析失败,则返回
-ENOLINK
-
int v4l2_fwnode_device_parse(struct device *dev, struct v4l2_fwnode_device_properties *props)¶
解析 fwnode 设备属性
参数
struct device *dev
指向
struct device
的指针struct v4l2_fwnode_device_properties *props
指向
struct v4l2_fwnode_device_properties
的指针,解析后的属性值将存储在该结构中
描述
此函数从固件接口解析并验证 V4L2 fwnode 设备属性,并填充调用者提供的 struct v4l2_fwnode_device_properties。
返回值
成功时返回 %0,如果解析的属性值无效,则返回
-EINVAL