|
@@ -1413,6 +1413,41 @@ static int vpfe_dqbuf(struct file *file, void *priv,
|
|
|
buf, file->f_flags & O_NONBLOCK);
|
|
|
}
|
|
|
|
|
|
+static int vpfe_queryctrl(struct file *file, void *priv,
|
|
|
+ struct v4l2_queryctrl *qctrl)
|
|
|
+{
|
|
|
+ struct vpfe_device *vpfe_dev = video_drvdata(file);
|
|
|
+ struct vpfe_subdev_info *sdinfo;
|
|
|
+
|
|
|
+ sdinfo = vpfe_dev->current_subdev;
|
|
|
+
|
|
|
+ return v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id,
|
|
|
+ core, queryctrl, qctrl);
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+static int vpfe_g_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)
|
|
|
+{
|
|
|
+ struct vpfe_device *vpfe_dev = video_drvdata(file);
|
|
|
+ struct vpfe_subdev_info *sdinfo;
|
|
|
+
|
|
|
+ sdinfo = vpfe_dev->current_subdev;
|
|
|
+
|
|
|
+ return v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id,
|
|
|
+ core, g_ctrl, ctrl);
|
|
|
+}
|
|
|
+
|
|
|
+static int vpfe_s_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)
|
|
|
+{
|
|
|
+ struct vpfe_device *vpfe_dev = video_drvdata(file);
|
|
|
+ struct vpfe_subdev_info *sdinfo;
|
|
|
+
|
|
|
+ sdinfo = vpfe_dev->current_subdev;
|
|
|
+
|
|
|
+ return v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id,
|
|
|
+ core, s_ctrl, ctrl);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* vpfe_calculate_offsets : This function calculates buffers offset
|
|
|
* for top and bottom field
|
|
@@ -1710,6 +1745,9 @@ static const struct v4l2_ioctl_ops vpfe_ioctl_ops = {
|
|
|
.vidioc_querystd = vpfe_querystd,
|
|
|
.vidioc_s_std = vpfe_s_std,
|
|
|
.vidioc_g_std = vpfe_g_std,
|
|
|
+ .vidioc_queryctrl = vpfe_queryctrl,
|
|
|
+ .vidioc_g_ctrl = vpfe_g_ctrl,
|
|
|
+ .vidioc_s_ctrl = vpfe_s_ctrl,
|
|
|
.vidioc_reqbufs = vpfe_reqbufs,
|
|
|
.vidioc_querybuf = vpfe_querybuf,
|
|
|
.vidioc_qbuf = vpfe_qbuf,
|