[V2] Davinci VPFE Capture: Add support for Control ioctls

Message ID 1256799064-25031-1-git-send-email-hvaibhav@ti.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Hiremath, Vaibhav Oct. 29, 2009, 6:51 a.m. UTC
  From: Vaibhav Hiremath <hvaibhav@ti.com>

Added support for Control IOCTL,
	- s_ctrl
	- g_ctrl
	- queryctrl

Change from last patch:
	- added room for error return in queryctrl function.
	
Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
---
 drivers/media/video/davinci/vpfe_capture.c |   43 ++++++++++++++++++++++++++++
 1 files changed, 43 insertions(+), 0 deletions(-)

--
1.6.2.4

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  

Comments

m-karicheri2@ti.com Oct. 29, 2009, 1:54 p.m. UTC | #1
Acked-by Muralidharan Karicheri <m-karicheri2@ti.com>

Mauro, could you please merge this to your v4l-dvb tree?

Murali Karicheri
Software Design Engineer
Texas Instruments Inc.
Germantown, MD 20874
email: m-karicheri2@ti.com

>-----Original Message-----
>From: linux-media-owner@vger.kernel.org [mailto:linux-media-
>owner@vger.kernel.org] On Behalf Of hvaibhav@ti.com
>Sent: Thursday, October 29, 2009 2:51 AM
>To: linux-media@vger.kernel.org
>Cc: Hiremath, Vaibhav
>Subject: [PATCH V2] Davinci VPFE Capture: Add support for Control ioctls
>
>From: Vaibhav Hiremath <hvaibhav@ti.com>
>
>Added support for Control IOCTL,
>	- s_ctrl
>	- g_ctrl
>	- queryctrl
>
>Change from last patch:
>	- added room for error return in queryctrl function.
>
>Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
>---
> drivers/media/video/davinci/vpfe_capture.c |   43
>++++++++++++++++++++++++++++
> 1 files changed, 43 insertions(+), 0 deletions(-)
>
>diff --git a/drivers/media/video/davinci/vpfe_capture.c
>b/drivers/media/video/davinci/vpfe_capture.c
>index abe21e4..8275d02 100644
>--- a/drivers/media/video/davinci/vpfe_capture.c
>+++ b/drivers/media/video/davinci/vpfe_capture.c
>@@ -1368,6 +1368,46 @@ static int vpfe_g_std(struct file *file, void *priv,
>v4l2_std_id *std_id)
> 	return 0;
> }
>
>+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;
>+	int ret = 0;
>+
>+	sdinfo = vpfe_dev->current_subdev;
>+
>+	ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id,
>+					 core, queryctrl, qctrl);
>+
>+	if (ret)
>+		qctrl->flags |= V4L2_CTRL_FLAG_DISABLED;
>+
>+	return ret;
>+}
>+
>+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);
>+}
>+
> /*
>  *  Videobuf operations
>  */
>@@ -1939,6 +1979,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,
>--
>1.6.2.4
>
>--
>To unsubscribe from this list: send the line "unsubscribe linux-media" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  
Hans Verkuil Nov. 5, 2009, 4:18 p.m. UTC | #2
On Thursday 29 October 2009 07:51:04 hvaibhav@ti.com wrote:
> From: Vaibhav Hiremath <hvaibhav@ti.com>
> 
> Added support for Control IOCTL,
> 	- s_ctrl
> 	- g_ctrl
> 	- queryctrl
> 
> Change from last patch:
> 	- added room for error return in queryctrl function.
> 	
> Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
> ---
>  drivers/media/video/davinci/vpfe_capture.c |   43 ++++++++++++++++++++++++++++
>  1 files changed, 43 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/media/video/davinci/vpfe_capture.c b/drivers/media/video/davinci/vpfe_capture.c
> index abe21e4..8275d02 100644
> --- a/drivers/media/video/davinci/vpfe_capture.c
> +++ b/drivers/media/video/davinci/vpfe_capture.c
> @@ -1368,6 +1368,46 @@ static int vpfe_g_std(struct file *file, void *priv, v4l2_std_id *std_id)
>  	return 0;
>  }
> 
> +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;
> +	int ret = 0;
> +
> +	sdinfo = vpfe_dev->current_subdev;
> +
> +	ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id,
> +					 core, queryctrl, qctrl);
> +
> +	if (ret)
> +		qctrl->flags |= V4L2_CTRL_FLAG_DISABLED;

