diff mbox series

[2/3] media: Prefer designated initializers over memset for subdev pad ops

Message ID 20230215165021.6628-3-laurent.pinchart@ideasonboard.com (mailing list archive)
State New, archived
Headers show
Series media: Zero-initialize structures passed to subdev pad ops | expand

Commit Message

Laurent Pinchart Feb. 15, 2023, 4:50 p.m. UTC
Structures passed to subdev pad operations are all zero-initialized, but
not always with the same kind of code constructs. While most drivers
used designated initializers, which zero all the fields that are not
specified, when declaring variables, some use memset(). Those two
methods lead to the same end result, and, depending on compiler
optimizations, may even be completely equivalent, but they're not
consistent.

Improve coding style consistency by using designated initializers
instead of calling memset(). Where applicable, also move the variables
to inner scopes of for loops to ensure correct initialization in all
iterations.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 drivers/media/platform/renesas/vsp1/vsp1_drm.c | 18 +++++++++---------
 .../media/platform/renesas/vsp1/vsp1_entity.c  | 11 +++++------
 .../platform/samsung/exynos4-is/fimc-capture.c |  7 ++++---
 drivers/media/platform/ti/am437x/am437x-vpfe.c | 15 ++++++++-------
 drivers/media/platform/ti/cal/cal-video.c      |  8 ++++----
 drivers/media/usb/dvb-usb/cxusb-analog.c       | 14 +++++++-------
 drivers/staging/media/imx/imx-media-capture.c  | 12 ++++++------
 drivers/staging/media/imx/imx-media-utils.c    |  8 ++++----
 drivers/staging/media/omap4iss/iss_video.c     |  6 +++---
 9 files changed, 50 insertions(+), 49 deletions(-)

Comments

Prabhakar Feb. 28, 2023, 9:09 a.m. UTC | #1
Hi Laurent,

Thank you for the patch.

On Wed, Feb 15, 2023 at 4:50 PM Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> Structures passed to subdev pad operations are all zero-initialized, but
> not always with the same kind of code constructs. While most drivers
> used designated initializers, which zero all the fields that are not
> specified, when declaring variables, some use memset(). Those two
> methods lead to the same end result, and, depending on compiler
> optimizations, may even be completely equivalent, but they're not
> consistent.
>
> Improve coding style consistency by using designated initializers
> instead of calling memset(). Where applicable, also move the variables
> to inner scopes of for loops to ensure correct initialization in all
> iterations.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
<snip>
>  drivers/media/platform/ti/am437x/am437x-vpfe.c | 15 ++++++++-------

For above,

Reviewed-by: Lad Prabhakar <prabhakar.csengg@gmail.com>

Cheers,
Prabhakar

