Re: [PATCH v2] media: staging/imx: Implement init_cfg subdev pad op

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 2018-02-11 at 10:29 -0800, Steve Longerbeam wrote:
> 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: Steve Longerbeam <steve_longerbeam@xxxxxxxxxx>
> ---
> Changes since v1:
> - It isn't necessary to acquire the subdev locks in the init_cfg pad
>   op, the op only writes the try_fmt in cfg, and cfg is private to every
>   open subdev fh. Without the need for the lock, init_cfg can be made
>   generic. So this version moves the op to imx-media-utils.c for all
>   subdevs to call. It initializes try_fmt's to the current active formats.
> 
>  drivers/staging/media/imx/imx-ic-prp.c      |  1 +
>  drivers/staging/media/imx/imx-ic-prpencvf.c |  1 +
>  drivers/staging/media/imx/imx-media-csi.c   |  1 +
>  drivers/staging/media/imx/imx-media-utils.c | 29 +++++++++++++++++++++++++++++
>  drivers/staging/media/imx/imx-media-vdic.c  |  1 +
>  drivers/staging/media/imx/imx-media.h       |  2 ++
>  drivers/staging/media/imx/imx6-mipi-csi2.c  |  1 +
>  7 files changed, 36 insertions(+)
> 
> diff --git a/drivers/staging/media/imx/imx-ic-prp.c b/drivers/staging/media/imx/imx-ic-prp.c
> index c6d7e80..98923fc 100644
> --- a/drivers/staging/media/imx/imx-ic-prp.c
> +++ b/drivers/staging/media/imx/imx-ic-prp.c
> @@ -462,6 +462,7 @@ static int prp_registered(struct v4l2_subdev *sd)
>  }
>  
>  static const struct v4l2_subdev_pad_ops prp_pad_ops = {
> +	.init_cfg = imx_media_init_cfg,
>  	.enum_mbus_code = prp_enum_mbus_code,
>  	.get_fmt = prp_get_fmt,
>  	.set_fmt = prp_set_fmt,
> diff --git a/drivers/staging/media/imx/imx-ic-prpencvf.c b/drivers/staging/media/imx/imx-ic-prpencvf.c
> index 143038c..72de7f6 100644
> --- a/drivers/staging/media/imx/imx-ic-prpencvf.c
> +++ b/drivers/staging/media/imx/imx-ic-prpencvf.c
> @@ -1253,6 +1253,7 @@ static void prp_unregistered(struct v4l2_subdev *sd)
>  }
>  
>  static const struct v4l2_subdev_pad_ops prp_pad_ops = {
> +	.init_cfg = imx_media_init_cfg,
>  	.enum_mbus_code = prp_enum_mbus_code,
>  	.enum_frame_size = prp_enum_frame_size,
>  	.get_fmt = prp_get_fmt,
> diff --git a/drivers/staging/media/imx/imx-media-csi.c b/drivers/staging/media/imx/imx-media-csi.c
> index eb7be50..4ef6e7a 100644
> --- a/drivers/staging/media/imx/imx-media-csi.c
> +++ b/drivers/staging/media/imx/imx-media-csi.c
> @@ -1715,6 +1715,7 @@ static const struct v4l2_subdev_video_ops csi_video_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_frame_size = csi_enum_frame_size,
>  	.enum_frame_interval = csi_enum_frame_interval,
> diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c
> index 13dafa7..8920f9b 100644
> --- a/drivers/staging/media/imx/imx-media-utils.c
> +++ b/drivers/staging/media/imx/imx-media-utils.c
> @@ -465,6 +465,35 @@ int imx_media_init_mbus_fmt(struct v4l2_mbus_framefmt *mbus,
>  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
>   * uninitialized, and if so fill them with the values from fmt,
>   * or if tryfmt->colorspace has been initialized, all the default
> diff --git a/drivers/staging/media/imx/imx-media-vdic.c b/drivers/staging/media/imx/imx-media-vdic.c
> index 433474d..2246963 100644
> --- a/drivers/staging/media/imx/imx-media-vdic.c
> +++ b/drivers/staging/media/imx/imx-media-vdic.c
> @@ -909,6 +909,7 @@ static void vdic_unregistered(struct v4l2_subdev *sd)
>  }
>  
>  static const struct v4l2_subdev_pad_ops vdic_pad_ops = {
> +	.init_cfg = imx_media_init_cfg,
>  	.enum_mbus_code = vdic_enum_mbus_code,
>  	.get_fmt = vdic_get_fmt,
>  	.set_fmt = vdic_set_fmt,
> diff --git a/drivers/staging/media/imx/imx-media.h b/drivers/staging/media/imx/imx-media.h
> index 2fd6dfd..e945e0e 100644
> --- a/drivers/staging/media/imx/imx-media.h
> +++ b/drivers/staging/media/imx/imx-media.h
> @@ -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,
>  			    u32 width, u32 height, u32 code, u32 field,
>  			    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,
>  					struct v4l2_mbus_framefmt *fmt,
>  					bool ic_route);
> diff --git a/drivers/staging/media/imx/imx6-mipi-csi2.c b/drivers/staging/media/imx/imx6-mipi-csi2.c
> index 477d191..f74c610 100644
> --- a/drivers/staging/media/imx/imx6-mipi-csi2.c
> +++ b/drivers/staging/media/imx/imx6-mipi-csi2.c
> @@ -531,6 +531,7 @@ static const struct v4l2_subdev_video_ops csi2_video_ops = {
>  };
>  
>  static const struct v4l2_subdev_pad_ops csi2_pad_ops = {
> +	.init_cfg = imx_media_init_cfg,
>  	.get_fmt = csi2_get_fmt,
>  	.set_fmt = csi2_set_fmt,
>  };

Reviewed-by: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>

regards
Philipp



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux