Add a g_parm and s_parm callback in order to be able to control the sensor framerate of the sensor. Signed-off-by: Maxime Ripard <maxime.ripard@xxxxxxxxxxx> --- .../media/platform/sunxi/sun6i-csi/sun6i_video.c | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c index bf7c0d1d1d47..bac867004fa0 100644 --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c @@ -478,6 +478,32 @@ static int vidioc_s_input(struct file *file, void *fh, unsigned int i) return 0; } +static int vidioc_g_parm(struct file *file, void *fh, struct v4l2_streamparm *a) +{ + struct sun6i_video *video = video_drvdata(file); + struct v4l2_subdev *subdev; + u32 pad; + + subdev = sun6i_video_remote_subdev(video, &pad); + if (subdev == NULL) + return -ENXIO; + + return v4l2_g_parm_cap(video_devdata(file), subdev, a); +} + +static int vidioc_s_parm(struct file *file, void *fh, struct v4l2_streamparm *a) +{ + struct sun6i_video *video = video_drvdata(file); + struct v4l2_subdev *subdev; + u32 pad; + + subdev = sun6i_video_remote_subdev(video, &pad); + if (subdev == NULL) + return -ENXIO; + + return v4l2_s_parm_cap(video_devdata(file), subdev, a); +} + static const struct v4l2_ioctl_ops sun6i_video_ioctl_ops = { .vidioc_querycap = vidioc_querycap, .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap, @@ -489,6 +515,9 @@ static const struct v4l2_ioctl_ops sun6i_video_ioctl_ops = { .vidioc_s_input = vidioc_s_input, .vidioc_g_input = vidioc_g_input, + .vidioc_g_parm = vidioc_g_parm, + .vidioc_s_parm = vidioc_s_parm, + .vidioc_reqbufs = vb2_ioctl_reqbufs, .vidioc_querybuf = vb2_ioctl_querybuf, .vidioc_qbuf = vb2_ioctl_qbuf, -- 2.14.3