]> rtime.felk.cvut.cz Git - hercules2020/nv-tegra/linux-4.4.git/commitdiff
media:platform:tegra: Update V4L2 framework code
authorWenjia Zhou <wenjiaz@nvidia.com>
Thu, 14 Jul 2016 00:06:33 +0000 (17:06 -0700)
committerWenjia Zhou <wenjiaz@nvidia.com>
Wed, 27 Jul 2016 22:25:12 +0000 (15:25 -0700)
Change-Id: I9a5f4423c057d1b2af6a40be010d4f79ad848d54

drivers/media/platform/tegra/camera/channel.c
drivers/media/platform/tegra/csi/csi.c

index c64594898b967b84a4bace4078534c96880eb15e..137f584df6b0766e8548806d39bedc339f5618dc 100644 (file)
@@ -188,7 +188,7 @@ static void tegra_channel_fmts_bitmap_init(struct tegra_channel *chan)
        if (ret)
                return;
 
-       chan->fmtinfo = tegra_core_get_format_by_code(mbus_fmt.code);
+       chan->fmtinfo = tegra_core_get_format_by_code(fmt.format.code);
        v4l2_fill_pix_format(&chan->format, &fmt.format);
        chan->format.pixelformat = chan->fmtinfo->fourcc;
        chan->format.bytesperline = chan->format.width *
