[media] v4l2-subdev: add support for the new enum_frame_size 'which' field
authorHans Verkuil <hans.verkuil@cisco.com>
Wed, 4 Mar 2015 09:47:58 +0000 (01:47 -0800)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Mon, 23 Mar 2015 18:48:55 +0000 (11:48 -0700)
Support the new 'which' field in the enum_frame_size ops. Most drivers do not
need to be changed since they always returns the same enumeration regardless
of the 'which' field.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
Tested-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Acked-by: Andrzej Hajda <a.hajda@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
21 files changed:
drivers/media/i2c/s5c73m3/s5c73m3-core.c
drivers/media/platform/am437x/am437x-vpfe.c
drivers/media/platform/omap3isp/ispccdc.c
drivers/media/platform/omap3isp/ispccp2.c
drivers/media/platform/omap3isp/ispcsi2.c
drivers/media/platform/omap3isp/isppreview.c
drivers/media/platform/omap3isp/ispresizer.c
drivers/media/platform/vsp1/vsp1_hsit.c
drivers/media/platform/vsp1/vsp1_lif.c
drivers/media/platform/vsp1/vsp1_lut.c
drivers/media/platform/vsp1/vsp1_rwpf.c
drivers/media/platform/vsp1/vsp1_sru.c
drivers/media/platform/vsp1/vsp1_uds.c
drivers/staging/media/davinci_vpfe/dm365_ipipe.c
drivers/staging/media/davinci_vpfe/dm365_ipipeif.c
drivers/staging/media/davinci_vpfe/dm365_isif.c
drivers/staging/media/davinci_vpfe/dm365_resizer.c
drivers/staging/media/omap4iss/iss_csi2.c
drivers/staging/media/omap4iss/iss_ipipe.c
drivers/staging/media/omap4iss/iss_ipipeif.c
drivers/staging/media/omap4iss/iss_resizer.c

index 257a335..08b234b 100644 (file)
@@ -1251,6 +1251,7 @@ static int s5c73m3_oif_enum_frame_size(struct v4l2_subdev *sd,
                                   struct v4l2_subdev_pad_config *cfg,
                                   struct v4l2_subdev_frame_size_enum *fse)
 {
+       struct s5c73m3 *state = oif_sd_to_s5c73m3(sd);
        int idx;
 
        if (fse->pad == OIF_SOURCE_PAD) {
@@ -1260,11 +1261,25 @@ static int s5c73m3_oif_enum_frame_size(struct v4l2_subdev *sd,
                switch (fse->code) {
                case S5C73M3_JPEG_FMT:
                case S5C73M3_ISP_FMT: {
-                       struct v4l2_mbus_framefmt *mf =
-                               v4l2_subdev_get_try_format(sd, cfg, OIF_ISP_PAD);
+                       unsigned w, h;
+
+                       if (fse->which == V4L2_SUBDEV_FORMAT_TRY) {
+                               struct v4l2_mbus_framefmt *mf;
+
+                               mf = v4l2_subdev_get_try_format(sd, cfg,
+                                                               OIF_ISP_PAD);
+
+                               w = mf->width;
+                               h = mf->height;
+                       } else {
+                               const struct s5c73m3_frame_size *fs;
 
-                       fse->max_width = fse->min_width = mf->width;
-                       fse->max_height = fse->min_height = mf->height;
+                               fs = state->oif_pix_size[RES_ISP];
+                               w = fs->width;
+                               h = fs->height;
+                       }
+                       fse->max_width = fse->min_width = w;
+                       fse->max_height = fse->min_height = h;
                        return 0;
                }
                default:
index 8b413be..73fdb0d 100644 (file)
@@ -1645,6 +1645,7 @@ static int vpfe_enum_size(struct file *file, void  *priv,
        fse.index = fsize->index;
        fse.pad = 0;
        fse.code = mbus.code;
+       fse.which = V4L2_SUBDEV_FORMAT_ACTIVE;
        ret = v4l2_subdev_call(sdinfo->sd, pad, enum_frame_size, NULL, &fse);
        if (ret)
                return -EINVAL;