diff options
author | Hans Verkuil <hans.verkuil@cisco.com> | 2012-09-05 09:38:10 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-10-01 16:12:51 -0400 |
commit | 30634e8e41d413b0084ba29f843361a1fd9fbdce (patch) | |
tree | 0712b67462e242c926502ff697beed75b6f078d6 /drivers/media | |
parent | 34a6b7d093d8fe738ada191b36648d00bc18b7eb (diff) |
[media] sliced vbi: subdevs shouldn't clear the full v4l2_sliced_vbi_format struct
Various subdevs cleared the full v4l2_sliced_vbi_format struct, when
only the service_set/lines fields should have been cleared.
Due to this the io_size field was wrongly cleared to 0, causing a
v4l2-compliance error.
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/i2c/cx25840/cx25840-vbi.c | 3 | ||||
-rw-r--r-- | drivers/media/i2c/saa7115.c | 3 | ||||
-rw-r--r-- | drivers/media/i2c/saa7127.c | 2 | ||||
-rw-r--r-- | drivers/media/i2c/tvp5150.c | 2 | ||||
-rw-r--r-- | drivers/media/pci/cx18/cx18-av-vbi.c | 4 | ||||
-rw-r--r-- | drivers/media/pci/cx18/cx18-ioctl.c | 4 | ||||
-rw-r--r-- | drivers/media/pci/ivtv/ivtv-ioctl.c | 1 |
7 files changed, 10 insertions, 9 deletions
diff --git a/drivers/media/i2c/cx25840/cx25840-vbi.c b/drivers/media/i2c/cx25840/cx25840-vbi.c index 64a4004f8a97..c39e91dc1137 100644 --- a/drivers/media/i2c/cx25840/cx25840-vbi.c +++ b/drivers/media/i2c/cx25840/cx25840-vbi.c | |||
@@ -96,7 +96,8 @@ int cx25840_g_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format * | |||
96 | int is_pal = !(state->std & V4L2_STD_525_60); | 96 | int is_pal = !(state->std & V4L2_STD_525_60); |
97 | int i; | 97 | int i; |
98 | 98 | ||
99 | memset(svbi, 0, sizeof(*svbi)); | 99 | memset(svbi->service_lines, 0, sizeof(svbi->service_lines)); |
100 | svbi->service_set = 0; | ||
100 | /* we're done if raw VBI is active */ | 101 | /* we're done if raw VBI is active */ |
101 | if ((cx25840_read(client, 0x404) & 0x10) == 0) | 102 | if ((cx25840_read(client, 0x404) & 0x10) == 0) |
102 | return 0; | 103 | return 0; |
diff --git a/drivers/media/i2c/saa7115.c b/drivers/media/i2c/saa7115.c index 2107336cd836..6b6788cd08f6 100644 --- a/drivers/media/i2c/saa7115.c +++ b/drivers/media/i2c/saa7115.c | |||
@@ -1066,7 +1066,8 @@ static int saa711x_g_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_f | |||
1066 | }; | 1066 | }; |
1067 | int i; | 1067 | int i; |
1068 | 1068 | ||
1069 | memset(sliced, 0, sizeof(*sliced)); | 1069 | memset(sliced->service_lines, 0, sizeof(sliced->service_lines)); |
1070 | sliced->service_set = 0; | ||
1070 | /* done if using raw VBI */ | 1071 | /* done if using raw VBI */ |
1071 | if (saa711x_read(sd, R_80_GLOBAL_CNTL_1) & 0x10) | 1072 | if (saa711x_read(sd, R_80_GLOBAL_CNTL_1) & 0x10) |
1072 | return 0; | 1073 | return 0; |
diff --git a/drivers/media/i2c/saa7127.c b/drivers/media/i2c/saa7127.c index 8ecb6564a315..b745f68fbc92 100644 --- a/drivers/media/i2c/saa7127.c +++ b/drivers/media/i2c/saa7127.c | |||
@@ -625,7 +625,7 @@ static int saa7127_g_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_f | |||
625 | { | 625 | { |
626 | struct saa7127_state *state = to_state(sd); | 626 | struct saa7127_state *state = to_state(sd); |
627 | 627 | ||
628 | memset(fmt, 0, sizeof(*fmt)); | 628 | memset(fmt->service_lines, 0, sizeof(fmt->service_lines)); |
629 | if (state->vps_enable) | 629 | if (state->vps_enable) |
630 | fmt->service_lines[0][16] = V4L2_SLICED_VPS; | 630 | fmt->service_lines[0][16] = V4L2_SLICED_VPS; |
631 | if (state->wss_enable) | 631 | if (state->wss_enable) |
diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c index b5b1792479d0..31104a960652 100644 --- a/drivers/media/i2c/tvp5150.c +++ b/drivers/media/i2c/tvp5150.c | |||
@@ -1020,7 +1020,7 @@ static int tvp5150_g_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_f | |||
1020 | { | 1020 | { |
1021 | int i, mask = 0; | 1021 | int i, mask = 0; |
1022 | 1022 | ||
1023 | memset(svbi, 0, sizeof(*svbi)); | 1023 | memset(svbi->service_lines, 0, sizeof(svbi->service_lines)); |
1024 | 1024 | ||
1025 | for (i = 0; i <= 23; i++) { | 1025 | for (i = 0; i <= 23; i++) { |
1026 | svbi->service_lines[0][i] = | 1026 | svbi->service_lines[0][i] = |
diff --git a/drivers/media/pci/cx18/cx18-av-vbi.c b/drivers/media/pci/cx18/cx18-av-vbi.c index baa36fbcd4d4..246982841fec 100644 --- a/drivers/media/pci/cx18/cx18-av-vbi.c +++ b/drivers/media/pci/cx18/cx18-av-vbi.c | |||
@@ -143,7 +143,9 @@ int cx18_av_g_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format * | |||
143 | int is_pal = !(state->std & V4L2_STD_525_60); | 143 | int is_pal = !(state->std & V4L2_STD_525_60); |
144 | int i; | 144 | int i; |
145 | 145 | ||
146 | memset(svbi, 0, sizeof(*svbi)); | 146 | memset(svbi->service_lines, 0, sizeof(svbi->service_lines)); |
147 | svbi->service_set = 0; | ||
148 | |||
147 | /* we're done if raw VBI is active */ | 149 | /* we're done if raw VBI is active */ |
148 | if ((cx18_av_read(cx, 0x404) & 0x10) == 0) | 150 | if ((cx18_av_read(cx, 0x404) & 0x10) == 0) |
149 | return 0; | 151 | return 0; |
diff --git a/drivers/media/pci/cx18/cx18-ioctl.c b/drivers/media/pci/cx18/cx18-ioctl.c index bb5073f72c42..cd8d2c2b1624 100644 --- a/drivers/media/pci/cx18/cx18-ioctl.c +++ b/drivers/media/pci/cx18/cx18-ioctl.c | |||
@@ -210,10 +210,6 @@ static int cx18_g_fmt_sliced_vbi_cap(struct file *file, void *fh, | |||
210 | if (v4l2_subdev_call(cx->sd_av, vbi, g_sliced_fmt, &fmt->fmt.sliced)) | 210 | if (v4l2_subdev_call(cx->sd_av, vbi, g_sliced_fmt, &fmt->fmt.sliced)) |
211 | return -EINVAL; | 211 | return -EINVAL; |
212 | 212 | ||
213 | /* Ensure V4L2 spec compliant output */ | ||
214 | vbifmt->reserved[0] = 0; | ||
215 | vbifmt->reserved[1] = 0; | ||
216 | vbifmt->io_size = sizeof(struct v4l2_sliced_vbi_data) * 36; | ||
217 | vbifmt->service_set = cx18_get_service_set(vbifmt); | 213 | vbifmt->service_set = cx18_get_service_set(vbifmt); |
218 | return 0; | 214 | return 0; |
219 | } | 215 | } |
diff --git a/drivers/media/pci/ivtv/ivtv-ioctl.c b/drivers/media/pci/ivtv/ivtv-ioctl.c index ed6dcc7e61bc..4e40c4e301ed 100644 --- a/drivers/media/pci/ivtv/ivtv-ioctl.c +++ b/drivers/media/pci/ivtv/ivtv-ioctl.c | |||
@@ -326,6 +326,7 @@ static int ivtv_g_fmt_sliced_vbi_out(struct file *file, void *fh, struct v4l2_fo | |||
326 | if (!(itv->v4l2_cap & V4L2_CAP_SLICED_VBI_OUTPUT)) | 326 | if (!(itv->v4l2_cap & V4L2_CAP_SLICED_VBI_OUTPUT)) |
327 | return -EINVAL; | 327 | return -EINVAL; |
328 | vbifmt->io_size = sizeof(struct v4l2_sliced_vbi_data) * 36; | 328 | vbifmt->io_size = sizeof(struct v4l2_sliced_vbi_data) * 36; |
329 | memset(vbifmt->service_lines, 0, sizeof(vbifmt->service_lines)); | ||
329 | if (itv->is_60hz) { | 330 | if (itv->is_60hz) { |
330 | vbifmt->service_lines[0][21] = V4L2_SLICED_CAPTION_525; | 331 | vbifmt->service_lines[0][21] = V4L2_SLICED_CAPTION_525; |
331 | vbifmt->service_lines[1][21] = V4L2_SLICED_CAPTION_525; | 332 | vbifmt->service_lines[1][21] = V4L2_SLICED_CAPTION_525; |