diff options
author | Hans Verkuil <hans.verkuil@cisco.com> | 2012-05-01 11:57:57 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-05-14 14:00:49 -0400 |
commit | ab49ae0f201f1e7e07250d011fffde8ed2530175 (patch) | |
tree | 0fb1a572c621f44b3974c994b65e4a7ba9902201 /drivers/media/common/saa7146_video.c | |
parent | 537fa492e084af58d16899f8d0f3f3516a4fbe7c (diff) |
[media] saa7146: fix querycap, vbi/video separation and g/s_register
The querycap ioctl returned an incorrect version number and incorrect
capabilities (mixing up vbi and video caps).
The reason for that was that video nodes could do vbi activities: that
should be separated between the vbi and video nodes.
There were also a few minor problems with dbg_g/s_register that have
been resolved. The mxb/saa7146 driver now passes the v4l2_compliance tests.
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/common/saa7146_video.c')
-rw-r--r-- | drivers/media/common/saa7146_video.c | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/drivers/media/common/saa7146_video.c b/drivers/media/common/saa7146_video.c index 4ca9a256151..9d193208b89 100644 --- a/drivers/media/common/saa7146_video.c +++ b/drivers/media/common/saa7146_video.c | |||
@@ -446,18 +446,24 @@ static int video_end(struct saa7146_fh *fh, struct file *file) | |||
446 | 446 | ||
447 | static int vidioc_querycap(struct file *file, void *fh, struct v4l2_capability *cap) | 447 | static int vidioc_querycap(struct file *file, void *fh, struct v4l2_capability *cap) |
448 | { | 448 | { |
449 | struct video_device *vdev = video_devdata(file); | ||
449 | struct saa7146_dev *dev = ((struct saa7146_fh *)fh)->dev; | 450 | struct saa7146_dev *dev = ((struct saa7146_fh *)fh)->dev; |
450 | 451 | ||
451 | strcpy((char *)cap->driver, "saa7146 v4l2"); | 452 | strcpy((char *)cap->driver, "saa7146 v4l2"); |
452 | strlcpy((char *)cap->card, dev->ext->name, sizeof(cap->card)); | 453 | strlcpy((char *)cap->card, dev->ext->name, sizeof(cap->card)); |
453 | sprintf((char *)cap->bus_info, "PCI:%s", pci_name(dev->pci)); | 454 | sprintf((char *)cap->bus_info, "PCI:%s", pci_name(dev->pci)); |
454 | cap->version = SAA7146_VERSION_CODE; | ||
455 | cap->device_caps = | 455 | cap->device_caps = |
456 | V4L2_CAP_VIDEO_CAPTURE | | 456 | V4L2_CAP_VIDEO_CAPTURE | |
457 | V4L2_CAP_VIDEO_OVERLAY | | 457 | V4L2_CAP_VIDEO_OVERLAY | |
458 | V4L2_CAP_READWRITE | | 458 | V4L2_CAP_READWRITE | |
459 | V4L2_CAP_STREAMING; | 459 | V4L2_CAP_STREAMING; |
460 | cap->device_caps |= dev->ext_vv_data->capabilities; | 460 | cap->device_caps |= dev->ext_vv_data->capabilities; |
461 | if (vdev->vfl_type == VFL_TYPE_GRABBER) | ||
462 | cap->device_caps &= | ||
463 | ~(V4L2_CAP_VBI_CAPTURE | V4L2_CAP_SLICED_VBI_OUTPUT); | ||
464 | else | ||
465 | cap->device_caps &= | ||
466 | ~(V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OVERLAY); | ||
461 | cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS; | 467 | cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS; |
462 | return 0; | 468 | return 0; |
463 | } | 469 | } |
@@ -990,10 +996,14 @@ static int vidioc_g_chip_ident(struct file *file, void *__fh, | |||
990 | 996 | ||
991 | chip->ident = V4L2_IDENT_NONE; | 997 | chip->ident = V4L2_IDENT_NONE; |
992 | chip->revision = 0; | 998 | chip->revision = 0; |
993 | if (chip->match.type == V4L2_CHIP_MATCH_HOST && !chip->match.addr) { | 999 | if (chip->match.type == V4L2_CHIP_MATCH_HOST) { |
994 | chip->ident = V4L2_IDENT_SAA7146; | 1000 | if (v4l2_chip_match_host(&chip->match)) |
1001 | chip->ident = V4L2_IDENT_SAA7146; | ||
995 | return 0; | 1002 | return 0; |
996 | } | 1003 | } |
1004 | if (chip->match.type != V4L2_CHIP_MATCH_I2C_DRIVER && | ||
1005 | chip->match.type != V4L2_CHIP_MATCH_I2C_ADDR) | ||
1006 | return -EINVAL; | ||
997 | return v4l2_device_call_until_err(&dev->v4l2_dev, 0, | 1007 | return v4l2_device_call_until_err(&dev->v4l2_dev, 0, |
998 | core, g_chip_ident, chip); | 1008 | core, g_chip_ident, chip); |
999 | } | 1009 | } |
@@ -1008,7 +1018,6 @@ const struct v4l2_ioctl_ops saa7146_video_ioctl_ops = { | |||
1008 | .vidioc_g_fmt_vid_overlay = vidioc_g_fmt_vid_overlay, | 1018 | .vidioc_g_fmt_vid_overlay = vidioc_g_fmt_vid_overlay, |
1009 | .vidioc_try_fmt_vid_overlay = vidioc_try_fmt_vid_overlay, | 1019 | .vidioc_try_fmt_vid_overlay = vidioc_try_fmt_vid_overlay, |
1010 | .vidioc_s_fmt_vid_overlay = vidioc_s_fmt_vid_overlay, | 1020 | .vidioc_s_fmt_vid_overlay = vidioc_s_fmt_vid_overlay, |
1011 | .vidioc_g_fmt_vbi_cap = vidioc_g_fmt_vbi_cap, | ||
1012 | .vidioc_g_chip_ident = vidioc_g_chip_ident, | 1021 | .vidioc_g_chip_ident = vidioc_g_chip_ident, |
1013 | 1022 | ||
1014 | .vidioc_overlay = vidioc_overlay, | 1023 | .vidioc_overlay = vidioc_overlay, |
@@ -1027,6 +1036,24 @@ const struct v4l2_ioctl_ops saa7146_video_ioctl_ops = { | |||
1027 | .vidioc_unsubscribe_event = v4l2_event_unsubscribe, | 1036 | .vidioc_unsubscribe_event = v4l2_event_unsubscribe, |
1028 | }; | 1037 | }; |
1029 | 1038 | ||
1039 | const struct v4l2_ioctl_ops saa7146_vbi_ioctl_ops = { | ||
1040 | .vidioc_querycap = vidioc_querycap, | ||
1041 | .vidioc_g_fmt_vbi_cap = vidioc_g_fmt_vbi_cap, | ||
1042 | .vidioc_g_chip_ident = vidioc_g_chip_ident, | ||
1043 | |||
1044 | .vidioc_reqbufs = vidioc_reqbufs, | ||
1045 | .vidioc_querybuf = vidioc_querybuf, | ||
1046 | .vidioc_qbuf = vidioc_qbuf, | ||
1047 | .vidioc_dqbuf = vidioc_dqbuf, | ||
1048 | .vidioc_g_std = vidioc_g_std, | ||
1049 | .vidioc_s_std = vidioc_s_std, | ||
1050 | .vidioc_streamon = vidioc_streamon, | ||
1051 | .vidioc_streamoff = vidioc_streamoff, | ||
1052 | .vidioc_g_parm = vidioc_g_parm, | ||
1053 | .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, | ||
1054 | .vidioc_unsubscribe_event = v4l2_event_unsubscribe, | ||
1055 | }; | ||
1056 | |||
1030 | /*********************************************************************************/ | 1057 | /*********************************************************************************/ |
1031 | /* buffer handling functions */ | 1058 | /* buffer handling functions */ |
1032 | 1059 | ||