>  drivers/media/platform/ti/cal/cal-video.c      |  8 ++++----
>  drivers/media/usb/dvb-usb/cxusb-analog.c       | 14 +++++++-------
>  drivers/staging/media/imx/imx-media-capture.c  | 12 ++++++------
>  drivers/staging/media/imx/imx-media-utils.c    |  8 ++++----
>  drivers/staging/media/omap4iss/iss_video.c     |  6 +++---
>  9 files changed, 50 insertions(+), 49 deletions(-)
>
> diff --git a/drivers/media/platform/renesas/vsp1/vsp1_drm.c b/drivers/media/platform/renesas/vsp1/vsp1_drm.c
> index c6f25200982c..7fe375b6322c 100644
> --- a/drivers/media/platform/renesas/vsp1/vsp1_drm.c
> +++ b/drivers/media/platform/renesas/vsp1/vsp1_drm.c
> @@ -66,7 +66,9 @@ static int vsp1_du_insert_uif(struct vsp1_device *vsp1,
>                               struct vsp1_entity *prev, unsigned int prev_pad,
>                               struct vsp1_entity *next, unsigned int next_pad)
>  {
> -       struct v4l2_subdev_format format;
> +       struct v4l2_subdev_format format = {
> +               .which = V4L2_SUBDEV_FORMAT_ACTIVE,
> +       };
>         int ret;
>
>         if (!uif) {
> @@ -82,8 +84,6 @@ static int vsp1_du_insert_uif(struct vsp1_device *vsp1,
>         prev->sink = uif;
>         prev->sink_pad = UIF_PAD_SINK;
>
> -       memset(&format, 0, sizeof(format));
> -       format.which = V4L2_SUBDEV_FORMAT_ACTIVE;
>         format.pad = prev_pad;
>
>         ret = v4l2_subdev_call(&prev->subdev, pad, get_fmt, NULL, &format);
> @@ -118,8 +118,12 @@ static int vsp1_du_pipeline_setup_rpf(struct vsp1_device *vsp1,
>                                       struct vsp1_entity *uif,
>                                       unsigned int brx_input)
>  {
> -       struct v4l2_subdev_selection sel;
> -       struct v4l2_subdev_format format;
> +       struct v4l2_subdev_selection sel = {
> +               .which = V4L2_SUBDEV_FORMAT_ACTIVE,
> +       };
> +       struct v4l2_subdev_format format = {
> +               .which = V4L2_SUBDEV_FORMAT_ACTIVE,
> +       };
>         const struct v4l2_rect *crop;
>         int ret;
>
> @@ -129,8 +133,6 @@ static int vsp1_du_pipeline_setup_rpf(struct vsp1_device *vsp1,
>          */
>         crop = &vsp1->drm->inputs[rpf->entity.index].crop;
>
> -       memset(&format, 0, sizeof(format));
> -       format.which = V4L2_SUBDEV_FORMAT_ACTIVE;
>         format.pad = RWPF_PAD_SINK;
>         format.format.width = crop->width + crop->left;
>         format.format.height = crop->height + crop->top;
> @@ -147,8 +149,6 @@ static int vsp1_du_pipeline_setup_rpf(struct vsp1_device *vsp1,
>                 __func__, format.format.width, format.format.height,
>                 format.format.code, rpf->entity.index);
>
> -       memset(&sel, 0, sizeof(sel));
> -       sel.which = V4L2_SUBDEV_FORMAT_ACTIVE;
>         sel.pad = RWPF_PAD_SINK;
>         sel.target = V4L2_SEL_TGT_CROP;
>         sel.r = *crop;
> diff --git a/drivers/media/platform/renesas/vsp1/vsp1_entity.c b/drivers/media/platform/renesas/vsp1/vsp1_entity.c
> index 4c3bd2b1ca28..c31f05a80bb5 100644
> --- a/drivers/media/platform/renesas/vsp1/vsp1_entity.c
> +++ b/drivers/media/platform/renesas/vsp1/vsp1_entity.c
> @@ -184,15 +184,14 @@ vsp1_entity_get_pad_selection(struct vsp1_entity *entity,
>  int vsp1_entity_init_cfg(struct v4l2_subdev *subdev,
>                          struct v4l2_subdev_state *sd_state)
>  {
> -       struct v4l2_subdev_format format;
>         unsigned int pad;
>
>         for (pad = 0; pad < subdev->entity.num_pads - 1; ++pad) {
> -               memset(&format, 0, sizeof(format));
> -
> -               format.pad = pad;
> -               format.which = sd_state ? V4L2_SUBDEV_FORMAT_TRY
> -                            : V4L2_SUBDEV_FORMAT_ACTIVE;
> +               struct v4l2_subdev_format format = {
> +                       .pad = pad,
> +                       .which = sd_state ? V4L2_SUBDEV_FORMAT_TRY
> +                              : V4L2_SUBDEV_FORMAT_ACTIVE,
> +               };
>
>                 v4l2_subdev_call(subdev, pad, set_fmt, sd_state, &format);
>         }
> diff --git a/drivers/media/platform/samsung/exynos4-is/fimc-capture.c b/drivers/media/platform/samsung/exynos4-is/fimc-capture.c
> index 4800751a401c..a0d43bf892e6 100644
> --- a/drivers/media/platform/samsung/exynos4-is/fimc-capture.c
> +++ b/drivers/media/platform/samsung/exynos4-is/fimc-capture.c
> @@ -763,7 +763,10 @@ static int fimc_pipeline_try_format(struct fimc_ctx *ctx,
>         struct fimc_dev *fimc = ctx->fimc_dev;
>         struct fimc_pipeline *p = to_fimc_pipeline(fimc->vid_cap.ve.pipe);
>         struct v4l2_subdev *sd = p->subdevs[IDX_SENSOR];
> -       struct v4l2_subdev_format sfmt;
> +       struct v4l2_subdev_format sfmt = {
> +               .which = set ? V4L2_SUBDEV_FORMAT_ACTIVE
> +                      : V4L2_SUBDEV_FORMAT_TRY,
> +       };
>         struct v4l2_mbus_framefmt *mf = &sfmt.format;
>         struct media_entity *me;
>         struct fimc_fmt *ffmt;
> @@ -774,9 +777,7 @@ static int fimc_pipeline_try_format(struct fimc_ctx *ctx,
>         if (WARN_ON(!sd || !tfmt))
>                 return -EINVAL;
>
> -       memset(&sfmt, 0, sizeof(sfmt));
>         sfmt.format = *tfmt;
> -       sfmt.which = set ? V4L2_SUBDEV_FORMAT_ACTIVE : V4L2_SUBDEV_FORMAT_TRY;
>
>         me = fimc_pipeline_get_head(&sd->entity);
>
> diff --git a/drivers/media/platform/ti/am437x/am437x-vpfe.c b/drivers/media/platform/ti/am437x/am437x-vpfe.c
> index f23085b5954b..9fcbf2a2b7c3 100644
> --- a/drivers/media/platform/ti/am437x/am437x-vpfe.c
> +++ b/drivers/media/platform/ti/am437x/am437x-vpfe.c
> @@ -1501,7 +1501,9 @@ static int vpfe_enum_size(struct file *file, void  *priv,
>                           struct v4l2_frmsizeenum *fsize)
>  {
>         struct vpfe_device *vpfe = video_drvdata(file);
> -       struct v4l2_subdev_frame_size_enum fse;
> +       struct v4l2_subdev_frame_size_enum fse = {
> +               .which = V4L2_SUBDEV_FORMAT_ACTIVE,
> +       };
>         struct v4l2_subdev *sd = vpfe->current_subdev->sd;
>         struct vpfe_fmt *fmt;
>         int ret;
> @@ -1516,11 +1518,9 @@ static int vpfe_enum_size(struct file *file, void  *priv,
>
>         memset(fsize->reserved, 0x0, sizeof(fsize->reserved));
>
> -       memset(&fse, 0x0, sizeof(fse));
>         fse.index = fsize->index;
>         fse.pad = 0;
>         fse.code = fmt->code;
> -       fse.which = V4L2_SUBDEV_FORMAT_ACTIVE;
>         ret = v4l2_subdev_call(sd, pad, enum_frame_size, NULL, &fse);
>         if (ret)
>                 return ret;
> @@ -2148,7 +2148,6 @@ vpfe_async_bound(struct v4l2_async_notifier *notifier,
>  {
>         struct vpfe_device *vpfe = container_of(notifier->v4l2_dev,
>                                                struct vpfe_device, v4l2_dev);
> -       struct v4l2_subdev_mbus_code_enum mbus_code;
>         struct vpfe_subdev_info *sdinfo;
>         struct vpfe_fmt *fmt;
>         int ret = 0;
> @@ -2175,9 +2174,11 @@ vpfe_async_bound(struct v4l2_async_notifier *notifier,
>
>         vpfe->num_active_fmt = 0;
>         for (j = 0, i = 0; (ret != -EINVAL); ++j) {
> -               memset(&mbus_code, 0, sizeof(mbus_code));
> -               mbus_code.index = j;
> -               mbus_code.which = V4L2_SUBDEV_FORMAT_ACTIVE;
> +               struct v4l2_subdev_mbus_code_enum mbus_code = {
> +                       .index = j,
> +                       .which = V4L2_SUBDEV_FORMAT_ACTIVE,
> +               };
> +
>                 ret = v4l2_subdev_call(subdev, pad, enum_mbus_code,
>                                        NULL, &mbus_code);
>                 if (ret)
> diff --git a/drivers/media/platform/ti/cal/cal-video.c b/drivers/media/platform/ti/cal/cal-video.c
> index 51ed82172d71..ca906a9e4222 100644
> --- a/drivers/media/platform/ti/cal/cal-video.c
> +++ b/drivers/media/platform/ti/cal/cal-video.c
> @@ -814,7 +814,6 @@ static const struct v4l2_file_operations cal_fops = {
>
>  static int cal_ctx_v4l2_init_formats(struct cal_ctx *ctx)
>  {
> -       struct v4l2_subdev_mbus_code_enum mbus_code;
>         struct v4l2_mbus_framefmt mbus_fmt;
>         const struct cal_format_info *fmtinfo;
>         unsigned int i, j, k;
> @@ -829,10 +828,11 @@ static int cal_ctx_v4l2_init_formats(struct cal_ctx *ctx)
>         ctx->num_active_fmt = 0;
>
>         for (j = 0, i = 0; ; ++j) {
> +               struct v4l2_subdev_mbus_code_enum mbus_code = {
> +                       .index = j,
> +                       .which = V4L2_SUBDEV_FORMAT_ACTIVE,
> +               };
>
> -               memset(&mbus_code, 0, sizeof(mbus_code));
> -               mbus_code.index = j;
> -               mbus_code.which = V4L2_SUBDEV_FORMAT_ACTIVE;
>                 ret = v4l2_subdev_call(ctx->phy->source, pad, enum_mbus_code,
>                                        NULL, &mbus_code);
>                 if (ret == -EINVAL)
> diff --git a/drivers/media/usb/dvb-usb/cxusb-analog.c b/drivers/media/usb/dvb-usb/cxusb-analog.c
> index e93183ddd797..deba5224cb8d 100644
> --- a/drivers/media/usb/dvb-usb/cxusb-analog.c
> +++ b/drivers/media/usb/dvb-usb/cxusb-analog.c
> @@ -1014,7 +1014,10 @@ static int cxusb_medion_try_s_fmt_vid_cap(struct file *file,
>  {
>         struct dvb_usb_device *dvbdev = video_drvdata(file);
>         struct cxusb_medion_dev *cxdev = dvbdev->priv;
> -       struct v4l2_subdev_format subfmt;
> +       struct v4l2_subdev_format subfmt = {
> +               .which = isset ? V4L2_SUBDEV_FORMAT_ACTIVE :
> +                        V4L2_SUBDEV_FORMAT_TRY,
> +       };
>         u32 field;
>         int ret;
>
> @@ -1024,9 +1027,6 @@ static int cxusb_medion_try_s_fmt_vid_cap(struct file *file,
>         field = vb2_start_streaming_called(&cxdev->videoqueue) ?
>                 cxdev->field_order : cxusb_medion_field_order(cxdev);
>
> -       memset(&subfmt, 0, sizeof(subfmt));
> -       subfmt.which = isset ? V4L2_SUBDEV_FORMAT_ACTIVE :
> -               V4L2_SUBDEV_FORMAT_TRY;
>         subfmt.format.width = f->fmt.pix.width & ~1;
>         subfmt.format.height = f->fmt.pix.height & ~1;
>         subfmt.format.code = MEDIA_BUS_FMT_FIXED;
> @@ -1464,7 +1464,9 @@ int cxusb_medion_analog_init(struct dvb_usb_device *dvbdev)
>                                             .buf = tuner_analog_msg_data,
>                                             .len =
>                                             sizeof(tuner_analog_msg_data) };
> -       struct v4l2_subdev_format subfmt;
> +       struct v4l2_subdev_format subfmt = {
> +               .which = V4L2_SUBDEV_FORMAT_ACTIVE,
> +       };
>         int ret;
>
>         /* switch tuner to analog mode so IF demod will become accessible */
> @@ -1507,8 +1509,6 @@ int cxusb_medion_analog_init(struct dvb_usb_device *dvbdev)
>         v4l2_subdev_call(cxdev->tuner, video, s_std, cxdev->norm);
>         v4l2_subdev_call(cxdev->cx25840, video, s_std, cxdev->norm);
>
> -       memset(&subfmt, 0, sizeof(subfmt));
> -       subfmt.which = V4L2_SUBDEV_FORMAT_ACTIVE;
>         subfmt.format.width = cxdev->width;
>         subfmt.format.height = cxdev->height;
>         subfmt.format.code = MEDIA_BUS_FMT_FIXED;
> diff --git a/drivers/staging/media/imx/imx-media-capture.c b/drivers/staging/media/imx/imx-media-capture.c
> index 39666db59c4e..4364df27c6d2 100644
> --- a/drivers/staging/media/imx/imx-media-capture.c
> +++ b/drivers/staging/media/imx/imx-media-capture.c
> @@ -504,14 +504,14 @@ static int capture_legacy_g_parm(struct file *file, void *fh,
>                                  struct v4l2_streamparm *a)
>  {
>         struct capture_priv *priv = video_drvdata(file);
> -       struct v4l2_subdev_frame_interval fi;
> +       struct v4l2_subdev_frame_interval fi = {
> +               .pad = priv->src_sd_pad,
> +       };
>         int ret;
>
>         if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
>                 return -EINVAL;
>
> -       memset(&fi, 0, sizeof(fi));
> -       fi.pad = priv->src_sd_pad;
>         ret = v4l2_subdev_call(priv->src_sd, video, g_frame_interval, &fi);
>         if (ret < 0)
>                 return ret;
> @@ -526,14 +526,14 @@ static int capture_legacy_s_parm(struct file *file, void *fh,
>                                  struct v4l2_streamparm *a)
>  {
>         struct capture_priv *priv = video_drvdata(file);
> -       struct v4l2_subdev_frame_interval fi;
> +       struct v4l2_subdev_frame_interval fi = {
> +               .pad = priv->src_sd_pad,
> +       };
>         int ret;
>
>         if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
>                 return -EINVAL;
>
> -       memset(&fi, 0, sizeof(fi));
> -       fi.pad = priv->src_sd_pad;
>         fi.interval = a->parm.capture.timeperframe;
>         ret = v4l2_subdev_call(priv->src_sd, video, s_frame_interval, &fi);
>         if (ret < 0)
> diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c
> index 411e907b68eb..b545750ca526 100644
> --- a/drivers/staging/media/imx/imx-media-utils.c
> +++ b/drivers/staging/media/imx/imx-media-utils.c
> @@ -432,15 +432,15 @@ int imx_media_init_cfg(struct v4l2_subdev *sd,
>                        struct v4l2_subdev_state *sd_state)
>  {
>         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));
> +               struct v4l2_subdev_format format = {
> +                       .pad = pad,
> +                       .which = V4L2_SUBDEV_FORMAT_ACTIVE,
> +               };
>
> -               format.pad = pad;
> -               format.which = V4L2_SUBDEV_FORMAT_ACTIVE;
>                 ret = v4l2_subdev_call(sd, pad, get_fmt, NULL, &format);
>                 if (ret)
>                         continue;
> diff --git a/drivers/staging/media/omap4iss/iss_video.c b/drivers/staging/media/omap4iss/iss_video.c
> index 1406445a30c3..22fa4d6cae10 100644
> --- a/drivers/staging/media/omap4iss/iss_video.c
> +++ b/drivers/staging/media/omap4iss/iss_video.c
> @@ -237,7 +237,9 @@ static int
>  __iss_video_get_format(struct iss_video *video,
>                        struct v4l2_mbus_framefmt *format)
>  {
> -       struct v4l2_subdev_format fmt;
> +       struct v4l2_subdev_format fmt = {
> +               .which = V4L2_SUBDEV_FORMAT_ACTIVE,
> +       };
>         struct v4l2_subdev *subdev;
>         u32 pad;
>         int ret;
> @@ -246,9 +248,7 @@ __iss_video_get_format(struct iss_video *video,
>         if (!subdev)
>                 return -EINVAL;
>
> -       memset(&fmt, 0, sizeof(fmt));
>         fmt.pad = pad;
> -       fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE;
>
>         mutex_lock(&video->mutex);
>         ret = v4l2_subdev_call(subdev, pad, get_fmt, NULL, &fmt);
> --
> Regards,
>
> Laurent Pinchart
>
Philipp Zabel March 6, 2023, 1:01 p.m. UTC | #2
On Wed, Feb 15, 2023 at 06:50:20PM +0200, Laurent Pinchart wrote:
> Structures passed to subdev pad operations are all zero-initialized, but
> not always with the same kind of code constructs. While most drivers
> used designated initializers, which zero all the fields that are not
> specified, when declaring variables, some use memset(). Those two
> methods lead to the same end result, and, depending on compiler
> optimizations, may even be completely equivalent, but they're not
> consistent.
> 
> Improve coding style consistency by using designated initializers
> instead of calling memset(). Where applicable, also move the variables
> to inner scopes of for loops to ensure correct initialization in all
> iterations.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
[...]
>  drivers/staging/media/imx/imx-media-capture.c  | 12 ++++++------
>  drivers/staging/media/imx/imx-media-utils.c    |  8 ++++----

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

regards
Philipp
diff mbox series

Patch

diff --git a/drivers/media/platform/renesas/vsp1/vsp1_drm.c b/drivers/media/platform/renesas/vsp1/vsp1_drm.c
index c6f25200982c..7fe375b6322c 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_drm.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_drm.c
@@ -66,7 +66,9 @@  static int vsp1_du_insert_uif(struct vsp1_device *vsp1,
 			      struct vsp1_entity *prev, unsigned int prev_pad,
 			      struct vsp1_entity *next, unsigned int next_pad)
 {
-	struct v4l2_subdev_format format;
+	struct v4l2_subdev_format format = {
+		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
+	};
 	int ret;
 
 	if (!uif) {
@@ -82,8 +84,6 @@  static int vsp1_du_insert_uif(struct vsp1_device *vsp1,
 	prev->sink = uif;
 	prev->sink_pad = UIF_PAD_SINK;
 
-	memset(&format, 0, sizeof(format));
-	format.which = V4L2_SUBDEV_FORMAT_ACTIVE;
 	format.pad = prev_pad;
 
 	ret = v4l2_subdev_call(&prev->subdev, pad, get_fmt, NULL, &format);
@@ -118,8 +118,12 @@  static int vsp1_du_pipeline_setup_rpf(struct vsp1_device *vsp1,
 				      struct vsp1_entity *uif,
 				      unsigned int brx_input)
 {
-	struct v4l2_subdev_selection sel;
-	struct v4l2_subdev_format format;
+	struct v4l2_subdev_selection sel = {
+		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
+	};
+	struct v4l2_subdev_format format = {
+		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
+	};
 	const struct v4l2_rect *crop;
 	int ret;
 
@@ -129,8 +133,6 @@  static int vsp1_du_pipeline_setup_rpf(struct vsp1_device *vsp1,
 	 */
 	crop = &vsp1->drm->inputs[rpf->entity.index].crop;
 
-	memset(&format, 0, sizeof(format));
-	format.which = V4L2_SUBDEV_FORMAT_ACTIVE;
 	format.pad = RWPF_PAD_SINK;
 	format.format.width = crop->width + crop->left;
 	format.format.height = crop->height + crop->top;
@@ -147,8 +149,6 @@  static int vsp1_du_pipeline_setup_rpf(struct vsp1_device *vsp1,
 		__func__, format.format.width, format.format.height,
 		format.format.code, rpf->entity.index);
 
-	memset(&sel, 0, sizeof(sel));
-	sel.which = V4L2_SUBDEV_FORMAT_ACTIVE;
 	sel.pad = RWPF_PAD_SINK;
 	sel.target = V4L2_SEL_TGT_CROP;
 	sel.r = *crop;
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_entity.c b/drivers/media/platform/renesas/vsp1/vsp1_entity.c
index 4c3bd2b1ca28..c31f05a80bb5 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_entity.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_entity.c
@@ -184,15 +184,14 @@  vsp1_entity_get_pad_selection(struct vsp1_entity *entity,
 int vsp1_entity_init_cfg(struct v4l2_subdev *subdev,
 			 struct v4l2_subdev_state *sd_state)
 {
-	struct v4l2_subdev_format format;
 	unsigned int pad;
 
 	for (pad = 0; pad < subdev->entity.num_pads - 1; ++pad) {
-		memset(&format, 0, sizeof(format));
-
-		format.pad = pad;
-		format.which = sd_state ? V4L2_SUBDEV_FORMAT_TRY
-			     : V4L2_SUBDEV_FORMAT_ACTIVE;
+		struct v4l2_subdev_format format = {
+			.pad = pad,
+			.which = sd_state ? V4L2_SUBDEV_FORMAT_TRY
+			       : V4L2_SUBDEV_FORMAT_ACTIVE,
+		};
 
 		v4l2_subdev_call(subdev, pad, set_fmt, sd_state, &format);
 	}
diff --git a/drivers/media/platform/samsung/exynos4-is/fimc-capture.c b/drivers/media/platform/samsung/exynos4-is/fimc-capture.c
index 4800751a401c..a0d43bf892e6 100644
--- a/drivers/media/platform/samsung/exynos4-is/fimc-capture.c
+++ b/drivers/media/platform/samsung/exynos4-is/fimc-capture.c
@@ -763,7 +763,10 @@  static int fimc_pipeline_try_format(struct fimc_ctx *ctx,
 	struct fimc_dev *fimc = ctx->fimc_dev;
 	struct fimc_pipeline *p = to_fimc_pipeline(fimc->vid_cap.ve.pipe);
 	struct v4l2_subdev *sd = p->subdevs[IDX_SENSOR];
-	struct v4l2_subdev_format sfmt;
+	struct v4l2_subdev_format sfmt = {
+		.which = set ? V4L2_SUBDEV_FORMAT_ACTIVE
+		       : V4L2_SUBDEV_FORMAT_TRY,
+	};
 	struct v4l2_mbus_framefmt *mf = &sfmt.format;
 	struct media_entity *me;
 	struct fimc_fmt *ffmt;
@@ -774,9 +777,7 @@  static int fimc_pipeline_try_format(struct fimc_ctx *ctx,
 	if (WARN_ON(!sd || !tfmt))
 		return -EINVAL;
 
-	memset(&sfmt, 0, sizeof(sfmt));
 	sfmt.format = *tfmt;
-	sfmt.which = set ? V4L2_SUBDEV_FORMAT_ACTIVE : V4L2_SUBDEV_FORMAT_TRY;
 
 	me = fimc_pipeline_get_head(&sd->entity);
 
diff --git a/drivers/media/platform/ti/am437x/am437x-vpfe.c b/drivers/media/platform/ti/am437x/am437x-vpfe.c
index f23085b5954b..9fcbf2a2b7c3 100644
--- a/drivers/media/platform/ti/am437x/am437x-vpfe.c
+++ b/drivers/media/platform/ti/am437x/am437x-vpfe.c
@@ -1501,7 +1501,9 @@  static int vpfe_enum_size(struct file *file, void  *priv,
 			  struct v4l2_frmsizeenum *fsize)
 {
 	struct vpfe_device *vpfe = video_drvdata(file);
-	struct v4l2_subdev_frame_size_enum fse;
+	struct v4l2_subdev_frame_size_enum fse = {
+		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
+	};
 	struct v4l2_subdev *sd = vpfe->current_subdev->sd;
 	struct vpfe_fmt *fmt;
 	int ret;
@@ -1516,11 +1518,9 @@  static int vpfe_enum_size(struct file *file, void  *priv,
 
 	memset(fsize->reserved, 0x0, sizeof(fsize->reserved));
 
-	memset(&fse, 0x0, sizeof(fse));
 	fse.index = fsize->index;
 	fse.pad = 0;
 	fse.code = fmt->code;
-	fse.which = V4L2_SUBDEV_FORMAT_ACTIVE;
 	ret = v4l2_subdev_call(sd, pad, enum_frame_size, NULL, &fse);
 	if (ret)
 		return ret;
@@ -2148,7 +2148,6 @@  vpfe_async_bound(struct v4l2_async_notifier *notifier,
 {
 	struct vpfe_device *vpfe = container_of(notifier->v4l2_dev,
 					       struct vpfe_device, v4l2_dev);
-	struct v4l2_subdev_mbus_code_enum mbus_code;
 	struct vpfe_subdev_info *sdinfo;
 	struct vpfe_fmt *fmt;
 	int ret = 0;
@@ -2175,9 +2174,11 @@  vpfe_async_bound(struct v4l2_async_notifier *notifier,
 
 	vpfe->num_active_fmt = 0;
 	for (j = 0, i = 0; (ret != -EINVAL); ++j) {
-		memset(&mbus_code, 0, sizeof(mbus_code));
-		mbus_code.index = j;
-		mbus_code.which = V4L2_SUBDEV_FORMAT_ACTIVE;
+		struct v4l2_subdev_mbus_code_enum mbus_code = {
+			.index = j,
+			.which = V4L2_SUBDEV_FORMAT_ACTIVE,
+		};
+
 		ret = v4l2_subdev_call(subdev, pad, enum_mbus_code,
 				       NULL, &mbus_code);
 		if (ret)
diff --git a/drivers/media/platform/ti/cal/cal-video.c b/drivers/media/platform/ti/cal/cal-video.c
index 51ed82172d71..ca906a9e4222 100644
--- a/drivers/media/platform/ti/cal/cal-video.c
+++ b/drivers/media/platform/ti/cal/cal-video.c
@@ -814,7 +814,6 @@  static const struct v4l2_file_operations cal_fops = {
 
 static int cal_ctx_v4l2_init_formats(struct cal_ctx *ctx)
 {
-	struct v4l2_subdev_mbus_code_enum mbus_code;
 	struct v4l2_mbus_framefmt mbus_fmt;
 	const struct cal_format_info *fmtinfo;
 	unsigned int i, j, k;
@@ -829,10 +828,11 @@  static int cal_ctx_v4l2_init_formats(struct cal_ctx *ctx)
 	ctx->num_active_fmt = 0;
 
 	for (j = 0, i = 0; ; ++j) {
+		struct v4l2_subdev_mbus_code_enum mbus_code = {
+			.index = j,
+			.which = V4L2_SUBDEV_FORMAT_ACTIVE,
+		};
 
-		memset(&mbus_code, 0, sizeof(mbus_code));
-		mbus_code.index = j;
-		mbus_code.which = V4L2_SUBDEV_FORMAT_ACTIVE;
 		ret = v4l2_subdev_call(ctx->phy->source, pad, enum_mbus_code,
 				       NULL, &mbus_code);
 		if (ret == -EINVAL)
diff --git a/drivers/media/usb/dvb-usb/cxusb-analog.c b/drivers/media/usb/dvb-usb/cxusb-analog.c
index e93183ddd797..deba5224cb8d 100644
--- a/drivers/media/usb/dvb-usb/cxusb-analog.c
+++ b/drivers/media/usb/dvb-usb/cxusb-analog.c
@@ -1014,7 +1014,10 @@  static int cxusb_medion_try_s_fmt_vid_cap(struct file *file,
 {
 	struct dvb_usb_device *dvbdev = video_drvdata(file);
 	struct cxusb_medion_dev *cxdev = dvbdev->priv;
-	struct v4l2_subdev_format subfmt;
+	struct v4l2_subdev_format subfmt = {
+		.which = isset ? V4L2_SUBDEV_FORMAT_ACTIVE :
+			 V4L2_SUBDEV_FORMAT_TRY,
+	};
 	u32 field;
 	int ret;
 
@@ -1024,9 +1027,6 @@  static int cxusb_medion_try_s_fmt_vid_cap(struct file *file,
 	field = vb2_start_streaming_called(&cxdev->videoqueue) ?
 		cxdev->field_order : cxusb_medion_field_order(cxdev);
 
-	memset(&subfmt, 0, sizeof(subfmt));
-	subfmt.which = isset ? V4L2_SUBDEV_FORMAT_ACTIVE :
-		V4L2_SUBDEV_FORMAT_TRY;
 	subfmt.format.width = f->fmt.pix.width & ~1;
 	subfmt.format.height = f->fmt.pix.height & ~1;
 	subfmt.format.code = MEDIA_BUS_FMT_FIXED;
@@ -1464,7 +1464,9 @@  int cxusb_medion_analog_init(struct dvb_usb_device *dvbdev)
 					    .buf = tuner_analog_msg_data,
 					    .len =
 					    sizeof(tuner_analog_msg_data) };
-	struct v4l2_subdev_format subfmt;
+	struct v4l2_subdev_format subfmt = {
+		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
+	};
 	int ret;
 
 	/* switch tuner to analog mode so IF demod will become accessible */
@@ -1507,8 +1509,6 @@  int cxusb_medion_analog_init(struct dvb_usb_device *dvbdev)
 	v4l2_subdev_call(cxdev->tuner, video, s_std, cxdev->norm);
 	v4l2_subdev_call(cxdev->cx25840, video, s_std, cxdev->norm);
 
-	memset(&subfmt, 0, sizeof(subfmt));
-	subfmt.which = V4L2_SUBDEV_FORMAT_ACTIVE;
 	subfmt.format.width = cxdev->width;
 	subfmt.format.height = cxdev->height;
 	subfmt.format.code = MEDIA_BUS_FMT_FIXED;
diff --git a/drivers/staging/media/imx/imx-media-capture.c b/drivers/staging/media/imx/imx-media-capture.c
index 39666db59c4e..4364df27c6d2 100644
--- a/drivers/staging/media/imx/imx-media-capture.c
+++ b/drivers/staging/media/imx/imx-media-capture.c
@@ -504,14 +504,14 @@  static int capture_legacy_g_parm(struct file *file, void *fh,
 				 struct v4l2_streamparm *a)
 {
 	struct capture_priv *priv = video_drvdata(file);
-	struct v4l2_subdev_frame_interval fi;
+	struct v4l2_subdev_frame_interval fi = {
+		.pad = priv->src_sd_pad,
+	};
 	int ret;
 
 	if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
 		return -EINVAL;
 
-	memset(&fi, 0, sizeof(fi));
-	fi.pad = priv->src_sd_pad;
 	ret = v4l2_subdev_call(priv->src_sd, video, g_frame_interval, &fi);
 	if (ret < 0)
 		return ret;
@@ -526,14 +526,14 @@  static int capture_legacy_s_parm(struct file *file, void *fh,
 				 struct v4l2_streamparm *a)
 {
 	struct capture_priv *priv = video_drvdata(file);
-	struct v4l2_subdev_frame_interval fi;
+	struct v4l2_subdev_frame_interval fi = {
+		.pad = priv->src_sd_pad,
+	};
 	int ret;
 
 	if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
 		return -EINVAL;
 
-	memset(&fi, 0, sizeof(fi));
-	fi.pad = priv->src_sd_pad;
 	fi.interval = a->parm.capture.timeperframe;
 	ret = v4l2_subdev_call(priv->src_sd, video, s_frame_interval, &fi);
 	if (ret < 0)
diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c
index 411e907b68eb..b545750ca526 100644
--- a/drivers/staging/media/imx/imx-media-utils.c
+++ b/drivers/staging/media/imx/imx-media-utils.c
@@ -432,15 +432,15 @@  int imx_media_init_cfg(struct v4l2_subdev *sd,
 		       struct v4l2_subdev_state *sd_state)
 {
 	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));
+		struct v4l2_subdev_format format = {
+			.pad = pad,
+			.which = V4L2_SUBDEV_FORMAT_ACTIVE,
+		};
 
-		format.pad = pad;
-		format.which = V4L2_SUBDEV_FORMAT_ACTIVE;
 		ret = v4l2_subdev_call(sd, pad, get_fmt, NULL, &format);
 		if (ret)
 			continue;
diff --git a/drivers/staging/media/omap4iss/iss_video.c b/drivers/staging/media/omap4iss/iss_video.c
index 1406445a30c3..22fa4d6cae10 100644
--- a/drivers/staging/media/omap4iss/iss_video.c
+++ b/drivers/staging/media/omap4iss/iss_video.c
@@ -237,7 +237,9 @@  static int
 __iss_video_get_format(struct iss_video *video,
 		       struct v4l2_mbus_framefmt *format)
 {
-	struct v4l2_subdev_format fmt;
+	struct v4l2_subdev_format fmt = {
+		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
+	};
 	struct v4l2_subdev *subdev;
 	u32 pad;
 	int ret;
@@ -246,9 +248,7 @@  __iss_video_get_format(struct iss_video *video,
 	if (!subdev)
 		return -EINVAL;
 
-	memset(&fmt, 0, sizeof(fmt));
 	fmt.pad = pad;
-	fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE;
 
 	mutex_lock(&video->mutex);
 	ret = v4l2_subdev_call(subdev, pad, get_fmt, NULL, &fmt);