Brian Johnson schrieb:
Ok i also realized ou will probably want to add a field to our device
structure called jpeg copy the module param value to that durring the
default_settings call and check it to see if it is set to auto and if
so update it. Then the various checks that our driver does to
enable/disable jeg format shoud now check this device specific value.
This shold make things work as expected when auto detection is turned
on and you have moe then one device attached.



Is this what you had in mind?

GWater
From a0acb2afe1d08196df6fe94ff72b12172d6e47c2 Mon Sep 17 00:00:00 2001
From: GWater <[email protected]>
Date: Wed, 14 Jan 2009 23:16:15 +0100
Subject: [PATCH] Disable JPEG for high-speed USB 2.0 by default

Signed-off-by: GWater <[email protected]>
---
 sn9c20x-usb.c  |   12 ++++++++++--
 sn9c20x-v4l2.c |    4 ++--
 sn9c20x.h      |    2 ++
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/sn9c20x-usb.c b/sn9c20x-usb.c
index f001016..1afa714 100644
--- a/sn9c20x-usb.c
+++ b/sn9c20x-usb.c
@@ -57,7 +57,7 @@ static __u8 bulk;
  * @var jpeg
  *  Module parameter to enable/disable JPEG format
  */
-__u8 jpeg = 1;
+__u8 jpeg = 2;
 
 /**
  * @var bandwidth
@@ -728,6 +728,14 @@ static int usb_sn9c20x_default_settings(struct usb_sn9c20x 
*dev)
        v4l2_set_control_default(dev, V4L2_CID_AUTO_WHITE_BALANCE, 
auto_whitebalance);
        v4l2_set_control_default(dev, V4L2_CID_EXPOSURE, exposure);
 
+       if (jpeg == 2) {
+               if (dev->udev->speed == USB_SPEED_HIGH && bandwidth == 8)
+                       dev->jpeg = 0;
+               else
+                       dev->jpeg = 1;
+       } else
+               dev->jpeg = jpeg;
+
        sn9c20x_set_resolution(dev, 640, 480);
        sn9c20x_set_format(dev, sn9c20x_fmts[0].pix_fmt);
 
@@ -1029,7 +1037,7 @@ module_exit(usb_sn9c20x_exit);    /**< @brief Module exit 
*/
 
 
 MODULE_PARM_DESC(fps, "Frames per second [10-30]");            /**< @brief 
Description of 'fps' parameter */
-MODULE_PARM_DESC(jpeg, "Enable JPEG support (default is enabled)");
+MODULE_PARM_DESC(jpeg, "Enable JPEG support (default is auto-detect)");
 MODULE_PARM_DESC(bulk, "Enable Bulk transfer (default is to use ISOC)");
 MODULE_PARM_DESC(bandwidth, "Bandwidth Setting (only for ISOC)");
 MODULE_PARM_DESC(hflip, "Horizontal image flip");              /**< @brief 
Description of 'hflip' parameter */
diff --git a/sn9c20x-v4l2.c b/sn9c20x-v4l2.c
index 5c7d47b..4ecec35 100644
--- a/sn9c20x-v4l2.c
+++ b/sn9c20x-v4l2.c
@@ -922,7 +922,7 @@ int sn9c20x_vidioc_enum_fmt_cap(struct file *file, void 
*priv,
        fmt->flags = 0;
        fmt->pixelformat = sn9c20x_fmts[fmt->index].pix_fmt;
 
-       if (fmt->pixelformat == V4L2_PIX_FMT_JPEG && jpeg == 0)
+       if (fmt->pixelformat == V4L2_PIX_FMT_JPEG && dev->jpeg == 0)
                return -EINVAL;
 
        memcpy(fmt->description, sn9c20x_fmts[fmt->index].desc, 32);
@@ -951,7 +951,7 @@ int sn9c20x_vidioc_try_fmt_cap(struct file *file, void 
*priv,
        if(fmt->fmt.pix.field != V4L2_FIELD_NONE)
                return -EINVAL;
 */
-       if (fmt->fmt.pix.pixelformat == V4L2_PIX_FMT_JPEG && jpeg == 0)
+       if (fmt->fmt.pix.pixelformat == V4L2_PIX_FMT_JPEG && dev->jpeg == 0)
                return -EINVAL;
 
        for (index = 0; index < SN9C20X_N_FMTS; index++)
diff --git a/sn9c20x.h b/sn9c20x.h
index d5d2473..3db941f 100644
--- a/sn9c20x.h
+++ b/sn9c20x.h
@@ -429,6 +429,8 @@ struct usb_sn9c20x {
 
        int resolution;
 
+       __u8 jpeg;
+
        unsigned int frozen:1;
        struct sn9c20x_video_queue queue;
        struct sn9c20x_camera camera;
-- 
1.6.0.6

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to