3 * device driver for philips saa7134 based TV cards
6 * (c) 2001-03 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 #include <linux/config.h>
24 #include <linux/init.h>
25 #include <linux/list.h>
26 #include <linux/module.h>
27 #include <linux/moduleparam.h>
28 #include <linux/kernel.h>
29 #include <linux/slab.h>
30 #include <linux/kmod.h>
31 #include <linux/sound.h>
32 #include <linux/interrupt.h>
33 #include <linux/delay.h>
35 #include "saa7134-reg.h"
38 MODULE_DESCRIPTION("v4l2 driver module for saa7130/34 based TV cards");
39 MODULE_AUTHOR("Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]");
40 MODULE_LICENSE("GPL");
42 /* ------------------------------------------------------------------ */
44 static unsigned int irq_debug = 0;
45 module_param(irq_debug, int, 0644);
46 MODULE_PARM_DESC(irq_debug,"enable debug messages [IRQ handler]");
48 static unsigned int core_debug = 0;
49 module_param(core_debug, int, 0644);
50 MODULE_PARM_DESC(core_debug,"enable debug messages [core]");
52 static unsigned int gpio_tracking = 0;
53 module_param(gpio_tracking, int, 0644);
54 MODULE_PARM_DESC(gpio_tracking,"enable debug messages [gpio]");
56 static unsigned int alsa = 0;
57 module_param(alsa, int, 0644);
58 MODULE_PARM_DESC(alsa,"enable ALSA DMA sound [dmasound]");
60 static unsigned int oss = 0;
61 module_param(oss, int, 0644);
62 MODULE_PARM_DESC(oss,"enable OSS DMA sound [dmasound]");
64 static unsigned int latency = UNSET;
65 module_param(latency, int, 0444);
66 MODULE_PARM_DESC(latency,"pci latency timer");
68 static unsigned int video_nr[] = {[0 ... (SAA7134_MAXBOARDS - 1)] = UNSET };
69 static unsigned int vbi_nr[] = {[0 ... (SAA7134_MAXBOARDS - 1)] = UNSET };
70 static unsigned int radio_nr[] = {[0 ... (SAA7134_MAXBOARDS - 1)] = UNSET };
71 static unsigned int tuner[] = {[0 ... (SAA7134_MAXBOARDS - 1)] = UNSET };
72 static unsigned int card[] = {[0 ... (SAA7134_MAXBOARDS - 1)] = UNSET };
74 module_param_array(video_nr, int, NULL, 0444);
75 module_param_array(vbi_nr, int, NULL, 0444);
76 module_param_array(radio_nr, int, NULL, 0444);
77 module_param_array(tuner, int, NULL, 0444);
78 module_param_array(card, int, NULL, 0444);
80 MODULE_PARM_DESC(video_nr, "video device number");
81 MODULE_PARM_DESC(vbi_nr, "vbi device number");
82 MODULE_PARM_DESC(radio_nr, "radio device number");
83 MODULE_PARM_DESC(tuner, "tuner type");
84 MODULE_PARM_DESC(card, "card type");
86 static DECLARE_MUTEX(devlist_lock);
87 LIST_HEAD(saa7134_devlist);
88 static LIST_HEAD(mops_list);
89 static unsigned int saa7134_devcount;
91 int (*dmasound_init)(struct saa7134_dev *dev);
92 int (*dmasound_exit)(struct saa7134_dev *dev);
94 #define dprintk(fmt, arg...) if (core_debug) \
95 printk(KERN_DEBUG "%s/core: " fmt, dev->name , ## arg)
97 /* ------------------------------------------------------------------ */
98 /* debug help functions */
100 static const char *v4l1_ioctls[] = {
101 "0", "GCAP", "GCHAN", "SCHAN", "GTUNER", "STUNER", "GPICT", "SPICT",
102 "CCAPTURE", "GWIN", "SWIN", "GFBUF", "SFBUF", "KEY", "GFREQ",
103 "SFREQ", "GAUDIO", "SAUDIO", "SYNC", "MCAPTURE", "GMBUF", "GUNIT",
104 "GCAPTURE", "SCAPTURE", "SPLAYMODE", "SWRITEMODE", "GPLAYINFO",
105 "SMICROCODE", "GVBIFMT", "SVBIFMT" };
106 #define V4L1_IOCTLS ARRAY_SIZE(v4l1_ioctls)
108 static const char *v4l2_ioctls[] = {
109 "QUERYCAP", "1", "ENUM_PIXFMT", "ENUM_FBUFFMT", "G_FMT", "S_FMT",
110 "G_COMP", "S_COMP", "REQBUFS", "QUERYBUF", "G_FBUF", "S_FBUF",
111 "G_WIN", "S_WIN", "PREVIEW", "QBUF", "16", "DQBUF", "STREAMON",
112 "STREAMOFF", "G_PERF", "G_PARM", "S_PARM", "G_STD", "S_STD",
113 "ENUMSTD", "ENUMINPUT", "G_CTRL", "S_CTRL", "G_TUNER", "S_TUNER",
114 "G_FREQ", "S_FREQ", "G_AUDIO", "S_AUDIO", "35", "QUERYCTRL",
115 "QUERYMENU", "G_INPUT", "S_INPUT", "ENUMCVT", "41", "42", "43",
116 "44", "45", "G_OUTPUT", "S_OUTPUT", "ENUMOUTPUT", "G_AUDOUT",
117 "S_AUDOUT", "ENUMFX", "G_EFFECT", "S_EFFECT", "G_MODULATOR",
120 #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls)
122 static const char *osspcm_ioctls[] = {
123 "RESET", "SYNC", "SPEED", "STEREO", "GETBLKSIZE", "SETFMT",
124 "CHANNELS", "?", "POST", "SUBDIVIDE", "SETFRAGMENT", "GETFMTS",
125 "GETOSPACE", "GETISPACE", "NONBLOCK", "GETCAPS", "GET/SETTRIGGER",
126 "GETIPTR", "GETOPTR", "MAPINBUF", "MAPOUTBUF", "SETSYNCRO",
127 "SETDUPLEX", "GETODELAY"
129 #define OSSPCM_IOCTLS ARRAY_SIZE(v4l2_ioctls)
131 void saa7134_print_ioctl(char *name, unsigned int cmd)
135 switch (_IOC_DIR(cmd)) {
136 case _IOC_NONE: dir = "--"; break;
137 case _IOC_READ: dir = "r-"; break;
138 case _IOC_WRITE: dir = "-w"; break;
139 case _IOC_READ | _IOC_WRITE: dir = "rw"; break;
140 default: dir = "??"; break;
142 switch (_IOC_TYPE(cmd)) {
144 printk(KERN_DEBUG "%s: ioctl 0x%08x (v4l1, %s, VIDIOC%s)\n",
145 name, cmd, dir, (_IOC_NR(cmd) < V4L1_IOCTLS) ?
146 v4l1_ioctls[_IOC_NR(cmd)] : "???");
149 printk(KERN_DEBUG "%s: ioctl 0x%08x (v4l2, %s, VIDIOC_%s)\n",
150 name, cmd, dir, (_IOC_NR(cmd) < V4L2_IOCTLS) ?
151 v4l2_ioctls[_IOC_NR(cmd)] : "???");
154 printk(KERN_DEBUG "%s: ioctl 0x%08x (oss dsp, %s, SNDCTL_DSP_%s)\n",
155 name, cmd, dir, (_IOC_NR(cmd) < OSSPCM_IOCTLS) ?
156 osspcm_ioctls[_IOC_NR(cmd)] : "???");
159 printk(KERN_DEBUG "%s: ioctl 0x%08x (oss mixer, %s, #%d)\n",
160 name, cmd, dir, _IOC_NR(cmd));
163 printk(KERN_DEBUG "%s: ioctl 0x%08x (???, %s, #%d)\n",
164 name, cmd, dir, _IOC_NR(cmd));
168 void saa7134_track_gpio(struct saa7134_dev *dev, char *msg)
170 unsigned long mode,status;
174 /* rising SAA7134_GPIO_GPRESCAN reads the status */
175 saa_andorb(SAA7134_GPIO_GPMODE3,SAA7134_GPIO_GPRESCAN,0);
176 saa_andorb(SAA7134_GPIO_GPMODE3,SAA7134_GPIO_GPRESCAN,SAA7134_GPIO_GPRESCAN);
177 mode = saa_readl(SAA7134_GPIO_GPMODE0 >> 2) & 0xfffffff;
178 status = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2) & 0xfffffff;
180 "%s: gpio: mode=0x%07lx in=0x%07lx out=0x%07lx [%s]\n",
181 dev->name, mode, (~mode) & status, mode & status, msg);
184 /* ------------------------------------------------------------------ */
187 /* ----------------------------------------------------------- */
188 /* delayed request_module */
190 #if defined(CONFIG_MODULES) && defined(MODULE)
191 static int need_empress;
193 static int need_alsa;
196 static int pending_call(struct notifier_block *self, unsigned long state,
199 if (module != THIS_MODULE || state != MODULE_STATE_LIVE)
203 request_module("saa7134-empress");
205 request_module("saa7134-dvb");
207 request_module("saa7134-alsa");
209 request_module("saa7134-oss");
213 static int pending_registered;
214 static struct notifier_block pending_notifier = {
215 .notifier_call = pending_call,
218 static void request_module_depend(char *name, int *flag)
221 switch (THIS_MODULE->state) {
222 case MODULE_STATE_COMING:
223 if (!pending_registered) {
224 err = register_module_notifier(&pending_notifier);
225 pending_registered = 1;
229 case MODULE_STATE_LIVE:
230 request_module(name);
239 #define request_module_depend(name,flag)
240 #endif /* CONFIG_MODULES */
242 /* ------------------------------------------------------------------ */
244 /* nr of (saa7134-)pages for the given buffer size */
245 static int saa7134_buffer_pages(int size)
247 size = PAGE_ALIGN(size);
248 size += PAGE_SIZE; /* for non-page-aligned buffers */
253 /* calc max # of buffers from size (must not exceed the 4MB virtual
254 * address space per DMA channel) */
255 int saa7134_buffer_count(unsigned int size, unsigned int count)
257 unsigned int maxcount;
259 maxcount = 1024 / saa7134_buffer_pages(size);
260 if (count > maxcount)
265 int saa7134_buffer_startpage(struct saa7134_buf *buf)
267 return saa7134_buffer_pages(buf->vb.bsize) * buf->vb.i;
270 unsigned long saa7134_buffer_base(struct saa7134_buf *buf)
274 base = saa7134_buffer_startpage(buf) * 4096;
275 base += buf->vb.dma.sglist[0].offset;
279 /* ------------------------------------------------------------------ */
281 int saa7134_pgtable_alloc(struct pci_dev *pci, struct saa7134_pgtable *pt)
286 cpu = pci_alloc_consistent(pci, SAA7134_PGTABLE_SIZE, &dma_addr);
289 pt->size = SAA7134_PGTABLE_SIZE;
295 int saa7134_pgtable_build(struct pci_dev *pci, struct saa7134_pgtable *pt,
296 struct scatterlist *list, unsigned int length,
297 unsigned int startpage)
302 BUG_ON(NULL == pt || NULL == pt->cpu);
304 ptr = pt->cpu + startpage;
305 for (i = 0; i < length; i++, list++)
306 for (p = 0; p * 4096 < list->length; p++, ptr++)
307 *ptr = cpu_to_le32(sg_dma_address(list) - list->offset);
311 void saa7134_pgtable_free(struct pci_dev *pci, struct saa7134_pgtable *pt)
315 pci_free_consistent(pci, pt->size, pt->cpu, pt->dma);
319 /* ------------------------------------------------------------------ */
321 void saa7134_dma_free(struct saa7134_dev *dev,struct saa7134_buf *buf)
326 videobuf_waiton(&buf->vb,0,0);
327 videobuf_dma_pci_unmap(dev->pci, &buf->vb.dma);
328 videobuf_dma_free(&buf->vb.dma);
329 buf->vb.state = STATE_NEEDS_INIT;
332 /* ------------------------------------------------------------------ */
334 int saa7134_buffer_queue(struct saa7134_dev *dev,
335 struct saa7134_dmaqueue *q,
336 struct saa7134_buf *buf)
338 struct saa7134_buf *next = NULL;
340 assert_spin_locked(&dev->slock);
341 dprintk("buffer_queue %p\n",buf);
342 if (NULL == q->curr) {
345 buf->activate(dev,buf,NULL);
346 } else if (list_empty(&q->queue)) {
347 list_add_tail(&buf->vb.queue,&q->queue);
348 buf->vb.state = STATE_QUEUED;
350 next = list_entry(q->queue.next,struct saa7134_buf,
353 buf->activate(dev,buf,next);
356 list_add_tail(&buf->vb.queue,&q->queue);
357 buf->vb.state = STATE_QUEUED;
362 void saa7134_buffer_finish(struct saa7134_dev *dev,
363 struct saa7134_dmaqueue *q,
366 assert_spin_locked(&dev->slock);
367 dprintk("buffer_finish %p\n",q->curr);
369 /* finish current buffer */
370 q->curr->vb.state = state;
371 do_gettimeofday(&q->curr->vb.ts);
372 wake_up(&q->curr->vb.done);
376 void saa7134_buffer_next(struct saa7134_dev *dev,
377 struct saa7134_dmaqueue *q)
379 struct saa7134_buf *buf,*next = NULL;
381 assert_spin_locked(&dev->slock);
382 BUG_ON(NULL != q->curr);
384 if (!list_empty(&q->queue)) {
385 /* activate next one from queue */
386 buf = list_entry(q->queue.next,struct saa7134_buf,vb.queue);
387 dprintk("buffer_next %p [prev=%p/next=%p]\n",
388 buf,q->queue.prev,q->queue.next);
389 list_del(&buf->vb.queue);
390 if (!list_empty(&q->queue))
391 next = list_entry(q->queue.next,struct saa7134_buf,
394 buf->activate(dev,buf,next);
395 dprintk("buffer_next #2 prev=%p/next=%p\n",
396 q->queue.prev,q->queue.next);
398 /* nothing to do -- just stop DMA */
399 dprintk("buffer_next %p\n",NULL);
400 saa7134_set_dmabits(dev);
401 del_timer(&q->timeout);
405 void saa7134_buffer_timeout(unsigned long data)
407 struct saa7134_dmaqueue *q = (struct saa7134_dmaqueue*)data;
408 struct saa7134_dev *dev = q->dev;
411 spin_lock_irqsave(&dev->slock,flags);
413 /* try to reset the hardware (SWRST) */
414 saa_writeb(SAA7134_REGION_ENABLE, 0x00);
415 saa_writeb(SAA7134_REGION_ENABLE, 0x80);
416 saa_writeb(SAA7134_REGION_ENABLE, 0x00);
418 /* flag current buffer as failed,
419 try to start over with the next one. */
421 dprintk("timeout on %p\n",q->curr);
422 saa7134_buffer_finish(dev,q,STATE_ERROR);
424 saa7134_buffer_next(dev,q);
425 spin_unlock_irqrestore(&dev->slock,flags);
428 /* ------------------------------------------------------------------ */
430 int saa7134_set_dmabits(struct saa7134_dev *dev)
432 u32 split, task=0, ctrl=0, irq=0;
433 enum v4l2_field cap = V4L2_FIELD_ANY;
434 enum v4l2_field ov = V4L2_FIELD_ANY;
436 assert_spin_locked(&dev->slock);
438 /* video capture -- dma 0 + video task A */
439 if (dev->video_q.curr) {
441 ctrl |= SAA7134_MAIN_CTRL_TE0;
442 irq |= SAA7134_IRQ1_INTE_RA0_1 |
443 SAA7134_IRQ1_INTE_RA0_0;
444 cap = dev->video_q.curr->vb.field;
447 /* video capture -- dma 1+2 (planar modes) */
448 if (dev->video_q.curr &&
449 dev->video_q.curr->fmt->planar) {
450 ctrl |= SAA7134_MAIN_CTRL_TE4 |
451 SAA7134_MAIN_CTRL_TE5;
454 /* screen overlay -- dma 0 + video task B */
457 ctrl |= SAA7134_MAIN_CTRL_TE1;
461 /* vbi capture -- dma 0 + vbi task A+B */
462 if (dev->vbi_q.curr) {
464 ctrl |= SAA7134_MAIN_CTRL_TE2 |
465 SAA7134_MAIN_CTRL_TE3;
466 irq |= SAA7134_IRQ1_INTE_RA0_7 |
467 SAA7134_IRQ1_INTE_RA0_6 |
468 SAA7134_IRQ1_INTE_RA0_5 |
469 SAA7134_IRQ1_INTE_RA0_4;
472 /* audio capture -- dma 3 */
473 if (dev->dmasound.dma_running) {
474 ctrl |= SAA7134_MAIN_CTRL_TE6;
475 irq |= SAA7134_IRQ1_INTE_RA3_1 |
476 SAA7134_IRQ1_INTE_RA3_0;
479 /* TS capture -- dma 5 */
480 if (dev->ts_q.curr) {
481 ctrl |= SAA7134_MAIN_CTRL_TE5;
482 irq |= SAA7134_IRQ1_INTE_RA2_3 |
483 SAA7134_IRQ1_INTE_RA2_2 |
484 SAA7134_IRQ1_INTE_RA2_1 |
485 SAA7134_IRQ1_INTE_RA2_0;
488 /* set task conditions + field handling */
489 if (V4L2_FIELD_HAS_BOTH(cap) || V4L2_FIELD_HAS_BOTH(ov) || cap == ov) {
490 /* default config -- use full frames */
491 saa_writeb(SAA7134_TASK_CONDITIONS(TASK_A), 0x0d);
492 saa_writeb(SAA7134_TASK_CONDITIONS(TASK_B), 0x0d);
493 saa_writeb(SAA7134_FIELD_HANDLING(TASK_A), 0x02);
494 saa_writeb(SAA7134_FIELD_HANDLING(TASK_B), 0x02);
497 /* split fields between tasks */
498 if (V4L2_FIELD_TOP == cap) {
499 /* odd A, even B, repeat */
500 saa_writeb(SAA7134_TASK_CONDITIONS(TASK_A), 0x0d);
501 saa_writeb(SAA7134_TASK_CONDITIONS(TASK_B), 0x0e);
503 /* odd B, even A, repeat */
504 saa_writeb(SAA7134_TASK_CONDITIONS(TASK_A), 0x0e);
505 saa_writeb(SAA7134_TASK_CONDITIONS(TASK_B), 0x0d);
507 saa_writeb(SAA7134_FIELD_HANDLING(TASK_A), 0x01);
508 saa_writeb(SAA7134_FIELD_HANDLING(TASK_B), 0x01);
513 saa_writeb(SAA7134_REGION_ENABLE, task);
514 saa_writel(SAA7134_IRQ1, irq);
515 saa_andorl(SAA7134_MAIN_CTRL,
516 SAA7134_MAIN_CTRL_TE0 |
517 SAA7134_MAIN_CTRL_TE1 |
518 SAA7134_MAIN_CTRL_TE2 |
519 SAA7134_MAIN_CTRL_TE3 |
520 SAA7134_MAIN_CTRL_TE4 |
521 SAA7134_MAIN_CTRL_TE5 |
522 SAA7134_MAIN_CTRL_TE6,
524 dprintk("dmabits: task=0x%02x ctrl=0x%02x irq=0x%x split=%s\n",
525 task, ctrl, irq, split ? "no" : "yes");
530 /* ------------------------------------------------------------------ */
531 /* IRQ handler + helpers */
533 static char *irqbits[] = {
534 "DONE_RA0", "DONE_RA1", "DONE_RA2", "DONE_RA3",
535 "AR", "PE", "PWR_ON", "RDCAP", "INTL", "FIDT", "MMC",
536 "TRIG_ERR", "CONF_ERR", "LOAD_ERR",
537 "GPIO16?", "GPIO18", "GPIO22", "GPIO23"
539 #define IRQBITS ARRAY_SIZE(irqbits)
541 static void print_irqstatus(struct saa7134_dev *dev, int loop,
542 unsigned long report, unsigned long status)
546 printk(KERN_DEBUG "%s/irq[%d,%ld]: r=0x%lx s=0x%02lx",
547 dev->name,loop,jiffies,report,status);
548 for (i = 0; i < IRQBITS; i++) {
549 if (!(report & (1 << i)))
551 printk(" %s",irqbits[i]);
553 if (report & SAA7134_IRQ_REPORT_DONE_RA0) {
554 printk(" | RA0=%s,%s,%s,%ld",
555 (status & 0x40) ? "vbi" : "video",
556 (status & 0x20) ? "b" : "a",
557 (status & 0x10) ? "odd" : "even",
563 static irqreturn_t saa7134_irq(int irq, void *dev_id, struct pt_regs *regs)
565 struct saa7134_dev *dev = (struct saa7134_dev*) dev_id;
566 unsigned long report,status;
567 int loop, handled = 0;
569 for (loop = 0; loop < 10; loop++) {
570 report = saa_readl(SAA7134_IRQ_REPORT);
571 status = saa_readl(SAA7134_IRQ_STATUS);
574 printk(KERN_DEBUG "%s/irq: no (more) work\n",
579 /* If dmasound support is active and we get a sound report, exit
580 and let the saa7134-alsa/oss module deal with it */
582 if ((report & SAA7134_IRQ_REPORT_DONE_RA3) &&
583 (dev->dmasound.priv_data != NULL) )
586 printk(KERN_DEBUG "%s/irq: ignoring interrupt for DMA sound\n",
592 saa_writel(SAA7134_IRQ_REPORT,report);
594 print_irqstatus(dev,loop,report,status);
597 if (report & SAA7134_IRQ_REPORT_RDCAP /* _INTL */)
598 saa7134_irq_video_intl(dev);
600 if ((report & SAA7134_IRQ_REPORT_DONE_RA0) &&
601 (status & 0x60) == 0)
602 saa7134_irq_video_done(dev,status);
604 if ((report & SAA7134_IRQ_REPORT_DONE_RA0) &&
605 (status & 0x40) == 0x40)
606 saa7134_irq_vbi_done(dev,status);
608 if ((report & SAA7134_IRQ_REPORT_DONE_RA2) &&
610 saa7134_irq_ts_done(dev,status);
612 if ((report & (SAA7134_IRQ_REPORT_GPIO16 |
613 SAA7134_IRQ_REPORT_GPIO18)) &&
615 saa7134_input_irq(dev);
620 print_irqstatus(dev,loop,report,status);
621 if (report & SAA7134_IRQ_REPORT_PE) {
622 /* disable all parity error */
623 printk(KERN_WARNING "%s/irq: looping -- "
624 "clearing PE (parity error!) enable bit\n",dev->name);
625 saa_clearl(SAA7134_IRQ2,SAA7134_IRQ2_INTE_PE);
626 } else if (report & (SAA7134_IRQ_REPORT_GPIO16 |
627 SAA7134_IRQ_REPORT_GPIO18)) {
628 /* disable gpio IRQs */
629 printk(KERN_WARNING "%s/irq: looping -- "
630 "clearing GPIO enable bits\n",dev->name);
631 saa_clearl(SAA7134_IRQ2, (SAA7134_IRQ2_INTE_GPIO16 |
632 SAA7134_IRQ2_INTE_GPIO18));
634 /* disable all irqs */
635 printk(KERN_WARNING "%s/irq: looping -- "
636 "clearing all enable bits\n",dev->name);
637 saa_writel(SAA7134_IRQ1,0);
638 saa_writel(SAA7134_IRQ2,0);
643 return IRQ_RETVAL(handled);
646 /* ------------------------------------------------------------------ */
648 /* early init (no i2c, no irq) */
649 static int saa7134_hwinit1(struct saa7134_dev *dev)
651 dprintk("hwinit1\n");
653 saa_writel(SAA7134_IRQ1, 0);
654 saa_writel(SAA7134_IRQ2, 0);
655 init_MUTEX(&dev->lock);
656 spin_lock_init(&dev->slock);
658 saa7134_track_gpio(dev,"pre-init");
659 saa7134_video_init1(dev);
660 saa7134_vbi_init1(dev);
661 if (card_has_mpeg(dev))
662 saa7134_ts_init1(dev);
663 saa7134_input_init1(dev);
665 /* RAM FIFO config */
666 saa_writel(SAA7134_FIFO_SIZE, 0x08070503);
667 saa_writel(SAA7134_THRESHOULD,0x02020202);
669 /* enable audio + video processing */
670 saa_writel(SAA7134_MAIN_CTRL,
671 SAA7134_MAIN_CTRL_VPLLE |
672 SAA7134_MAIN_CTRL_APLLE |
673 SAA7134_MAIN_CTRL_EXOSC |
674 SAA7134_MAIN_CTRL_EVFE1 |
675 SAA7134_MAIN_CTRL_EVFE2 |
676 SAA7134_MAIN_CTRL_ESFE |
677 SAA7134_MAIN_CTRL_EBDAC);
680 * Initialize OSS _after_ enabling audio clock PLL and audio processing.
681 * OSS initialization writes to registers via the audio DSP; these
682 * writes will fail unless the audio clock has been started. At worst,
683 * audio will not work.
686 /* enable peripheral devices */
687 saa_writeb(SAA7134_SPECIAL_MODE, 0x01);
689 /* set vertical line numbering start (vbi needs this) */
690 saa_writeb(SAA7134_SOURCE_TIMING2, 0x20);
695 /* late init (with i2c + irq) */
696 static int saa7134_hwinit2(struct saa7134_dev *dev)
698 unsigned int irq2_mask;
699 dprintk("hwinit2\n");
701 saa7134_video_init2(dev);
702 saa7134_tvaudio_init2(dev);
706 SAA7134_IRQ2_INTE_DEC3 |
707 SAA7134_IRQ2_INTE_DEC2 |
708 SAA7134_IRQ2_INTE_DEC1 |
709 SAA7134_IRQ2_INTE_DEC0 |
710 SAA7134_IRQ2_INTE_PE |
711 SAA7134_IRQ2_INTE_AR;
713 if (dev->has_remote == SAA7134_REMOTE_GPIO)
714 irq2_mask |= (SAA7134_IRQ2_INTE_GPIO18 |
715 SAA7134_IRQ2_INTE_GPIO18A |
716 SAA7134_IRQ2_INTE_GPIO16 );
718 saa_writel(SAA7134_IRQ1, 0);
719 saa_writel(SAA7134_IRQ2, irq2_mask);
725 static int saa7134_hwfini(struct saa7134_dev *dev)
729 if (card_has_mpeg(dev))
730 saa7134_ts_fini(dev);
731 saa7134_input_fini(dev);
732 saa7134_vbi_fini(dev);
733 saa7134_video_fini(dev);
734 saa7134_tvaudio_fini(dev);
738 static void __devinit must_configure_manually(void)
744 "saa7134: Congratulations! Your TV card vendor saved a few\n"
745 "saa7134: cents for a eeprom, thus your pci board has no\n"
746 "saa7134: subsystem ID and I can't identify it automatically\n"
748 "saa7134: I feel better now. Ok, here are the good news:\n"
749 "saa7134: You can use the card=<nr> insmod option to specify\n"
750 "saa7134: which board do you have. The list:\n");
751 for (i = 0; i < saa7134_bcount; i++) {
752 printk(KERN_WARNING "saa7134: card=%d -> %-40.40s",
753 i,saa7134_boards[i].name);
754 for (p = 0; saa7134_pci_tbl[p].driver_data; p++) {
755 if (saa7134_pci_tbl[p].driver_data != i)
758 saa7134_pci_tbl[p].subvendor,
759 saa7134_pci_tbl[p].subdevice);
765 static struct video_device *vdev_init(struct saa7134_dev *dev,
766 struct video_device *template,
769 struct video_device *vfd;
771 vfd = video_device_alloc();
776 vfd->dev = &dev->pci->dev;
777 vfd->release = video_device_release;
778 snprintf(vfd->name, sizeof(vfd->name), "%s %s (%s)",
779 dev->name, type, saa7134_boards[dev->board].name);
783 static void saa7134_unregister_video(struct saa7134_dev *dev)
785 if (dev->video_dev) {
786 if (-1 != dev->video_dev->minor)
787 video_unregister_device(dev->video_dev);
789 video_device_release(dev->video_dev);
790 dev->video_dev = NULL;
793 if (-1 != dev->vbi_dev->minor)
794 video_unregister_device(dev->vbi_dev);
796 video_device_release(dev->vbi_dev);
799 if (dev->radio_dev) {
800 if (-1 != dev->radio_dev->minor)
801 video_unregister_device(dev->radio_dev);
803 video_device_release(dev->radio_dev);
804 dev->radio_dev = NULL;
808 static void mpeg_ops_attach(struct saa7134_mpeg_ops *ops,
809 struct saa7134_dev *dev)
813 if (NULL != dev->mops)
815 if (saa7134_boards[dev->board].mpeg != ops->type)
817 err = ops->init(dev);
823 static void mpeg_ops_detach(struct saa7134_mpeg_ops *ops,
824 struct saa7134_dev *dev)
826 if (NULL == dev->mops)
828 if (dev->mops != ops)
830 dev->mops->fini(dev);
834 static int __devinit saa7134_initdev(struct pci_dev *pci_dev,
835 const struct pci_device_id *pci_id)
837 struct saa7134_dev *dev;
838 struct list_head *item;
839 struct saa7134_mpeg_ops *mops;
842 dev = kmalloc(sizeof(*dev),GFP_KERNEL);
845 memset(dev,0,sizeof(*dev));
849 if (pci_enable_device(pci_dev)) {
854 dev->nr = saa7134_devcount;
855 sprintf(dev->name,"saa%x[%d]",pci_dev->device,dev->nr);
858 if (pci_pci_problems) {
859 if (pci_pci_problems & PCIPCI_TRITON)
860 printk(KERN_INFO "%s: quirk: PCIPCI_TRITON\n", dev->name);
861 if (pci_pci_problems & PCIPCI_NATOMA)
862 printk(KERN_INFO "%s: quirk: PCIPCI_NATOMA\n", dev->name);
863 if (pci_pci_problems & PCIPCI_VIAETBF)
864 printk(KERN_INFO "%s: quirk: PCIPCI_VIAETBF\n", dev->name);
865 if (pci_pci_problems & PCIPCI_VSFX)
866 printk(KERN_INFO "%s: quirk: PCIPCI_VSFX\n",dev->name);
867 #ifdef PCIPCI_ALIMAGIK
868 if (pci_pci_problems & PCIPCI_ALIMAGIK) {
869 printk(KERN_INFO "%s: quirk: PCIPCI_ALIMAGIK -- latency fixup\n",
875 if (UNSET != latency) {
876 printk(KERN_INFO "%s: setting pci latency timer to %d\n",
878 pci_write_config_byte(pci_dev, PCI_LATENCY_TIMER, latency);
882 pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &dev->pci_rev);
883 pci_read_config_byte(pci_dev, PCI_LATENCY_TIMER, &dev->pci_lat);
884 printk(KERN_INFO "%s: found at %s, rev: %d, irq: %d, "
885 "latency: %d, mmio: 0x%lx\n", dev->name,
886 pci_name(pci_dev), dev->pci_rev, pci_dev->irq,
887 dev->pci_lat,pci_resource_start(pci_dev,0));
888 pci_set_master(pci_dev);
889 if (!pci_dma_supported(pci_dev,0xffffffff)) {
890 printk("%s: Oops: no 32bit PCI DMA ???\n",dev->name);
896 dev->board = pci_id->driver_data;
897 if (card[dev->nr] >= 0 &&
898 card[dev->nr] < saa7134_bcount)
899 dev->board = card[dev->nr];
900 if (SAA7134_BOARD_NOAUTO == dev->board) {
901 must_configure_manually();
902 dev->board = SAA7134_BOARD_UNKNOWN;
904 dev->tuner_type = saa7134_boards[dev->board].tuner_type;
905 dev->tda9887_conf = saa7134_boards[dev->board].tda9887_conf;
906 if (UNSET != tuner[dev->nr])
907 dev->tuner_type = tuner[dev->nr];
908 printk(KERN_INFO "%s: subsystem: %04x:%04x, board: %s [card=%d,%s]\n",
909 dev->name,pci_dev->subsystem_vendor,
910 pci_dev->subsystem_device,saa7134_boards[dev->board].name,
911 dev->board, card[dev->nr] == dev->board ?
912 "insmod option" : "autodetected");
915 if (!request_mem_region(pci_resource_start(pci_dev,0),
916 pci_resource_len(pci_dev,0),
919 printk(KERN_ERR "%s: can't get MMIO memory @ 0x%lx\n",
920 dev->name,pci_resource_start(pci_dev,0));
923 dev->lmmio = ioremap(pci_resource_start(pci_dev,0), 0x1000);
924 dev->bmmio = (__u8 __iomem *)dev->lmmio;
925 if (NULL == dev->lmmio) {
927 printk(KERN_ERR "%s: can't ioremap() MMIO memory\n",
932 /* initialize hardware #1 */
933 saa7134_board_init1(dev);
934 saa7134_hwinit1(dev);
937 err = request_irq(pci_dev->irq, saa7134_irq,
938 SA_SHIRQ | SA_INTERRUPT, dev->name, dev);
940 printk(KERN_ERR "%s: can't get IRQ %d\n",
941 dev->name,pci_dev->irq);
945 /* wait a bit, register i2c bus */
947 saa7134_i2c_register(dev);
949 /* initialize hardware #2 */
950 saa7134_board_init2(dev);
951 saa7134_hwinit2(dev);
953 /* load i2c helpers */
954 if (TUNER_ABSENT != dev->tuner_type)
955 request_module("tuner");
956 if (dev->tda9887_conf)
957 request_module("tda9887");
958 if (card_is_empress(dev)) {
959 request_module("saa6752hs");
960 request_module_depend("saa7134-empress",&need_empress);
963 if (card_is_dvb(dev))
964 request_module_depend("saa7134-dvb",&need_dvb);
968 request_module_depend("saa7134-alsa",&need_alsa);
971 request_module_depend("saa7134-oss",&need_oss);
973 v4l2_prio_init(&dev->prio);
975 /* register v4l devices */
976 dev->video_dev = vdev_init(dev,&saa7134_video_template,"video");
977 err = video_register_device(dev->video_dev,VFL_TYPE_GRABBER,
980 printk(KERN_INFO "%s: can't register video device\n",
984 printk(KERN_INFO "%s: registered device video%d [v4l2]\n",
985 dev->name,dev->video_dev->minor & 0x1f);
987 dev->vbi_dev = vdev_init(dev,&saa7134_vbi_template,"vbi");
988 err = video_register_device(dev->vbi_dev,VFL_TYPE_VBI,
992 printk(KERN_INFO "%s: registered device vbi%d\n",
993 dev->name,dev->vbi_dev->minor & 0x1f);
995 if (card_has_radio(dev)) {
996 dev->radio_dev = vdev_init(dev,&saa7134_radio_template,"radio");
997 err = video_register_device(dev->radio_dev,VFL_TYPE_RADIO,
1001 printk(KERN_INFO "%s: registered device radio%d\n",
1002 dev->name,dev->radio_dev->minor & 0x1f);
1005 /* everything worked */
1006 pci_set_drvdata(pci_dev,dev);
1009 down(&devlist_lock);
1010 list_for_each(item,&mops_list) {
1011 mops = list_entry(item, struct saa7134_mpeg_ops, next);
1012 mpeg_ops_attach(mops, dev);
1014 list_add_tail(&dev->devlist,&saa7134_devlist);
1017 /* check for signal */
1018 saa7134_irq_video_intl(dev);
1020 if (dmasound_init && !dev->dmasound.priv_data) {
1027 saa7134_unregister_video(dev);
1028 saa7134_i2c_unregister(dev);
1029 free_irq(pci_dev->irq, dev);
1031 saa7134_hwfini(dev);
1032 iounmap(dev->lmmio);
1034 release_mem_region(pci_resource_start(pci_dev,0),
1035 pci_resource_len(pci_dev,0));
1041 static void __devexit saa7134_finidev(struct pci_dev *pci_dev)
1043 struct saa7134_dev *dev = pci_get_drvdata(pci_dev);
1044 struct list_head *item;
1045 struct saa7134_mpeg_ops *mops;
1047 /* Release DMA sound modules if present */
1048 if (dmasound_exit && dev->dmasound.priv_data) {
1054 u32 report = saa_readl(SAA7134_IRQ_REPORT);
1055 u32 status = saa_readl(SAA7134_IRQ_STATUS);
1056 print_irqstatus(dev,42,report,status);
1059 /* disable peripheral devices */
1060 saa_writeb(SAA7134_SPECIAL_MODE,0);
1062 /* shutdown hardware */
1063 saa_writel(SAA7134_IRQ1,0);
1064 saa_writel(SAA7134_IRQ2,0);
1065 saa_writel(SAA7134_MAIN_CTRL,0);
1067 /* shutdown subsystems */
1068 saa7134_hwfini(dev);
1071 down(&devlist_lock);
1072 list_del(&dev->devlist);
1073 list_for_each(item,&mops_list) {
1074 mops = list_entry(item, struct saa7134_mpeg_ops, next);
1075 mpeg_ops_detach(mops, dev);
1080 saa7134_i2c_unregister(dev);
1081 saa7134_unregister_video(dev);
1084 /* the DMA sound modules should be unloaded before reaching
1085 this, but just in case they are still present... */
1086 if (dev->dmasound.priv_data != NULL) {
1087 free_irq(pci_dev->irq, &dev->dmasound);
1088 dev->dmasound.priv_data = NULL;
1092 /* release resources */
1093 free_irq(pci_dev->irq, dev);
1094 iounmap(dev->lmmio);
1095 release_mem_region(pci_resource_start(pci_dev,0),
1096 pci_resource_len(pci_dev,0));
1098 pci_set_drvdata(pci_dev, NULL);
1104 /* ----------------------------------------------------------- */
1106 int saa7134_ts_register(struct saa7134_mpeg_ops *ops)
1108 struct list_head *item;
1109 struct saa7134_dev *dev;
1111 down(&devlist_lock);
1112 list_for_each(item,&saa7134_devlist) {
1113 dev = list_entry(item, struct saa7134_dev, devlist);
1114 mpeg_ops_attach(ops, dev);
1116 list_add_tail(&ops->next,&mops_list);
1121 void saa7134_ts_unregister(struct saa7134_mpeg_ops *ops)
1123 struct list_head *item;
1124 struct saa7134_dev *dev;
1126 down(&devlist_lock);
1127 list_del(&ops->next);
1128 list_for_each(item,&saa7134_devlist) {
1129 dev = list_entry(item, struct saa7134_dev, devlist);
1130 mpeg_ops_detach(ops, dev);
1135 EXPORT_SYMBOL(saa7134_ts_register);
1136 EXPORT_SYMBOL(saa7134_ts_unregister);
1138 /* ----------------------------------------------------------- */
1140 static struct pci_driver saa7134_pci_driver = {
1142 .id_table = saa7134_pci_tbl,
1143 .probe = saa7134_initdev,
1144 .remove = __devexit_p(saa7134_finidev),
1147 static int saa7134_init(void)
1149 INIT_LIST_HEAD(&saa7134_devlist);
1150 printk(KERN_INFO "saa7130/34: v4l2 driver version %d.%d.%d loaded\n",
1151 (SAA7134_VERSION_CODE >> 16) & 0xff,
1152 (SAA7134_VERSION_CODE >> 8) & 0xff,
1153 SAA7134_VERSION_CODE & 0xff);
1155 printk(KERN_INFO "saa7130/34: snapshot date %04d-%02d-%02d\n",
1156 SNAPSHOT/10000, (SNAPSHOT/100)%100, SNAPSHOT%100);
1158 return pci_module_init(&saa7134_pci_driver);
1161 static void saa7134_fini(void)
1163 #if defined(CONFIG_MODULES) && defined(MODULE)
1164 if (pending_registered)
1165 unregister_module_notifier(&pending_notifier);
1166 #endif /* CONFIG_MODULES */
1167 pci_unregister_driver(&saa7134_pci_driver);
1170 module_init(saa7134_init);
1171 module_exit(saa7134_fini);
1173 /* ----------------------------------------------------------- */
1175 EXPORT_SYMBOL(saa7134_print_ioctl);
1176 EXPORT_SYMBOL(saa7134_i2c_call_clients);
1177 EXPORT_SYMBOL(saa7134_devlist);
1178 EXPORT_SYMBOL(saa7134_boards);
1180 /* ----------------- for the DMA sound modules --------------- */
1182 EXPORT_SYMBOL(dmasound_init);
1183 EXPORT_SYMBOL(dmasound_exit);
1184 EXPORT_SYMBOL(saa7134_pgtable_free);
1185 EXPORT_SYMBOL(saa7134_pgtable_build);
1186 EXPORT_SYMBOL(saa7134_pgtable_alloc);
1187 EXPORT_SYMBOL(saa7134_set_dmabits);
1189 /* ----------------------------------------------------------- */