Brian Johnson schrieb:
No i meean inside usb_sn9c20x function we check the values of all our module params to make sure the are valid and if not we print a warning and set them to the default value. that needs to be updated for the jpeg one since right now it only allows values of 0 or 1 so will overwrite the default value of 2 with 1 and auto detection will never work.On Fri, Jan 16, 2009 at 6:11 AM, GWater <[email protected]> wrote:Brian Johnson schrieb:Yeah thats it. you still need to modify usb_sn9c20x_init o allow 2 as a valid value for the jpeg parameter, bot except for that it is looks fine to me. On Thu, Jan 15, 2009 at 2:49 PM, GWater <[email protected]> wrote: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.6Why do you want 2 as a parameter? GWater--~--~---------~--~----~------------~-------~--~----~ Lets make microdia webcams plug'n play, (currently plug'n pray) To post to this group, send email to [email protected] Visit us online https://groups.google.com/group/microdia -~----------~----~----~----~------~----~------~--~---
I hope this is the final version. But please check again. ;) GWater
From ec97472c0af97b1c85ea5cce6ea8120ce06708cb 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 | 18 +++++++++++++----- sn9c20x-v4l2.c | 4 ++-- sn9c20x.h | 2 ++ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/sn9c20x-usb.c b/sn9c20x-usb.c index f001016..65508f5 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); @@ -934,9 +942,9 @@ static int __init usb_sn9c20x_init(void) bulk = 0; } - if (jpeg != 0 && jpeg != 1) { - UDIA_WARNING("JPEG should be 0 or 1! Defaulting to 1\n"); - jpeg = 1; + if (jpeg > 2) { + UDIA_WARNING("JPEG should be 0 or 1 or 2! Defaulting to 2\n"); + jpeg = 2; } if (vflip != 0 && vflip != 1) { @@ -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
signature.asc
Description: OpenPGP digital signature
