Commit 0efdf0f5 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

[media] v4l: vsp1: Implement and use the subdev pad::init_cfg configuration

Turn the custom formats initialization function into a standard
pad::init_cfg handler and use it in subdevs instead of initializing
formats in the subdev open handler.

This makes the subdev open handler empty, so remove it.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 61372126
...@@ -387,6 +387,7 @@ static struct v4l2_subdev_video_ops bru_video_ops = { ...@@ -387,6 +387,7 @@ static struct v4l2_subdev_video_ops bru_video_ops = {
}; };
static struct v4l2_subdev_pad_ops bru_pad_ops = { static struct v4l2_subdev_pad_ops bru_pad_ops = {
.init_cfg = vsp1_entity_init_cfg,
.enum_mbus_code = bru_enum_mbus_code, .enum_mbus_code = bru_enum_mbus_code,
.enum_frame_size = bru_enum_frame_size, .enum_frame_size = bru_enum_frame_size,
.get_fmt = bru_get_format, .get_fmt = bru_get_format,
......
...@@ -62,15 +62,14 @@ vsp1_entity_get_pad_format(struct vsp1_entity *entity, ...@@ -62,15 +62,14 @@ vsp1_entity_get_pad_format(struct vsp1_entity *entity,
} }
/* /*
* vsp1_entity_init_formats - Initialize formats on all pads * vsp1_entity_init_cfg - Initialize formats on all pads
* @subdev: V4L2 subdevice * @subdev: V4L2 subdevice
* @cfg: V4L2 subdev pad configuration * @cfg: V4L2 subdev pad configuration
* *
* Initialize all pad formats with default values. If cfg is not NULL, try * Initialize all pad formats with default values in the given pad config. This
* formats are initialized on the file handle. Otherwise active formats are * function can be used as a handler for the subdev pad::init_cfg operation.
* initialized on the device.
*/ */
static void vsp1_entity_init_formats(struct v4l2_subdev *subdev, int vsp1_entity_init_cfg(struct v4l2_subdev *subdev,
struct v4l2_subdev_pad_config *cfg) struct v4l2_subdev_pad_config *cfg)
{ {
struct v4l2_subdev_format format; struct v4l2_subdev_format format;
...@@ -85,20 +84,10 @@ static void vsp1_entity_init_formats(struct v4l2_subdev *subdev, ...@@ -85,20 +84,10 @@ static void vsp1_entity_init_formats(struct v4l2_subdev *subdev,
v4l2_subdev_call(subdev, pad, set_fmt, cfg, &format); v4l2_subdev_call(subdev, pad, set_fmt, cfg, &format);
} }
}
static int vsp1_entity_open(struct v4l2_subdev *subdev,
struct v4l2_subdev_fh *fh)
{
vsp1_entity_init_formats(subdev, fh->pad);
return 0; return 0;
} }
const struct v4l2_subdev_internal_ops vsp1_subdev_internal_ops = {
.open = vsp1_entity_open,
};
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* Media Operations * Media Operations
*/ */
...@@ -209,13 +198,12 @@ int vsp1_entity_init(struct vsp1_device *vsp1, struct vsp1_entity *entity, ...@@ -209,13 +198,12 @@ int vsp1_entity_init(struct vsp1_device *vsp1, struct vsp1_entity *entity,
v4l2_subdev_init(subdev, ops); v4l2_subdev_init(subdev, ops);
subdev->entity.ops = &vsp1->media_ops; subdev->entity.ops = &vsp1->media_ops;
subdev->internal_ops = &vsp1_subdev_internal_ops;
subdev->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; subdev->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
snprintf(subdev->name, sizeof(subdev->name), "%s %s", snprintf(subdev->name, sizeof(subdev->name), "%s %s",
dev_name(vsp1->dev), name); dev_name(vsp1->dev), name);
vsp1_entity_init_formats(subdev, NULL); vsp1_entity_init_cfg(subdev, NULL);
return 0; return 0;
} }
......
...@@ -107,6 +107,8 @@ struct v4l2_mbus_framefmt * ...@@ -107,6 +107,8 @@ struct v4l2_mbus_framefmt *
vsp1_entity_get_pad_format(struct vsp1_entity *entity, vsp1_entity_get_pad_format(struct vsp1_entity *entity,
struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_pad_config *cfg,
unsigned int pad, u32 which); unsigned int pad, u32 which);
int vsp1_entity_init_cfg(struct v4l2_subdev *subdev,
struct v4l2_subdev_pad_config *cfg);
void vsp1_entity_route_setup(struct vsp1_entity *source); void vsp1_entity_route_setup(struct vsp1_entity *source);
......
...@@ -163,6 +163,7 @@ static struct v4l2_subdev_video_ops hsit_video_ops = { ...@@ -163,6 +163,7 @@ static struct v4l2_subdev_video_ops hsit_video_ops = {
}; };
static struct v4l2_subdev_pad_ops hsit_pad_ops = { static struct v4l2_subdev_pad_ops hsit_pad_ops = {
.init_cfg = vsp1_entity_init_cfg,
.enum_mbus_code = hsit_enum_mbus_code, .enum_mbus_code = hsit_enum_mbus_code,
.enum_frame_size = hsit_enum_frame_size, .enum_frame_size = hsit_enum_frame_size,
.get_fmt = hsit_get_format, .get_fmt = hsit_get_format,
......
...@@ -190,6 +190,7 @@ static struct v4l2_subdev_video_ops lif_video_ops = { ...@@ -190,6 +190,7 @@ static struct v4l2_subdev_video_ops lif_video_ops = {
}; };
static struct v4l2_subdev_pad_ops lif_pad_ops = { static struct v4l2_subdev_pad_ops lif_pad_ops = {
.init_cfg = vsp1_entity_init_cfg,
.enum_mbus_code = lif_enum_mbus_code, .enum_mbus_code = lif_enum_mbus_code,
.enum_frame_size = lif_enum_frame_size, .enum_frame_size = lif_enum_frame_size,
.get_fmt = lif_get_format, .get_fmt = lif_get_format,
......
...@@ -203,6 +203,7 @@ static struct v4l2_subdev_video_ops lut_video_ops = { ...@@ -203,6 +203,7 @@ static struct v4l2_subdev_video_ops lut_video_ops = {
}; };
static struct v4l2_subdev_pad_ops lut_pad_ops = { static struct v4l2_subdev_pad_ops lut_pad_ops = {
.init_cfg = vsp1_entity_init_cfg,
.enum_mbus_code = lut_enum_mbus_code, .enum_mbus_code = lut_enum_mbus_code,
.enum_frame_size = lut_enum_frame_size, .enum_frame_size = lut_enum_frame_size,
.get_fmt = lut_get_format, .get_fmt = lut_get_format,
......
...@@ -127,6 +127,7 @@ static struct v4l2_subdev_video_ops rpf_video_ops = { ...@@ -127,6 +127,7 @@ static struct v4l2_subdev_video_ops rpf_video_ops = {
}; };
static struct v4l2_subdev_pad_ops rpf_pad_ops = { static struct v4l2_subdev_pad_ops rpf_pad_ops = {
.init_cfg = vsp1_entity_init_cfg,
.enum_mbus_code = vsp1_rwpf_enum_mbus_code, .enum_mbus_code = vsp1_rwpf_enum_mbus_code,
.enum_frame_size = vsp1_rwpf_enum_frame_size, .enum_frame_size = vsp1_rwpf_enum_frame_size,
.get_fmt = vsp1_rwpf_get_format, .get_fmt = vsp1_rwpf_get_format,
......
...@@ -307,6 +307,7 @@ static struct v4l2_subdev_video_ops sru_video_ops = { ...@@ -307,6 +307,7 @@ static struct v4l2_subdev_video_ops sru_video_ops = {
}; };
static struct v4l2_subdev_pad_ops sru_pad_ops = { static struct v4l2_subdev_pad_ops sru_pad_ops = {
.init_cfg = vsp1_entity_init_cfg,
.enum_mbus_code = sru_enum_mbus_code, .enum_mbus_code = sru_enum_mbus_code,
.enum_frame_size = sru_enum_frame_size, .enum_frame_size = sru_enum_frame_size,
.get_fmt = sru_get_format, .get_fmt = sru_get_format,
......
...@@ -305,6 +305,7 @@ static struct v4l2_subdev_video_ops uds_video_ops = { ...@@ -305,6 +305,7 @@ static struct v4l2_subdev_video_ops uds_video_ops = {
}; };
static struct v4l2_subdev_pad_ops uds_pad_ops = { static struct v4l2_subdev_pad_ops uds_pad_ops = {
.init_cfg = vsp1_entity_init_cfg,
.enum_mbus_code = uds_enum_mbus_code, .enum_mbus_code = uds_enum_mbus_code,
.enum_frame_size = uds_enum_frame_size, .enum_frame_size = uds_enum_frame_size,
.get_fmt = uds_get_format, .get_fmt = uds_get_format,
......
...@@ -138,6 +138,7 @@ static struct v4l2_subdev_video_ops wpf_video_ops = { ...@@ -138,6 +138,7 @@ static struct v4l2_subdev_video_ops wpf_video_ops = {
}; };
static struct v4l2_subdev_pad_ops wpf_pad_ops = { static struct v4l2_subdev_pad_ops wpf_pad_ops = {
.init_cfg = vsp1_entity_init_cfg,
.enum_mbus_code = vsp1_rwpf_enum_mbus_code, .enum_mbus_code = vsp1_rwpf_enum_mbus_code,
.enum_frame_size = vsp1_rwpf_enum_frame_size, .enum_frame_size = vsp1_rwpf_enum_frame_size,
.get_fmt = vsp1_rwpf_get_format, .get_fmt = vsp1_rwpf_get_format,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment