[PATCH] drivers/block: Replace pci_module_init() with pci_register_driver()
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / drivers / media / video / saa7134 / saa7134-core.c
blob21cb3d6be839cfa3e969a155ce49a68a79020b43
1 /*
3 * device driver for philips saa7134 based TV cards
4 * driver core
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"
36 #include "saa7134.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 };
75 module_param_array(video_nr, int, NULL, 0444);
76 module_param_array(vbi_nr, int, NULL, 0444);
77 module_param_array(radio_nr, int, NULL, 0444);
78 module_param_array(tuner, int, NULL, 0444);
79 module_param_array(card, int, NULL, 0444);
81 MODULE_PARM_DESC(video_nr, "video device number");
82 MODULE_PARM_DESC(vbi_nr, "vbi device number");
83 MODULE_PARM_DESC(radio_nr, "radio device number");
84 MODULE_PARM_DESC(tuner, "tuner type");
85 MODULE_PARM_DESC(card, "card type");
87 static DECLARE_MUTEX(devlist_lock);
88 LIST_HEAD(saa7134_devlist);
89 static LIST_HEAD(mops_list);
90 static unsigned int saa7134_devcount;
92 int (*dmasound_init)(struct saa7134_dev *dev);
93 int (*dmasound_exit)(struct saa7134_dev *dev);
95 #define dprintk(fmt, arg...) if (core_debug) \
96 printk(KERN_DEBUG "%s/core: " fmt, dev->name , ## arg)
98 /* ------------------------------------------------------------------ */
99 /* debug help functions */
101 static const char *v4l1_ioctls[] = {
102 "0", "GCAP", "GCHAN", "SCHAN", "GTUNER", "STUNER", "GPICT", "SPICT",
103 "CCAPTURE", "GWIN", "SWIN", "GFBUF", "SFBUF", "KEY", "GFREQ",
104 "SFREQ", "GAUDIO", "SAUDIO", "SYNC", "MCAPTURE", "GMBUF", "GUNIT",
105 "GCAPTURE", "SCAPTURE", "SPLAYMODE", "SWRITEMODE", "GPLAYINFO",
106 "SMICROCODE", "GVBIFMT", "SVBIFMT" };
107 #define V4L1_IOCTLS ARRAY_SIZE(v4l1_ioctls)
109 static const char *v4l2_ioctls[] = {
110 "QUERYCAP", "1", "ENUM_PIXFMT", "ENUM_FBUFFMT", "G_FMT", "S_FMT",
111 "G_COMP", "S_COMP", "REQBUFS", "QUERYBUF", "G_FBUF", "S_FBUF",
112 "G_WIN", "S_WIN", "PREVIEW", "QBUF", "16", "DQBUF", "STREAMON",
113 "STREAMOFF", "G_PERF", "G_PARM", "S_PARM", "G_STD", "S_STD",
114 "ENUMSTD", "ENUMINPUT", "G_CTRL", "S_CTRL", "G_TUNER", "S_TUNER",
115 "G_FREQ", "S_FREQ", "G_AUDIO", "S_AUDIO", "35", "QUERYCTRL",
116 "QUERYMENU", "G_INPUT", "S_INPUT", "ENUMCVT", "41", "42", "43",
117 "44", "45", "G_OUTPUT", "S_OUTPUT", "ENUMOUTPUT", "G_AUDOUT",
118 "S_AUDOUT", "ENUMFX", "G_EFFECT", "S_EFFECT", "G_MODULATOR",
119 "S_MODULATOR"
121 #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls)
123 static const char *osspcm_ioctls[] = {
124 "RESET", "SYNC", "SPEED", "STEREO", "GETBLKSIZE", "SETFMT",
125 "CHANNELS", "?", "POST", "SUBDIVIDE", "SETFRAGMENT", "GETFMTS",
126 "GETOSPACE", "GETISPACE", "NONBLOCK", "GETCAPS", "GET/SETTRIGGER",
127 "GETIPTR", "GETOPTR", "MAPINBUF", "MAPOUTBUF", "SETSYNCRO",
128 "SETDUPLEX", "GETODELAY"
130 #define OSSPCM_IOCTLS ARRAY_SIZE(v4l2_ioctls)
132 void saa7134_print_ioctl(char *name, unsigned int cmd)
134 char *dir;
136 switch (_IOC_DIR(cmd)) {
137 case _IOC_NONE: dir = "--"; break;
138 case _IOC_READ: dir = "r-"; break;
139 case _IOC_WRITE: dir = "-w"; break;
140 case _IOC_READ | _IOC_WRITE: dir = "rw"; break;
141 default: dir = "??"; break;
143 switch (_IOC_TYPE(cmd)) {
144 case 'v':
145 printk(KERN_DEBUG "%s: ioctl 0x%08x (v4l1, %s, VIDIOC%s)\n",
146 name, cmd, dir, (_IOC_NR(cmd) < V4L1_IOCTLS) ?
147 v4l1_ioctls[_IOC_NR(cmd)] : "???");
148 break;
149 case 'V':
150 printk(KERN_DEBUG "%s: ioctl 0x%08x (v4l2, %s, VIDIOC_%s)\n",
151 name, cmd, dir, (_IOC_NR(cmd) < V4L2_IOCTLS) ?
152 v4l2_ioctls[_IOC_NR(cmd)] : "???");
153 break;
154 case 'P':
155 printk(KERN_DEBUG "%s: ioctl 0x%08x (oss dsp, %s, SNDCTL_DSP_%s)\n",
156 name, cmd, dir, (_IOC_NR(cmd) < OSSPCM_IOCTLS) ?
157 osspcm_ioctls[_IOC_NR(cmd)] : "???");
158 break;
159 case 'M':
160 printk(KERN_DEBUG "%s: ioctl 0x%08x (oss mixer, %s, #%d)\n",
161 name, cmd, dir, _IOC_NR(cmd));
162 break;
163 default:
164 printk(KERN_DEBUG "%s: ioctl 0x%08x (???, %s, #%d)\n",
165 name, cmd, dir, _IOC_NR(cmd));
169 void saa7134_track_gpio(struct saa7134_dev *dev, char *msg)
171 unsigned long mode,status;
173 if (!gpio_tracking)
174 return;
175 /* rising SAA7134_GPIO_GPRESCAN reads the status */
176 saa_andorb(SAA7134_GPIO_GPMODE3,SAA7134_GPIO_GPRESCAN,0);
177 saa_andorb(SAA7134_GPIO_GPMODE3,SAA7134_GPIO_GPRESCAN,SAA7134_GPIO_GPRESCAN);
178 mode = saa_readl(SAA7134_GPIO_GPMODE0 >> 2) & 0xfffffff;
179 status = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2) & 0xfffffff;
180 printk(KERN_DEBUG
181 "%s: gpio: mode=0x%07lx in=0x%07lx out=0x%07lx [%s]\n",
182 dev->name, mode, (~mode) & status, mode & status, msg);
185 /* ------------------------------------------------------------------ */
188 /* ----------------------------------------------------------- */
189 /* delayed request_module */
191 #if defined(CONFIG_MODULES) && defined(MODULE)
192 static int need_empress;
193 static int need_dvb;
194 static int need_alsa;
195 static int need_oss;
197 static int pending_call(struct notifier_block *self, unsigned long state,
198 void *module)
200 if (module != THIS_MODULE || state != MODULE_STATE_LIVE)
201 return NOTIFY_DONE;
203 if (need_empress)
204 request_module("saa7134-empress");
205 if (need_dvb)
206 request_module("saa7134-dvb");
207 if (need_alsa)
208 request_module("saa7134-alsa");
209 if (need_oss)
210 request_module("saa7134-oss");
211 return NOTIFY_DONE;
214 static int pending_registered;
215 static struct notifier_block pending_notifier = {
216 .notifier_call = pending_call,
219 static void request_module_depend(char *name, int *flag)
221 int err;
222 switch (THIS_MODULE->state) {
223 case MODULE_STATE_COMING:
224 if (!pending_registered) {
225 err = register_module_notifier(&pending_notifier);
226 pending_registered = 1;
228 *flag = 1;
229 break;
230 case MODULE_STATE_LIVE:
231 request_module(name);
232 break;
233 default:
234 /* nothing */;
235 break;
239 #else
240 #define request_module_depend(name,flag)
241 #endif /* CONFIG_MODULES */
243 /* ------------------------------------------------------------------ */
245 /* nr of (saa7134-)pages for the given buffer size */
246 static int saa7134_buffer_pages(int size)
248 size = PAGE_ALIGN(size);
249 size += PAGE_SIZE; /* for non-page-aligned buffers */
250 size /= 4096;
251 return size;
254 /* calc max # of buffers from size (must not exceed the 4MB virtual
255 * address space per DMA channel) */
256 int saa7134_buffer_count(unsigned int size, unsigned int count)
258 unsigned int maxcount;
260 maxcount = 1024 / saa7134_buffer_pages(size);
261 if (count > maxcount)
262 count = maxcount;
263 return count;
266 int saa7134_buffer_startpage(struct saa7134_buf *buf)
268 return saa7134_buffer_pages(buf->vb.bsize) * buf->vb.i;
271 unsigned long saa7134_buffer_base(struct saa7134_buf *buf)
273 unsigned long base;
275 base = saa7134_buffer_startpage(buf) * 4096;
276 base += buf->vb.dma.sglist[0].offset;
277 return base;
280 /* ------------------------------------------------------------------ */
282 int saa7134_pgtable_alloc(struct pci_dev *pci, struct saa7134_pgtable *pt)
284 __le32 *cpu;
285 dma_addr_t dma_addr;
287 cpu = pci_alloc_consistent(pci, SAA7134_PGTABLE_SIZE, &dma_addr);
288 if (NULL == cpu)
289 return -ENOMEM;
290 pt->size = SAA7134_PGTABLE_SIZE;
291 pt->cpu = cpu;
292 pt->dma = dma_addr;
293 return 0;
296 int saa7134_pgtable_build(struct pci_dev *pci, struct saa7134_pgtable *pt,
297 struct scatterlist *list, unsigned int length,
298 unsigned int startpage)
300 __le32 *ptr;
301 unsigned int i,p;
303 BUG_ON(NULL == pt || NULL == pt->cpu);
305 ptr = pt->cpu + startpage;
306 for (i = 0; i < length; i++, list++)
307 for (p = 0; p * 4096 < list->length; p++, ptr++)
308 *ptr = cpu_to_le32(sg_dma_address(list) - list->offset);
309 return 0;
312 void saa7134_pgtable_free(struct pci_dev *pci, struct saa7134_pgtable *pt)
314 if (NULL == pt->cpu)
315 return;
316 pci_free_consistent(pci, pt->size, pt->cpu, pt->dma);
317 pt->cpu = NULL;
320 /* ------------------------------------------------------------------ */
322 void saa7134_dma_free(struct saa7134_dev *dev,struct saa7134_buf *buf)
324 if (in_interrupt())
325 BUG();
327 videobuf_waiton(&buf->vb,0,0);
328 videobuf_dma_pci_unmap(dev->pci, &buf->vb.dma);
329 videobuf_dma_free(&buf->vb.dma);
330 buf->vb.state = STATE_NEEDS_INIT;
333 /* ------------------------------------------------------------------ */
335 int saa7134_buffer_queue(struct saa7134_dev *dev,
336 struct saa7134_dmaqueue *q,
337 struct saa7134_buf *buf)
339 struct saa7134_buf *next = NULL;
341 assert_spin_locked(&dev->slock);
342 dprintk("buffer_queue %p\n",buf);
343 if (NULL == q->curr) {
344 if (!q->need_two) {
345 q->curr = buf;
346 buf->activate(dev,buf,NULL);
347 } else if (list_empty(&q->queue)) {
348 list_add_tail(&buf->vb.queue,&q->queue);
349 buf->vb.state = STATE_QUEUED;
350 } else {
351 next = list_entry(q->queue.next,struct saa7134_buf,
352 vb.queue);
353 q->curr = buf;
354 buf->activate(dev,buf,next);
356 } else {
357 list_add_tail(&buf->vb.queue,&q->queue);
358 buf->vb.state = STATE_QUEUED;
360 return 0;
363 void saa7134_buffer_finish(struct saa7134_dev *dev,
364 struct saa7134_dmaqueue *q,
365 unsigned int state)
367 assert_spin_locked(&dev->slock);
368 dprintk("buffer_finish %p\n",q->curr);
370 /* finish current buffer */
371 q->curr->vb.state = state;
372 do_gettimeofday(&q->curr->vb.ts);
373 wake_up(&q->curr->vb.done);
374 q->curr = NULL;
377 void saa7134_buffer_next(struct saa7134_dev *dev,
378 struct saa7134_dmaqueue *q)
380 struct saa7134_buf *buf,*next = NULL;
382 assert_spin_locked(&dev->slock);
383 BUG_ON(NULL != q->curr);
385 if (!list_empty(&q->queue)) {
386 /* activate next one from queue */
387 buf = list_entry(q->queue.next,struct saa7134_buf,vb.queue);
388 dprintk("buffer_next %p [prev=%p/next=%p]\n",
389 buf,q->queue.prev,q->queue.next);
390 list_del(&buf->vb.queue);
391 if (!list_empty(&q->queue))
392 next = list_entry(q->queue.next,struct saa7134_buf,
393 vb.queue);
394 q->curr = buf;
395 buf->activate(dev,buf,next);
396 dprintk("buffer_next #2 prev=%p/next=%p\n",
397 q->queue.prev,q->queue.next);
398 } else {
399 /* nothing to do -- just stop DMA */
400 dprintk("buffer_next %p\n",NULL);
401 saa7134_set_dmabits(dev);
402 del_timer(&q->timeout);
406 void saa7134_buffer_timeout(unsigned long data)
408 struct saa7134_dmaqueue *q = (struct saa7134_dmaqueue*)data;
409 struct saa7134_dev *dev = q->dev;
410 unsigned long flags;
412 spin_lock_irqsave(&dev->slock,flags);
414 /* try to reset the hardware (SWRST) */
415 saa_writeb(SAA7134_REGION_ENABLE, 0x00);
416 saa_writeb(SAA7134_REGION_ENABLE, 0x80);
417 saa_writeb(SAA7134_REGION_ENABLE, 0x00);
419 /* flag current buffer as failed,
420 try to start over with the next one. */
421 if (q->curr) {
422 dprintk("timeout on %p\n",q->curr);
423 saa7134_buffer_finish(dev,q,STATE_ERROR);
425 saa7134_buffer_next(dev,q);
426 spin_unlock_irqrestore(&dev->slock,flags);
429 /* ------------------------------------------------------------------ */
431 int saa7134_set_dmabits(struct saa7134_dev *dev)
433 u32 split, task=0, ctrl=0, irq=0;
434 enum v4l2_field cap = V4L2_FIELD_ANY;
435 enum v4l2_field ov = V4L2_FIELD_ANY;
437 assert_spin_locked(&dev->slock);
439 /* video capture -- dma 0 + video task A */
440 if (dev->video_q.curr) {
441 task |= 0x01;
442 ctrl |= SAA7134_MAIN_CTRL_TE0;
443 irq |= SAA7134_IRQ1_INTE_RA0_1 |
444 SAA7134_IRQ1_INTE_RA0_0;
445 cap = dev->video_q.curr->vb.field;
448 /* video capture -- dma 1+2 (planar modes) */
449 if (dev->video_q.curr &&
450 dev->video_q.curr->fmt->planar) {
451 ctrl |= SAA7134_MAIN_CTRL_TE4 |
452 SAA7134_MAIN_CTRL_TE5;
455 /* screen overlay -- dma 0 + video task B */
456 if (dev->ovenable) {
457 task |= 0x10;
458 ctrl |= SAA7134_MAIN_CTRL_TE1;
459 ov = dev->ovfield;
462 /* vbi capture -- dma 0 + vbi task A+B */
463 if (dev->vbi_q.curr) {
464 task |= 0x22;
465 ctrl |= SAA7134_MAIN_CTRL_TE2 |
466 SAA7134_MAIN_CTRL_TE3;
467 irq |= SAA7134_IRQ1_INTE_RA0_7 |
468 SAA7134_IRQ1_INTE_RA0_6 |
469 SAA7134_IRQ1_INTE_RA0_5 |
470 SAA7134_IRQ1_INTE_RA0_4;
473 /* audio capture -- dma 3 */
474 if (dev->dmasound.dma_running) {
475 ctrl |= SAA7134_MAIN_CTRL_TE6;
476 irq |= SAA7134_IRQ1_INTE_RA3_1 |
477 SAA7134_IRQ1_INTE_RA3_0;
480 /* TS capture -- dma 5 */
481 if (dev->ts_q.curr) {
482 ctrl |= SAA7134_MAIN_CTRL_TE5;
483 irq |= SAA7134_IRQ1_INTE_RA2_3 |
484 SAA7134_IRQ1_INTE_RA2_2 |
485 SAA7134_IRQ1_INTE_RA2_1 |
486 SAA7134_IRQ1_INTE_RA2_0;
489 /* set task conditions + field handling */
490 if (V4L2_FIELD_HAS_BOTH(cap) || V4L2_FIELD_HAS_BOTH(ov) || cap == ov) {
491 /* default config -- use full frames */
492 saa_writeb(SAA7134_TASK_CONDITIONS(TASK_A), 0x0d);
493 saa_writeb(SAA7134_TASK_CONDITIONS(TASK_B), 0x0d);
494 saa_writeb(SAA7134_FIELD_HANDLING(TASK_A), 0x02);
495 saa_writeb(SAA7134_FIELD_HANDLING(TASK_B), 0x02);
496 split = 0;
497 } else {
498 /* split fields between tasks */
499 if (V4L2_FIELD_TOP == cap) {
500 /* odd A, even B, repeat */
501 saa_writeb(SAA7134_TASK_CONDITIONS(TASK_A), 0x0d);
502 saa_writeb(SAA7134_TASK_CONDITIONS(TASK_B), 0x0e);
503 } else {
504 /* odd B, even A, repeat */
505 saa_writeb(SAA7134_TASK_CONDITIONS(TASK_A), 0x0e);
506 saa_writeb(SAA7134_TASK_CONDITIONS(TASK_B), 0x0d);
508 saa_writeb(SAA7134_FIELD_HANDLING(TASK_A), 0x01);
509 saa_writeb(SAA7134_FIELD_HANDLING(TASK_B), 0x01);
510 split = 1;
513 /* irqs */
514 saa_writeb(SAA7134_REGION_ENABLE, task);
515 saa_writel(SAA7134_IRQ1, irq);
516 saa_andorl(SAA7134_MAIN_CTRL,
517 SAA7134_MAIN_CTRL_TE0 |
518 SAA7134_MAIN_CTRL_TE1 |
519 SAA7134_MAIN_CTRL_TE2 |
520 SAA7134_MAIN_CTRL_TE3 |
521 SAA7134_MAIN_CTRL_TE4 |
522 SAA7134_MAIN_CTRL_TE5 |
523 SAA7134_MAIN_CTRL_TE6,
524 ctrl);
525 dprintk("dmabits: task=0x%02x ctrl=0x%02x irq=0x%x split=%s\n",
526 task, ctrl, irq, split ? "no" : "yes");
528 return 0;
531 /* ------------------------------------------------------------------ */
532 /* IRQ handler + helpers */
534 static char *irqbits[] = {
535 "DONE_RA0", "DONE_RA1", "DONE_RA2", "DONE_RA3",
536 "AR", "PE", "PWR_ON", "RDCAP", "INTL", "FIDT", "MMC",
537 "TRIG_ERR", "CONF_ERR", "LOAD_ERR",
538 "GPIO16?", "GPIO18", "GPIO22", "GPIO23"
540 #define IRQBITS ARRAY_SIZE(irqbits)
542 static void print_irqstatus(struct saa7134_dev *dev, int loop,
543 unsigned long report, unsigned long status)
545 unsigned int i;
547 printk(KERN_DEBUG "%s/irq[%d,%ld]: r=0x%lx s=0x%02lx",
548 dev->name,loop,jiffies,report,status);
549 for (i = 0; i < IRQBITS; i++) {
550 if (!(report & (1 << i)))
551 continue;
552 printk(" %s",irqbits[i]);
554 if (report & SAA7134_IRQ_REPORT_DONE_RA0) {
555 printk(" | RA0=%s,%s,%s,%ld",
556 (status & 0x40) ? "vbi" : "video",
557 (status & 0x20) ? "b" : "a",
558 (status & 0x10) ? "odd" : "even",
559 (status & 0x0f));
561 printk("\n");
564 static irqreturn_t saa7134_irq(int irq, void *dev_id, struct pt_regs *regs)
566 struct saa7134_dev *dev = (struct saa7134_dev*) dev_id;
567 unsigned long report,status;
568 int loop, handled = 0;
570 for (loop = 0; loop < 10; loop++) {
571 report = saa_readl(SAA7134_IRQ_REPORT);
572 status = saa_readl(SAA7134_IRQ_STATUS);
573 if (0 == report) {
574 if (irq_debug > 1)
575 printk(KERN_DEBUG "%s/irq: no (more) work\n",
576 dev->name);
577 goto out;
580 /* If dmasound support is active and we get a sound report, exit
581 and let the saa7134-alsa/oss module deal with it */
583 if ((report & SAA7134_IRQ_REPORT_DONE_RA3) &&
584 (dev->dmasound.priv_data != NULL) )
586 if (irq_debug > 1)
587 printk(KERN_DEBUG "%s/irq: ignoring interrupt for DMA sound\n",
588 dev->name);
589 goto out;
592 handled = 1;
593 saa_writel(SAA7134_IRQ_REPORT,report);
594 if (irq_debug)
595 print_irqstatus(dev,loop,report,status);
598 if (report & SAA7134_IRQ_REPORT_RDCAP /* _INTL */)
599 saa7134_irq_video_intl(dev);
601 if ((report & SAA7134_IRQ_REPORT_DONE_RA0) &&
602 (status & 0x60) == 0)
603 saa7134_irq_video_done(dev,status);
605 if ((report & SAA7134_IRQ_REPORT_DONE_RA0) &&
606 (status & 0x40) == 0x40)
607 saa7134_irq_vbi_done(dev,status);
609 if ((report & SAA7134_IRQ_REPORT_DONE_RA2) &&
610 card_has_mpeg(dev))
611 saa7134_irq_ts_done(dev,status);
613 if ((report & (SAA7134_IRQ_REPORT_GPIO16 |
614 SAA7134_IRQ_REPORT_GPIO18)) &&
615 dev->remote)
616 saa7134_input_irq(dev);
620 if (10 == loop) {
621 print_irqstatus(dev,loop,report,status);
622 if (report & SAA7134_IRQ_REPORT_PE) {
623 /* disable all parity error */
624 printk(KERN_WARNING "%s/irq: looping -- "
625 "clearing PE (parity error!) enable bit\n",dev->name);
626 saa_clearl(SAA7134_IRQ2,SAA7134_IRQ2_INTE_PE);
627 } else if (report & (SAA7134_IRQ_REPORT_GPIO16 |
628 SAA7134_IRQ_REPORT_GPIO18)) {
629 /* disable gpio IRQs */
630 printk(KERN_WARNING "%s/irq: looping -- "
631 "clearing GPIO enable bits\n",dev->name);
632 saa_clearl(SAA7134_IRQ2, (SAA7134_IRQ2_INTE_GPIO16 |
633 SAA7134_IRQ2_INTE_GPIO18));
634 } else {
635 /* disable all irqs */
636 printk(KERN_WARNING "%s/irq: looping -- "
637 "clearing all enable bits\n",dev->name);
638 saa_writel(SAA7134_IRQ1,0);
639 saa_writel(SAA7134_IRQ2,0);
643 out:
644 return IRQ_RETVAL(handled);
647 /* ------------------------------------------------------------------ */
649 /* early init (no i2c, no irq) */
650 static int saa7134_hwinit1(struct saa7134_dev *dev)
652 dprintk("hwinit1\n");
654 saa_writel(SAA7134_IRQ1, 0);
655 saa_writel(SAA7134_IRQ2, 0);
656 init_MUTEX(&dev->lock);
657 spin_lock_init(&dev->slock);
659 saa7134_track_gpio(dev,"pre-init");
660 saa7134_video_init1(dev);
661 saa7134_vbi_init1(dev);
662 if (card_has_mpeg(dev))
663 saa7134_ts_init1(dev);
664 saa7134_input_init1(dev);
666 /* RAM FIFO config */
667 saa_writel(SAA7134_FIFO_SIZE, 0x08070503);
668 saa_writel(SAA7134_THRESHOULD,0x02020202);
670 /* enable audio + video processing */
671 saa_writel(SAA7134_MAIN_CTRL,
672 SAA7134_MAIN_CTRL_VPLLE |
673 SAA7134_MAIN_CTRL_APLLE |
674 SAA7134_MAIN_CTRL_EXOSC |
675 SAA7134_MAIN_CTRL_EVFE1 |
676 SAA7134_MAIN_CTRL_EVFE2 |
677 SAA7134_MAIN_CTRL_ESFE |
678 SAA7134_MAIN_CTRL_EBDAC);
681 * Initialize OSS _after_ enabling audio clock PLL and audio processing.
682 * OSS initialization writes to registers via the audio DSP; these
683 * writes will fail unless the audio clock has been started. At worst,
684 * audio will not work.
687 /* enable peripheral devices */
688 saa_writeb(SAA7134_SPECIAL_MODE, 0x01);
690 /* set vertical line numbering start (vbi needs this) */
691 saa_writeb(SAA7134_SOURCE_TIMING2, 0x20);
693 return 0;
696 /* late init (with i2c + irq) */
697 static int saa7134_hwinit2(struct saa7134_dev *dev)
699 unsigned int irq2_mask;
700 dprintk("hwinit2\n");
702 saa7134_video_init2(dev);
703 saa7134_tvaudio_init2(dev);
705 /* enable IRQ's */
706 irq2_mask =
707 SAA7134_IRQ2_INTE_DEC3 |
708 SAA7134_IRQ2_INTE_DEC2 |
709 SAA7134_IRQ2_INTE_DEC1 |
710 SAA7134_IRQ2_INTE_DEC0 |
711 SAA7134_IRQ2_INTE_PE |
712 SAA7134_IRQ2_INTE_AR;
714 if (dev->has_remote == SAA7134_REMOTE_GPIO)
715 irq2_mask |= (SAA7134_IRQ2_INTE_GPIO18 |
716 SAA7134_IRQ2_INTE_GPIO18A |
717 SAA7134_IRQ2_INTE_GPIO16 );
719 saa_writel(SAA7134_IRQ1, 0);
720 saa_writel(SAA7134_IRQ2, irq2_mask);
722 return 0;
725 /* shutdown */
726 static int saa7134_hwfini(struct saa7134_dev *dev)
728 dprintk("hwfini\n");
730 if (card_has_mpeg(dev))
731 saa7134_ts_fini(dev);
732 saa7134_input_fini(dev);
733 saa7134_vbi_fini(dev);
734 saa7134_video_fini(dev);
735 saa7134_tvaudio_fini(dev);
736 return 0;
739 static void __devinit must_configure_manually(void)
741 unsigned int i,p;
743 printk(KERN_WARNING
744 "saa7134: <rant>\n"
745 "saa7134: Congratulations! Your TV card vendor saved a few\n"
746 "saa7134: cents for a eeprom, thus your pci board has no\n"
747 "saa7134: subsystem ID and I can't identify it automatically\n"
748 "saa7134: </rant>\n"
749 "saa7134: I feel better now. Ok, here are the good news:\n"
750 "saa7134: You can use the card=<nr> insmod option to specify\n"
751 "saa7134: which board do you have. The list:\n");
752 for (i = 0; i < saa7134_bcount; i++) {
753 printk(KERN_WARNING "saa7134: card=%d -> %-40.40s",
754 i,saa7134_boards[i].name);
755 for (p = 0; saa7134_pci_tbl[p].driver_data; p++) {
756 if (saa7134_pci_tbl[p].driver_data != i)
757 continue;
758 printk(" %04x:%04x",
759 saa7134_pci_tbl[p].subvendor,
760 saa7134_pci_tbl[p].subdevice);
762 printk("\n");
766 static struct video_device *vdev_init(struct saa7134_dev *dev,
767 struct video_device *template,
768 char *type)
770 struct video_device *vfd;
772 vfd = video_device_alloc();
773 if (NULL == vfd)
774 return NULL;
775 *vfd = *template;
776 vfd->minor = -1;
777 vfd->dev = &dev->pci->dev;
778 vfd->release = video_device_release;
779 snprintf(vfd->name, sizeof(vfd->name), "%s %s (%s)",
780 dev->name, type, saa7134_boards[dev->board].name);
781 return vfd;
784 static void saa7134_unregister_video(struct saa7134_dev *dev)
786 if (dev->video_dev) {
787 if (-1 != dev->video_dev->minor)
788 video_unregister_device(dev->video_dev);
789 else
790 video_device_release(dev->video_dev);
791 dev->video_dev = NULL;
793 if (dev->vbi_dev) {
794 if (-1 != dev->vbi_dev->minor)
795 video_unregister_device(dev->vbi_dev);
796 else
797 video_device_release(dev->vbi_dev);
798 dev->vbi_dev = NULL;
800 if (dev->radio_dev) {
801 if (-1 != dev->radio_dev->minor)
802 video_unregister_device(dev->radio_dev);
803 else
804 video_device_release(dev->radio_dev);
805 dev->radio_dev = NULL;
809 static void mpeg_ops_attach(struct saa7134_mpeg_ops *ops,
810 struct saa7134_dev *dev)
812 int err;
814 if (NULL != dev->mops)
815 return;
816 if (saa7134_boards[dev->board].mpeg != ops->type)
817 return;
818 err = ops->init(dev);
819 if (0 != err)
820 return;
821 dev->mops = ops;
824 static void mpeg_ops_detach(struct saa7134_mpeg_ops *ops,
825 struct saa7134_dev *dev)
827 if (NULL == dev->mops)
828 return;
829 if (dev->mops != ops)
830 return;
831 dev->mops->fini(dev);
832 dev->mops = NULL;
835 static int __devinit saa7134_initdev(struct pci_dev *pci_dev,
836 const struct pci_device_id *pci_id)
838 struct saa7134_dev *dev;
839 struct list_head *item;
840 struct saa7134_mpeg_ops *mops;
841 int err;
843 dev = kmalloc(sizeof(*dev),GFP_KERNEL);
844 if (NULL == dev)
845 return -ENOMEM;
846 memset(dev,0,sizeof(*dev));
848 /* pci init */
849 dev->pci = pci_dev;
850 if (pci_enable_device(pci_dev)) {
851 err = -EIO;
852 goto fail1;
855 dev->nr = saa7134_devcount;
856 sprintf(dev->name,"saa%x[%d]",pci_dev->device,dev->nr);
858 /* pci quirks */
859 if (pci_pci_problems) {
860 if (pci_pci_problems & PCIPCI_TRITON)
861 printk(KERN_INFO "%s: quirk: PCIPCI_TRITON\n", dev->name);
862 if (pci_pci_problems & PCIPCI_NATOMA)
863 printk(KERN_INFO "%s: quirk: PCIPCI_NATOMA\n", dev->name);
864 if (pci_pci_problems & PCIPCI_VIAETBF)
865 printk(KERN_INFO "%s: quirk: PCIPCI_VIAETBF\n", dev->name);
866 if (pci_pci_problems & PCIPCI_VSFX)
867 printk(KERN_INFO "%s: quirk: PCIPCI_VSFX\n",dev->name);
868 #ifdef PCIPCI_ALIMAGIK
869 if (pci_pci_problems & PCIPCI_ALIMAGIK) {
870 printk(KERN_INFO "%s: quirk: PCIPCI_ALIMAGIK -- latency fixup\n",
871 dev->name);
872 latency = 0x0A;
874 #endif
876 if (UNSET != latency) {
877 printk(KERN_INFO "%s: setting pci latency timer to %d\n",
878 dev->name,latency);
879 pci_write_config_byte(pci_dev, PCI_LATENCY_TIMER, latency);
882 /* print pci info */
883 pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &dev->pci_rev);
884 pci_read_config_byte(pci_dev, PCI_LATENCY_TIMER, &dev->pci_lat);
885 printk(KERN_INFO "%s: found at %s, rev: %d, irq: %d, "
886 "latency: %d, mmio: 0x%lx\n", dev->name,
887 pci_name(pci_dev), dev->pci_rev, pci_dev->irq,
888 dev->pci_lat,pci_resource_start(pci_dev,0));
889 pci_set_master(pci_dev);
890 if (!pci_dma_supported(pci_dev,0xffffffff)) {
891 printk("%s: Oops: no 32bit PCI DMA ???\n",dev->name);
892 err = -EIO;
893 goto fail1;
896 /* board config */
897 dev->board = pci_id->driver_data;
898 if (card[dev->nr] >= 0 &&
899 card[dev->nr] < saa7134_bcount)
900 dev->board = card[dev->nr];
901 if (SAA7134_BOARD_NOAUTO == dev->board) {
902 must_configure_manually();
903 dev->board = SAA7134_BOARD_UNKNOWN;
905 dev->tuner_type = saa7134_boards[dev->board].tuner_type;
906 dev->tda9887_conf = saa7134_boards[dev->board].tda9887_conf;
907 if (UNSET != tuner[dev->nr])
908 dev->tuner_type = tuner[dev->nr];
909 printk(KERN_INFO "%s: subsystem: %04x:%04x, board: %s [card=%d,%s]\n",
910 dev->name,pci_dev->subsystem_vendor,
911 pci_dev->subsystem_device,saa7134_boards[dev->board].name,
912 dev->board, card[dev->nr] == dev->board ?
913 "insmod option" : "autodetected");
915 /* get mmio */
916 if (!request_mem_region(pci_resource_start(pci_dev,0),
917 pci_resource_len(pci_dev,0),
918 dev->name)) {
919 err = -EBUSY;
920 printk(KERN_ERR "%s: can't get MMIO memory @ 0x%lx\n",
921 dev->name,pci_resource_start(pci_dev,0));
922 goto fail1;
924 dev->lmmio = ioremap(pci_resource_start(pci_dev,0), 0x1000);
925 dev->bmmio = (__u8 __iomem *)dev->lmmio;
926 if (NULL == dev->lmmio) {
927 err = -EIO;
928 printk(KERN_ERR "%s: can't ioremap() MMIO memory\n",
929 dev->name);
930 goto fail2;
933 /* initialize hardware #1 */
934 saa7134_board_init1(dev);
935 saa7134_hwinit1(dev);
937 /* get irq */
938 err = request_irq(pci_dev->irq, saa7134_irq,
939 SA_SHIRQ | SA_INTERRUPT, dev->name, dev);
940 if (err < 0) {
941 printk(KERN_ERR "%s: can't get IRQ %d\n",
942 dev->name,pci_dev->irq);
943 goto fail3;
946 /* wait a bit, register i2c bus */
947 msleep(100);
948 saa7134_i2c_register(dev);
950 /* initialize hardware #2 */
951 saa7134_board_init2(dev);
952 saa7134_hwinit2(dev);
954 /* load i2c helpers */
955 if (TUNER_ABSENT != dev->tuner_type)
956 request_module("tuner");
957 if (dev->tda9887_conf)
958 request_module("tda9887");
959 if (card_is_empress(dev)) {
960 request_module("saa6752hs");
961 request_module_depend("saa7134-empress",&need_empress);
964 if (card_is_dvb(dev))
965 request_module_depend("saa7134-dvb",&need_dvb);
968 if (alsa)
969 request_module_depend("saa7134-alsa",&need_alsa);
971 if (oss)
972 request_module_depend("saa7134-oss",&need_oss);
974 v4l2_prio_init(&dev->prio);
976 /* register v4l devices */
977 dev->video_dev = vdev_init(dev,&saa7134_video_template,"video");
978 err = video_register_device(dev->video_dev,VFL_TYPE_GRABBER,
979 video_nr[dev->nr]);
980 if (err < 0) {
981 printk(KERN_INFO "%s: can't register video device\n",
982 dev->name);
983 goto fail4;
985 printk(KERN_INFO "%s: registered device video%d [v4l2]\n",
986 dev->name,dev->video_dev->minor & 0x1f);
988 dev->vbi_dev = vdev_init(dev,&saa7134_vbi_template,"vbi");
989 err = video_register_device(dev->vbi_dev,VFL_TYPE_VBI,
990 vbi_nr[dev->nr]);
991 if (err < 0)
992 goto fail4;
993 printk(KERN_INFO "%s: registered device vbi%d\n",
994 dev->name,dev->vbi_dev->minor & 0x1f);
996 if (card_has_radio(dev)) {
997 dev->radio_dev = vdev_init(dev,&saa7134_radio_template,"radio");
998 err = video_register_device(dev->radio_dev,VFL_TYPE_RADIO,
999 radio_nr[dev->nr]);
1000 if (err < 0)
1001 goto fail4;
1002 printk(KERN_INFO "%s: registered device radio%d\n",
1003 dev->name,dev->radio_dev->minor & 0x1f);
1006 /* everything worked */
1007 pci_set_drvdata(pci_dev,dev);
1008 saa7134_devcount++;
1010 down(&devlist_lock);
1011 list_for_each(item,&mops_list) {
1012 mops = list_entry(item, struct saa7134_mpeg_ops, next);
1013 mpeg_ops_attach(mops, dev);
1015 list_add_tail(&dev->devlist,&saa7134_devlist);
1016 up(&devlist_lock);
1018 /* check for signal */
1019 saa7134_irq_video_intl(dev);
1021 if (dmasound_init && !dev->dmasound.priv_data) {
1022 dmasound_init(dev);
1025 return 0;
1027 fail4:
1028 saa7134_unregister_video(dev);
1029 saa7134_i2c_unregister(dev);
1030 free_irq(pci_dev->irq, dev);
1031 fail3:
1032 saa7134_hwfini(dev);
1033 iounmap(dev->lmmio);
1034 fail2:
1035 release_mem_region(pci_resource_start(pci_dev,0),
1036 pci_resource_len(pci_dev,0));
1037 fail1:
1038 kfree(dev);
1039 return err;
1042 static void __devexit saa7134_finidev(struct pci_dev *pci_dev)
1044 struct saa7134_dev *dev = pci_get_drvdata(pci_dev);
1045 struct list_head *item;
1046 struct saa7134_mpeg_ops *mops;
1048 /* Release DMA sound modules if present */
1049 if (dmasound_exit && dev->dmasound.priv_data) {
1050 dmasound_exit(dev);
1053 /* debugging ... */
1054 if (irq_debug) {
1055 u32 report = saa_readl(SAA7134_IRQ_REPORT);
1056 u32 status = saa_readl(SAA7134_IRQ_STATUS);
1057 print_irqstatus(dev,42,report,status);
1060 /* disable peripheral devices */
1061 saa_writeb(SAA7134_SPECIAL_MODE,0);
1063 /* shutdown hardware */
1064 saa_writel(SAA7134_IRQ1,0);
1065 saa_writel(SAA7134_IRQ2,0);
1066 saa_writel(SAA7134_MAIN_CTRL,0);
1068 /* shutdown subsystems */
1069 saa7134_hwfini(dev);
1071 /* unregister */
1072 down(&devlist_lock);
1073 list_del(&dev->devlist);
1074 list_for_each(item,&mops_list) {
1075 mops = list_entry(item, struct saa7134_mpeg_ops, next);
1076 mpeg_ops_detach(mops, dev);
1078 up(&devlist_lock);
1079 saa7134_devcount--;
1081 saa7134_i2c_unregister(dev);
1082 saa7134_unregister_video(dev);
1085 /* the DMA sound modules should be unloaded before reaching
1086 this, but just in case they are still present... */
1087 if (dev->dmasound.priv_data != NULL) {
1088 free_irq(pci_dev->irq, &dev->dmasound);
1089 dev->dmasound.priv_data = NULL;
1093 /* release resources */
1094 free_irq(pci_dev->irq, dev);
1095 iounmap(dev->lmmio);
1096 release_mem_region(pci_resource_start(pci_dev,0),
1097 pci_resource_len(pci_dev,0));
1099 pci_set_drvdata(pci_dev, NULL);
1101 /* free memory */
1102 kfree(dev);
1105 /* ----------------------------------------------------------- */
1107 int saa7134_ts_register(struct saa7134_mpeg_ops *ops)
1109 struct list_head *item;
1110 struct saa7134_dev *dev;
1112 down(&devlist_lock);
1113 list_for_each(item,&saa7134_devlist) {
1114 dev = list_entry(item, struct saa7134_dev, devlist);
1115 mpeg_ops_attach(ops, dev);
1117 list_add_tail(&ops->next,&mops_list);
1118 up(&devlist_lock);
1119 return 0;
1122 void saa7134_ts_unregister(struct saa7134_mpeg_ops *ops)
1124 struct list_head *item;
1125 struct saa7134_dev *dev;
1127 down(&devlist_lock);
1128 list_del(&ops->next);
1129 list_for_each(item,&saa7134_devlist) {
1130 dev = list_entry(item, struct saa7134_dev, devlist);
1131 mpeg_ops_detach(ops, dev);
1133 up(&devlist_lock);
1136 EXPORT_SYMBOL(saa7134_ts_register);
1137 EXPORT_SYMBOL(saa7134_ts_unregister);
1139 /* ----------------------------------------------------------- */
1141 static struct pci_driver saa7134_pci_driver = {
1142 .name = "saa7134",
1143 .id_table = saa7134_pci_tbl,
1144 .probe = saa7134_initdev,
1145 .remove = __devexit_p(saa7134_finidev),
1148 static int saa7134_init(void)
1150 INIT_LIST_HEAD(&saa7134_devlist);
1151 printk(KERN_INFO "saa7130/34: v4l2 driver version %d.%d.%d loaded\n",
1152 (SAA7134_VERSION_CODE >> 16) & 0xff,
1153 (SAA7134_VERSION_CODE >> 8) & 0xff,
1154 SAA7134_VERSION_CODE & 0xff);
1155 #ifdef SNAPSHOT
1156 printk(KERN_INFO "saa7130/34: snapshot date %04d-%02d-%02d\n",
1157 SNAPSHOT/10000, (SNAPSHOT/100)%100, SNAPSHOT%100);
1158 #endif
1159 return pci_register_driver(&saa7134_pci_driver);
1162 static void saa7134_fini(void)
1164 #if defined(CONFIG_MODULES) && defined(MODULE)
1165 if (pending_registered)
1166 unregister_module_notifier(&pending_notifier);
1167 #endif /* CONFIG_MODULES */
1168 pci_unregister_driver(&saa7134_pci_driver);
1171 module_init(saa7134_init);
1172 module_exit(saa7134_fini);
1174 /* ----------------------------------------------------------- */
1176 EXPORT_SYMBOL(saa7134_print_ioctl);
1177 EXPORT_SYMBOL(saa7134_i2c_call_clients);
1178 EXPORT_SYMBOL(saa7134_devlist);
1179 EXPORT_SYMBOL(saa7134_boards);
1181 /* ----------------- for the DMA sound modules --------------- */
1183 EXPORT_SYMBOL(dmasound_init);
1184 EXPORT_SYMBOL(dmasound_exit);
1185 EXPORT_SYMBOL(saa7134_pgtable_free);
1186 EXPORT_SYMBOL(saa7134_pgtable_build);
1187 EXPORT_SYMBOL(saa7134_pgtable_alloc);
1188 EXPORT_SYMBOL(saa7134_set_dmabits);
1190 /* ----------------------------------------------------------- */
1192 * Local variables:
1193 * c-basic-offset: 8
1194 * End: