The patch number 9876 was added via Jean-Francois Moine <moin...@free.fr>
to http://linuxtv.org/hg/v4l-dvb master development tree.

Kernel patches in this development tree may be modified to be backward
compatible with older kernels. Compatibility modifications will be
removed before inclusion into the mainstream Kernel

If anyone has any objections, please let us know by sending a message to:
        v4l-dvb-maintai...@linuxtv.org

------

From: Jim Paris  <j...@jtan.com>
gspca - main: Allow subdrivers to handle v4l2_streamparm requests.


Add get_streamparm and set_streamparm operations so subdrivers can
get/set stream parameters such as framerate.

Priority: normal

Signed-off-by: Jim Paris <j...@jtan.com>
Signed-off-by: Jean-Francois Moine <moin...@free.fr>


---

 linux/drivers/media/video/gspca/gspca.c |   22 ++++++++++++++++++++++
 linux/drivers/media/video/gspca/gspca.h |    4 ++++
 2 files changed, 26 insertions(+)

diff -r 444df9137fcd -r caa20bf20fa6 linux/drivers/media/video/gspca/gspca.c
--- a/linux/drivers/media/video/gspca/gspca.c   Wed Dec 10 09:50:44 2008 +0100
+++ b/linux/drivers/media/video/gspca/gspca.c   Wed Dec 10 10:02:42 2008 +0100
@@ -1337,6 +1337,17 @@ static int vidioc_g_parm(struct file *fi
        memset(parm, 0, sizeof *parm);
        parm->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        parm->parm.capture.readbuffers = gspca_dev->nbufread;
+
+       if (gspca_dev->sd_desc->get_streamparm) {
+               int ret;
+
+               if (mutex_lock_interruptible(&gspca_dev->usb_lock))
+                       return -ERESTARTSYS;
+               ret = gspca_dev->sd_desc->get_streamparm(gspca_dev, parm);
+               mutex_unlock(&gspca_dev->usb_lock);
+               return ret;
+       }
+
        return 0;
 }
 
@@ -1351,6 +1362,17 @@ static int vidioc_s_parm(struct file *fi
                parm->parm.capture.readbuffers = gspca_dev->nbufread;
        else
                gspca_dev->nbufread = n;
+
+       if (gspca_dev->sd_desc->set_streamparm) {
+               int ret;
+
+               if (mutex_lock_interruptible(&gspca_dev->usb_lock))
+                       return -ERESTARTSYS;
+               ret = gspca_dev->sd_desc->set_streamparm(gspca_dev, parm);
+               mutex_unlock(&gspca_dev->usb_lock);
+               return ret;
+       }
+
        return 0;
 }
 
diff -r 444df9137fcd -r caa20bf20fa6 linux/drivers/media/video/gspca/gspca.h
--- a/linux/drivers/media/video/gspca/gspca.h   Wed Dec 10 09:50:44 2008 +0100
+++ b/linux/drivers/media/video/gspca/gspca.h   Wed Dec 10 10:02:42 2008 +0100
@@ -74,6 +74,8 @@ typedef int (*cam_cf_op) (struct gspca_d
 typedef int (*cam_cf_op) (struct gspca_dev *, const struct usb_device_id *);
 typedef int (*cam_jpg_op) (struct gspca_dev *,
                                struct v4l2_jpegcompression *);
+typedef int (*cam_streamparm_op) (struct gspca_dev *,
+                                 struct v4l2_streamparm *);
 typedef int (*cam_qmnu_op) (struct gspca_dev *,
                        struct v4l2_querymenu *);
 typedef void (*cam_pkt_op) (struct gspca_dev *gspca_dev,
@@ -106,6 +108,8 @@ struct sd_desc {
        cam_jpg_op get_jcomp;
        cam_jpg_op set_jcomp;
        cam_qmnu_op querymenu;
+       cam_streamparm_op get_streamparm;
+       cam_streamparm_op set_streamparm;
 };
 
 /* packet types when moving from iso buf to frame buf */


---

Patch is available at: 
http://linuxtv.org/hg/v4l-dvb/rev/caa20bf20fa61377384a817b60a195bc352c404d

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to