From a8b864354e060dda1000e62d1fea7c1274581caf Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Sat, 4 Oct 2008 08:05:30 -0300 Subject: V4L/DVB (9162): ivtv: fix raw/sliced VBI mixup The service_set field was used in saa7115 and cx25840 to determine whether raw or sliced VBI was desired. This is incorrect since it is perfectly valid to select sliced VBI with a service_set of 0. Instead these drivers should checked on VIDIOC_S_FMT whether the type field matches the raw or sliced VBI type. Updated ivtv accordingly. Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- drivers/media/video/saa7115.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'drivers/media/video/saa7115.c') diff --git a/drivers/media/video/saa7115.c b/drivers/media/video/saa7115.c index 4ed7d65dd63..c8e9cb3db30 100644 --- a/drivers/media/video/saa7115.c +++ b/drivers/media/video/saa7115.c @@ -1057,7 +1057,7 @@ static void saa711x_set_lcr(struct i2c_client *client, struct v4l2_sliced_vbi_fo for (i = 0; i <= 23; i++) lcr[i] = 0xff; - if (fmt->service_set == 0) { + if (fmt == NULL) { /* raw VBI */ if (is_50hz) for (i = 6; i <= 23; i++) @@ -1113,7 +1113,7 @@ static void saa711x_set_lcr(struct i2c_client *client, struct v4l2_sliced_vbi_fo } /* enable/disable raw VBI capturing */ - saa711x_writeregs(client, fmt->service_set == 0 ? + saa711x_writeregs(client, fmt == NULL ? saa7115_cfg_vbi_on : saa7115_cfg_vbi_off); } @@ -1153,6 +1153,10 @@ static int saa711x_set_v4lfmt(struct i2c_client *client, struct v4l2_format *fmt saa711x_set_lcr(client, &fmt->fmt.sliced); return 0; } + if (fmt->type == V4L2_BUF_TYPE_VBI_CAPTURE) { + saa711x_set_lcr(client, NULL); + return 0; + } if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) return -EINVAL; -- cgit v1.2.3