Please remove this bogus flag. Just do:

	return v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id,
				 core, queryctrl, qctrl);

Simple and effective.

Regards,

	Hans

> +
> +	return ret;
> +}
> +
> +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);
> +}
> +
>  /*
>   *  Videobuf operations
>   */
> @@ -1939,6 +1979,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,
> --
> 1.6.2.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
  
Hiremath, Vaibhav Nov. 6, 2009, 5:30 a.m. UTC | #3
> -----Original Message-----
> From: linux-media-owner@vger.kernel.org [mailto:linux-media-
> owner@vger.kernel.org] On Behalf Of Hans Verkuil
> Sent: Thursday, November 05, 2009 9:48 PM
> To: Hiremath, Vaibhav
> Cc: linux-media@vger.kernel.org
> Subject: Re: [PATCH V2] Davinci VPFE Capture: Add support for
> Control ioctls
> 
> On Thursday 29 October 2009 07:51:04 hvaibhav@ti.com wrote:
> > From: Vaibhav Hiremath <hvaibhav@ti.com>
> >
> > Added support for Control IOCTL,
> > 	- s_ctrl
> > 	- g_ctrl
> > 	- queryctrl
> >
> > Change from last patch:
> > 	- added room for error return in queryctrl function.
> >
> > Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
> > ---
> >  drivers/media/video/davinci/vpfe_capture.c |   43
> ++++++++++++++++++++++++++++
> >  1 files changed, 43 insertions(+), 0 deletions(-)
> >
> > diff --git a/drivers/media/video/davinci/vpfe_capture.c
> b/drivers/media/video/davinci/vpfe_capture.c
> > index abe21e4..8275d02 100644
> > --- a/drivers/media/video/davinci/vpfe_capture.c
> > +++ b/drivers/media/video/davinci/vpfe_capture.c
> > @@ -1368,6 +1368,46 @@ static int vpfe_g_std(struct file *file,
> void *priv, v4l2_std_id *std_id)
> >  	return 0;
> >  }
> >
> > +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;
> > +	int ret = 0;
> > +
> > +	sdinfo = vpfe_dev->current_subdev;
> > +
> > +	ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo-
> >grp_id,
> > +					 core, queryctrl, qctrl);
> > +
> > +	if (ret)
> > +		qctrl->flags |= V4L2_CTRL_FLAG_DISABLED;
> 
> Please remove this bogus flag. Just do:
> 
[Hiremath, Vaibhav] Hans, while implementing this ioctl I was also thinking the same, but v4l2_ctrl_check do check this flag and also in V4L2 spec it has been mentioned that 
"This control is permanently disabled and should be ignored by the application."

So I thought this may be useful for standard applications, we still have some drivers do use this flag actually.

Thanks,
Vaibhav

