V4L/DVB (5183): Fix CC handling in VIDIOC_INT_G_VBI_DATA

When capturing a 60 Hz input the internal field ID is inverted. The
VIDIOC_INT_G_VBI_DATA didn't take that into account and so returned
XDS instead of CC and vice versa.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
Hans Verkuil
2007-02-03 06:35:07 -03:00
committed by Mauro Carvalho Chehab
parent 2675f7a88f
commit faeb4ab38f

View File

@@ -1388,6 +1388,9 @@ static int saa711x_command(struct i2c_client *client, unsigned int cmd, void *ar
{ {
struct v4l2_sliced_vbi_data *data = arg; struct v4l2_sliced_vbi_data *data = arg;
/* Note: the internal field ID is inverted for NTSC,
so data->field 0 maps to the saa7115 even field,
whereas for PAL it maps to the saa7115 odd field. */
switch (data->id) { switch (data->id) {
case V4L2_SLICED_WSS_625: case V4L2_SLICED_WSS_625:
if (saa711x_read(client, 0x6b) & 0xc0) if (saa711x_read(client, 0x6b) & 0xc0)
@@ -1398,18 +1401,18 @@ static int saa711x_command(struct i2c_client *client, unsigned int cmd, void *ar
case V4L2_SLICED_CAPTION_525: case V4L2_SLICED_CAPTION_525:
if (data->field == 0) { if (data->field == 0) {
/* CC */ /* CC */
if (saa711x_read(client, 0x66) & 0xc0)
return -EIO;
data->data[0] = saa711x_read(client, 0x67);
data->data[1] = saa711x_read(client, 0x68);
return 0;
}
/* XDS */
if (saa711x_read(client, 0x66) & 0x30) if (saa711x_read(client, 0x66) & 0x30)
return -EIO; return -EIO;
data->data[0] = saa711x_read(client, 0x69); data->data[0] = saa711x_read(client, 0x69);
data->data[1] = saa711x_read(client, 0x6a); data->data[1] = saa711x_read(client, 0x6a);
return 0; return 0;
}
/* XDS */
if (saa711x_read(client, 0x66) & 0xc0)
return -EIO;
data->data[0] = saa711x_read(client, 0x67);
data->data[1] = saa711x_read(client, 0x68);
return 0;
default: default:
return -EINVAL; return -EINVAL;
} }