[media] v4l2: pass std by value to the write-only s_std ioctl
[sfrench/cifs-2.6.git] / drivers / media / platform / s5p-tv / mixer_video.c
index 82142a2d6d934e7cc28fbbaee2d3146adab0198a..ef0efdf422fec8b9e1d447e853cfd04d5e590f8c 100644 (file)
@@ -501,8 +501,8 @@ fail:
        return -ERANGE;
 }
 
-static int mxr_enum_dv_presets(struct file *file, void *fh,
-       struct v4l2_dv_enum_preset *preset)
+static int mxr_enum_dv_timings(struct file *file, void *fh,
+       struct v4l2_enum_dv_timings *timings)
 {
        struct mxr_layer *layer = video_drvdata(file);
        struct mxr_device *mdev = layer->mdev;
@@ -510,14 +510,14 @@ static int mxr_enum_dv_presets(struct file *file, void *fh,
 
        /* lock protects from changing sd_out */
        mutex_lock(&mdev->mutex);
-       ret = v4l2_subdev_call(to_outsd(mdev), video, enum_dv_presets, preset);
+       ret = v4l2_subdev_call(to_outsd(mdev), video, enum_dv_timings, timings);
        mutex_unlock(&mdev->mutex);
 
        return ret ? -EINVAL : 0;
 }
 
-static int mxr_s_dv_preset(struct file *file, void *fh,
-       struct v4l2_dv_preset *preset)
+static int mxr_s_dv_timings(struct file *file, void *fh,
+       struct v4l2_dv_timings *timings)
 {
        struct mxr_layer *layer = video_drvdata(file);
        struct mxr_device *mdev = layer->mdev;
@@ -526,7 +526,7 @@ static int mxr_s_dv_preset(struct file *file, void *fh,
        /* lock protects from changing sd_out */
        mutex_lock(&mdev->mutex);
 
-       /* preset change cannot be done while there is an entity
+       /* timings change cannot be done while there is an entity
         * dependant on output configuration
         */
        if (mdev->n_output > 0) {
@@ -534,7 +534,7 @@ static int mxr_s_dv_preset(struct file *file, void *fh,
                return -EBUSY;
        }
 
-       ret = v4l2_subdev_call(to_outsd(mdev), video, s_dv_preset, preset);
+       ret = v4l2_subdev_call(to_outsd(mdev), video, s_dv_timings, timings);
 
        mutex_unlock(&mdev->mutex);
 
@@ -544,8 +544,8 @@ static int mxr_s_dv_preset(struct file *file, void *fh,
        return ret ? -EINVAL : 0;
 }
 
-static int mxr_g_dv_preset(struct file *file, void *fh,
-       struct v4l2_dv_preset *preset)
+static int mxr_g_dv_timings(struct file *file, void *fh,
+       struct v4l2_dv_timings *timings)
 {
        struct mxr_layer *layer = video_drvdata(file);
        struct mxr_device *mdev = layer->mdev;
@@ -553,13 +553,28 @@ static int mxr_g_dv_preset(struct file *file, void *fh,
 
        /* lock protects from changing sd_out */
        mutex_lock(&mdev->mutex);
-       ret = v4l2_subdev_call(to_outsd(mdev), video, g_dv_preset, preset);
+       ret = v4l2_subdev_call(to_outsd(mdev), video, g_dv_timings, timings);
        mutex_unlock(&mdev->mutex);
 
        return ret ? -EINVAL : 0;
 }
 
-static int mxr_s_std(struct file *file, void *fh, v4l2_std_id *norm)
+static int mxr_dv_timings_cap(struct file *file, void *fh,
+       struct v4l2_dv_timings_cap *cap)
+{
+       struct mxr_layer *layer = video_drvdata(file);
+       struct mxr_device *mdev = layer->mdev;
+       int ret;
+
+       /* lock protects from changing sd_out */
+       mutex_lock(&mdev->mutex);
+       ret = v4l2_subdev_call(to_outsd(mdev), video, dv_timings_cap, cap);
+       mutex_unlock(&mdev->mutex);
+
+       return ret ? -EINVAL : 0;
+}
+
+static int mxr_s_std(struct file *file, void *fh, v4l2_std_id norm)
 {
        struct mxr_layer *layer = video_drvdata(file);
        struct mxr_device *mdev = layer->mdev;
@@ -576,7 +591,7 @@ static int mxr_s_std(struct file *file, void *fh, v4l2_std_id *norm)
                return -EBUSY;
        }
 
-       ret = v4l2_subdev_call(to_outsd(mdev), video, s_std_output, *norm);
+       ret = v4l2_subdev_call(to_outsd(mdev), video, s_std_output, norm);
 
        mutex_unlock(&mdev->mutex);
 
@@ -616,8 +631,8 @@ static int mxr_enum_output(struct file *file, void *fh, struct v4l2_output *a)
        /* try to obtain supported tv norms */
        v4l2_subdev_call(sd, video, g_tvnorms_output, &a->std);
        a->capabilities = 0;
-       if (sd->ops->video && sd->ops->video->s_dv_preset)
-               a->capabilities |= V4L2_OUT_CAP_PRESETS;
+       if (sd->ops->video && sd->ops->video->s_dv_timings)
+               a->capabilities |= V4L2_OUT_CAP_DV_TIMINGS;
        if (sd->ops->video && sd->ops->video->s_std_output)
                a->capabilities |= V4L2_OUT_CAP_STD;
        a->type = V4L2_OUTPUT_TYPE_ANALOG;
@@ -738,10 +753,11 @@ static const struct v4l2_ioctl_ops mxr_ioctl_ops = {
        /* Streaming control */
        .vidioc_streamon = mxr_streamon,
        .vidioc_streamoff = mxr_streamoff,
-       /* Preset functions */
-       .vidioc_enum_dv_presets = mxr_enum_dv_presets,
-       .vidioc_s_dv_preset = mxr_s_dv_preset,
-       .vidioc_g_dv_preset = mxr_g_dv_preset,
+       /* DV Timings functions */
+       .vidioc_enum_dv_timings = mxr_enum_dv_timings,
+       .vidioc_s_dv_timings = mxr_s_dv_timings,
+       .vidioc_g_dv_timings = mxr_g_dv_timings,
+       .vidioc_dv_timings_cap = mxr_dv_timings_cap,
        /* analog TV standard functions */
        .vidioc_s_std = mxr_s_std,
        .vidioc_g_std = mxr_g_std,