1 /*
2  *  Driver for the Conexant CX23885 PCIe bridge
3  *
4  *  Copyright (c) 2006 Steven Toth <stoth@linuxtv.org>
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program; if not, write to the Free Software
19  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  */
21 
22 #include <linux/init.h>
23 #include <linux/list.h>
24 #include <linux/module.h>
25 #include <linux/moduleparam.h>
26 #include <linux/kmod.h>
27 #include <linux/kernel.h>
28 #include <linux/slab.h>
29 #include <linux/interrupt.h>
30 #include <linux/delay.h>
31 #include <asm/div64.h>
32 #include <linux/firmware.h>
33 
34 #include "cx23885.h"
35 #include "cimax2.h"
36 #include "altera-ci.h"
37 #include "cx23888-ir.h"
38 #include "cx23885-ir.h"
39 #include "cx23885-av.h"
40 #include "cx23885-input.h"
41 
42 MODULE_DESCRIPTION("Driver for cx23885 based TV cards");
43 MODULE_AUTHOR("Steven Toth <stoth@linuxtv.org>");
44 MODULE_LICENSE("GPL");
45 MODULE_VERSION(CX23885_VERSION);
46 
47 static unsigned int debug;
48 module_param(debug, int, 0644);
49 MODULE_PARM_DESC(debug, "enable debug messages");
50 
51 static unsigned int card[]  = {[0 ... (CX23885_MAXBOARDS - 1)] = UNSET };
52 module_param_array(card,  int, NULL, 0444);
53 MODULE_PARM_DESC(card, "card type");
54 
55 #define dprintk(level, fmt, arg...)\
56 	do { if (debug >= level)\
57 		printk(KERN_DEBUG "%s: " fmt, dev->name, ## arg);\
58 	} while (0)
59 
60 static unsigned int cx23885_devcount;
61 
62 #define NO_SYNC_LINE (-1U)
63 
64 /* FIXME, these allocations will change when
65  * analog arrives. The be reviewed.
66  * CX23887 Assumptions
67  * 1 line = 16 bytes of CDT
68  * cmds size = 80
69  * cdt size = 16 * linesize
70  * iqsize = 64
71  * maxlines = 6
72  *
73  * Address Space:
74  * 0x00000000 0x00008fff FIFO clusters
75  * 0x00010000 0x000104af Channel Management Data Structures
76  * 0x000104b0 0x000104ff Free
77  * 0x00010500 0x000108bf 15 channels * iqsize
78  * 0x000108c0 0x000108ff Free
79  * 0x00010900 0x00010e9f IQ's + Cluster Descriptor Tables
80  *                       15 channels * (iqsize + (maxlines * linesize))
81  * 0x00010ea0 0x00010xxx Free
82  */
83 
84 static struct sram_channel cx23885_sram_channels[] = {
85 	[SRAM_CH01] = {
86 		.name		= "VID A",
87 		.cmds_start	= 0x10000,
88 		.ctrl_start	= 0x10380,
89 		.cdt		= 0x104c0,
90 		.fifo_start	= 0x40,
91 		.fifo_size	= 0x2800,
92 		.ptr1_reg	= DMA1_PTR1,
93 		.ptr2_reg	= DMA1_PTR2,
94 		.cnt1_reg	= DMA1_CNT1,
95 		.cnt2_reg	= DMA1_CNT2,
96 	},
97 	[SRAM_CH02] = {
98 		.name		= "ch2",
99 		.cmds_start	= 0x0,
100 		.ctrl_start	= 0x0,
101 		.cdt		= 0x0,
102 		.fifo_start	= 0x0,
103 		.fifo_size	= 0x0,
104 		.ptr1_reg	= DMA2_PTR1,
105 		.ptr2_reg	= DMA2_PTR2,
106 		.cnt1_reg	= DMA2_CNT1,
107 		.cnt2_reg	= DMA2_CNT2,
108 	},
109 	[SRAM_CH03] = {
110 		.name		= "TS1 B",
111 		.cmds_start	= 0x100A0,
112 		.ctrl_start	= 0x10400,
113 		.cdt		= 0x10580,
114 		.fifo_start	= 0x5000,
115 		.fifo_size	= 0x1000,
116 		.ptr1_reg	= DMA3_PTR1,
117 		.ptr2_reg	= DMA3_PTR2,
118 		.cnt1_reg	= DMA3_CNT1,
119 		.cnt2_reg	= DMA3_CNT2,
120 	},
121 	[SRAM_CH04] = {
122 		.name		= "ch4",
123 		.cmds_start	= 0x0,
124 		.ctrl_start	= 0x0,
125 		.cdt		= 0x0,
126 		.fifo_start	= 0x0,
127 		.fifo_size	= 0x0,
128 		.ptr1_reg	= DMA4_PTR1,
129 		.ptr2_reg	= DMA4_PTR2,
130 		.cnt1_reg	= DMA4_CNT1,
131 		.cnt2_reg	= DMA4_CNT2,
132 	},
133 	[SRAM_CH05] = {
134 		.name		= "ch5",
135 		.cmds_start	= 0x0,
136 		.ctrl_start	= 0x0,
137 		.cdt		= 0x0,
138 		.fifo_start	= 0x0,
139 		.fifo_size	= 0x0,
140 		.ptr1_reg	= DMA5_PTR1,
141 		.ptr2_reg	= DMA5_PTR2,
142 		.cnt1_reg	= DMA5_CNT1,
143 		.cnt2_reg	= DMA5_CNT2,
144 	},
145 	[SRAM_CH06] = {
146 		.name		= "TS2 C",
147 		.cmds_start	= 0x10140,
148 		.ctrl_start	= 0x10440,
149 		.cdt		= 0x105e0,
150 		.fifo_start	= 0x6000,
151 		.fifo_size	= 0x1000,
152 		.ptr1_reg	= DMA5_PTR1,
153 		.ptr2_reg	= DMA5_PTR2,
154 		.cnt1_reg	= DMA5_CNT1,
155 		.cnt2_reg	= DMA5_CNT2,
156 	},
157 	[SRAM_CH07] = {
158 		.name		= "TV Audio",
159 		.cmds_start	= 0x10190,
160 		.ctrl_start	= 0x10480,
161 		.cdt		= 0x10a00,
162 		.fifo_start	= 0x7000,
163 		.fifo_size	= 0x1000,
164 		.ptr1_reg	= DMA6_PTR1,
165 		.ptr2_reg	= DMA6_PTR2,
166 		.cnt1_reg	= DMA6_CNT1,
167 		.cnt2_reg	= DMA6_CNT2,
168 	},
169 	[SRAM_CH08] = {
170 		.name		= "ch8",
171 		.cmds_start	= 0x0,
172 		.ctrl_start	= 0x0,
173 		.cdt		= 0x0,
174 		.fifo_start	= 0x0,
175 		.fifo_size	= 0x0,
176 		.ptr1_reg	= DMA7_PTR1,
177 		.ptr2_reg	= DMA7_PTR2,
178 		.cnt1_reg	= DMA7_CNT1,
179 		.cnt2_reg	= DMA7_CNT2,
180 	},
181 	[SRAM_CH09] = {
182 		.name		= "ch9",
183 		.cmds_start	= 0x0,
184 		.ctrl_start	= 0x0,
185 		.cdt		= 0x0,
186 		.fifo_start	= 0x0,
187 		.fifo_size	= 0x0,
188 		.ptr1_reg	= DMA8_PTR1,
189 		.ptr2_reg	= DMA8_PTR2,
190 		.cnt1_reg	= DMA8_CNT1,
191 		.cnt2_reg	= DMA8_CNT2,
192 	},
193 };
194 
195 static struct sram_channel cx23887_sram_channels[] = {
196 	[SRAM_CH01] = {
197 		.name		= "VID A",
198 		.cmds_start	= 0x10000,
199 		.ctrl_start	= 0x105b0,
200 		.cdt		= 0x107b0,
201 		.fifo_start	= 0x40,
202 		.fifo_size	= 0x2800,
203 		.ptr1_reg	= DMA1_PTR1,
204 		.ptr2_reg	= DMA1_PTR2,
205 		.cnt1_reg	= DMA1_CNT1,
206 		.cnt2_reg	= DMA1_CNT2,
207 	},
208 	[SRAM_CH02] = {
209 		.name		= "VID A (VBI)",
210 		.cmds_start	= 0x10050,
211 		.ctrl_start	= 0x105F0,
212 		.cdt		= 0x10810,
213 		.fifo_start	= 0x3000,
214 		.fifo_size	= 0x1000,
215 		.ptr1_reg	= DMA2_PTR1,
216 		.ptr2_reg	= DMA2_PTR2,
217 		.cnt1_reg	= DMA2_CNT1,
218 		.cnt2_reg	= DMA2_CNT2,
219 	},
220 	[SRAM_CH03] = {
221 		.name		= "TS1 B",
222 		.cmds_start	= 0x100A0,
223 		.ctrl_start	= 0x10630,
224 		.cdt		= 0x10870,
225 		.fifo_start	= 0x5000,
226 		.fifo_size	= 0x1000,
227 		.ptr1_reg	= DMA3_PTR1,
228 		.ptr2_reg	= DMA3_PTR2,
229 		.cnt1_reg	= DMA3_CNT1,
230 		.cnt2_reg	= DMA3_CNT2,
231 	},
232 	[SRAM_CH04] = {
233 		.name		= "ch4",
234 		.cmds_start	= 0x0,
235 		.ctrl_start	= 0x0,
236 		.cdt		= 0x0,
237 		.fifo_start	= 0x0,
238 		.fifo_size	= 0x0,
239 		.ptr1_reg	= DMA4_PTR1,
240 		.ptr2_reg	= DMA4_PTR2,
241 		.cnt1_reg	= DMA4_CNT1,
242 		.cnt2_reg	= DMA4_CNT2,
243 	},
244 	[SRAM_CH05] = {
245 		.name		= "ch5",
246 		.cmds_start	= 0x0,
247 		.ctrl_start	= 0x0,
248 		.cdt		= 0x0,
249 		.fifo_start	= 0x0,
250 		.fifo_size	= 0x0,
251 		.ptr1_reg	= DMA5_PTR1,
252 		.ptr2_reg	= DMA5_PTR2,
253 		.cnt1_reg	= DMA5_CNT1,
254 		.cnt2_reg	= DMA5_CNT2,
255 	},
256 	[SRAM_CH06] = {
257 		.name		= "TS2 C",
258 		.cmds_start	= 0x10140,
259 		.ctrl_start	= 0x10670,
260 		.cdt		= 0x108d0,
261 		.fifo_start	= 0x6000,
262 		.fifo_size	= 0x1000,
263 		.ptr1_reg	= DMA5_PTR1,
264 		.ptr2_reg	= DMA5_PTR2,
265 		.cnt1_reg	= DMA5_CNT1,
266 		.cnt2_reg	= DMA5_CNT2,
267 	},
268 	[SRAM_CH07] = {
269 		.name		= "TV Audio",
270 		.cmds_start	= 0x10190,
271 		.ctrl_start	= 0x106B0,
272 		.cdt		= 0x10930,
273 		.fifo_start	= 0x7000,
274 		.fifo_size	= 0x1000,
275 		.ptr1_reg	= DMA6_PTR1,
276 		.ptr2_reg	= DMA6_PTR2,
277 		.cnt1_reg	= DMA6_CNT1,
278 		.cnt2_reg	= DMA6_CNT2,
279 	},
280 	[SRAM_CH08] = {
281 		.name		= "ch8",
282 		.cmds_start	= 0x0,
283 		.ctrl_start	= 0x0,
284 		.cdt		= 0x0,
285 		.fifo_start	= 0x0,
286 		.fifo_size	= 0x0,
287 		.ptr1_reg	= DMA7_PTR1,
288 		.ptr2_reg	= DMA7_PTR2,
289 		.cnt1_reg	= DMA7_CNT1,
290 		.cnt2_reg	= DMA7_CNT2,
291 	},
292 	[SRAM_CH09] = {
293 		.name		= "ch9",
294 		.cmds_start	= 0x0,
295 		.ctrl_start	= 0x0,
296 		.cdt		= 0x0,
297 		.fifo_start	= 0x0,
298 		.fifo_size	= 0x0,
299 		.ptr1_reg	= DMA8_PTR1,
300 		.ptr2_reg	= DMA8_PTR2,
301 		.cnt1_reg	= DMA8_CNT1,
302 		.cnt2_reg	= DMA8_CNT2,
303 	},
304 };
305 
306 static void cx23885_irq_add(struct cx23885_dev *dev, u32 mask)
307 {
308 	unsigned long flags;
309 	spin_lock_irqsave(&dev->pci_irqmask_lock, flags);
310 
311 	dev->pci_irqmask |= mask;
312 
313 	spin_unlock_irqrestore(&dev->pci_irqmask_lock, flags);
314 }
315 
316 void cx23885_irq_add_enable(struct cx23885_dev *dev, u32 mask)
317 {
318 	unsigned long flags;
319 	spin_lock_irqsave(&dev->pci_irqmask_lock, flags);
320 
321 	dev->pci_irqmask |= mask;
322 	cx_set(PCI_INT_MSK, mask);
323 
324 	spin_unlock_irqrestore(&dev->pci_irqmask_lock, flags);
325 }
326 
327 void cx23885_irq_enable(struct cx23885_dev *dev, u32 mask)
328 {
329 	u32 v;
330 	unsigned long flags;
331 	spin_lock_irqsave(&dev->pci_irqmask_lock, flags);
332 
333 	v = mask & dev->pci_irqmask;
334 	if (v)
335 		cx_set(PCI_INT_MSK, v);
336 
337 	spin_unlock_irqrestore(&dev->pci_irqmask_lock, flags);
338 }
339 
340 static inline void cx23885_irq_enable_all(struct cx23885_dev *dev)
341 {
342 	cx23885_irq_enable(dev, 0xffffffff);
343 }
344 
345 void cx23885_irq_disable(struct cx23885_dev *dev, u32 mask)
346 {
347 	unsigned long flags;
348 	spin_lock_irqsave(&dev->pci_irqmask_lock, flags);
349 
350 	cx_clear(PCI_INT_MSK, mask);
351 
352 	spin_unlock_irqrestore(&dev->pci_irqmask_lock, flags);
353 }
354 
355 static inline void cx23885_irq_disable_all(struct cx23885_dev *dev)
356 {
357 	cx23885_irq_disable(dev, 0xffffffff);
358 }
359 
360 void cx23885_irq_remove(struct cx23885_dev *dev, u32 mask)
361 {
362 	unsigned long flags;
363 	spin_lock_irqsave(&dev->pci_irqmask_lock, flags);
364 
365 	dev->pci_irqmask &= ~mask;
366 	cx_clear(PCI_INT_MSK, mask);
367 
368 	spin_unlock_irqrestore(&dev->pci_irqmask_lock, flags);
369 }
370 
371 static u32 cx23885_irq_get_mask(struct cx23885_dev *dev)
372 {
373 	u32 v;
374 	unsigned long flags;
375 	spin_lock_irqsave(&dev->pci_irqmask_lock, flags);
376 
377 	v = cx_read(PCI_INT_MSK);
378 
379 	spin_unlock_irqrestore(&dev->pci_irqmask_lock, flags);
380 	return v;
381 }
382 
383 static int cx23885_risc_decode(u32 risc)
384 {
385 	static char *instr[16] = {
386 		[RISC_SYNC    >> 28] = "sync",
387 		[RISC_WRITE   >> 28] = "write",
388 		[RISC_WRITEC  >> 28] = "writec",
389 		[RISC_READ    >> 28] = "read",
390 		[RISC_READC   >> 28] = "readc",
391 		[RISC_JUMP    >> 28] = "jump",
392 		[RISC_SKIP    >> 28] = "skip",
393 		[RISC_WRITERM >> 28] = "writerm",
394 		[RISC_WRITECM >> 28] = "writecm",
395 		[RISC_WRITECR >> 28] = "writecr",
396 	};
397 	static int incr[16] = {
398 		[RISC_WRITE   >> 28] = 3,
399 		[RISC_JUMP    >> 28] = 3,
400 		[RISC_SKIP    >> 28] = 1,
401 		[RISC_SYNC    >> 28] = 1,
402 		[RISC_WRITERM >> 28] = 3,
403 		[RISC_WRITECM >> 28] = 3,
404 		[RISC_WRITECR >> 28] = 4,
405 	};
406 	static char *bits[] = {
407 		"12",   "13",   "14",   "resync",
408 		"cnt0", "cnt1", "18",   "19",
409 		"20",   "21",   "22",   "23",
410 		"irq1", "irq2", "eol",  "sol",
411 	};
412 	int i;
413 
414 	printk("0x%08x [ %s", risc,
415 	       instr[risc >> 28] ? instr[risc >> 28] : "INVALID");
416 	for (i = ARRAY_SIZE(bits) - 1; i >= 0; i--)
417 		if (risc & (1 << (i + 12)))
418 			printk(" %s", bits[i]);
419 	printk(" count=%d ]\n", risc & 0xfff);
420 	return incr[risc >> 28] ? incr[risc >> 28] : 1;
421 }
422 
423 void cx23885_wakeup(struct cx23885_tsport *port,
424 			   struct cx23885_dmaqueue *q, u32 count)
425 {
426 	struct cx23885_dev *dev = port->dev;
427 	struct cx23885_buffer *buf;
428 	int bc;
429 
430 	for (bc = 0;; bc++) {
431 		if (list_empty(&q->active))
432 			break;
433 		buf = list_entry(q->active.next,
434 				 struct cx23885_buffer, vb.queue);
435 
436 		/* count comes from the hw and is is 16bit wide --
437 		 * this trick handles wrap-arounds correctly for
438 		 * up to 32767 buffers in flight... */
439 		if ((s16) (count - buf->count) < 0)
440 			break;
441 
442 		v4l2_get_timestamp(&buf->vb.ts);
443 		dprintk(2, "[%p/%d] wakeup reg=%d buf=%d\n", buf, buf->vb.i,
444 			count, buf->count);
445 		buf->vb.state = VIDEOBUF_DONE;
446 		list_del(&buf->vb.queue);
447 		wake_up(&buf->vb.done);
448 	}
449 	if (list_empty(&q->active))
450 		del_timer(&q->timeout);
451 	else
452 		mod_timer(&q->timeout, jiffies + BUFFER_TIMEOUT);
453 	if (bc != 1)
454 		printk(KERN_WARNING "%s: %d buffers handled (should be 1)\n",
455 		       __func__, bc);
456 }
457 
458 int cx23885_sram_channel_setup(struct cx23885_dev *dev,
459 				      struct sram_channel *ch,
460 				      unsigned int bpl, u32 risc)
461 {
462 	unsigned int i, lines;
463 	u32 cdt;
464 
465 	if (ch->cmds_start == 0) {
466 		dprintk(1, "%s() Erasing channel [%s]\n", __func__,
467 			ch->name);
468 		cx_write(ch->ptr1_reg, 0);
469 		cx_write(ch->ptr2_reg, 0);
470 		cx_write(ch->cnt2_reg, 0);
471 		cx_write(ch->cnt1_reg, 0);
472 		return 0;
473 	} else {
474 		dprintk(1, "%s() Configuring channel [%s]\n", __func__,
475 			ch->name);
476 	}
477 
478 	bpl   = (bpl + 7) & ~7; /* alignment */
479 	cdt   = ch->cdt;
480 	lines = ch->fifo_size / bpl;
481 	if (lines > 6)
482 		lines = 6;
483 	BUG_ON(lines < 2);
484 
485 	cx_write(8 + 0, RISC_JUMP | RISC_IRQ1 | RISC_CNT_INC);
486 	cx_write(8 + 4, 8);
487 	cx_write(8 + 8, 0);
488 
489 	/* write CDT */
490 	for (i = 0; i < lines; i++) {
491 		dprintk(2, "%s() 0x%08x <- 0x%08x\n", __func__, cdt + 16*i,
492 			ch->fifo_start + bpl*i);
493 		cx_write(cdt + 16*i, ch->fifo_start + bpl*i);
494 		cx_write(cdt + 16*i +  4, 0);
495 		cx_write(cdt + 16*i +  8, 0);
496 		cx_write(cdt + 16*i + 12, 0);
497 	}
498 
499 	/* write CMDS */
500 	if (ch->jumponly)
501 		cx_write(ch->cmds_start + 0, 8);
502 	else
503 		cx_write(ch->cmds_start + 0, risc);
504 	cx_write(ch->cmds_start +  4, 0); /* 64 bits 63-32 */
505 	cx_write(ch->cmds_start +  8, cdt);
506 	cx_write(ch->cmds_start + 12, (lines*16) >> 3);
507 	cx_write(ch->cmds_start + 16, ch->ctrl_start);
508 	if (ch->jumponly)
509 		cx_write(ch->cmds_start + 20, 0x80000000 | (64 >> 2));
510 	else
511 		cx_write(ch->cmds_start + 20, 64 >> 2);
512 	for (i = 24; i < 80; i += 4)
513 		cx_write(ch->cmds_start + i, 0);
514 
515 	/* fill registers */
516 	cx_write(ch->ptr1_reg, ch->fifo_start);
517 	cx_write(ch->ptr2_reg, cdt);
518 	cx_write(ch->cnt2_reg, (lines*16) >> 3);
519 	cx_write(ch->cnt1_reg, (bpl >> 3) - 1);
520 
521 	dprintk(2, "[bridge %d] sram setup %s: bpl=%d lines=%d\n",
522 		dev->bridge,
523 		ch->name,
524 		bpl,
525 		lines);
526 
527 	return 0;
528 }
529 
530 void cx23885_sram_channel_dump(struct cx23885_dev *dev,
531 				      struct sram_channel *ch)
532 {
533 	static char *name[] = {
534 		"init risc lo",
535 		"init risc hi",
536 		"cdt base",
537 		"cdt size",
538 		"iq base",
539 		"iq size",
540 		"risc pc lo",
541 		"risc pc hi",
542 		"iq wr ptr",
543 		"iq rd ptr",
544 		"cdt current",
545 		"pci target lo",
546 		"pci target hi",
547 		"line / byte",
548 	};
549 	u32 risc;
550 	unsigned int i, j, n;
551 
552 	printk(KERN_WARNING "%s: %s - dma channel status dump\n",
553 	       dev->name, ch->name);
554 	for (i = 0; i < ARRAY_SIZE(name); i++)
555 		printk(KERN_WARNING "%s:   cmds: %-15s: 0x%08x\n",
556 		       dev->name, name[i],
557 		       cx_read(ch->cmds_start + 4*i));
558 
559 	for (i = 0; i < 4; i++) {
560 		risc = cx_read(ch->cmds_start + 4 * (i + 14));
561 		printk(KERN_WARNING "%s:   risc%d: ", dev->name, i);
562 		cx23885_risc_decode(risc);
563 	}
564 	for (i = 0; i < (64 >> 2); i += n) {
565 		risc = cx_read(ch->ctrl_start + 4 * i);
566 		/* No consideration for bits 63-32 */
567 
568 		printk(KERN_WARNING "%s:   (0x%08x) iq %x: ", dev->name,
569 		       ch->ctrl_start + 4 * i, i);
570 		n = cx23885_risc_decode(risc);
571 		for (j = 1; j < n; j++) {
572 			risc = cx_read(ch->ctrl_start + 4 * (i + j));
573 			printk(KERN_WARNING "%s:   iq %x: 0x%08x [ arg #%d ]\n",
574 			       dev->name, i+j, risc, j);
575 		}
576 	}
577 
578 	printk(KERN_WARNING "%s: fifo: 0x%08x -> 0x%x\n",
579 	       dev->name, ch->fifo_start, ch->fifo_start+ch->fifo_size);
580 	printk(KERN_WARNING "%s: ctrl: 0x%08x -> 0x%x\n",
581 	       dev->name, ch->ctrl_start, ch->ctrl_start + 6*16);
582 	printk(KERN_WARNING "%s:   ptr1_reg: 0x%08x\n",
583 	       dev->name, cx_read(ch->ptr1_reg));
584 	printk(KERN_WARNING "%s:   ptr2_reg: 0x%08x\n",
585 	       dev->name, cx_read(ch->ptr2_reg));
586 	printk(KERN_WARNING "%s:   cnt1_reg: 0x%08x\n",
587 	       dev->name, cx_read(ch->cnt1_reg));
588 	printk(KERN_WARNING "%s:   cnt2_reg: 0x%08x\n",
589 	       dev->name, cx_read(ch->cnt2_reg));
590 }
591 
592 static void cx23885_risc_disasm(struct cx23885_tsport *port,
593 				struct btcx_riscmem *risc)
594 {
595 	struct cx23885_dev *dev = port->dev;
596 	unsigned int i, j, n;
597 
598 	printk(KERN_INFO "%s: risc disasm: %p [dma=0x%08lx]\n",
599 	       dev->name, risc->cpu, (unsigned long)risc->dma);
600 	for (i = 0; i < (risc->size >> 2); i += n) {
601 		printk(KERN_INFO "%s:   %04d: ", dev->name, i);
602 		n = cx23885_risc_decode(le32_to_cpu(risc->cpu[i]));
603 		for (j = 1; j < n; j++)
604 			printk(KERN_INFO "%s:   %04d: 0x%08x [ arg #%d ]\n",
605 			       dev->name, i + j, risc->cpu[i + j], j);
606 		if (risc->cpu[i] == cpu_to_le32(RISC_JUMP))
607 			break;
608 	}
609 }
610 
611 static void cx23885_shutdown(struct cx23885_dev *dev)
612 {
613 	/* disable RISC controller */
614 	cx_write(DEV_CNTRL2, 0);
615 
616 	/* Disable all IR activity */
617 	cx_write(IR_CNTRL_REG, 0);
618 
619 	/* Disable Video A/B activity */
620 	cx_write(VID_A_DMA_CTL, 0);
621 	cx_write(VID_B_DMA_CTL, 0);
622 	cx_write(VID_C_DMA_CTL, 0);
623 
624 	/* Disable Audio activity */
625 	cx_write(AUD_INT_DMA_CTL, 0);
626 	cx_write(AUD_EXT_DMA_CTL, 0);
627 
628 	/* Disable Serial port */
629 	cx_write(UART_CTL, 0);
630 
631 	/* Disable Interrupts */
632 	cx23885_irq_disable_all(dev);
633 	cx_write(VID_A_INT_MSK, 0);
634 	cx_write(VID_B_INT_MSK, 0);
635 	cx_write(VID_C_INT_MSK, 0);
636 	cx_write(AUDIO_INT_INT_MSK, 0);
637 	cx_write(AUDIO_EXT_INT_MSK, 0);
638 
639 }
640 
641 static void cx23885_reset(struct cx23885_dev *dev)
642 {
643 	dprintk(1, "%s()\n", __func__);
644 
645 	cx23885_shutdown(dev);
646 
647 	cx_write(PCI_INT_STAT, 0xffffffff);
648 	cx_write(VID_A_INT_STAT, 0xffffffff);
649 	cx_write(VID_B_INT_STAT, 0xffffffff);
650 	cx_write(VID_C_INT_STAT, 0xffffffff);
651 	cx_write(AUDIO_INT_INT_STAT, 0xffffffff);
652 	cx_write(AUDIO_EXT_INT_STAT, 0xffffffff);
653 	cx_write(CLK_DELAY, cx_read(CLK_DELAY) & 0x80000000);
654 	cx_write(PAD_CTRL, 0x00500300);
655 
656 	mdelay(100);
657 
658 	cx23885_sram_channel_setup(dev, &dev->sram_channels[SRAM_CH01],
659 		720*4, 0);
660 	cx23885_sram_channel_setup(dev, &dev->sram_channels[SRAM_CH02], 128, 0);
661 	cx23885_sram_channel_setup(dev, &dev->sram_channels[SRAM_CH03],
662 		188*4, 0);
663 	cx23885_sram_channel_setup(dev, &dev->sram_channels[SRAM_CH04], 128, 0);
664 	cx23885_sram_channel_setup(dev, &dev->sram_channels[SRAM_CH05], 128, 0);
665 	cx23885_sram_channel_setup(dev, &dev->sram_channels[SRAM_CH06],
666 		188*4, 0);
667 	cx23885_sram_channel_setup(dev, &dev->sram_channels[SRAM_CH07], 128, 0);
668 	cx23885_sram_channel_setup(dev, &dev->sram_channels[SRAM_CH08], 128, 0);
669 	cx23885_sram_channel_setup(dev, &dev->sram_channels[SRAM_CH09], 128, 0);
670 
671 	cx23885_gpio_setup(dev);
672 }
673 
674 
675 static int cx23885_pci_quirks(struct cx23885_dev *dev)
676 {
677 	dprintk(1, "%s()\n", __func__);
678 
679 	/* The cx23885 bridge has a weird bug which causes NMI to be asserted
680 	 * when DMA begins if RDR_TLCTL0 bit4 is not cleared. It does not
681 	 * occur on the cx23887 bridge.
682 	 */
683 	if (dev->bridge == CX23885_BRIDGE_885)
684 		cx_clear(RDR_TLCTL0, 1 << 4);
685 
686 	return 0;
687 }
688 
689 static int get_resources(struct cx23885_dev *dev)
690 {
691 	if (request_mem_region(pci_resource_start(dev->pci, 0),
692 			       pci_resource_len(dev->pci, 0),
693 			       dev->name))
694 		return 0;
695 
696 	printk(KERN_ERR "%s: can't get MMIO memory @ 0x%llx\n",
697 		dev->name, (unsigned long long)pci_resource_start(dev->pci, 0));
698 
699 	return -EBUSY;
700 }
701 
702 static void cx23885_timeout(unsigned long data);
703 int cx23885_risc_stopper(struct pci_dev *pci, struct btcx_riscmem *risc,
704 				u32 reg, u32 mask, u32 value);
705 
706 static int cx23885_init_tsport(struct cx23885_dev *dev,
707 	struct cx23885_tsport *port, int portno)
708 {
709 	dprintk(1, "%s(portno=%d)\n", __func__, portno);
710 
711 	/* Transport bus init dma queue  - Common settings */
712 	port->dma_ctl_val        = 0x11; /* Enable RISC controller and Fifo */
713 	port->ts_int_msk_val     = 0x1111; /* TS port bits for RISC */
714 	port->vld_misc_val       = 0x0;
715 	port->hw_sop_ctrl_val    = (0x47 << 16 | 188 << 4);
716 
717 	spin_lock_init(&port->slock);
718 	port->dev = dev;
719 	port->nr = portno;
720 
721 	INIT_LIST_HEAD(&port->mpegq.active);
722 	INIT_LIST_HEAD(&port->mpegq.queued);
723 	port->mpegq.timeout.function = cx23885_timeout;
724 	port->mpegq.timeout.data = (unsigned long)port;
725 	init_timer(&port->mpegq.timeout);
726 
727 	mutex_init(&port->frontends.lock);
728 	INIT_LIST_HEAD(&port->frontends.felist);
729 	port->frontends.active_fe_id = 0;
730 
731 	/* This should be hardcoded allow a single frontend
732 	 * attachment to this tsport, keeping the -dvb.c
733 	 * code clean and safe.
734 	 */
735 	if (!port->num_frontends)
736 		port->num_frontends = 1;
737 
738 	switch (portno) {
739 	case 1:
740 		port->reg_gpcnt          = VID_B_GPCNT;
741 		port->reg_gpcnt_ctl      = VID_B_GPCNT_CTL;
742 		port->reg_dma_ctl        = VID_B_DMA_CTL;
743 		port->reg_lngth          = VID_B_LNGTH;
744 		port->reg_hw_sop_ctrl    = VID_B_HW_SOP_CTL;
745 		port->reg_gen_ctrl       = VID_B_GEN_CTL;
746 		port->reg_bd_pkt_status  = VID_B_BD_PKT_STATUS;
747 		port->reg_sop_status     = VID_B_SOP_STATUS;
748 		port->reg_fifo_ovfl_stat = VID_B_FIFO_OVFL_STAT;
749 		port->reg_vld_misc       = VID_B_VLD_MISC;
750 		port->reg_ts_clk_en      = VID_B_TS_CLK_EN;
751 		port->reg_src_sel        = VID_B_SRC_SEL;
752 		port->reg_ts_int_msk     = VID_B_INT_MSK;
753 		port->reg_ts_int_stat    = VID_B_INT_STAT;
754 		port->sram_chno          = SRAM_CH03; /* VID_B */
755 		port->pci_irqmask        = 0x02; /* VID_B bit1 */
756 		break;
757 	case 2:
758 		port->reg_gpcnt          = VID_C_GPCNT;
759 		port->reg_gpcnt_ctl      = VID_C_GPCNT_CTL;
760 		port->reg_dma_ctl        = VID_C_DMA_CTL;
761 		port->reg_lngth          = VID_C_LNGTH;
762 		port->reg_hw_sop_ctrl    = VID_C_HW_SOP_CTL;
763 		port->reg_gen_ctrl       = VID_C_GEN_CTL;
764 		port->reg_bd_pkt_status  = VID_C_BD_PKT_STATUS;
765 		port->reg_sop_status     = VID_C_SOP_STATUS;
766 		port->reg_fifo_ovfl_stat = VID_C_FIFO_OVFL_STAT;
767 		port->reg_vld_misc       = VID_C_VLD_MISC;
768 		port->reg_ts_clk_en      = VID_C_TS_CLK_EN;
769 		port->reg_src_sel        = 0;
770 		port->reg_ts_int_msk     = VID_C_INT_MSK;
771 		port->reg_ts_int_stat    = VID_C_INT_STAT;
772 		port->sram_chno          = SRAM_CH06; /* VID_C */
773 		port->pci_irqmask        = 0x04; /* VID_C bit2 */
774 		break;
775 	default:
776 		BUG();
777 	}
778 
779 	cx23885_risc_stopper(dev->pci, &port->mpegq.stopper,
780 		     port->reg_dma_ctl, port->dma_ctl_val, 0x00);
781 
782 	return 0;
783 }
784 
785 static void cx23885_dev_checkrevision(struct cx23885_dev *dev)
786 {
787 	switch (cx_read(RDR_CFG2) & 0xff) {
788 	case 0x00:
789 		/* cx23885 */
790 		dev->hwrevision = 0xa0;
791 		break;
792 	case 0x01:
793 		/* CX23885-12Z */
794 		dev->hwrevision = 0xa1;
795 		break;
796 	case 0x02:
797 		/* CX23885-13Z/14Z */
798 		dev->hwrevision = 0xb0;
799 		break;
800 	case 0x03:
801 		if (dev->pci->device == 0x8880) {
802 			/* CX23888-21Z/22Z */
803 			dev->hwrevision = 0xc0;
804 		} else {
805 			/* CX23885-14Z */
806 			dev->hwrevision = 0xa4;
807 		}
808 		break;
809 	case 0x04:
810 		if (dev->pci->device == 0x8880) {
811 			/* CX23888-31Z */
812 			dev->hwrevision = 0xd0;
813 		} else {
814 			/* CX23885-15Z, CX23888-31Z */
815 			dev->hwrevision = 0xa5;
816 		}
817 		break;
818 	case 0x0e:
819 		/* CX23887-15Z */
820 		dev->hwrevision = 0xc0;
821 		break;
822 	case 0x0f:
823 		/* CX23887-14Z */
824 		dev->hwrevision = 0xb1;
825 		break;
826 	default:
827 		printk(KERN_ERR "%s() New hardware revision found 0x%x\n",
828 			__func__, dev->hwrevision);
829 	}
830 	if (dev->hwrevision)
831 		printk(KERN_INFO "%s() Hardware revision = 0x%02x\n",
832 			__func__, dev->hwrevision);
833 	else
834 		printk(KERN_ERR "%s() Hardware revision unknown 0x%x\n",
835 			__func__, dev->hwrevision);
836 }
837 
838 /* Find the first v4l2_subdev member of the group id in hw */
839 struct v4l2_subdev *cx23885_find_hw(struct cx23885_dev *dev, u32 hw)
840 {
841 	struct v4l2_subdev *result = NULL;
842 	struct v4l2_subdev *sd;
843 
844 	spin_lock(&dev->v4l2_dev.lock);
845 	v4l2_device_for_each_subdev(sd, &dev->v4l2_dev) {
846 		if (sd->grp_id == hw) {
847 			result = sd;
848 			break;
849 		}
850 	}
851 	spin_unlock(&dev->v4l2_dev.lock);
852 	return result;
853 }
854 
855 static int cx23885_dev_setup(struct cx23885_dev *dev)
856 {
857 	int i;
858 
859 	spin_lock_init(&dev->pci_irqmask_lock);
860 
861 	mutex_init(&dev->lock);
862 	mutex_init(&dev->gpio_lock);
863 
864 	atomic_inc(&dev->refcount);
865 
866 	dev->nr = cx23885_devcount++;
867 	sprintf(dev->name, "cx23885[%d]", dev->nr);
868 
869 	/* Configure the internal memory */
870 	if (dev->pci->device == 0x8880) {
871 		/* Could be 887 or 888, assume a default */
872 		dev->bridge = CX23885_BRIDGE_887;
873 		/* Apply a sensible clock frequency for the PCIe bridge */
874 		dev->clk_freq = 25000000;
875 		dev->sram_channels = cx23887_sram_channels;
876 	} else
877 	if (dev->pci->device == 0x8852) {
878 		dev->bridge = CX23885_BRIDGE_885;
879 		/* Apply a sensible clock frequency for the PCIe bridge */
880 		dev->clk_freq = 28000000;
881 		dev->sram_channels = cx23885_sram_channels;
882 	} else
883 		BUG();
884 
885 	dprintk(1, "%s() Memory configured for PCIe bridge type %d\n",
886 		__func__, dev->bridge);
887 
888 	/* board config */
889 	dev->board = UNSET;
890 	if (card[dev->nr] < cx23885_bcount)
891 		dev->board = card[dev->nr];
892 	for (i = 0; UNSET == dev->board  &&  i < cx23885_idcount; i++)
893 		if (dev->pci->subsystem_vendor == cx23885_subids[i].subvendor &&
894 		    dev->pci->subsystem_device == cx23885_subids[i].subdevice)
895 			dev->board = cx23885_subids[i].card;
896 	if (UNSET == dev->board) {
897 		dev->board = CX23885_BOARD_UNKNOWN;
898 		cx23885_card_list(dev);
899 	}
900 
901 	/* If the user specific a clk freq override, apply it */
902 	if (cx23885_boards[dev->board].clk_freq > 0)
903 		dev->clk_freq = cx23885_boards[dev->board].clk_freq;
904 
905 	dev->pci_bus  = dev->pci->bus->number;
906 	dev->pci_slot = PCI_SLOT(dev->pci->devfn);
907 	cx23885_irq_add(dev, 0x001f00);
908 
909 	/* External Master 1 Bus */
910 	dev->i2c_bus[0].nr = 0;
911 	dev->i2c_bus[0].dev = dev;
912 	dev->i2c_bus[0].reg_stat  = I2C1_STAT;
913 	dev->i2c_bus[0].reg_ctrl  = I2C1_CTRL;
914 	dev->i2c_bus[0].reg_addr  = I2C1_ADDR;
915 	dev->i2c_bus[0].reg_rdata = I2C1_RDATA;
916 	dev->i2c_bus[0].reg_wdata = I2C1_WDATA;
917 	dev->i2c_bus[0].i2c_period = (0x9d << 24); /* 100kHz */
918 
919 	/* External Master 2 Bus */
920 	dev->i2c_bus[1].nr = 1;
921 	dev->i2c_bus[1].dev = dev;
922 	dev->i2c_bus[1].reg_stat  = I2C2_STAT;
923 	dev->i2c_bus[1].reg_ctrl  = I2C2_CTRL;
924 	dev->i2c_bus[1].reg_addr  = I2C2_ADDR;
925 	dev->i2c_bus[1].reg_rdata = I2C2_RDATA;
926 	dev->i2c_bus[1].reg_wdata = I2C2_WDATA;
927 	dev->i2c_bus[1].i2c_period = (0x9d << 24); /* 100kHz */
928 
929 	/* Internal Master 3 Bus */
930 	dev->i2c_bus[2].nr = 2;
931 	dev->i2c_bus[2].dev = dev;
932 	dev->i2c_bus[2].reg_stat  = I2C3_STAT;
933 	dev->i2c_bus[2].reg_ctrl  = I2C3_CTRL;
934 	dev->i2c_bus[2].reg_addr  = I2C3_ADDR;
935 	dev->i2c_bus[2].reg_rdata = I2C3_RDATA;
936 	dev->i2c_bus[2].reg_wdata = I2C3_WDATA;
937 	dev->i2c_bus[2].i2c_period = (0x07 << 24); /* 1.95MHz */
938 
939 	if ((cx23885_boards[dev->board].portb == CX23885_MPEG_DVB) ||
940 		(cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER))
941 		cx23885_init_tsport(dev, &dev->ts1, 1);
942 
943 	if ((cx23885_boards[dev->board].portc == CX23885_MPEG_DVB) ||
944 		(cx23885_boards[dev->board].portc == CX23885_MPEG_ENCODER))
945 		cx23885_init_tsport(dev, &dev->ts2, 2);
946 
947 	if (get_resources(dev) < 0) {
948 		printk(KERN_ERR "CORE %s No more PCIe resources for "
949 		       "subsystem: %04x:%04x\n",
950 		       dev->name, dev->pci->subsystem_vendor,
951 		       dev->pci->subsystem_device);
952 
953 		cx23885_devcount--;
954 		return -ENODEV;
955 	}
956 
957 	/* PCIe stuff */
958 	dev->lmmio = ioremap(pci_resource_start(dev->pci, 0),
959 			     pci_resource_len(dev->pci, 0));
960 
961 	dev->bmmio = (u8 __iomem *)dev->lmmio;
962 
963 	printk(KERN_INFO "CORE %s: subsystem: %04x:%04x, board: %s [card=%d,%s]\n",
964 	       dev->name, dev->pci->subsystem_vendor,
965 	       dev->pci->subsystem_device, cx23885_boards[dev->board].name,
966 	       dev->board, card[dev->nr] == dev->board ?
967 	       "insmod option" : "autodetected");
968 
969 	cx23885_pci_quirks(dev);
970 
971 	/* Assume some sensible defaults */
972 	dev->tuner_type = cx23885_boards[dev->board].tuner_type;
973 	dev->tuner_addr = cx23885_boards[dev->board].tuner_addr;
974 	dev->tuner_bus = cx23885_boards[dev->board].tuner_bus;
975 	dev->radio_type = cx23885_boards[dev->board].radio_type;
976 	dev->radio_addr = cx23885_boards[dev->board].radio_addr;
977 
978 	dprintk(1, "%s() tuner_type = 0x%x tuner_addr = 0x%x tuner_bus = %d\n",
979 		__func__, dev->tuner_type, dev->tuner_addr, dev->tuner_bus);
980 	dprintk(1, "%s() radio_type = 0x%x radio_addr = 0x%x\n",
981 		__func__, dev->radio_type, dev->radio_addr);
982 
983 	/* The cx23417 encoder has GPIO's that need to be initialised
984 	 * before DVB, so that demodulators and tuners are out of
985 	 * reset before DVB uses them.
986 	 */
987 	if ((cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER) ||
988 		(cx23885_boards[dev->board].portc == CX23885_MPEG_ENCODER))
989 			cx23885_mc417_init(dev);
990 
991 	/* init hardware */
992 	cx23885_reset(dev);
993 
994 	cx23885_i2c_register(&dev->i2c_bus[0]);
995 	cx23885_i2c_register(&dev->i2c_bus[1]);
996 	cx23885_i2c_register(&dev->i2c_bus[2]);
997 	cx23885_card_setup(dev);
998 	call_all(dev, core, s_power, 0);
999 	cx23885_ir_init(dev);
1000 
1001 	if (cx23885_boards[dev->board].porta == CX23885_ANALOG_VIDEO) {
1002 		if (cx23885_video_register(dev) < 0) {
1003 			printk(KERN_ERR "%s() Failed to register analog "
1004 				"video adapters on VID_A\n", __func__);
1005 		}
1006 	}
1007 
1008 	if (cx23885_boards[dev->board].portb == CX23885_MPEG_DVB) {
1009 		if (cx23885_boards[dev->board].num_fds_portb)
1010 			dev->ts1.num_frontends =
1011 				cx23885_boards[dev->board].num_fds_portb;
1012 		if (cx23885_dvb_register(&dev->ts1) < 0) {
1013 			printk(KERN_ERR "%s() Failed to register dvb adapters on VID_B\n",
1014 			       __func__);
1015 		}
1016 	} else
1017 	if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER) {
1018 		if (cx23885_417_register(dev) < 0) {
1019 			printk(KERN_ERR
1020 				"%s() Failed to register 417 on VID_B\n",
1021 			       __func__);
1022 		}
1023 	}
1024 
1025 	if (cx23885_boards[dev->board].portc == CX23885_MPEG_DVB) {
1026 		if (cx23885_boards[dev->board].num_fds_portc)
1027 			dev->ts2.num_frontends =
1028 				cx23885_boards[dev->board].num_fds_portc;
1029 		if (cx23885_dvb_register(&dev->ts2) < 0) {
1030 			printk(KERN_ERR
1031 				"%s() Failed to register dvb on VID_C\n",
1032 			       __func__);
1033 		}
1034 	} else
1035 	if (cx23885_boards[dev->board].portc == CX23885_MPEG_ENCODER) {
1036 		if (cx23885_417_register(dev) < 0) {
1037 			printk(KERN_ERR
1038 				"%s() Failed to register 417 on VID_C\n",
1039 			       __func__);
1040 		}
1041 	}
1042 
1043 	cx23885_dev_checkrevision(dev);
1044 
1045 	/* disable MSI for NetUP cards, otherwise CI is not working */
1046 	if (cx23885_boards[dev->board].ci_type > 0)
1047 		cx_clear(RDR_RDRCTL1, 1 << 8);
1048 
1049 	switch (dev->board) {
1050 	case CX23885_BOARD_TEVII_S470:
1051 	case CX23885_BOARD_TEVII_S471:
1052 		cx_clear(RDR_RDRCTL1, 1 << 8);
1053 		break;
1054 	}
1055 
1056 	return 0;
1057 }
1058 
1059 static void cx23885_dev_unregister(struct cx23885_dev *dev)
1060 {
1061 	release_mem_region(pci_resource_start(dev->pci, 0),
1062 			   pci_resource_len(dev->pci, 0));
1063 
1064 	if (!atomic_dec_and_test(&dev->refcount))
1065 		return;
1066 
1067 	if (cx23885_boards[dev->board].porta == CX23885_ANALOG_VIDEO)
1068 		cx23885_video_unregister(dev);
1069 
1070 	if (cx23885_boards[dev->board].portb == CX23885_MPEG_DVB)
1071 		cx23885_dvb_unregister(&dev->ts1);
1072 
1073 	if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER)
1074 		cx23885_417_unregister(dev);
1075 
1076 	if (cx23885_boards[dev->board].portc == CX23885_MPEG_DVB)
1077 		cx23885_dvb_unregister(&dev->ts2);
1078 
1079 	if (cx23885_boards[dev->board].portc == CX23885_MPEG_ENCODER)
1080 		cx23885_417_unregister(dev);
1081 
1082 	cx23885_i2c_unregister(&dev->i2c_bus[2]);
1083 	cx23885_i2c_unregister(&dev->i2c_bus[1]);
1084 	cx23885_i2c_unregister(&dev->i2c_bus[0]);
1085 
1086 	iounmap(dev->lmmio);
1087 }
1088 
1089 static __le32 *cx23885_risc_field(__le32 *rp, struct scatterlist *sglist,
1090 			       unsigned int offset, u32 sync_line,
1091 			       unsigned int bpl, unsigned int padding,
1092 			       unsigned int lines,  unsigned int lpi)
1093 {
1094 	struct scatterlist *sg;
1095 	unsigned int line, todo, sol;
1096 
1097 	/* sync instruction */
1098 	if (sync_line != NO_SYNC_LINE)
1099 		*(rp++) = cpu_to_le32(RISC_RESYNC | sync_line);
1100 
1101 	/* scan lines */
1102 	sg = sglist;
1103 	for (line = 0; line < lines; line++) {
1104 		while (offset && offset >= sg_dma_len(sg)) {
1105 			offset -= sg_dma_len(sg);
1106 			sg++;
1107 		}
1108 
1109 		if (lpi && line > 0 && !(line % lpi))
1110 			sol = RISC_SOL | RISC_IRQ1 | RISC_CNT_INC;
1111 		else
1112 			sol = RISC_SOL;
1113 
1114 		if (bpl <= sg_dma_len(sg)-offset) {
1115 			/* fits into current chunk */
1116 			*(rp++) = cpu_to_le32(RISC_WRITE|sol|RISC_EOL|bpl);
1117 			*(rp++) = cpu_to_le32(sg_dma_address(sg)+offset);
1118 			*(rp++) = cpu_to_le32(0); /* bits 63-32 */
1119 			offset += bpl;
1120 		} else {
1121 			/* scanline needs to be split */
1122 			todo = bpl;
1123 			*(rp++) = cpu_to_le32(RISC_WRITE|sol|
1124 					    (sg_dma_len(sg)-offset));
1125 			*(rp++) = cpu_to_le32(sg_dma_address(sg)+offset);
1126 			*(rp++) = cpu_to_le32(0); /* bits 63-32 */
1127 			todo -= (sg_dma_len(sg)-offset);
1128 			offset = 0;
1129 			sg++;
1130 			while (todo > sg_dma_len(sg)) {
1131 				*(rp++) = cpu_to_le32(RISC_WRITE|
1132 						    sg_dma_len(sg));
1133 				*(rp++) = cpu_to_le32(sg_dma_address(sg));
1134 				*(rp++) = cpu_to_le32(0); /* bits 63-32 */
1135 				todo -= sg_dma_len(sg);
1136 				sg++;
1137 			}
1138 			*(rp++) = cpu_to_le32(RISC_WRITE|RISC_EOL|todo);
1139 			*(rp++) = cpu_to_le32(sg_dma_address(sg));
1140 			*(rp++) = cpu_to_le32(0); /* bits 63-32 */
1141 			offset += todo;
1142 		}
1143 		offset += padding;
1144 	}
1145 
1146 	return rp;
1147 }
1148 
1149 int cx23885_risc_buffer(struct pci_dev *pci, struct btcx_riscmem *risc,
1150 			struct scatterlist *sglist, unsigned int top_offset,
1151 			unsigned int bottom_offset, unsigned int bpl,
1152 			unsigned int padding, unsigned int lines)
1153 {
1154 	u32 instructions, fields;
1155 	__le32 *rp;
1156 	int rc;
1157 
1158 	fields = 0;
1159 	if (UNSET != top_offset)
1160 		fields++;
1161 	if (UNSET != bottom_offset)
1162 		fields++;
1163 
1164 	/* estimate risc mem: worst case is one write per page border +
1165 	   one write per scan line + syncs + jump (all 2 dwords).  Padding
1166 	   can cause next bpl to start close to a page border.  First DMA
1167 	   region may be smaller than PAGE_SIZE */
1168 	/* write and jump need and extra dword */
1169 	instructions  = fields * (1 + ((bpl + padding) * lines)
1170 		/ PAGE_SIZE + lines);
1171 	instructions += 2;
1172 	rc = btcx_riscmem_alloc(pci, risc, instructions*12);
1173 	if (rc < 0)
1174 		return rc;
1175 
1176 	/* write risc instructions */
1177 	rp = risc->cpu;
1178 	if (UNSET != top_offset)
1179 		rp = cx23885_risc_field(rp, sglist, top_offset, 0,
1180 					bpl, padding, lines, 0);
1181 	if (UNSET != bottom_offset)
1182 		rp = cx23885_risc_field(rp, sglist, bottom_offset, 0x200,
1183 					bpl, padding, lines, 0);
1184 
1185 	/* save pointer to jmp instruction address */
1186 	risc->jmp = rp;
1187 	BUG_ON((risc->jmp - risc->cpu + 2) * sizeof(*risc->cpu) > risc->size);
1188 	return 0;
1189 }
1190 
1191 int cx23885_risc_databuffer(struct pci_dev *pci,
1192 				   struct btcx_riscmem *risc,
1193 				   struct scatterlist *sglist,
1194 				   unsigned int bpl,
1195 				   unsigned int lines, unsigned int lpi)
1196 {
1197 	u32 instructions;
1198 	__le32 *rp;
1199 	int rc;
1200 
1201 	/* estimate risc mem: worst case is one write per page border +
1202 	   one write per scan line + syncs + jump (all 2 dwords).  Here
1203 	   there is no padding and no sync.  First DMA region may be smaller
1204 	   than PAGE_SIZE */
1205 	/* Jump and write need an extra dword */
1206 	instructions  = 1 + (bpl * lines) / PAGE_SIZE + lines;
1207 	instructions += 1;
1208 
1209 	rc = btcx_riscmem_alloc(pci, risc, instructions*12);
1210 	if (rc < 0)
1211 		return rc;
1212 
1213 	/* write risc instructions */
1214 	rp = risc->cpu;
1215 	rp = cx23885_risc_field(rp, sglist, 0, NO_SYNC_LINE,
1216 				bpl, 0, lines, lpi);
1217 
1218 	/* save pointer to jmp instruction address */
1219 	risc->jmp = rp;
1220 	BUG_ON((risc->jmp - risc->cpu + 2) * sizeof(*risc->cpu) > risc->size);
1221 	return 0;
1222 }
1223 
1224 int cx23885_risc_vbibuffer(struct pci_dev *pci, struct btcx_riscmem *risc,
1225 			struct scatterlist *sglist, unsigned int top_offset,
1226 			unsigned int bottom_offset, unsigned int bpl,
1227 			unsigned int padding, unsigned int lines)
1228 {
1229 	u32 instructions, fields;
1230 	__le32 *rp;
1231 	int rc;
1232 
1233 	fields = 0;
1234 	if (UNSET != top_offset)
1235 		fields++;
1236 	if (UNSET != bottom_offset)
1237 		fields++;
1238 
1239 	/* estimate risc mem: worst case is one write per page border +
1240 	   one write per scan line + syncs + jump (all 2 dwords).  Padding
1241 	   can cause next bpl to start close to a page border.  First DMA
1242 	   region may be smaller than PAGE_SIZE */
1243 	/* write and jump need and extra dword */
1244 	instructions  = fields * (1 + ((bpl + padding) * lines)
1245 		/ PAGE_SIZE + lines);
1246 	instructions += 2;
1247 	rc = btcx_riscmem_alloc(pci, risc, instructions*12);
1248 	if (rc < 0)
1249 		return rc;
1250 	/* write risc instructions */
1251 	rp = risc->cpu;
1252 
1253 	/* Sync to line 6, so US CC line 21 will appear in line '12'
1254 	 * in the userland vbi payload */
1255 	if (UNSET != top_offset)
1256 		rp = cx23885_risc_field(rp, sglist, top_offset, 6,
1257 					bpl, padding, lines, 0);
1258 
1259 	if (UNSET != bottom_offset)
1260 		rp = cx23885_risc_field(rp, sglist, bottom_offset, 0x207,
1261 					bpl, padding, lines, 0);
1262 
1263 
1264 
1265 	/* save pointer to jmp instruction address */
1266 	risc->jmp = rp;
1267 	BUG_ON((risc->jmp - risc->cpu + 2) * sizeof(*risc->cpu) > risc->size);
1268 	return 0;
1269 }
1270 
1271 
1272 int cx23885_risc_stopper(struct pci_dev *pci, struct btcx_riscmem *risc,
1273 				u32 reg, u32 mask, u32 value)
1274 {
1275 	__le32 *rp;
1276 	int rc;
1277 
1278 	rc = btcx_riscmem_alloc(pci, risc, 4*16);
1279 	if (rc < 0)
1280 		return rc;
1281 
1282 	/* write risc instructions */
1283 	rp = risc->cpu;
1284 	*(rp++) = cpu_to_le32(RISC_WRITECR  | RISC_IRQ2);
1285 	*(rp++) = cpu_to_le32(reg);
1286 	*(rp++) = cpu_to_le32(value);
1287 	*(rp++) = cpu_to_le32(mask);
1288 	*(rp++) = cpu_to_le32(RISC_JUMP);
1289 	*(rp++) = cpu_to_le32(risc->dma);
1290 	*(rp++) = cpu_to_le32(0); /* bits 63-32 */
1291 	return 0;
1292 }
1293 
1294 void cx23885_free_buffer(struct videobuf_queue *q, struct cx23885_buffer *buf)
1295 {
1296 	struct videobuf_dmabuf *dma = videobuf_to_dma(&buf->vb);
1297 
1298 	BUG_ON(in_interrupt());
1299 	videobuf_waiton(q, &buf->vb, 0, 0);
1300 	videobuf_dma_unmap(q->dev, dma);
1301 	videobuf_dma_free(dma);
1302 	btcx_riscmem_free(to_pci_dev(q->dev), &buf->risc);
1303 	buf->vb.state = VIDEOBUF_NEEDS_INIT;
1304 }
1305 
1306 static void cx23885_tsport_reg_dump(struct cx23885_tsport *port)
1307 {
1308 	struct cx23885_dev *dev = port->dev;
1309 
1310 	dprintk(1, "%s() Register Dump\n", __func__);
1311 	dprintk(1, "%s() DEV_CNTRL2               0x%08X\n", __func__,
1312 		cx_read(DEV_CNTRL2));
1313 	dprintk(1, "%s() PCI_INT_MSK              0x%08X\n", __func__,
1314 		cx23885_irq_get_mask(dev));
1315 	dprintk(1, "%s() AUD_INT_INT_MSK          0x%08X\n", __func__,
1316 		cx_read(AUDIO_INT_INT_MSK));
1317 	dprintk(1, "%s() AUD_INT_DMA_CTL          0x%08X\n", __func__,
1318 		cx_read(AUD_INT_DMA_CTL));
1319 	dprintk(1, "%s() AUD_EXT_INT_MSK          0x%08X\n", __func__,
1320 		cx_read(AUDIO_EXT_INT_MSK));
1321 	dprintk(1, "%s() AUD_EXT_DMA_CTL          0x%08X\n", __func__,
1322 		cx_read(AUD_EXT_DMA_CTL));
1323 	dprintk(1, "%s() PAD_CTRL                 0x%08X\n", __func__,
1324 		cx_read(PAD_CTRL));
1325 	dprintk(1, "%s() ALT_PIN_OUT_SEL          0x%08X\n", __func__,
1326 		cx_read(ALT_PIN_OUT_SEL));
1327 	dprintk(1, "%s() GPIO2                    0x%08X\n", __func__,
1328 		cx_read(GPIO2));
1329 	dprintk(1, "%s() gpcnt(0x%08X)          0x%08X\n", __func__,
1330 		port->reg_gpcnt, cx_read(port->reg_gpcnt));
1331 	dprintk(1, "%s() gpcnt_ctl(0x%08X)      0x%08x\n", __func__,
1332 		port->reg_gpcnt_ctl, cx_read(port->reg_gpcnt_ctl));
1333 	dprintk(1, "%s() dma_ctl(0x%08X)        0x%08x\n", __func__,
1334 		port->reg_dma_ctl, cx_read(port->reg_dma_ctl));
1335 	if (port->reg_src_sel)
1336 		dprintk(1, "%s() src_sel(0x%08X)        0x%08x\n", __func__,
1337 			port->reg_src_sel, cx_read(port->reg_src_sel));
1338 	dprintk(1, "%s() lngth(0x%08X)          0x%08x\n", __func__,
1339 		port->reg_lngth, cx_read(port->reg_lngth));
1340 	dprintk(1, "%s() hw_sop_ctrl(0x%08X)    0x%08x\n", __func__,
1341 		port->reg_hw_sop_ctrl, cx_read(port->reg_hw_sop_ctrl));
1342 	dprintk(1, "%s() gen_ctrl(0x%08X)       0x%08x\n", __func__,
1343 		port->reg_gen_ctrl, cx_read(port->reg_gen_ctrl));
1344 	dprintk(1, "%s() bd_pkt_status(0x%08X)  0x%08x\n", __func__,
1345 		port->reg_bd_pkt_status, cx_read(port->reg_bd_pkt_status));
1346 	dprintk(1, "%s() sop_status(0x%08X)     0x%08x\n", __func__,
1347 		port->reg_sop_status, cx_read(port->reg_sop_status));
1348 	dprintk(1, "%s() fifo_ovfl_stat(0x%08X) 0x%08x\n", __func__,
1349 		port->reg_fifo_ovfl_stat, cx_read(port->reg_fifo_ovfl_stat));
1350 	dprintk(1, "%s() vld_misc(0x%08X)       0x%08x\n", __func__,
1351 		port->reg_vld_misc, cx_read(port->reg_vld_misc));
1352 	dprintk(1, "%s() ts_clk_en(0x%08X)      0x%08x\n", __func__,
1353 		port->reg_ts_clk_en, cx_read(port->reg_ts_clk_en));
1354 	dprintk(1, "%s() ts_int_msk(0x%08X)     0x%08x\n", __func__,
1355 		port->reg_ts_int_msk, cx_read(port->reg_ts_int_msk));
1356 }
1357 
1358 static int cx23885_start_dma(struct cx23885_tsport *port,
1359 			     struct cx23885_dmaqueue *q,
1360 			     struct cx23885_buffer   *buf)
1361 {
1362 	struct cx23885_dev *dev = port->dev;
1363 	u32 reg;
1364 
1365 	dprintk(1, "%s() w: %d, h: %d, f: %d\n", __func__,
1366 		buf->vb.width, buf->vb.height, buf->vb.field);
1367 
1368 	/* Stop the fifo and risc engine for this port */
1369 	cx_clear(port->reg_dma_ctl, port->dma_ctl_val);
1370 
1371 	/* setup fifo + format */
1372 	cx23885_sram_channel_setup(dev,
1373 				   &dev->sram_channels[port->sram_chno],
1374 				   port->ts_packet_size, buf->risc.dma);
1375 	if (debug > 5) {
1376 		cx23885_sram_channel_dump(dev,
1377 			&dev->sram_channels[port->sram_chno]);
1378 		cx23885_risc_disasm(port, &buf->risc);
1379 	}
1380 
1381 	/* write TS length to chip */
1382 	cx_write(port->reg_lngth, buf->vb.width);
1383 
1384 	if ((!(cx23885_boards[dev->board].portb & CX23885_MPEG_DVB)) &&
1385 		(!(cx23885_boards[dev->board].portc & CX23885_MPEG_DVB))) {
1386 		printk("%s() Unsupported .portb/c (0x%08x)/(0x%08x)\n",
1387 			__func__,
1388 			cx23885_boards[dev->board].portb,
1389 			cx23885_boards[dev->board].portc);
1390 		return -EINVAL;
1391 	}
1392 
1393 	if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER)
1394 		cx23885_av_clk(dev, 0);
1395 
1396 	udelay(100);
1397 
1398 	/* If the port supports SRC SELECT, configure it */
1399 	if (port->reg_src_sel)
1400 		cx_write(port->reg_src_sel, port->src_sel_val);
1401 
1402 	cx_write(port->reg_hw_sop_ctrl, port->hw_sop_ctrl_val);
1403 	cx_write(port->reg_ts_clk_en, port->ts_clk_en_val);
1404 	cx_write(port->reg_vld_misc, port->vld_misc_val);
1405 	cx_write(port->reg_gen_ctrl, port->gen_ctrl_val);
1406 	udelay(100);
1407 
1408 	/* NOTE: this is 2 (reserved) for portb, does it matter? */
1409 	/* reset counter to zero */
1410 	cx_write(port->reg_gpcnt_ctl, 3);
1411 	q->count = 1;
1412 
1413 	/* Set VIDB pins to input */
1414 	if (cx23885_boards[dev->board].portb == CX23885_MPEG_DVB) {
1415 		reg = cx_read(PAD_CTRL);
1416 		reg &= ~0x3; /* Clear TS1_OE & TS1_SOP_OE */
1417 		cx_write(PAD_CTRL, reg);
1418 	}
1419 
1420 	/* Set VIDC pins to input */
1421 	if (cx23885_boards[dev->board].portc == CX23885_MPEG_DVB) {
1422 		reg = cx_read(PAD_CTRL);
1423 		reg &= ~0x4; /* Clear TS2_SOP_OE */
1424 		cx_write(PAD_CTRL, reg);
1425 	}
1426 
1427 	if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER) {
1428 
1429 		reg = cx_read(PAD_CTRL);
1430 		reg = reg & ~0x1;    /* Clear TS1_OE */
1431 
1432 		/* FIXME, bit 2 writing here is questionable */
1433 		/* set TS1_SOP_OE and TS1_OE_HI */
1434 		reg = reg | 0xa;
1435 		cx_write(PAD_CTRL, reg);
1436 
1437 		/* FIXME and these two registers should be documented. */
1438 		cx_write(CLK_DELAY, cx_read(CLK_DELAY) | 0x80000011);
1439 		cx_write(ALT_PIN_OUT_SEL, 0x10100045);
1440 	}
1441 
1442 	switch (dev->bridge) {
1443 	case CX23885_BRIDGE_885:
1444 	case CX23885_BRIDGE_887:
1445 	case CX23885_BRIDGE_888:
1446 		/* enable irqs */
1447 		dprintk(1, "%s() enabling TS int's and DMA\n", __func__);
1448 		cx_set(port->reg_ts_int_msk,  port->ts_int_msk_val);
1449 		cx_set(port->reg_dma_ctl, port->dma_ctl_val);
1450 		cx23885_irq_add(dev, port->pci_irqmask);
1451 		cx23885_irq_enable_all(dev);
1452 		break;
1453 	default:
1454 		BUG();
1455 	}
1456 
1457 	cx_set(DEV_CNTRL2, (1<<5)); /* Enable RISC controller */
1458 
1459 	if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER)
1460 		cx23885_av_clk(dev, 1);
1461 
1462 	if (debug > 4)
1463 		cx23885_tsport_reg_dump(port);
1464 
1465 	return 0;
1466 }
1467 
1468 static int cx23885_stop_dma(struct cx23885_tsport *port)
1469 {
1470 	struct cx23885_dev *dev = port->dev;
1471 	u32 reg;
1472 
1473 	dprintk(1, "%s()\n", __func__);
1474 
1475 	/* Stop interrupts and DMA */
1476 	cx_clear(port->reg_ts_int_msk, port->ts_int_msk_val);
1477 	cx_clear(port->reg_dma_ctl, port->dma_ctl_val);
1478 
1479 	if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER) {
1480 
1481 		reg = cx_read(PAD_CTRL);
1482 
1483 		/* Set TS1_OE */
1484 		reg = reg | 0x1;
1485 
1486 		/* clear TS1_SOP_OE and TS1_OE_HI */
1487 		reg = reg & ~0xa;
1488 		cx_write(PAD_CTRL, reg);
1489 		cx_write(port->reg_src_sel, 0);
1490 		cx_write(port->reg_gen_ctrl, 8);
1491 
1492 	}
1493 
1494 	if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER)
1495 		cx23885_av_clk(dev, 0);
1496 
1497 	return 0;
1498 }
1499 
1500 int cx23885_restart_queue(struct cx23885_tsport *port,
1501 				struct cx23885_dmaqueue *q)
1502 {
1503 	struct cx23885_dev *dev = port->dev;
1504 	struct cx23885_buffer *buf;
1505 
1506 	dprintk(5, "%s()\n", __func__);
1507 	if (list_empty(&q->active)) {
1508 		struct cx23885_buffer *prev;
1509 		prev = NULL;
1510 
1511 		dprintk(5, "%s() queue is empty\n", __func__);
1512 
1513 		for (;;) {
1514 			if (list_empty(&q->queued))
1515 				return 0;
1516 			buf = list_entry(q->queued.next, struct cx23885_buffer,
1517 					 vb.queue);
1518 			if (NULL == prev) {
1519 				list_move_tail(&buf->vb.queue, &q->active);
1520 				cx23885_start_dma(port, q, buf);
1521 				buf->vb.state = VIDEOBUF_ACTIVE;
1522 				buf->count    = q->count++;
1523 				mod_timer(&q->timeout, jiffies+BUFFER_TIMEOUT);
1524 				dprintk(5, "[%p/%d] restart_queue - f/active\n",
1525 					buf, buf->vb.i);
1526 
1527 			} else if (prev->vb.width  == buf->vb.width  &&
1528 				   prev->vb.height == buf->vb.height &&
1529 				   prev->fmt       == buf->fmt) {
1530 				list_move_tail(&buf->vb.queue, &q->active);
1531 				buf->vb.state = VIDEOBUF_ACTIVE;
1532 				buf->count    = q->count++;
1533 				prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
1534 				/* 64 bit bits 63-32 */
1535 				prev->risc.jmp[2] = cpu_to_le32(0);
1536 				dprintk(5, "[%p/%d] restart_queue - m/active\n",
1537 					buf, buf->vb.i);
1538 			} else {
1539 				return 0;
1540 			}
1541 			prev = buf;
1542 		}
1543 		return 0;
1544 	}
1545 
1546 	buf = list_entry(q->active.next, struct cx23885_buffer, vb.queue);
1547 	dprintk(2, "restart_queue [%p/%d]: restart dma\n",
1548 		buf, buf->vb.i);
1549 	cx23885_start_dma(port, q, buf);
1550 	list_for_each_entry(buf, &q->active, vb.queue)
1551 		buf->count = q->count++;
1552 	mod_timer(&q->timeout, jiffies + BUFFER_TIMEOUT);
1553 	return 0;
1554 }
1555 
1556 /* ------------------------------------------------------------------ */
1557 
1558 int cx23885_buf_prepare(struct videobuf_queue *q, struct cx23885_tsport *port,
1559 			struct cx23885_buffer *buf, enum v4l2_field field)
1560 {
1561 	struct cx23885_dev *dev = port->dev;
1562 	int size = port->ts_packet_size * port->ts_packet_count;
1563 	int rc;
1564 
1565 	dprintk(1, "%s: %p\n", __func__, buf);
1566 	if (0 != buf->vb.baddr  &&  buf->vb.bsize < size)
1567 		return -EINVAL;
1568 
1569 	if (VIDEOBUF_NEEDS_INIT == buf->vb.state) {
1570 		buf->vb.width  = port->ts_packet_size;
1571 		buf->vb.height = port->ts_packet_count;
1572 		buf->vb.size   = size;
1573 		buf->vb.field  = field /*V4L2_FIELD_TOP*/;
1574 
1575 		rc = videobuf_iolock(q, &buf->vb, NULL);
1576 		if (0 != rc)
1577 			goto fail;
1578 		cx23885_risc_databuffer(dev->pci, &buf->risc,
1579 					videobuf_to_dma(&buf->vb)->sglist,
1580 					buf->vb.width, buf->vb.height, 0);
1581 	}
1582 	buf->vb.state = VIDEOBUF_PREPARED;
1583 	return 0;
1584 
1585  fail:
1586 	cx23885_free_buffer(q, buf);
1587 	return rc;
1588 }
1589 
1590 void cx23885_buf_queue(struct cx23885_tsport *port, struct cx23885_buffer *buf)
1591 {
1592 	struct cx23885_buffer    *prev;
1593 	struct cx23885_dev *dev = port->dev;
1594 	struct cx23885_dmaqueue  *cx88q = &port->mpegq;
1595 
1596 	/* add jump to stopper */
1597 	buf->risc.jmp[0] = cpu_to_le32(RISC_JUMP | RISC_IRQ1 | RISC_CNT_INC);
1598 	buf->risc.jmp[1] = cpu_to_le32(cx88q->stopper.dma);
1599 	buf->risc.jmp[2] = cpu_to_le32(0); /* bits 63-32 */
1600 
1601 	if (list_empty(&cx88q->active)) {
1602 		dprintk(1, "queue is empty - first active\n");
1603 		list_add_tail(&buf->vb.queue, &cx88q->active);
1604 		cx23885_start_dma(port, cx88q, buf);
1605 		buf->vb.state = VIDEOBUF_ACTIVE;
1606 		buf->count    = cx88q->count++;
1607 		mod_timer(&cx88q->timeout, jiffies + BUFFER_TIMEOUT);
1608 		dprintk(1, "[%p/%d] %s - first active\n",
1609 			buf, buf->vb.i, __func__);
1610 	} else {
1611 		dprintk(1, "queue is not empty - append to active\n");
1612 		prev = list_entry(cx88q->active.prev, struct cx23885_buffer,
1613 				  vb.queue);
1614 		list_add_tail(&buf->vb.queue, &cx88q->active);
1615 		buf->vb.state = VIDEOBUF_ACTIVE;
1616 		buf->count    = cx88q->count++;
1617 		prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
1618 		prev->risc.jmp[2] = cpu_to_le32(0); /* 64 bit bits 63-32 */
1619 		dprintk(1, "[%p/%d] %s - append to active\n",
1620 			 buf, buf->vb.i, __func__);
1621 	}
1622 }
1623 
1624 /* ----------------------------------------------------------- */
1625 
1626 static void do_cancel_buffers(struct cx23885_tsport *port, char *reason,
1627 			      int restart)
1628 {
1629 	struct cx23885_dev *dev = port->dev;
1630 	struct cx23885_dmaqueue *q = &port->mpegq;
1631 	struct cx23885_buffer *buf;
1632 	unsigned long flags;
1633 
1634 	spin_lock_irqsave(&port->slock, flags);
1635 	while (!list_empty(&q->active)) {
1636 		buf = list_entry(q->active.next, struct cx23885_buffer,
1637 				 vb.queue);
1638 		list_del(&buf->vb.queue);
1639 		buf->vb.state = VIDEOBUF_ERROR;
1640 		wake_up(&buf->vb.done);
1641 		dprintk(1, "[%p/%d] %s - dma=0x%08lx\n",
1642 			buf, buf->vb.i, reason, (unsigned long)buf->risc.dma);
1643 	}
1644 	if (restart) {
1645 		dprintk(1, "restarting queue\n");
1646 		cx23885_restart_queue(port, q);
1647 	}
1648 	spin_unlock_irqrestore(&port->slock, flags);
1649 }
1650 
1651 void cx23885_cancel_buffers(struct cx23885_tsport *port)
1652 {
1653 	struct cx23885_dev *dev = port->dev;
1654 	struct cx23885_dmaqueue *q = &port->mpegq;
1655 
1656 	dprintk(1, "%s()\n", __func__);
1657 	del_timer_sync(&q->timeout);
1658 	cx23885_stop_dma(port);
1659 	do_cancel_buffers(port, "cancel", 0);
1660 }
1661 
1662 static void cx23885_timeout(unsigned long data)
1663 {
1664 	struct cx23885_tsport *port = (struct cx23885_tsport *)data;
1665 	struct cx23885_dev *dev = port->dev;
1666 
1667 	dprintk(1, "%s()\n", __func__);
1668 
1669 	if (debug > 5)
1670 		cx23885_sram_channel_dump(dev,
1671 			&dev->sram_channels[port->sram_chno]);
1672 
1673 	cx23885_stop_dma(port);
1674 	do_cancel_buffers(port, "timeout", 1);
1675 }
1676 
1677 int cx23885_irq_417(struct cx23885_dev *dev, u32 status)
1678 {
1679 	/* FIXME: port1 assumption here. */
1680 	struct cx23885_tsport *port = &dev->ts1;
1681 	int count = 0;
1682 	int handled = 0;
1683 
1684 	if (status == 0)
1685 		return handled;
1686 
1687 	count = cx_read(port->reg_gpcnt);
1688 	dprintk(7, "status: 0x%08x  mask: 0x%08x count: 0x%x\n",
1689 		status, cx_read(port->reg_ts_int_msk), count);
1690 
1691 	if ((status & VID_B_MSK_BAD_PKT)         ||
1692 		(status & VID_B_MSK_OPC_ERR)     ||
1693 		(status & VID_B_MSK_VBI_OPC_ERR) ||
1694 		(status & VID_B_MSK_SYNC)        ||
1695 		(status & VID_B_MSK_VBI_SYNC)    ||
1696 		(status & VID_B_MSK_OF)          ||
1697 		(status & VID_B_MSK_VBI_OF)) {
1698 		printk(KERN_ERR "%s: V4L mpeg risc op code error, status "
1699 			"= 0x%x\n", dev->name, status);
1700 		if (status & VID_B_MSK_BAD_PKT)
1701 			dprintk(1, "        VID_B_MSK_BAD_PKT\n");
1702 		if (status & VID_B_MSK_OPC_ERR)
1703 			dprintk(1, "        VID_B_MSK_OPC_ERR\n");
1704 		if (status & VID_B_MSK_VBI_OPC_ERR)
1705 			dprintk(1, "        VID_B_MSK_VBI_OPC_ERR\n");
1706 		if (status & VID_B_MSK_SYNC)
1707 			dprintk(1, "        VID_B_MSK_SYNC\n");
1708 		if (status & VID_B_MSK_VBI_SYNC)
1709 			dprintk(1, "        VID_B_MSK_VBI_SYNC\n");
1710 		if (status & VID_B_MSK_OF)
1711 			dprintk(1, "        VID_B_MSK_OF\n");
1712 		if (status & VID_B_MSK_VBI_OF)
1713 			dprintk(1, "        VID_B_MSK_VBI_OF\n");
1714 
1715 		cx_clear(port->reg_dma_ctl, port->dma_ctl_val);
1716 		cx23885_sram_channel_dump(dev,
1717 			&dev->sram_channels[port->sram_chno]);
1718 		cx23885_417_check_encoder(dev);
1719 	} else if (status & VID_B_MSK_RISCI1) {
1720 		dprintk(7, "        VID_B_MSK_RISCI1\n");
1721 		spin_lock(&port->slock);
1722 		cx23885_wakeup(port, &port->mpegq, count);
1723 		spin_unlock(&port->slock);
1724 	} else if (status & VID_B_MSK_RISCI2) {
1725 		dprintk(7, "        VID_B_MSK_RISCI2\n");
1726 		spin_lock(&port->slock);
1727 		cx23885_restart_queue(port, &port->mpegq);
1728 		spin_unlock(&port->slock);
1729 	}
1730 	if (status) {
1731 		cx_write(port->reg_ts_int_stat, status);
1732 		handled = 1;
1733 	}
1734 
1735 	return handled;
1736 }
1737 
1738 static int cx23885_irq_ts(struct cx23885_tsport *port, u32 status)
1739 {
1740 	struct cx23885_dev *dev = port->dev;
1741 	int handled = 0;
1742 	u32 count;
1743 
1744 	if ((status & VID_BC_MSK_OPC_ERR) ||
1745 		(status & VID_BC_MSK_BAD_PKT) ||
1746 		(status & VID_BC_MSK_SYNC) ||
1747 		(status & VID_BC_MSK_OF)) {
1748 
1749 		if (status & VID_BC_MSK_OPC_ERR)
1750 			dprintk(7, " (VID_BC_MSK_OPC_ERR 0x%08x)\n",
1751 				VID_BC_MSK_OPC_ERR);
1752 
1753 		if (status & VID_BC_MSK_BAD_PKT)
1754 			dprintk(7, " (VID_BC_MSK_BAD_PKT 0x%08x)\n",
1755 				VID_BC_MSK_BAD_PKT);
1756 
1757 		if (status & VID_BC_MSK_SYNC)
1758 			dprintk(7, " (VID_BC_MSK_SYNC    0x%08x)\n",
1759 				VID_BC_MSK_SYNC);
1760 
1761 		if (status & VID_BC_MSK_OF)
1762 			dprintk(7, " (VID_BC_MSK_OF      0x%08x)\n",
1763 				VID_BC_MSK_OF);
1764 
1765 		printk(KERN_ERR "%s: mpeg risc op code error\n", dev->name);
1766 
1767 		cx_clear(port->reg_dma_ctl, port->dma_ctl_val);
1768 		cx23885_sram_channel_dump(dev,
1769 			&dev->sram_channels[port->sram_chno]);
1770 
1771 	} else if (status & VID_BC_MSK_RISCI1) {
1772 
1773 		dprintk(7, " (RISCI1            0x%08x)\n", VID_BC_MSK_RISCI1);
1774 
1775 		spin_lock(&port->slock);
1776 		count = cx_read(port->reg_gpcnt);
1777 		cx23885_wakeup(port, &port->mpegq, count);
1778 		spin_unlock(&port->slock);
1779 
1780 	} else if (status & VID_BC_MSK_RISCI2) {
1781 
1782 		dprintk(7, " (RISCI2            0x%08x)\n", VID_BC_MSK_RISCI2);
1783 
1784 		spin_lock(&port->slock);
1785 		cx23885_restart_queue(port, &port->mpegq);
1786 		spin_unlock(&port->slock);
1787 
1788 	}
1789 	if (status) {
1790 		cx_write(port->reg_ts_int_stat, status);
1791 		handled = 1;
1792 	}
1793 
1794 	return handled;
1795 }
1796 
1797 static irqreturn_t cx23885_irq(int irq, void *dev_id)
1798 {
1799 	struct cx23885_dev *dev = dev_id;
1800 	struct cx23885_tsport *ts1 = &dev->ts1;
1801 	struct cx23885_tsport *ts2 = &dev->ts2;
1802 	u32 pci_status, pci_mask;
1803 	u32 vida_status, vida_mask;
1804 	u32 audint_status, audint_mask;
1805 	u32 ts1_status, ts1_mask;
1806 	u32 ts2_status, ts2_mask;
1807 	int vida_count = 0, ts1_count = 0, ts2_count = 0, handled = 0;
1808 	int audint_count = 0;
1809 	bool subdev_handled;
1810 
1811 	pci_status = cx_read(PCI_INT_STAT);
1812 	pci_mask = cx23885_irq_get_mask(dev);
1813 	vida_status = cx_read(VID_A_INT_STAT);
1814 	vida_mask = cx_read(VID_A_INT_MSK);
1815 	audint_status = cx_read(AUDIO_INT_INT_STAT);
1816 	audint_mask = cx_read(AUDIO_INT_INT_MSK);
1817 	ts1_status = cx_read(VID_B_INT_STAT);
1818 	ts1_mask = cx_read(VID_B_INT_MSK);
1819 	ts2_status = cx_read(VID_C_INT_STAT);
1820 	ts2_mask = cx_read(VID_C_INT_MSK);
1821 
1822 	if ((pci_status == 0) && (ts2_status == 0) && (ts1_status == 0))
1823 		goto out;
1824 
1825 	vida_count = cx_read(VID_A_GPCNT);
1826 	audint_count = cx_read(AUD_INT_A_GPCNT);
1827 	ts1_count = cx_read(ts1->reg_gpcnt);
1828 	ts2_count = cx_read(ts2->reg_gpcnt);
1829 	dprintk(7, "pci_status: 0x%08x  pci_mask: 0x%08x\n",
1830 		pci_status, pci_mask);
1831 	dprintk(7, "vida_status: 0x%08x vida_mask: 0x%08x count: 0x%x\n",
1832 		vida_status, vida_mask, vida_count);
1833 	dprintk(7, "audint_status: 0x%08x audint_mask: 0x%08x count: 0x%x\n",
1834 		audint_status, audint_mask, audint_count);
1835 	dprintk(7, "ts1_status: 0x%08x  ts1_mask: 0x%08x count: 0x%x\n",
1836 		ts1_status, ts1_mask, ts1_count);
1837 	dprintk(7, "ts2_status: 0x%08x  ts2_mask: 0x%08x count: 0x%x\n",
1838 		ts2_status, ts2_mask, ts2_count);
1839 
1840 	if (pci_status & (PCI_MSK_RISC_RD | PCI_MSK_RISC_WR |
1841 			  PCI_MSK_AL_RD   | PCI_MSK_AL_WR   | PCI_MSK_APB_DMA |
1842 			  PCI_MSK_VID_C   | PCI_MSK_VID_B   | PCI_MSK_VID_A   |
1843 			  PCI_MSK_AUD_INT | PCI_MSK_AUD_EXT |
1844 			  PCI_MSK_GPIO0   | PCI_MSK_GPIO1   |
1845 			  PCI_MSK_AV_CORE | PCI_MSK_IR)) {
1846 
1847 		if (pci_status & PCI_MSK_RISC_RD)
1848 			dprintk(7, " (PCI_MSK_RISC_RD   0x%08x)\n",
1849 				PCI_MSK_RISC_RD);
1850 
1851 		if (pci_status & PCI_MSK_RISC_WR)
1852 			dprintk(7, " (PCI_MSK_RISC_WR   0x%08x)\n",
1853 				PCI_MSK_RISC_WR);
1854 
1855 		if (pci_status & PCI_MSK_AL_RD)
1856 			dprintk(7, " (PCI_MSK_AL_RD     0x%08x)\n",
1857 				PCI_MSK_AL_RD);
1858 
1859 		if (pci_status & PCI_MSK_AL_WR)
1860 			dprintk(7, " (PCI_MSK_AL_WR     0x%08x)\n",
1861 				PCI_MSK_AL_WR);
1862 
1863 		if (pci_status & PCI_MSK_APB_DMA)
1864 			dprintk(7, " (PCI_MSK_APB_DMA   0x%08x)\n",
1865 				PCI_MSK_APB_DMA);
1866 
1867 		if (pci_status & PCI_MSK_VID_C)
1868 			dprintk(7, " (PCI_MSK_VID_C     0x%08x)\n",
1869 				PCI_MSK_VID_C);
1870 
1871 		if (pci_status & PCI_MSK_VID_B)
1872 			dprintk(7, " (PCI_MSK_VID_B     0x%08x)\n",
1873 				PCI_MSK_VID_B);
1874 
1875 		if (pci_status & PCI_MSK_VID_A)
1876 			dprintk(7, " (PCI_MSK_VID_A     0x%08x)\n",
1877 				PCI_MSK_VID_A);
1878 
1879 		if (pci_status & PCI_MSK_AUD_INT)
1880 			dprintk(7, " (PCI_MSK_AUD_INT   0x%08x)\n",
1881 				PCI_MSK_AUD_INT);
1882 
1883 		if (pci_status & PCI_MSK_AUD_EXT)
1884 			dprintk(7, " (PCI_MSK_AUD_EXT   0x%08x)\n",
1885 				PCI_MSK_AUD_EXT);
1886 
1887 		if (pci_status & PCI_MSK_GPIO0)
1888 			dprintk(7, " (PCI_MSK_GPIO0     0x%08x)\n",
1889 				PCI_MSK_GPIO0);
1890 
1891 		if (pci_status & PCI_MSK_GPIO1)
1892 			dprintk(7, " (PCI_MSK_GPIO1     0x%08x)\n",
1893 				PCI_MSK_GPIO1);
1894 
1895 		if (pci_status & PCI_MSK_AV_CORE)
1896 			dprintk(7, " (PCI_MSK_AV_CORE   0x%08x)\n",
1897 				PCI_MSK_AV_CORE);
1898 
1899 		if (pci_status & PCI_MSK_IR)
1900 			dprintk(7, " (PCI_MSK_IR        0x%08x)\n",
1901 				PCI_MSK_IR);
1902 	}
1903 
1904 	if (cx23885_boards[dev->board].ci_type == 1 &&
1905 			(pci_status & (PCI_MSK_GPIO1 | PCI_MSK_GPIO0)))
1906 		handled += netup_ci_slot_status(dev, pci_status);
1907 
1908 	if (cx23885_boards[dev->board].ci_type == 2 &&
1909 			(pci_status & PCI_MSK_GPIO0))
1910 		handled += altera_ci_irq(dev);
1911 
1912 	if (ts1_status) {
1913 		if (cx23885_boards[dev->board].portb == CX23885_MPEG_DVB)
1914 			handled += cx23885_irq_ts(ts1, ts1_status);
1915 		else
1916 		if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER)
1917 			handled += cx23885_irq_417(dev, ts1_status);
1918 	}
1919 
1920 	if (ts2_status) {
1921 		if (cx23885_boards[dev->board].portc == CX23885_MPEG_DVB)
1922 			handled += cx23885_irq_ts(ts2, ts2_status);
1923 		else
1924 		if (cx23885_boards[dev->board].portc == CX23885_MPEG_ENCODER)
1925 			handled += cx23885_irq_417(dev, ts2_status);
1926 	}
1927 
1928 	if (vida_status)
1929 		handled += cx23885_video_irq(dev, vida_status);
1930 
1931 	if (audint_status)
1932 		handled += cx23885_audio_irq(dev, audint_status, audint_mask);
1933 
1934 	if (pci_status & PCI_MSK_IR) {
1935 		subdev_handled = false;
1936 		v4l2_subdev_call(dev->sd_ir, core, interrupt_service_routine,
1937 				 pci_status, &subdev_handled);
1938 		if (subdev_handled)
1939 			handled++;
1940 	}
1941 
1942 	if ((pci_status & pci_mask) & PCI_MSK_AV_CORE) {
1943 		cx23885_irq_disable(dev, PCI_MSK_AV_CORE);
1944 		schedule_work(&dev->cx25840_work);
1945 		handled++;
1946 	}
1947 
1948 	if (handled)
1949 		cx_write(PCI_INT_STAT, pci_status);
1950 out:
1951 	return IRQ_RETVAL(handled);
1952 }
1953 
1954 static void cx23885_v4l2_dev_notify(struct v4l2_subdev *sd,
1955 				    unsigned int notification, void *arg)
1956 {
1957 	struct cx23885_dev *dev;
1958 
1959 	if (sd == NULL)
1960 		return;
1961 
1962 	dev = to_cx23885(sd->v4l2_dev);
1963 
1964 	switch (notification) {
1965 	case V4L2_SUBDEV_IR_RX_NOTIFY: /* Possibly called in an IRQ context */
1966 		if (sd == dev->sd_ir)
1967 			cx23885_ir_rx_v4l2_dev_notify(sd, *(u32 *)arg);
1968 		break;
1969 	case V4L2_SUBDEV_IR_TX_NOTIFY: /* Possibly called in an IRQ context */
1970 		if (sd == dev->sd_ir)
1971 			cx23885_ir_tx_v4l2_dev_notify(sd, *(u32 *)arg);
1972 		break;
1973 	}
1974 }
1975 
1976 static void cx23885_v4l2_dev_notify_init(struct cx23885_dev *dev)
1977 {
1978 	INIT_WORK(&dev->cx25840_work, cx23885_av_work_handler);
1979 	INIT_WORK(&dev->ir_rx_work, cx23885_ir_rx_work_handler);
1980 	INIT_WORK(&dev->ir_tx_work, cx23885_ir_tx_work_handler);
1981 	dev->v4l2_dev.notify = cx23885_v4l2_dev_notify;
1982 }
1983 
1984 static inline int encoder_on_portb(struct cx23885_dev *dev)
1985 {
1986 	return cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER;
1987 }
1988 
1989 static inline int encoder_on_portc(struct cx23885_dev *dev)
1990 {
1991 	return cx23885_boards[dev->board].portc == CX23885_MPEG_ENCODER;
1992 }
1993 
1994 /* Mask represents 32 different GPIOs, GPIO's are split into multiple
1995  * registers depending on the board configuration (and whether the
1996  * 417 encoder (wi it's own GPIO's) are present. Each GPIO bit will
1997  * be pushed into the correct hardware register, regardless of the
1998  * physical location. Certain registers are shared so we sanity check
1999  * and report errors if we think we're tampering with a GPIo that might
2000  * be assigned to the encoder (and used for the host bus).
2001  *
2002  * GPIO  2 thru  0 - On the cx23885 bridge
2003  * GPIO 18 thru  3 - On the cx23417 host bus interface
2004  * GPIO 23 thru 19 - On the cx25840 a/v core
2005  */
2006 void cx23885_gpio_set(struct cx23885_dev *dev, u32 mask)
2007 {
2008 	if (mask & 0x7)
2009 		cx_set(GP0_IO, mask & 0x7);
2010 
2011 	if (mask & 0x0007fff8) {
2012 		if (encoder_on_portb(dev) || encoder_on_portc(dev))
2013 			printk(KERN_ERR
2014 				"%s: Setting GPIO on encoder ports\n",
2015 				dev->name);
2016 		cx_set(MC417_RWD, (mask & 0x0007fff8) >> 3);
2017 	}
2018 
2019 	/* TODO: 23-19 */
2020 	if (mask & 0x00f80000)
2021 		printk(KERN_INFO "%s: Unsupported\n", dev->name);
2022 }
2023 
2024 void cx23885_gpio_clear(struct cx23885_dev *dev, u32 mask)
2025 {
2026 	if (mask & 0x00000007)
2027 		cx_clear(GP0_IO, mask & 0x7);
2028 
2029 	if (mask & 0x0007fff8) {
2030 		if (encoder_on_portb(dev) || encoder_on_portc(dev))
2031 			printk(KERN_ERR
2032 				"%s: Clearing GPIO moving on encoder ports\n",
2033 				dev->name);
2034 		cx_clear(MC417_RWD, (mask & 0x7fff8) >> 3);
2035 	}
2036 
2037 	/* TODO: 23-19 */
2038 	if (mask & 0x00f80000)
2039 		printk(KERN_INFO "%s: Unsupported\n", dev->name);
2040 }
2041 
2042 u32 cx23885_gpio_get(struct cx23885_dev *dev, u32 mask)
2043 {
2044 	if (mask & 0x00000007)
2045 		return (cx_read(GP0_IO) >> 8) & mask & 0x7;
2046 
2047 	if (mask & 0x0007fff8) {
2048 		if (encoder_on_portb(dev) || encoder_on_portc(dev))
2049 			printk(KERN_ERR
2050 				"%s: Reading GPIO moving on encoder ports\n",
2051 				dev->name);
2052 		return (cx_read(MC417_RWD) & ((mask & 0x7fff8) >> 3)) << 3;
2053 	}
2054 
2055 	/* TODO: 23-19 */
2056 	if (mask & 0x00f80000)
2057 		printk(KERN_INFO "%s: Unsupported\n", dev->name);
2058 
2059 	return 0;
2060 }
2061 
2062 void cx23885_gpio_enable(struct cx23885_dev *dev, u32 mask, int asoutput)
2063 {
2064 	if ((mask & 0x00000007) && asoutput)
2065 		cx_set(GP0_IO, (mask & 0x7) << 16);
2066 	else if ((mask & 0x00000007) && !asoutput)
2067 		cx_clear(GP0_IO, (mask & 0x7) << 16);
2068 
2069 	if (mask & 0x0007fff8) {
2070 		if (encoder_on_portb(dev) || encoder_on_portc(dev))
2071 			printk(KERN_ERR
2072 				"%s: Enabling GPIO on encoder ports\n",
2073 				dev->name);
2074 	}
2075 
2076 	/* MC417_OEN is active low for output, write 1 for an input */
2077 	if ((mask & 0x0007fff8) && asoutput)
2078 		cx_clear(MC417_OEN, (mask & 0x7fff8) >> 3);
2079 
2080 	else if ((mask & 0x0007fff8) && !asoutput)
2081 		cx_set(MC417_OEN, (mask & 0x7fff8) >> 3);
2082 
2083 	/* TODO: 23-19 */
2084 }
2085 
2086 static int cx23885_initdev(struct pci_dev *pci_dev,
2087 			   const struct pci_device_id *pci_id)
2088 {
2089 	struct cx23885_dev *dev;
2090 	int err;
2091 
2092 	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
2093 	if (NULL == dev)
2094 		return -ENOMEM;
2095 
2096 	err = v4l2_device_register(&pci_dev->dev, &dev->v4l2_dev);
2097 	if (err < 0)
2098 		goto fail_free;
2099 
2100 	/* Prepare to handle notifications from subdevices */
2101 	cx23885_v4l2_dev_notify_init(dev);
2102 
2103 	/* pci init */
2104 	dev->pci = pci_dev;
2105 	if (pci_enable_device(pci_dev)) {
2106 		err = -EIO;
2107 		goto fail_unreg;
2108 	}
2109 
2110 	if (cx23885_dev_setup(dev) < 0) {
2111 		err = -EINVAL;
2112 		goto fail_unreg;
2113 	}
2114 
2115 	/* print pci info */
2116 	dev->pci_rev = pci_dev->revision;
2117 	pci_read_config_byte(pci_dev, PCI_LATENCY_TIMER,  &dev->pci_lat);
2118 	printk(KERN_INFO "%s/0: found at %s, rev: %d, irq: %d, "
2119 	       "latency: %d, mmio: 0x%llx\n", dev->name,
2120 	       pci_name(pci_dev), dev->pci_rev, pci_dev->irq,
2121 	       dev->pci_lat,
2122 		(unsigned long long)pci_resource_start(pci_dev, 0));
2123 
2124 	pci_set_master(pci_dev);
2125 	if (!pci_dma_supported(pci_dev, 0xffffffff)) {
2126 		printk("%s/0: Oops: no 32bit PCI DMA ???\n", dev->name);
2127 		err = -EIO;
2128 		goto fail_irq;
2129 	}
2130 
2131 	err = request_irq(pci_dev->irq, cx23885_irq,
2132 			  IRQF_SHARED | IRQF_DISABLED, dev->name, dev);
2133 	if (err < 0) {
2134 		printk(KERN_ERR "%s: can't get IRQ %d\n",
2135 		       dev->name, pci_dev->irq);
2136 		goto fail_irq;
2137 	}
2138 
2139 	switch (dev->board) {
2140 	case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
2141 		cx23885_irq_add_enable(dev, PCI_MSK_GPIO1 | PCI_MSK_GPIO0);
2142 		break;
2143 	case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF:
2144 		cx23885_irq_add_enable(dev, PCI_MSK_GPIO0);
2145 		break;
2146 	}
2147 
2148 	/*
2149 	 * The CX2388[58] IR controller can start firing interrupts when
2150 	 * enabled, so these have to take place after the cx23885_irq() handler
2151 	 * is hooked up by the call to request_irq() above.
2152 	 */
2153 	cx23885_ir_pci_int_enable(dev);
2154 	cx23885_input_init(dev);
2155 
2156 	return 0;
2157 
2158 fail_irq:
2159 	cx23885_dev_unregister(dev);
2160 fail_unreg:
2161 	v4l2_device_unregister(&dev->v4l2_dev);
2162 fail_free:
2163 	kfree(dev);
2164 	return err;
2165 }
2166 
2167 static void cx23885_finidev(struct pci_dev *pci_dev)
2168 {
2169 	struct v4l2_device *v4l2_dev = pci_get_drvdata(pci_dev);
2170 	struct cx23885_dev *dev = to_cx23885(v4l2_dev);
2171 
2172 	cx23885_input_fini(dev);
2173 	cx23885_ir_fini(dev);
2174 
2175 	cx23885_shutdown(dev);
2176 
2177 	pci_disable_device(pci_dev);
2178 
2179 	/* unregister stuff */
2180 	free_irq(pci_dev->irq, dev);
2181 
2182 	cx23885_dev_unregister(dev);
2183 	v4l2_device_unregister(v4l2_dev);
2184 	kfree(dev);
2185 }
2186 
2187 static struct pci_device_id cx23885_pci_tbl[] = {
2188 	{
2189 		/* CX23885 */
2190 		.vendor       = 0x14f1,
2191 		.device       = 0x8852,
2192 		.subvendor    = PCI_ANY_ID,
2193 		.subdevice    = PCI_ANY_ID,
2194 	}, {
2195 		/* CX23887 Rev 2 */
2196 		.vendor       = 0x14f1,
2197 		.device       = 0x8880,
2198 		.subvendor    = PCI_ANY_ID,
2199 		.subdevice    = PCI_ANY_ID,
2200 	}, {
2201 		/* --- end of list --- */
2202 	}
2203 };
2204 MODULE_DEVICE_TABLE(pci, cx23885_pci_tbl);
2205 
2206 static struct pci_driver cx23885_pci_driver = {
2207 	.name     = "cx23885",
2208 	.id_table = cx23885_pci_tbl,
2209 	.probe    = cx23885_initdev,
2210 	.remove   = cx23885_finidev,
2211 	/* TODO */
2212 	.suspend  = NULL,
2213 	.resume   = NULL,
2214 };
2215 
2216 static int __init cx23885_init(void)
2217 {
2218 	printk(KERN_INFO "cx23885 driver version %s loaded\n",
2219 		CX23885_VERSION);
2220 	return pci_register_driver(&cx23885_pci_driver);
2221 }
2222 
2223 static void __exit cx23885_fini(void)
2224 {
2225 	pci_unregister_driver(&cx23885_pci_driver);
2226 }
2227 
2228 module_init(cx23885_init);
2229 module_exit(cx23885_fini);
2230