V4l2_subdev_ops回调函数
V4l2_subdev_ops回调函数是sensor驱动中逻辑控制的核心。回调函数包括非常多的功能,具体可以查看kernel代码include/media/v4l2-subdev.h。建议sensor驱动至少包括如下回调函数。以IMX219为例:static const struct v4l2_subdev_core_ops imx219_core_ops = {
.subscribe_event = v4l2_ctrl_subdev_subscribe_event,
.unsubscribe_event = v4l2_event_subdev_unsubscribe,
};
static const struct v4l2_subdev_video_ops imx219_video_ops = {
.s_stream = imx219_set_stream,
};
static const struct v4l2_subdev_pad_ops imx219_pad_ops = {
.enum_mbus_code = imx219_enum_mbus_code,
.get_fmt = imx219_get_pad_format,
.set_fmt = imx219_set_pad_format,
.get_selection = imx219_get_selection,
.enum_frame_size = imx219_enum_frame_size,
};
static const struct v4l2_subdev_ops imx219_subdev_ops = {
.core = &imx219_core_ops,
.video = &imx219_video_ops,
.pad = &imx219_pad_ops,
};以下为上述代码块的参数说明:
- s_stream:即set stream,包括stream on和stream off,一般在这里配置寄存器,使其输出图像。
- .enum_mbus_code:枚举驱动支持的mbus_code。
- .get_fmt:返回当前sensor选中的format/size。如果.get_fmt缺失,media-ctl工具无法查看sensor entity当前配置的fmt。
- .set_fmt:设置sensor的format/size。
- .enum_frame_size:枚举驱动支持的分辨率。