> 	return v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo-
> >grp_id,
> 				 core, queryctrl, qctrl);
> 
> Simple and effective.
> 
> Regards,
> 
> 	Hans
> 
> > +
> > +	return ret;
> > +}
> > +
> > +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);
> > +}
> > +
> >  /*
> >   *  Videobuf operations
> >   */
> > @@ -1939,6 +1979,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,
> > --
> > 1.6.2.4
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-
> media" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >
> 
> 
> 
> --
> Hans Verkuil - video4linux developer - sponsored by TANDBERG Telecom
> --
> To unsubscribe from this list: send the line "unsubscribe linux-
> media" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  
Hans Verkuil Nov. 6, 2009, 6:33 a.m. UTC | #4
On Friday 06 November 2009 06:30:42 Hiremath, Vaibhav wrote:
> > -----Original Message-----
> > From: linux-media-owner@vger.kernel.org [mailto:linux-media-
> > owner@vger.kernel.org] On Behalf Of Hans Verkuil
> > Sent: Thursday, November 05, 2009 9:48 PM
> > To: Hiremath, Vaibhav
> > Cc: linux-media@vger.kernel.org
> > Subject: Re: [PATCH V2] Davinci VPFE Capture: Add support for
> > Control ioctls
> > 
> > On Thursday 29 October 2009 07:51:04 hvaibhav@ti.com wrote:
> > > From: Vaibhav Hiremath <hvaibhav@ti.com>
> > >
> > > Added support for Control IOCTL,
> > > 	- s_ctrl
> > > 	- g_ctrl
> > > 	- queryctrl
> > >
> > > Change from last patch:
> > > 	- added room for error return in queryctrl function.
> > >
> > > Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
> > > ---
> > >  drivers/media/video/davinci/vpfe_capture.c |   43
> > ++++++++++++++++++++++++++++
> > >  1 files changed, 43 insertions(+), 0 deletions(-)
> > >
> > > diff --git a/drivers/media/video/davinci/vpfe_capture.c
> > b/drivers/media/video/davinci/vpfe_capture.c
> > > index abe21e4..8275d02 100644
> > > --- a/drivers/media/video/davinci/vpfe_capture.c
> > > +++ b/drivers/media/video/davinci/vpfe_capture.c
> > > @@ -1368,6 +1368,46 @@ static int vpfe_g_std(struct file *file,
> > void *priv, v4l2_std_id *std_id)
> > >  	return 0;
> > >  }
> > >
> > > +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;
> > > +	int ret = 0;
> > > +
> > > +	sdinfo = vpfe_dev->current_subdev;
> > > +
> > > +	ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo-
> > >grp_id,
> > > +					 core, queryctrl, qctrl);
> > > +
> > > +	if (ret)
> > > +		qctrl->flags |= V4L2_CTRL_FLAG_DISABLED;
> > 
> > Please remove this bogus flag. Just do:
> > 
> [Hiremath, Vaibhav] Hans, while implementing this ioctl I was also thinking the same, but v4l2_ctrl_check do check this flag and also in V4L2 spec it has been mentioned that 
> "This control is permanently disabled and should be ignored by the application."
> 
> So I thought this may be useful for standard applications, we still have some drivers do use this flag actually.

The use of this flag is for very specific cases as is documented in a footnote
in the v4l2 spec:

"V4L2_CTRL_FLAG_DISABLED was intended for two purposes: Drivers can skip predefined
controls not supported by the hardware (although returning EINVAL would do as well),
or disable predefined and private controls after hardware detection without the
trouble of reordering control arrays and indices (EINVAL cannot be used to skip
private controls because it would prematurely end the enumeration)."

In both cases you would only check for this flag if queryctrl returns 0, so
setting the flag AND returning an error is unnecessary.

Regards,

	Hans

> 
> Thanks,
> Vaibhav
> 
> > 	return v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo-
> > >grp_id,
> > 				 core, queryctrl, qctrl);
> > 
> > Simple and effective.
> > 
> > Regards,
> > 
> > 	Hans
> > 
> > > +
> > > +	return ret;
> > > +}
> > > +
> > > +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);
> > > +}
> > > +
> > >  /*
> > >   *  Videobuf operations
> > >   */
> > > @@ -1939,6 +1979,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,
> > > --
> > > 1.6.2.4
> > >
> > > --
> > > To unsubscribe from this list: send the line "unsubscribe linux-
> > media" in
> > > the body of a message to majordomo@vger.kernel.org
> > > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > >
> > 
> > 
> > 
> > --
> > Hans Verkuil - video4linux developer - sponsored by TANDBERG Telecom
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-
> > media" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 
>
  
