aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/pci/ivtv
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2019-06-17 05:36:16 -0400
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>2019-06-24 14:57:12 -0400
commit2161536516edcc0be31109eb1284939119e7ba6d (patch)
tree2117cbdb255958f4a531a736b1781498e103937e /drivers/media/pci/ivtv
parent374d62e7aa50f66c1a4316be9221df4d0f38addd (diff)
media: media/pci: set device_caps in struct video_device
Instead of filling in the struct v4l2_capability device_caps field, fill in the struct video_device device_caps field. That way the V4L2 core knows what the capabilities of the video device are. But this only really works if all drivers use this, so convert all pci drivers in this patch. Tested with cx88-blackbird and ivtv PVR-350. Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Diffstat (limited to 'drivers/media/pci/ivtv')
-rw-r--r--drivers/media/pci/ivtv/ivtv-cards.h3
-rw-r--r--drivers/media/pci/ivtv/ivtv-ioctl.c7
-rw-r--r--drivers/media/pci/ivtv/ivtv-streams.c14
-rw-r--r--drivers/media/pci/ivtv/ivtvfb.c10
4 files changed, 21 insertions, 13 deletions
diff --git a/drivers/media/pci/ivtv/ivtv-cards.h b/drivers/media/pci/ivtv/ivtv-cards.h
index 965def0cbfaa..f3e2c5634962 100644
--- a/drivers/media/pci/ivtv/ivtv-cards.h
+++ b/drivers/media/pci/ivtv/ivtv-cards.h
@@ -156,8 +156,7 @@
156#define IVTV_CAP_ENCODER (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER | \ 156#define IVTV_CAP_ENCODER (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER | \
157 V4L2_CAP_AUDIO | V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE | \ 157 V4L2_CAP_AUDIO | V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE | \
158 V4L2_CAP_SLICED_VBI_CAPTURE) 158 V4L2_CAP_SLICED_VBI_CAPTURE)
159#define IVTV_CAP_DECODER (V4L2_CAP_VIDEO_OUTPUT | \ 159#define IVTV_CAP_DECODER (V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_SLICED_VBI_OUTPUT)
160 V4L2_CAP_SLICED_VBI_OUTPUT | V4L2_CAP_VIDEO_OUTPUT_OVERLAY)
161 160
162struct ivtv_card_video_input { 161struct ivtv_card_video_input {
163 u8 video_type; /* video input type */ 162 u8 video_type; /* video input type */
diff --git a/drivers/media/pci/ivtv/ivtv-ioctl.c b/drivers/media/pci/ivtv/ivtv-ioctl.c
index d1e358a2273e..5595f6a274e7 100644
--- a/drivers/media/pci/ivtv/ivtv-ioctl.c
+++ b/drivers/media/pci/ivtv/ivtv-ioctl.c
@@ -734,18 +734,11 @@ static int ivtv_querycap(struct file *file, void *fh, struct v4l2_capability *vc
734{ 734{
735 struct ivtv_open_id *id = fh2id(file->private_data); 735 struct ivtv_open_id *id = fh2id(file->private_data);
736 struct ivtv *itv = id->itv; 736 struct ivtv *itv = id->itv;
737 struct ivtv_stream *s = &itv->streams[id->type];
738 737
739 strscpy(vcap->driver, IVTV_DRIVER_NAME, sizeof(vcap->driver)); 738 strscpy(vcap->driver, IVTV_DRIVER_NAME, sizeof(vcap->driver));
740 strscpy(vcap->card, itv->card_name, sizeof(vcap->card)); 739 strscpy(vcap->card, itv->card_name, sizeof(vcap->card));
741 snprintf(vcap->bus_info, sizeof(vcap->bus_info), "PCI:%s", pci_name(itv->pdev)); 740 snprintf(vcap->bus_info, sizeof(vcap->bus_info), "PCI:%s", pci_name(itv->pdev));
742 vcap->capabilities = itv->v4l2_cap | V4L2_CAP_DEVICE_CAPS; 741 vcap->capabilities = itv->v4l2_cap | V4L2_CAP_DEVICE_CAPS;
743 vcap->device_caps = s->caps;
744 if ((s->caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY) &&
745 !itv->osd_video_pbase) {
746 vcap->capabilities &= ~V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
747 vcap->device_caps &= ~V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
748 }
749 return 0; 742 return 0;
750} 743}
751 744
diff --git a/drivers/media/pci/ivtv/ivtv-streams.c b/drivers/media/pci/ivtv/ivtv-streams.c
index a641f20e3f86..f7de9118f609 100644
--- a/drivers/media/pci/ivtv/ivtv-streams.c
+++ b/drivers/media/pci/ivtv/ivtv-streams.c
@@ -139,8 +139,7 @@ static struct {
139 "decoder MPG", 139 "decoder MPG",
140 VFL_TYPE_GRABBER, IVTV_V4L2_DEC_MPG_OFFSET, 140 VFL_TYPE_GRABBER, IVTV_V4L2_DEC_MPG_OFFSET,
141 PCI_DMA_TODEVICE, 0, 141 PCI_DMA_TODEVICE, 0,
142 V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE | 142 V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
143 V4L2_CAP_VIDEO_OUTPUT_OVERLAY,
144 &ivtv_v4l2_dec_fops 143 &ivtv_v4l2_dec_fops
145 }, 144 },
146 { /* IVTV_DEC_STREAM_TYPE_VBI */ 145 { /* IVTV_DEC_STREAM_TYPE_VBI */
@@ -161,8 +160,7 @@ static struct {
161 "decoder YUV", 160 "decoder YUV",
162 VFL_TYPE_GRABBER, IVTV_V4L2_DEC_YUV_OFFSET, 161 VFL_TYPE_GRABBER, IVTV_V4L2_DEC_YUV_OFFSET,
163 PCI_DMA_TODEVICE, 0, 162 PCI_DMA_TODEVICE, 0,
164 V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE | 163 V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
165 V4L2_CAP_VIDEO_OUTPUT_OVERLAY,
166 &ivtv_v4l2_dec_fops 164 &ivtv_v4l2_dec_fops
167 } 165 }
168}; 166};
@@ -301,6 +299,14 @@ static int ivtv_reg_dev(struct ivtv *itv, int type)
301 if (s_mpg->vdev.v4l2_dev) 299 if (s_mpg->vdev.v4l2_dev)
302 num = s_mpg->vdev.num + ivtv_stream_info[type].num_offset; 300 num = s_mpg->vdev.num + ivtv_stream_info[type].num_offset;
303 } 301 }
302 s->vdev.device_caps = s->caps;
303 if (itv->osd_video_pbase) {
304 itv->streams[IVTV_DEC_STREAM_TYPE_YUV].vdev.device_caps |=
305 V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
306 itv->streams[IVTV_DEC_STREAM_TYPE_MPG].vdev.device_caps |=
307 V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
308 itv->v4l2_cap |= V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
309 }
304 video_set_drvdata(&s->vdev, s); 310 video_set_drvdata(&s->vdev, s);
305 311
306 /* Register device. First try the desired minor, then any free one. */ 312 /* Register device. First try the desired minor, then any free one. */
diff --git a/drivers/media/pci/ivtv/ivtvfb.c b/drivers/media/pci/ivtv/ivtvfb.c
index 66be490ec563..800b3654cac5 100644
--- a/drivers/media/pci/ivtv/ivtvfb.c
+++ b/drivers/media/pci/ivtv/ivtvfb.c
@@ -1220,6 +1220,11 @@ static int ivtvfb_init_card(struct ivtv *itv)
1220 1220
1221 /* Allocate DMA */ 1221 /* Allocate DMA */
1222 ivtv_udma_alloc(itv); 1222 ivtv_udma_alloc(itv);
1223 itv->streams[IVTV_DEC_STREAM_TYPE_YUV].vdev.device_caps |=
1224 V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
1225 itv->streams[IVTV_DEC_STREAM_TYPE_MPG].vdev.device_caps |=
1226 V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
1227 itv->v4l2_cap |= V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
1223 return 0; 1228 return 0;
1224 1229
1225} 1230}
@@ -1246,6 +1251,11 @@ static int ivtvfb_callback_cleanup(struct device *dev, void *p)
1246 struct osd_info *oi = itv->osd_info; 1251 struct osd_info *oi = itv->osd_info;
1247 1252
1248 if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) { 1253 if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) {
1254 itv->streams[IVTV_DEC_STREAM_TYPE_YUV].vdev.device_caps &=
1255 ~V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
1256 itv->streams[IVTV_DEC_STREAM_TYPE_MPG].vdev.device_caps &=
1257 ~V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
1258 itv->v4l2_cap &= ~V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
1249 if (unregister_framebuffer(&itv->osd_info->ivtvfb_info)) { 1259 if (unregister_framebuffer(&itv->osd_info->ivtvfb_info)) {
1250 IVTVFB_WARN("Framebuffer %d is in use, cannot unload\n", 1260 IVTVFB_WARN("Framebuffer %d is in use, cannot unload\n",
1251 itv->instance); 1261 itv->instance);