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