提交 46c121e0 编写于 作者: S Steve Longerbeam 提交者: Mauro Carvalho Chehab

media: staging/imx: Implement init_cfg subdev pad op

Implement the init_cfg pad op in all imx-media subdevices. The try
formats are initialized to the current active formats on all pads.
Signed-off-by: NSteve Longerbeam <steve_longerbeam@mentor.com>
Reviewed-by: NPhilipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: NHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: NMauro Carvalho Chehab <mchehab@s-opensource.com>
上级 3b4bf692
...@@ -462,6 +462,7 @@ static int prp_registered(struct v4l2_subdev *sd) ...@@ -462,6 +462,7 @@ static int prp_registered(struct v4l2_subdev *sd)
} }
static const struct v4l2_subdev_pad_ops prp_pad_ops = { static const struct v4l2_subdev_pad_ops prp_pad_ops = {
.init_cfg = imx_media_init_cfg,
.enum_mbus_code = prp_enum_mbus_code, .enum_mbus_code = prp_enum_mbus_code,
.get_fmt = prp_get_fmt, .get_fmt = prp_get_fmt,
.set_fmt = prp_set_fmt, .set_fmt = prp_set_fmt,
......
...@@ -1253,6 +1253,7 @@ static void prp_unregistered(struct v4l2_subdev *sd) ...@@ -1253,6 +1253,7 @@ static void prp_unregistered(struct v4l2_subdev *sd)
} }
static const struct v4l2_subdev_pad_ops prp_pad_ops = { static const struct v4l2_subdev_pad_ops prp_pad_ops = {
.init_cfg = imx_media_init_cfg,
.enum_mbus_code = prp_enum_mbus_code, .enum_mbus_code = prp_enum_mbus_code,
.enum_frame_size = prp_enum_frame_size, .enum_frame_size = prp_enum_frame_size,
.get_fmt = prp_get_fmt, .get_fmt = prp_get_fmt,
......
...@@ -1714,6 +1714,7 @@ static const struct v4l2_subdev_video_ops csi_video_ops = { ...@@ -1714,6 +1714,7 @@ static const struct v4l2_subdev_video_ops csi_video_ops = {
}; };
static const struct v4l2_subdev_pad_ops csi_pad_ops = { static const struct v4l2_subdev_pad_ops csi_pad_ops = {
.init_cfg = imx_media_init_cfg,
.enum_mbus_code = csi_enum_mbus_code, .enum_mbus_code = csi_enum_mbus_code,
.enum_frame_size = csi_enum_frame_size, .enum_frame_size = csi_enum_frame_size,
.enum_frame_interval = csi_enum_frame_interval, .enum_frame_interval = csi_enum_frame_interval,
......
...@@ -464,6 +464,35 @@ int imx_media_init_mbus_fmt(struct v4l2_mbus_framefmt *mbus, ...@@ -464,6 +464,35 @@ int imx_media_init_mbus_fmt(struct v4l2_mbus_framefmt *mbus,
} }
EXPORT_SYMBOL_GPL(imx_media_init_mbus_fmt); EXPORT_SYMBOL_GPL(imx_media_init_mbus_fmt);
/*
* Initializes the TRY format to the ACTIVE format on all pads
* of a subdev. Can be used as the .init_cfg pad operation.
*/
int imx_media_init_cfg(struct v4l2_subdev *sd,
struct v4l2_subdev_pad_config *cfg)
{
struct v4l2_mbus_framefmt *mf_try;
struct v4l2_subdev_format format;
unsigned int pad;
int ret;
for (pad = 0; pad < sd->entity.num_pads; pad++) {
memset(&format, 0, sizeof(format));
format.pad = pad;
format.which = V4L2_SUBDEV_FORMAT_ACTIVE;
ret = v4l2_subdev_call(sd, pad, get_fmt, NULL, &format);
if (ret)
continue;
mf_try = v4l2_subdev_get_try_format(sd, cfg, pad);
*mf_try = format.format;
}
return 0;
}
EXPORT_SYMBOL_GPL(imx_media_init_cfg);
/* /*
* Check whether the field and colorimetry parameters in tryfmt are * Check whether the field and colorimetry parameters in tryfmt are
* uninitialized, and if so fill them with the values from fmt, * uninitialized, and if so fill them with the values from fmt,
......
...@@ -909,6 +909,7 @@ static void vdic_unregistered(struct v4l2_subdev *sd) ...@@ -909,6 +909,7 @@ static void vdic_unregistered(struct v4l2_subdev *sd)
} }
static const struct v4l2_subdev_pad_ops vdic_pad_ops = { static const struct v4l2_subdev_pad_ops vdic_pad_ops = {
.init_cfg = imx_media_init_cfg,
.enum_mbus_code = vdic_enum_mbus_code, .enum_mbus_code = vdic_enum_mbus_code,
.get_fmt = vdic_get_fmt, .get_fmt = vdic_get_fmt,
.set_fmt = vdic_set_fmt, .set_fmt = vdic_set_fmt,
......
...@@ -172,6 +172,8 @@ int imx_media_enum_ipu_format(u32 *code, u32 index, enum codespace_sel cs_sel); ...@@ -172,6 +172,8 @@ int imx_media_enum_ipu_format(u32 *code, u32 index, enum codespace_sel cs_sel);
int imx_media_init_mbus_fmt(struct v4l2_mbus_framefmt *mbus, int imx_media_init_mbus_fmt(struct v4l2_mbus_framefmt *mbus,
u32 width, u32 height, u32 code, u32 field, u32 width, u32 height, u32 code, u32 field,
const struct imx_media_pixfmt **cc); const struct imx_media_pixfmt **cc);
int imx_media_init_cfg(struct v4l2_subdev *sd,
struct v4l2_subdev_pad_config *cfg);
void imx_media_fill_default_mbus_fields(struct v4l2_mbus_framefmt *tryfmt, void imx_media_fill_default_mbus_fields(struct v4l2_mbus_framefmt *tryfmt,
struct v4l2_mbus_framefmt *fmt, struct v4l2_mbus_framefmt *fmt,
bool ic_route); bool ic_route);
......
...@@ -531,6 +531,7 @@ static const struct v4l2_subdev_video_ops csi2_video_ops = { ...@@ -531,6 +531,7 @@ static const struct v4l2_subdev_video_ops csi2_video_ops = {
}; };
static const struct v4l2_subdev_pad_ops csi2_pad_ops = { static const struct v4l2_subdev_pad_ops csi2_pad_ops = {
.init_cfg = imx_media_init_cfg,
.get_fmt = csi2_get_fmt, .get_fmt = csi2_get_fmt,
.set_fmt = csi2_set_fmt, .set_fmt = csi2_set_fmt,
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册