Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 366734
b: refs/heads/master
c: 8e42bf0
h: refs/heads/master
v: v3
  • Loading branch information
Hans Verkuil authored and Mauro Carvalho Chehab committed Mar 23, 2013
1 parent 0f59238 commit e18bcc2
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 5efb54b2b7bf685f5d2efdf468418e26a74554f2
refs/heads/master: 8e42bf033e1d2a4ece4050a9c3f6226e60a7bb2f
80 changes: 80 additions & 0 deletions trunk/drivers/media/platform/s5p-tv/mixer_video.c
Original file line number Diff line number Diff line change
Expand Up @@ -559,6 +559,79 @@ static int mxr_g_dv_preset(struct file *file, void *fh,
return ret ? -EINVAL : 0;
}

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;
int ret;

/* lock protects from changing sd_out */
mutex_lock(&mdev->mutex);
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_timings(struct file *file, void *fh,
struct v4l2_dv_timings *timings)
{
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);

/* timings change cannot be done while there is an entity
* dependant on output configuration
*/
if (mdev->n_output > 0) {
mutex_unlock(&mdev->mutex);
return -EBUSY;
}

ret = v4l2_subdev_call(to_outsd(mdev), video, s_dv_timings, timings);

mutex_unlock(&mdev->mutex);

mxr_layer_update_output(layer);

/* any failure should return EINVAL according to V4L2 doc */
return ret ? -EINVAL : 0;
}

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;
int ret;

/* lock protects from changing sd_out */
mutex_lock(&mdev->mutex);
ret = v4l2_subdev_call(to_outsd(mdev), video, g_dv_timings, timings);
mutex_unlock(&mdev->mutex);

return ret ? -EINVAL : 0;
}

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);
Expand Down Expand Up @@ -618,6 +691,8 @@ static int mxr_enum_output(struct file *file, void *fh, struct v4l2_output *a)
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;
Expand Down Expand Up @@ -742,6 +817,11 @@ static const struct v4l2_ioctl_ops mxr_ioctl_ops = {
.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,
Expand Down

0 comments on commit e18bcc2

Please sign in to comment.