]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/media/platform/sh_vou.c
Merge tag 'devicetree-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[karo-tx-linux.git] / drivers / media / platform / sh_vou.c
index dde1ccc730be0c7d32e2ea8bf276cf80148b4fd1..8b799bae01b8dfed157fb5f73429e9c3d60ae9bd 100644 (file)
@@ -600,7 +600,7 @@ static void vou_adjust_output(struct sh_vou_geometry *geo, v4l2_std_id std)
 {
        unsigned int best_err = UINT_MAX, best = geo->in_width,
                width_max, height_max, img_height_max;
-       int i, idx = 0;
+       int i, idx_h = 0, idx_v = 0;
 
        if (std & V4L2_STD_525_60) {
                width_max = 858;
@@ -625,7 +625,7 @@ static void vou_adjust_output(struct sh_vou_geometry *geo, v4l2_std_id std)
                err = abs(found - geo->output.width);
                if (err < best_err) {
                        best_err = err;
-                       idx = i;
+                       idx_h = i;
                        best = found;
                }
                if (!err)
@@ -633,12 +633,12 @@ static void vou_adjust_output(struct sh_vou_geometry *geo, v4l2_std_id std)
        }
 
        geo->output.width = best;
-       geo->scale_idx_h = idx;
+       geo->scale_idx_h = idx_h;
        if (geo->output.left + best > width_max)
                geo->output.left = width_max - best;
 
        pr_debug("%s(): W %u * %u/%u = %u\n", __func__, geo->in_width,
-                vou_scale_h_num[idx], vou_scale_h_den[idx], best);
+                vou_scale_h_num[idx_h], vou_scale_h_den[idx_h], best);
 
        best_err = UINT_MAX;
 
@@ -655,7 +655,7 @@ static void vou_adjust_output(struct sh_vou_geometry *geo, v4l2_std_id std)
                err = abs(found - geo->output.height);
                if (err < best_err) {
                        best_err = err;
-                       idx = i;
+                       idx_v = i;
                        best = found;
                }
                if (!err)
@@ -663,12 +663,12 @@ static void vou_adjust_output(struct sh_vou_geometry *geo, v4l2_std_id std)
        }
 
        geo->output.height = best;
-       geo->scale_idx_v = idx;
+       geo->scale_idx_v = idx_v;
        if (geo->output.top + best > height_max)
                geo->output.top = height_max - best;
 
        pr_debug("%s(): H %u * %u/%u = %u\n", __func__, geo->in_height,
-                vou_scale_v_num[idx], vou_scale_v_den[idx], best);
+                vou_scale_v_num[idx_v], vou_scale_v_den[idx_v], best);
 }
 
 static int sh_vou_s_fmt_vid_out(struct file *file, void *priv,
@@ -679,12 +679,14 @@ static int sh_vou_s_fmt_vid_out(struct file *file, void *priv,
        unsigned int img_height_max;
        int pix_idx;
        struct sh_vou_geometry geo;
-       struct v4l2_mbus_framefmt mbfmt = {
+       struct v4l2_subdev_format format = {
+               .which = V4L2_SUBDEV_FORMAT_ACTIVE,
                /* Revisit: is this the correct code? */
-               .code = MEDIA_BUS_FMT_YUYV8_2X8,
-               .field = V4L2_FIELD_INTERLACED,
-               .colorspace = V4L2_COLORSPACE_SMPTE170M,
+               .format.code = MEDIA_BUS_FMT_YUYV8_2X8,
+               .format.field = V4L2_FIELD_INTERLACED,
+               .format.colorspace = V4L2_COLORSPACE_SMPTE170M,
        };
+       struct v4l2_mbus_framefmt *mbfmt = &format.format;
        int ret;
 
        dev_dbg(vou_dev->v4l2_dev.dev, "%s(): %ux%u -> %ux%u\n", __func__,
@@ -720,27 +722,27 @@ static int sh_vou_s_fmt_vid_out(struct file *file, void *priv,
 
        vou_adjust_output(&geo, vou_dev->std);
 
-       mbfmt.width = geo.output.width;
-       mbfmt.height = geo.output.height;
-       ret = v4l2_device_call_until_err(&vou_dev->v4l2_dev, 0, video,
-                                        s_mbus_fmt, &mbfmt);
+       mbfmt->width = geo.output.width;
+       mbfmt->height = geo.output.height;
+       ret = v4l2_device_call_until_err(&vou_dev->v4l2_dev, 0, pad,
+                                        set_fmt, NULL, &format);
        /* Must be implemented, so, don't check for -ENOIOCTLCMD */
        if (ret < 0)
                return ret;
 
        dev_dbg(vou_dev->v4l2_dev.dev, "%s(): %ux%u -> %ux%u\n", __func__,
-               geo.output.width, geo.output.height, mbfmt.width, mbfmt.height);
+               geo.output.width, geo.output.height, mbfmt->width, mbfmt->height);
 
        /* Sanity checks */
-       if ((unsigned)mbfmt.width > VOU_MAX_IMAGE_WIDTH ||
-           (unsigned)mbfmt.height > img_height_max ||
-           mbfmt.code != MEDIA_BUS_FMT_YUYV8_2X8)
+       if ((unsigned)mbfmt->width > VOU_MAX_IMAGE_WIDTH ||
+           (unsigned)mbfmt->height > img_height_max ||
+           mbfmt->code != MEDIA_BUS_FMT_YUYV8_2X8)
                return -EIO;
 
-       if (mbfmt.width != geo.output.width ||
-           mbfmt.height != geo.output.height) {
-               geo.output.width = mbfmt.width;
-               geo.output.height = mbfmt.height;
+       if (mbfmt->width != geo.output.width ||
+           mbfmt->height != geo.output.height) {
+               geo.output.width = mbfmt->width;
+               geo.output.height = mbfmt->height;
 
                vou_adjust_input(&geo, vou_dev->std);
        }
@@ -942,11 +944,12 @@ static int sh_vou_s_crop(struct file *file, void *fh, const struct v4l2_crop *a)
        struct v4l2_crop sd_crop = {.type = V4L2_BUF_TYPE_VIDEO_OUTPUT};
        struct v4l2_pix_format *pix = &vou_dev->pix;
        struct sh_vou_geometry geo;
-       struct v4l2_mbus_framefmt mbfmt = {
+       struct v4l2_subdev_format format = {
+               .which = V4L2_SUBDEV_FORMAT_ACTIVE,
                /* Revisit: is this the correct code? */
-               .code = MEDIA_BUS_FMT_YUYV8_2X8,
-               .field = V4L2_FIELD_INTERLACED,
-               .colorspace = V4L2_COLORSPACE_SMPTE170M,
+               .format.code = MEDIA_BUS_FMT_YUYV8_2X8,
+               .format.field = V4L2_FIELD_INTERLACED,
+               .format.colorspace = V4L2_COLORSPACE_SMPTE170M,
        };
        unsigned int img_height_max;
        int ret;
@@ -984,22 +987,22 @@ static int sh_vou_s_crop(struct file *file, void *fh, const struct v4l2_crop *a)
         */
        v4l2_device_call_until_err(&vou_dev->v4l2_dev, 0, video,
                                   s_crop, &sd_crop);
-       mbfmt.width = geo.output.width;
-       mbfmt.height = geo.output.height;
-       ret = v4l2_device_call_until_err(&vou_dev->v4l2_dev, 0, video,
-                                        s_mbus_fmt, &mbfmt);
+       format.format.width = geo.output.width;
+       format.format.height = geo.output.height;
+       ret = v4l2_device_call_until_err(&vou_dev->v4l2_dev, 0, pad,
+                                        set_fmt, NULL, &format);
        /* Must be implemented, so, don't check for -ENOIOCTLCMD */
        if (ret < 0)
                return ret;
 
        /* Sanity checks */
-       if ((unsigned)mbfmt.width > VOU_MAX_IMAGE_WIDTH ||
-           (unsigned)mbfmt.height > img_height_max ||
-           mbfmt.code != MEDIA_BUS_FMT_YUYV8_2X8)
+       if ((unsigned)format.format.width > VOU_MAX_IMAGE_WIDTH ||
+           (unsigned)format.format.height > img_height_max ||
+           format.format.code != MEDIA_BUS_FMT_YUYV8_2X8)
                return -EIO;
 
-       geo.output.width = mbfmt.width;
-       geo.output.height = mbfmt.height;
+       geo.output.width = format.format.width;
+       geo.output.height = format.format.height;
 
        /*
         * No down-scaling. According to the API, current call has precedence: