[media] v4l2: replace try_mbus_fmt by set_fmt in bridge drivers
[sfrench/cifs-2.6.git] / drivers / media / platform / soc_camera / mx2_camera.c
index 192377f55840b540e82ab26658830457b858f98f..d45f50a3a9ebfad89d56c9efee8495a815fd1836 100644 (file)
@@ -912,7 +912,10 @@ static int mx2_camera_set_crop(struct soc_camera_device *icd,
        struct v4l2_crop a_writable = *a;
        struct v4l2_rect *rect = &a_writable.c;
        struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
-       struct v4l2_mbus_framefmt mf;
+       struct v4l2_subdev_format fmt = {
+               .which = V4L2_SUBDEV_FORMAT_ACTIVE,
+       };
+       struct v4l2_mbus_framefmt *mf = &fmt.format;
        int ret;
 
        soc_camera_limit_side(&rect->left, &rect->width, 0, 2, 4096);
@@ -923,15 +926,15 @@ static int mx2_camera_set_crop(struct soc_camera_device *icd,
                return ret;
 
        /* The capture device might have changed its output  */
-       ret = v4l2_subdev_call(sd, video, g_mbus_fmt, &mf);
+       ret = v4l2_subdev_call(sd, pad, get_fmt, NULL, &fmt);
        if (ret < 0)
                return ret;
 
        dev_dbg(icd->parent, "Sensor cropped %dx%d\n",
-               mf.width, mf.height);
+               mf->width, mf->height);
 
-       icd->user_width         = mf.width;
-       icd->user_height        = mf.height;
+       icd->user_width         = mf->width;
+       icd->user_height        = mf->height;
 
        return ret;
 }