@@ -299,7 +299,7 @@ static void tegra_channel_capture_frame(struct tegra_channel *chan,
        }
 
        if (atomic_read(&chan->is_hdmiin_unplug)) {
-               vb2_buffer_done(&buf->buf, VB2_BUF_STATE_ERROR);
+               vb2_buffer_done(&buf->buf.vb2_buf, VB2_BUF_STATE_ERROR);
                complete(&chan->capture_comp);
        } else {
                /* Move buffer to capture done queue */
@@ -765,11 +765,14 @@ tegra_channel_enum_framesizes(struct file *file, void *fh,
 {
        struct v4l2_fh *vfh = file->private_data;
        struct tegra_channel *chan = to_tegra_channel(vfh->vdev);
+       struct v4l2_subdev_frame_size_enum fse = {
+               .index = sizes->index,
+       };
        int num_sd;
 
        for (num_sd = 0; num_sd < chan->num_subdevs; num_sd++) {
                struct v4l2_subdev *sd = chan->subdev[num_sd];
-               int ret = v4l2_subdev_call(sd, video, enum_framesizes, sizes);
+               int ret = v4l2_subdev_call(sd, pad, enum_frame_size, NULL, &fse);
 
                if (sd && (ret == 0 || ret != -ENOIOCTLCMD))
                        return ret;
@@ -783,12 +786,17 @@ tegra_channel_enum_frameintervals(struct file *file, void *fh,
 {
        struct v4l2_fh *vfh = file->private_data;
        struct tegra_channel *chan = to_tegra_channel(vfh->vdev);
+       struct v4l2_subdev_frame_interval_enum fie = {
+               .index = intervals->index,
+               .width = intervals->width,
+               .height = intervals->height,
+       };
        int num_sd;
 
        for (num_sd = 0; num_sd < chan->num_subdevs; num_sd++) {
                struct v4l2_subdev *sd = chan->subdev[num_sd];
-               int ret = v4l2_subdev_call(sd, video, enum_frameintervals,
-                                          intervals);
+               int ret = v4l2_subdev_call(sd, pad, enum_frame_interval, NULL,
+                               &fie);
 
                if (sd && (ret == 0 || ret != -ENOIOCTLCMD))
                        return ret;
@@ -1170,17 +1178,6 @@ tegra_channel_get_format(struct file *file, void *fh,
        return  __tegra_channel_get_format(chan, pix);
 }
 
-static int
-tegra_channel_get_format(struct file *file, void *fh,
-                       struct v4l2_format *format)
-{
-       struct v4l2_fh *vfh = file->private_data;
-       struct tegra_channel *chan = to_tegra_channel(vfh->vdev);
-       struct v4l2_pix_format *pix = &format->fmt.pix;
-
-       return  __tegra_channel_get_format(chan, pix);
-}
-
 static int
 __tegra_channel_try_format(struct tegra_channel *chan,
                        struct v4l2_pix_format *pix)
@@ -1617,7 +1614,8 @@ static int tegra_channel_init(struct tegra_mc_vi *vi, unsigned int index)
        chan->video.ctrl_handler = &chan->ctrl_handler;
        chan->video.lock = &chan->video_lock;
 
-       set_bit(V4L2_FL_USE_FH_PRIO, &chan->video.flags);
+        set_bit(_IOC_NR(VIDIOC_G_PRIORITY), chan->video.valid_ioctls);
+        set_bit(_IOC_NR(VIDIOC_S_PRIORITY), chan->video.valid_ioctls);
 
        video_set_drvdata(&chan->video, chan);
 
index 17c9e01fa8a9b3be366017ecf32424129dab93d5..3cbe0c991d34604ca3854d19da93ec1422007df6 100644 (file)
@@ -464,7 +464,7 @@ static struct v4l2_mbus_framefmt tegra_csi_tpg_fmts[] = {
        {
                TEGRA_DEF_WIDTH,
                TEGRA_DEF_HEIGHT,
-               V4L2_MBUS_FMT_RGBA8888_4X8_LE,
+               MEDIA_BUS_FMT_RGBA8888_4X8_LE,
                V4L2_FIELD_NONE,
                V4L2_COLORSPACE_SRGB
        }
@@ -478,7 +478,8 @@ static struct v4l2_frmsize_discrete tegra_csi_tpg_sizes[] = {
 };
 
 static int tegra_csi_enum_framesizes(struct v4l2_subdev *sd,
-                                    struct v4l2_frmsizeenum *sizes)
+               struct v4l2_subdev_pad_config *cfg,
+               struct v4l2_subdev_frame_size_enum *fse)
 {
        int i;
        struct tegra_csi_device *csi = to_csi(sd);
@@ -488,27 +489,30 @@ static int tegra_csi_enum_framesizes(struct v4l2_subdev *sd,
                return -EINVAL;
        }
 
-       if (sizes->index >= ARRAY_SIZE(tegra_csi_tpg_sizes))
+       if (fse->index >= ARRAY_SIZE(tegra_csi_tpg_sizes))
                return -EINVAL;
 
        for (i = 0; i < ARRAY_SIZE(tegra_csi_tpg_fmts); i++) {
                const struct tegra_video_format *format =
                      tegra_core_get_format_by_code(tegra_csi_tpg_fmts[i].code);
-               if (format && format->fourcc == sizes->pixel_format)
+               if (format && format->fourcc == fse->code)
                        break;
        }
        if (i == ARRAY_SIZE(tegra_csi_tpg_fmts))
                return -EINVAL;
 
-       sizes->type = V4L2_FRMSIZE_TYPE_DISCRETE;
-       sizes->discrete = tegra_csi_tpg_sizes[sizes->index];
+       fse->min_width = fse->max_width =
+                       tegra_csi_tpg_sizes[fse->index].width;
+       fse->min_height = fse->max_height =
+                       tegra_csi_tpg_sizes[fse->index].height;
        return 0;
 }
 
 #define TPG_PIXEL_OUTPUT_RATE 182476800
 
 static int tegra_csi_enum_frameintervals(struct v4l2_subdev *sd,
-                                    struct v4l2_frmivalenum *intervals)
+               struct v4l2_subdev_pad_config *cfg,
+               struct v4l2_subdev_frame_interval_enum *fie)
 {
        int i;
        struct tegra_csi_device *csi = to_csi(sd);
@@ -519,30 +523,29 @@ static int tegra_csi_enum_frameintervals(struct v4l2_subdev *sd,
        }
 
        /* One resolution just one framerate */
-       if (intervals->index > 0)
+       if (fie->index > 0)
                return -EINVAL;
 
        for (i = 0; i < ARRAY_SIZE(tegra_csi_tpg_fmts); i++) {
                const struct tegra_video_format *format =
                      tegra_core_get_format_by_code(tegra_csi_tpg_fmts[i].code);
-               if (format && format->fourcc == intervals->pixel_format)
+               if (format && format->fourcc == fie->code)
                        break;
        }
        if (i == ARRAY_SIZE(tegra_csi_tpg_fmts))
                return -EINVAL;
 
        for (i = 0; i < ARRAY_SIZE(tegra_csi_tpg_sizes); i++) {
-               if (tegra_csi_tpg_sizes[i].width == intervals->width &&
-                   tegra_csi_tpg_sizes[i].height == intervals->height)
+               if (tegra_csi_tpg_sizes[i].width == fie->width &&
+                   tegra_csi_tpg_sizes[i].height == fie->height)
                        break;
        }
        if (i == ARRAY_SIZE(tegra_csi_tpg_sizes))
                return -EINVAL;
 
-       intervals->type = V4L2_FRMIVAL_TYPE_DISCRETE;
-       intervals->discrete.numerator = 1;
-       intervals->discrete.denominator = TPG_PIXEL_OUTPUT_RATE /
-                  (intervals->width * intervals->height);
+       fie->interval.numerator = 1;
+       fie->interval.denominator = TPG_PIXEL_OUTPUT_RATE /
+                  (fie->width * fie->height);
        return 0;
 }
 
@@ -576,27 +579,6 @@ static int tegra_csi_try_mbus_fmt(struct v4l2_subdev *sd,
        return 0;
 }
 
-static int tegra_csi_s_mbus_fmt(struct v4l2_subdev *sd,
-                               struct v4l2_mbus_framefmt *fmt)
-{
-       int i;
-       struct tegra_csi_device *csi = to_csi(sd);
-
-       if (!csi->pg_mode) {
-               dev_err(csi->dev, "CSI is not in TPG mode\n");
-               return -EINVAL;
-       }
-
-       tegra_csi_try_mbus_fmt(sd, fmt);
-
-       for (i = 0; i < csi->num_ports; i++) {
-               struct v4l2_mbus_framefmt *format = &csi->ports[i].format;
-               memcpy(format, fmt, sizeof(struct v4l2_mbus_framefmt));
-       }
-
-       return 0;
-}
-
 static int tegra_csi_g_mbus_fmt(struct v4l2_subdev *sd,
                                struct v4l2_mbus_framefmt *fmt)
 {
@@ -617,7 +599,7 @@ static int tegra_csi_g_input_status(struct v4l2_subdev *sd, u32 *status)
  */
 
 static int tegra_csi_get_format(struct v4l2_subdev *subdev,
-                          struct v4l2_subdev_fh *cfg,
+                          struct v4l2_subdev_pad_config *cfg,
                           struct v4l2_subdev_format *fmt)
 {
        struct v4l2_mbus_framefmt mbus_fmt;
@@ -660,13 +642,13 @@ static int tegra_csi_set_format(struct v4l2_subdev *subdev,
 static struct v4l2_subdev_video_ops tegra_csi_video_ops = {
        .s_stream       = tegra_csi_s_stream,
        .g_input_status = tegra_csi_g_input_status,
-       .enum_framesizes = tegra_csi_enum_framesizes,
-       .enum_frameintervals = tegra_csi_enum_frameintervals,
 };
 
 static struct v4l2_subdev_pad_ops tegra_csi_pad_ops = {
        .get_fmt        = tegra_csi_get_format,
        .set_fmt        = tegra_csi_set_format,
+       .enum_frame_size = tegra_csi_enum_framesizes,
+       .enum_frame_interval = tegra_csi_enum_frameintervals,
 };
 
 static struct v4l2_subdev_ops tegra_csi_ops = {