diff options
author | Trent Piepho <xyzzy@speakeasy.org> | 2007-07-17 14:29:42 -0700 |
---|---|---|
committer | Trent Piepho <xyzzy@speakeasy.org> | 2007-07-17 14:29:42 -0700 |
commit | c3fd829ebc0a4aa1fae9c049f0384f11652566d9 (patch) | |
tree | f8c2ad2402e5af695ca8895b6e6b418ab0443b8a /linux/drivers/media/video/zoran_driver.c | |
parent | 1c33921b7105f6b68adf3ac7977b242250b968ca (diff) | |
download | mediapointer-dvb-s2-c3fd829ebc0a4aa1fae9c049f0384f11652566d9.tar.gz mediapointer-dvb-s2-c3fd829ebc0a4aa1fae9c049f0384f11652566d9.tar.bz2 |
zr36067: Fix problem setting norms
From: Trent Piepho <xyzzy@speakeasy.org>
The zr36067 driver doesn't make a distinction between the different sub-types
of NTSC, PAL, or SECAM norms. For example, when the enum std ioctl returns
the PAL standard it returns PAL_BG|PAL_DK|PAL_H|PAL_I.
When setting the norm, it required the bitmask to match exactly the set of
norms used during the enumeration. If just one norm was specified, for
example PAL_BG or NTSC_M, it would fail. This violates the V4L2 spec,
"VIDIOC_S_STD accepts *one* or more flags..."
The key thing to realize is that V4L2_STD_PAL is not one bit, it is multiple
bits. It's ok to call S_STD with any *one* of those bits, but the driver was
requiring *all* of them.
This fixes the S_STD function so that it will accept any set of one or more
PAL norms as PAL, and the same for NTSC and SECAM.
Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
Acked-by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
Diffstat (limited to 'linux/drivers/media/video/zoran_driver.c')
-rw-r--r-- | linux/drivers/media/video/zoran_driver.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/linux/drivers/media/video/zoran_driver.c b/linux/drivers/media/video/zoran_driver.c index 9fede04f4..117693ed0 100644 --- a/linux/drivers/media/video/zoran_driver.c +++ b/linux/drivers/media/video/zoran_driver.c @@ -3762,11 +3762,11 @@ zoran_do_ioctl (struct inode *inode, dprintk(3, KERN_DEBUG "%s: VIDIOC_S_STD - norm=0x%llx\n", ZR_DEVNAME(zr), (unsigned long long)*std); - if (*std == V4L2_STD_PAL) + if ((*std & V4L2_STD_PAL) && !(*std & ~V4L2_STD_PAL)) norm = VIDEO_MODE_PAL; - else if (*std == V4L2_STD_NTSC) + else if ((*std & V4L2_STD_NTSC) && !(*std & ~V4L2_STD_NTSC)) norm = VIDEO_MODE_NTSC; - else if (*std == V4L2_STD_SECAM) + else if ((*std & V4L2_STD_SECAM) && !(*std & ~V4L2_STD_SECAM)) norm = VIDEO_MODE_SECAM; else if (*std == V4L2_STD_ALL) norm = VIDEO_MODE_AUTO; |