@@ -943,22 +946,25 @@ static int mx2_camera_get_formats(struct soc_camera_device *icd,
        struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
        const struct soc_mbus_pixelfmt *fmt;
        struct device *dev = icd->parent;
-       u32 code;
+       struct v4l2_subdev_mbus_code_enum code = {
+               .which = V4L2_SUBDEV_FORMAT_ACTIVE,
+               .index = idx,
+       };
        int ret, formats = 0;
 
-       ret = v4l2_subdev_call(sd, video, enum_mbus_fmt, idx, &code);
+       ret = v4l2_subdev_call(sd, pad, enum_mbus_code, NULL, &code);
        if (ret < 0)
                /* no more formats */
                return 0;
 
-       fmt = soc_mbus_get_fmtdesc(code);
+       fmt = soc_mbus_get_fmtdesc(code.code);
        if (!fmt) {
-               dev_err(dev, "Invalid format code #%u: %d\n", idx, code);
+               dev_err(dev, "Invalid format code #%u: %d\n", idx, code.code);
                return 0;
        }
 
-       if (code == MEDIA_BUS_FMT_YUYV8_2X8 ||
-           code == MEDIA_BUS_FMT_UYVY8_2X8) {
+       if (code.code == MEDIA_BUS_FMT_YUYV8_2X8 ||
+           code.code == MEDIA_BUS_FMT_UYVY8_2X8) {
                formats++;
                if (xlate) {
                        /*
@@ -967,21 +973,21 @@ static int mx2_camera_get_formats(struct soc_camera_device *icd,
                         */
                        xlate->host_fmt =
                                soc_mbus_get_fmtdesc(MEDIA_BUS_FMT_YUYV8_1_5X8);
-                       xlate->code     = code;
+                       xlate->code     = code.code;
                        dev_dbg(dev, "Providing host format %s for sensor code %d\n",
-                              xlate->host_fmt->name, code);
+                              xlate->host_fmt->name, code.code);
                        xlate++;
                }
        }
 
-       if (code == MEDIA_BUS_FMT_UYVY8_2X8) {
+       if (code.code == MEDIA_BUS_FMT_UYVY8_2X8) {
                formats++;
                if (xlate) {
                        xlate->host_fmt =
                                soc_mbus_get_fmtdesc(MEDIA_BUS_FMT_YUYV8_2X8);
-                       xlate->code     = code;
+                       xlate->code     = code.code;
                        dev_dbg(dev, "Providing host format %s for sensor code %d\n",
-                               xlate->host_fmt->name, code);
+                               xlate->host_fmt->name, code.code);
                        xlate++;
                }
        }
@@ -990,7 +996,7 @@ static int mx2_camera_get_formats(struct soc_camera_device *icd,
        formats++;
        if (xlate) {
                xlate->host_fmt = fmt;
-               xlate->code     = code;
+               xlate->code     = code.code;
                xlate++;
        }
        return formats;
@@ -1181,7 +1187,11 @@ static int mx2_camera_try_fmt(struct soc_camera_device *icd,
        struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
        const struct soc_camera_format_xlate *xlate;
        struct v4l2_pix_format *pix = &f->fmt.pix;
-       struct v4l2_mbus_framefmt mf;
+       struct v4l2_subdev_pad_config pad_cfg;
+       struct v4l2_subdev_format format = {
+               .which = V4L2_SUBDEV_FORMAT_TRY,
+       };
+       struct v4l2_mbus_framefmt *mf = &format.format;
        __u32 pixfmt = pix->pixelformat;
        struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
        struct mx2_camera_dev *pcdev = ici->priv;
@@ -1204,13 +1214,13 @@ static int mx2_camera_try_fmt(struct soc_camera_device *icd,
        pix->width &= ~0x7;
 
        /* limit to sensor capabilities */
-       mf.width        = pix->width;
-       mf.height       = pix->height;
-       mf.field        = pix->field;
-       mf.colorspace   = pix->colorspace;
-       mf.code         = xlate->code;
+       mf->width       = pix->width;
+       mf->height      = pix->height;
+       mf->field       = pix->field;
+       mf->colorspace  = pix->colorspace;
+       mf->code        = xlate->code;
 
-       ret = v4l2_subdev_call(sd, video, try_mbus_fmt, &mf);
+       ret = v4l2_subdev_call(sd, pad, set_fmt, &pad_cfg, &format);
        if (ret < 0)
                return ret;
 
@@ -1221,29 +1231,29 @@ static int mx2_camera_try_fmt(struct soc_camera_device *icd,
        emma_prp = mx27_emma_prp_get_format(xlate->code,
                                            xlate->host_fmt->fourcc);
 
-       if ((mf.width != pix->width || mf.height != pix->height) &&
+       if ((mf->width != pix->width || mf->height != pix->height) &&
                emma_prp->cfg.in_fmt == PRP_CNTL_DATA_IN_YUV422) {
-               if (mx2_emmaprp_resize(pcdev, &mf, pix, false) < 0)
+               if (mx2_emmaprp_resize(pcdev, mf, pix, false) < 0)
                        dev_dbg(icd->parent, "%s: can't resize\n", __func__);
        }
 
-       if (mf.field == V4L2_FIELD_ANY)
-               mf.field = V4L2_FIELD_NONE;
+       if (mf->field == V4L2_FIELD_ANY)
+               mf->field = V4L2_FIELD_NONE;
        /*
         * Driver supports interlaced images provided they have
         * both fields so that they can be processed as if they
         * were progressive.
         */
-       if (mf.field != V4L2_FIELD_NONE && !V4L2_FIELD_HAS_BOTH(mf.field)) {
+       if (mf->field != V4L2_FIELD_NONE && !V4L2_FIELD_HAS_BOTH(mf->field)) {
                dev_err(icd->parent, "Field type %d unsupported.\n",
-                               mf.field);
+                               mf->field);
                return -EINVAL;
        }
 
-       pix->width      = mf.width;
-       pix->height     = mf.height;
-       pix->field      = mf.field;
-       pix->colorspace = mf.colorspace;
+       pix->width      = mf->width;
+       pix->height     = mf->height;
+       pix->field      = mf->field;
+       pix->colorspace = mf->colorspace;
 
        dev_dbg(icd->parent, "%s: returned params: width = %d, height = %d\n",
                __func__, pix->width, pix->height);