Hiremath, Vaibhav Nov. 6, 2009, 6:36 a.m. UTC | #5
> -----Original Message-----
> From: Hans Verkuil [mailto:hverkuil@xs4all.nl]
> Sent: Friday, November 06, 2009 12:03 PM
> To: Hiremath, Vaibhav
> Cc: linux-media@vger.kernel.org
> Subject: Re: [PATCH V2] Davinci VPFE Capture: Add support for
> Control ioctls
> 
> On Friday 06 November 2009 06:30:42 Hiremath, Vaibhav wrote:
> > > -----Original Message-----
> > > From: linux-media-owner@vger.kernel.org [mailto:linux-media-
> > > owner@vger.kernel.org] On Behalf Of Hans Verkuil
> > > Sent: Thursday, November 05, 2009 9:48 PM
> > > To: Hiremath, Vaibhav
> > > Cc: linux-media@vger.kernel.org
> > > Subject: Re: [PATCH V2] Davinci VPFE Capture: Add support for
> > > Control ioctls
> > >
> > > On Thursday 29 October 2009 07:51:04 hvaibhav@ti.com wrote:
<snip>
> > >
> > > Please remove this bogus flag. Just do:
> > >
> > [Hiremath, Vaibhav] Hans, while implementing this ioctl I was also
> thinking the same, but v4l2_ctrl_check do check this flag and also
> in V4L2 spec it has been mentioned that
> > "This control is permanently disabled and should be ignored by the
> application."
> >
> > So I thought this may be useful for standard applications, we
> still have some drivers do use this flag actually.
> 
> The use of this flag is for very specific cases as is documented in
> a footnote
> in the v4l2 spec:
> 
> "V4L2_CTRL_FLAG_DISABLED was intended for two purposes: Drivers can
> skip predefined
> controls not supported by the hardware (although returning EINVAL
> would do as well),
> or disable predefined and private controls after hardware detection
> without the
> trouble of reordering control arrays and indices (EINVAL cannot be
> used to skip
> private controls because it would prematurely end the enumeration)."
> 
> In both cases you would only check for this flag if queryctrl
> returns 0, so
> setting the flag AND returning an error is unnecessary.
> 
[Hiremath, Vaibhav] Make sense. I will update the patch and submit it again.

Thanks,
Vaibhav

> Regards,
> 
> 	Hans
> 
> >
> > Thanks,
> > Vaibhav
> >
> > > 	return v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo-
> > > >grp_id,
> > > 				 core, queryctrl, qctrl);
> > >
> > > Simple and effective.
> > >
> > > Regards,
> > >
> > > 	Hans
> > >
> > > > +
> > > > +	return ret;
> > > > +}
> > > > +
> > > > +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);
> > > > +}
> > > > +
> > > >  /*
> > > >   *  Videobuf operations
> > > >   */
> > > > @@ -1939,6 +1979,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,
> > > > --
> > > > 1.6.2.4
> > > >
> > > > --
> > > > To unsubscribe from this list: send the line "unsubscribe
> linux-
> > > media" in
> > > > the body of a message to majordomo@vger.kernel.org
> > > > More majordomo info at  http://vger.kernel.org/majordomo-
> info.html
> > > >
> > >
> > >
> > >
> > > --
> > > Hans Verkuil - video4linux developer - sponsored by TANDBERG
> Telecom
> > > --
> > > To unsubscribe from this list: send the line "unsubscribe linux-
> > > media" in
> > > the body of a message to majordomo@vger.kernel.org
> > > More majordomo info at  http://vger.kernel.org/majordomo-
> info.html
> >
> >
> >
> 
> 
> 
> --
> Hans Verkuil - video4linux developer - sponsored by TANDBERG Telecom

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  

Patch

diff --git a/drivers/media/video/davinci/vpfe_capture.c b/drivers/media/video/davinci/vpfe_capture.c
index abe21e4..8275d02 100644
--- a/drivers/media/video/davinci/vpfe_capture.c
+++ b/drivers/media/video/davinci/vpfe_capture.c
@@ -1368,6 +1368,46 @@  static int vpfe_g_std(struct file *file, void *priv, v4l2_std_id *std_id)
 	return 0;
 }

+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;
+	int ret = 0;
+
+	sdinfo = vpfe_dev->current_subdev;
+
+	ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id,
+					 core, queryctrl, qctrl);
+
+	if (ret)
+		qctrl->flags |= V4L2_CTRL_FLAG_DISABLED;
+
+	return ret;
+}
+
+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);
+}
+
 /*
  *  Videobuf operations
  */
@@ -1939,6 +1979,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,