aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2013-04-13 04:30:48 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-04-16 16:56:19 -0400
commitffd3c2330473f6a07f36bf3bd64f7a1158bdd759 (patch)
tree561e92d16d04d3f0cadf2a35a486859fe80e4119 /drivers
parent170bd5330383ce62127ef5b6eeeab9afebd7b838 (diff)
[media] cx25821: remove bogus radio/vbi/'video-ioctl' support
This device does not support radio or vbi, so remove anything referring to that. In addition, the driver created an 'video ioctl' node, which was unused and was effectively identical to the first video node. This bogus video node is now removed, leaving us with 8 video capture nodes and 2 video output nodes. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/pci/cx25821/cx25821-core.c13
-rw-r--r--drivers/media/pci/cx25821/cx25821-video.c201
-rw-r--r--drivers/media/pci/cx25821/cx25821-video.h1
-rw-r--r--drivers/media/pci/cx25821/cx25821.h16
4 files changed, 88 insertions, 143 deletions
diff --git a/drivers/media/pci/cx25821/cx25821-core.c b/drivers/media/pci/cx25821/cx25821-core.c
index 1f47422d4889..2b38a5005d0e 100644
--- a/drivers/media/pci/cx25821/cx25821-core.c
+++ b/drivers/media/pci/cx25821/cx25821-core.c
@@ -988,17 +988,6 @@ static int cx25821_dev_setup(struct cx25821_dev *dev)
988 988
989 cx25821_video_register(dev); 989 cx25821_video_register(dev);
990 990
991 /* register IOCTL device */
992 dev->ioctl_dev = cx25821_vdev_init(dev, dev->pci,
993 &cx25821_videoioctl_template, "video");
994
995 if (video_register_device
996 (dev->ioctl_dev, VFL_TYPE_GRABBER, VIDEO_IOCTL_CH) < 0) {
997 cx25821_videoioctl_unregister(dev);
998 pr_err("%s(): Failed to register video adapter for IOCTL, so unregistering videoioctl device\n",
999 __func__);
1000 }
1001
1002 cx25821_dev_checkrevision(dev); 991 cx25821_dev_checkrevision(dev);
1003 CX25821_INFO("setup done!\n"); 992 CX25821_INFO("setup done!\n");
1004 993
@@ -1057,8 +1046,6 @@ void cx25821_dev_unregister(struct cx25821_dev *dev)
1057 cx25821_video_unregister(dev, i); 1046 cx25821_video_unregister(dev, i);
1058 } 1047 }
1059 1048
1060 cx25821_videoioctl_unregister(dev);
1061
1062 cx25821_i2c_unregister(&dev->i2c_bus[0]); 1049 cx25821_i2c_unregister(&dev->i2c_bus[0]);
1063 cx25821_iounmap(dev); 1050 cx25821_iounmap(dev);
1064} 1051}
diff --git a/drivers/media/pci/cx25821/cx25821-video.c b/drivers/media/pci/cx25821/cx25821-video.c
index 4eaa67a0833b..e785bb98d533 100644
--- a/drivers/media/pci/cx25821/cx25821-video.c
+++ b/drivers/media/pci/cx25821/cx25821-video.c
@@ -33,13 +33,10 @@ MODULE_AUTHOR("Hiep Huynh <hiep.huynh@conexant.com>");
33MODULE_LICENSE("GPL"); 33MODULE_LICENSE("GPL");
34 34
35static unsigned int video_nr[] = {[0 ... (CX25821_MAXBOARDS - 1)] = UNSET }; 35static unsigned int video_nr[] = {[0 ... (CX25821_MAXBOARDS - 1)] = UNSET };
36static unsigned int radio_nr[] = {[0 ... (CX25821_MAXBOARDS - 1)] = UNSET };
37 36
38module_param_array(video_nr, int, NULL, 0444); 37module_param_array(video_nr, int, NULL, 0444);
39module_param_array(radio_nr, int, NULL, 0444);
40 38
41MODULE_PARM_DESC(video_nr, "video device numbers"); 39MODULE_PARM_DESC(video_nr, "video device numbers");
42MODULE_PARM_DESC(radio_nr, "radio device numbers");
43 40
44static unsigned int video_debug = VIDEO_DEBUG; 41static unsigned int video_debug = VIDEO_DEBUG;
45module_param(video_debug, int, 0644); 42module_param(video_debug, int, 0644);
@@ -55,9 +52,6 @@ MODULE_PARM_DESC(vid_limit, "capture memory limit in megabytes");
55 52
56static void cx25821_init_controls(struct cx25821_dev *dev, int chan_num); 53static void cx25821_init_controls(struct cx25821_dev *dev, int chan_num);
57 54
58static const struct v4l2_file_operations video_fops;
59static const struct v4l2_ioctl_ops video_ioctl_ops;
60
61#define FORMAT_FLAGS_PACKED 0x01 55#define FORMAT_FLAGS_PACKED 0x01
62 56
63struct cx25821_fmt formats[] = { 57struct cx25821_fmt formats[] = {
@@ -411,111 +405,6 @@ int cx25821_video_irq(struct cx25821_dev *dev, int chan_num, u32 status)
411 return handled; 405 return handled;
412} 406}
413 407
414void cx25821_videoioctl_unregister(struct cx25821_dev *dev)
415{
416 if (dev->ioctl_dev) {
417 if (video_is_registered(dev->ioctl_dev))
418 video_unregister_device(dev->ioctl_dev);
419 else
420 video_device_release(dev->ioctl_dev);
421
422 dev->ioctl_dev = NULL;
423 }
424}
425
426void cx25821_video_unregister(struct cx25821_dev *dev, int chan_num)
427{
428 cx_clear(PCI_INT_MSK, 1);
429
430 if (dev->channels[chan_num].video_dev) {
431 if (video_is_registered(dev->channels[chan_num].video_dev))
432 video_unregister_device(
433 dev->channels[chan_num].video_dev);
434 else
435 video_device_release(
436 dev->channels[chan_num].video_dev);
437
438 dev->channels[chan_num].video_dev = NULL;
439
440 btcx_riscmem_free(dev->pci,
441 &dev->channels[chan_num].vidq.stopper);
442
443 pr_warn("device %d released!\n", chan_num);
444 }
445
446}
447
448int cx25821_video_register(struct cx25821_dev *dev)
449{
450 static const struct video_device cx25821_video_device = {
451 .name = "cx25821-video",
452 .fops = &video_fops,
453 .minor = -1,
454 .ioctl_ops = &video_ioctl_ops,
455 .tvnorms = CX25821_NORMS,
456 .current_norm = V4L2_STD_NTSC_M,
457 };
458 int err;
459 int i;
460
461 spin_lock_init(&dev->slock);
462
463 for (i = 0; i < VID_CHANNEL_NUM; ++i) {
464 if (i == SRAM_CH08) /* audio channel */
465 continue;
466
467 cx25821_init_controls(dev, i);
468
469 cx25821_risc_stopper(dev->pci, &dev->channels[i].vidq.stopper,
470 dev->channels[i].sram_channels->dma_ctl, 0x11, 0);
471
472 dev->channels[i].sram_channels = &cx25821_sram_channels[i];
473 dev->channels[i].video_dev = NULL;
474 dev->channels[i].resources = 0;
475
476 cx_write(dev->channels[i].sram_channels->int_stat, 0xffffffff);
477
478 INIT_LIST_HEAD(&dev->channels[i].vidq.active);
479 INIT_LIST_HEAD(&dev->channels[i].vidq.queued);
480
481 dev->channels[i].timeout_data.dev = dev;
482 dev->channels[i].timeout_data.channel =
483 &cx25821_sram_channels[i];
484 dev->channels[i].vidq.timeout.function = cx25821_vid_timeout;
485 dev->channels[i].vidq.timeout.data =
486 (unsigned long)&dev->channels[i].timeout_data;
487 init_timer(&dev->channels[i].vidq.timeout);
488
489 /* register v4l devices */
490 dev->channels[i].video_dev = cx25821_vdev_init(dev, dev->pci,
491 &cx25821_video_device, "video");
492
493 err = video_register_device(dev->channels[i].video_dev,
494 VFL_TYPE_GRABBER, video_nr[dev->nr]);
495
496 if (err < 0)
497 goto fail_unreg;
498
499 }
500
501 /* set PCI interrupt */
502 cx_set(PCI_INT_MSK, 0xff);
503
504 /* initial device configuration */
505 mutex_lock(&dev->lock);
506#ifdef TUNER_FLAG
507 dev->tvnorm = cx25821_video_device.current_norm;
508 cx25821_set_tvnorm(dev, dev->tvnorm);
509#endif
510 mutex_unlock(&dev->lock);
511
512 return 0;
513
514fail_unreg:
515 cx25821_video_unregister(dev, i);
516 return err;
517}
518
519int cx25821_buffer_setup(struct videobuf_queue *q, unsigned int *count, 408int cx25821_buffer_setup(struct videobuf_queue *q, unsigned int *count,
520 unsigned int *size) 409 unsigned int *size)
521{ 410{
@@ -1983,10 +1872,96 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = {
1983#endif 1872#endif
1984}; 1873};
1985 1874
1986struct video_device cx25821_videoioctl_template = { 1875static const struct video_device cx25821_video_device = {
1987 .name = "cx25821-videoioctl", 1876 .name = "cx25821-video",
1988 .fops = &video_fops, 1877 .fops = &video_fops,
1878 .minor = -1,
1989 .ioctl_ops = &video_ioctl_ops, 1879 .ioctl_ops = &video_ioctl_ops,
1990 .tvnorms = CX25821_NORMS, 1880 .tvnorms = CX25821_NORMS,
1991 .current_norm = V4L2_STD_NTSC_M, 1881 .current_norm = V4L2_STD_NTSC_M,
1992}; 1882};
1883
1884void cx25821_video_unregister(struct cx25821_dev *dev, int chan_num)
1885{
1886 cx_clear(PCI_INT_MSK, 1);
1887
1888 if (dev->channels[chan_num].video_dev) {
1889 if (video_is_registered(dev->channels[chan_num].video_dev))
1890 video_unregister_device(
1891 dev->channels[chan_num].video_dev);
1892 else
1893 video_device_release(
1894 dev->channels[chan_num].video_dev);
1895
1896 dev->channels[chan_num].video_dev = NULL;
1897
1898 btcx_riscmem_free(dev->pci,
1899 &dev->channels[chan_num].vidq.stopper);
1900
1901 pr_warn("device %d released!\n", chan_num);
1902 }
1903
1904}
1905
1906int cx25821_video_register(struct cx25821_dev *dev)
1907{
1908 int err;
1909 int i;
1910
1911 spin_lock_init(&dev->slock);
1912
1913 for (i = 0; i < VID_CHANNEL_NUM; ++i) {
1914 if (i == SRAM_CH08) /* audio channel */
1915 continue;
1916
1917 cx25821_init_controls(dev, i);
1918
1919 cx25821_risc_stopper(dev->pci, &dev->channels[i].vidq.stopper,
1920 dev->channels[i].sram_channels->dma_ctl, 0x11, 0);
1921
1922 dev->channels[i].sram_channels = &cx25821_sram_channels[i];
1923 dev->channels[i].video_dev = NULL;
1924 dev->channels[i].resources = 0;
1925
1926 cx_write(dev->channels[i].sram_channels->int_stat, 0xffffffff);
1927
1928 INIT_LIST_HEAD(&dev->channels[i].vidq.active);
1929 INIT_LIST_HEAD(&dev->channels[i].vidq.queued);
1930
1931 dev->channels[i].timeout_data.dev = dev;
1932 dev->channels[i].timeout_data.channel =
1933 &cx25821_sram_channels[i];
1934 dev->channels[i].vidq.timeout.function = cx25821_vid_timeout;
1935 dev->channels[i].vidq.timeout.data =
1936 (unsigned long)&dev->channels[i].timeout_data;
1937 init_timer(&dev->channels[i].vidq.timeout);
1938
1939 /* register v4l devices */
1940 dev->channels[i].video_dev = cx25821_vdev_init(dev, dev->pci,
1941 &cx25821_video_device, "video");
1942
1943 err = video_register_device(dev->channels[i].video_dev,
1944 VFL_TYPE_GRABBER, video_nr[dev->nr]);
1945
1946 if (err < 0)
1947 goto fail_unreg;
1948
1949 }
1950
1951 /* set PCI interrupt */
1952 cx_set(PCI_INT_MSK, 0xff);
1953
1954 /* initial device configuration */
1955 mutex_lock(&dev->lock);
1956#ifdef TUNER_FLAG
1957 dev->tvnorm = cx25821_video_device.current_norm;
1958 cx25821_set_tvnorm(dev, dev->tvnorm);
1959#endif
1960 mutex_unlock(&dev->lock);
1961
1962 return 0;
1963
1964fail_unreg:
1965 cx25821_video_unregister(dev, i);
1966 return err;
1967}
diff --git a/drivers/media/pci/cx25821/cx25821-video.h b/drivers/media/pci/cx25821/cx25821-video.h
index 11ba5eb93677..37cb0c1b2de0 100644
--- a/drivers/media/pci/cx25821/cx25821-video.h
+++ b/drivers/media/pci/cx25821/cx25821-video.h
@@ -76,7 +76,6 @@ extern struct sram_channel *channel7;
76extern struct sram_channel *channel9; 76extern struct sram_channel *channel9;
77extern struct sram_channel *channel10; 77extern struct sram_channel *channel10;
78extern struct sram_channel *channel11; 78extern struct sram_channel *channel11;
79extern struct video_device cx25821_videoioctl_template;
80/* extern const u32 *ctrl_classes[]; */ 79/* extern const u32 *ctrl_classes[]; */
81 80
82extern unsigned int vid_limit; 81extern unsigned int vid_limit;
diff --git a/drivers/media/pci/cx25821/cx25821.h b/drivers/media/pci/cx25821/cx25821.h
index 85693cdf0ee1..04c3cb0b6f42 100644
--- a/drivers/media/pci/cx25821/cx25821.h
+++ b/drivers/media/pci/cx25821/cx25821.h
@@ -80,7 +80,6 @@
80#define RESOURCE_VIDEO9 512 80#define RESOURCE_VIDEO9 512
81#define RESOURCE_VIDEO10 1024 81#define RESOURCE_VIDEO10 1024
82#define RESOURCE_VIDEO11 2048 82#define RESOURCE_VIDEO11 2048
83#define RESOURCE_VIDEO_IOCTL 4096
84 83
85#define BUFFER_TIMEOUT (HZ) /* 0.5 seconds */ 84#define BUFFER_TIMEOUT (HZ) /* 0.5 seconds */
86 85
@@ -125,7 +124,6 @@ struct cx25821_tvnorm {
125struct cx25821_fh { 124struct cx25821_fh {
126 struct cx25821_dev *dev; 125 struct cx25821_dev *dev;
127 enum v4l2_buf_type type; 126 enum v4l2_buf_type type;
128 int radio;
129 u32 resources; 127 u32 resources;
130 128
131 enum v4l2_priority prio; 129 enum v4l2_priority prio;
@@ -139,10 +137,7 @@ struct cx25821_fh {
139 struct cx25821_fmt *fmt; 137 struct cx25821_fmt *fmt;
140 unsigned int width, height; 138 unsigned int width, height;
141 int channel_id; 139 int channel_id;
142
143 /* vbi capture */
144 struct videobuf_queue vidq; 140 struct videobuf_queue vidq;
145 struct videobuf_queue vbiq;
146 141
147 /* H264 Encoder specifics ONLY */ 142 /* H264 Encoder specifics ONLY */
148 struct videobuf_queue mpegq; 143 struct videobuf_queue mpegq;
@@ -153,7 +148,6 @@ enum cx25821_itype {
153 CX25821_VMUX_COMPOSITE = 1, 148 CX25821_VMUX_COMPOSITE = 1,
154 CX25821_VMUX_SVIDEO, 149 CX25821_VMUX_SVIDEO,
155 CX25821_VMUX_DEBUG, 150 CX25821_VMUX_DEBUG,
156 CX25821_RADIO,
157}; 151};
158 152
159enum cx25821_src_sel_type { 153enum cx25821_src_sel_type {
@@ -191,9 +185,7 @@ struct cx25821_board {
191 enum port portb; 185 enum port portb;
192 enum port portc; 186 enum port portc;
193 unsigned int tuner_type; 187 unsigned int tuner_type;
194 unsigned int radio_type;
195 unsigned char tuner_addr; 188 unsigned char tuner_addr;
196 unsigned char radio_addr;
197 189
198 u32 clk_freq; 190 u32 clk_freq;
199 struct cx25821_input input[CX25821_NR_INPUT]; 191 struct cx25821_input input[CX25821_NR_INPUT];
@@ -295,9 +287,6 @@ struct cx25821_dev {
295 v4l2_std_id tvnorm; 287 v4l2_std_id tvnorm;
296 unsigned int tuner_type; 288 unsigned int tuner_type;
297 unsigned char tuner_addr; 289 unsigned char tuner_addr;
298 unsigned int radio_type;
299 unsigned char radio_addr;
300 unsigned int has_radio;
301 unsigned int videc_type; 290 unsigned int videc_type;
302 unsigned char videc_addr; 291 unsigned char videc_addr;
303 unsigned short _max_num_decoders; 292 unsigned short _max_num_decoders;
@@ -326,9 +315,6 @@ struct cx25821_dev {
326 315
327 /* V4l */ 316 /* V4l */
328 u32 freq; 317 u32 freq;
329 struct video_device *vbi_dev;
330 struct video_device *radio_dev;
331 struct video_device *ioctl_dev;
332 318
333 spinlock_t slock; 319 spinlock_t slock;
334 320
@@ -467,7 +453,6 @@ extern struct cx25821_subid cx25821_subids[];
467#define VID_UPSTREAM_SRAM_CHANNEL_I SRAM_CH09 453#define VID_UPSTREAM_SRAM_CHANNEL_I SRAM_CH09
468#define VID_UPSTREAM_SRAM_CHANNEL_J SRAM_CH10 454#define VID_UPSTREAM_SRAM_CHANNEL_J SRAM_CH10
469#define AUDIO_UPSTREAM_SRAM_CHANNEL_B SRAM_CH11 455#define AUDIO_UPSTREAM_SRAM_CHANNEL_B SRAM_CH11
470#define VIDEO_IOCTL_CH 11
471 456
472struct sram_channel { 457struct sram_channel {
473 char *name; 458 char *name;
@@ -607,7 +592,6 @@ extern int cx25821_sram_channel_setup_upstream(struct cx25821_dev *dev,
607 unsigned int bpl, u32 risc); 592 unsigned int bpl, u32 risc);
608extern void cx25821_set_pixel_format(struct cx25821_dev *dev, int channel, 593extern void cx25821_set_pixel_format(struct cx25821_dev *dev, int channel,
609 u32 format); 594 u32 format);
610extern void cx25821_videoioctl_unregister(struct cx25821_dev *dev);
611extern struct video_device *cx25821_vdev_init(struct cx25821_dev *dev, 595extern struct video_device *cx25821_vdev_init(struct cx25821_dev *dev,
612 struct pci_dev *pci, 596 struct pci_dev *pci,
613 const struct video_device *template, 597 const struct video_device *template,