GNU Linux-libre 6.7.9-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         if (risc->cpu)
1329                 dma_free_coherent(&dev->pci->dev, risc->size, risc->cpu, risc->dma);
1330         memset(risc, 0, sizeof(*risc));
1331 }
1332
1333 static void cx23885_tsport_reg_dump(struct cx23885_tsport *port)
1334 {
1335         struct cx23885_dev *dev = port->dev;
1336
1337         dprintk(1, "%s() Register Dump\n", __func__);
1338         dprintk(1, "%s() DEV_CNTRL2               0x%08X\n", __func__,
1339                 cx_read(DEV_CNTRL2));
1340         dprintk(1, "%s() PCI_INT_MSK              0x%08X\n", __func__,
1341                 cx23885_irq_get_mask(dev));
1342         dprintk(1, "%s() AUD_INT_INT_MSK          0x%08X\n", __func__,
1343                 cx_read(AUDIO_INT_INT_MSK));
1344         dprintk(1, "%s() AUD_INT_DMA_CTL          0x%08X\n", __func__,
1345                 cx_read(AUD_INT_DMA_CTL));
1346         dprintk(1, "%s() AUD_EXT_INT_MSK          0x%08X\n", __func__,
1347                 cx_read(AUDIO_EXT_INT_MSK));
1348         dprintk(1, "%s() AUD_EXT_DMA_CTL          0x%08X\n", __func__,
1349                 cx_read(AUD_EXT_DMA_CTL));
1350         dprintk(1, "%s() PAD_CTRL                 0x%08X\n", __func__,
1351                 cx_read(PAD_CTRL));
1352         dprintk(1, "%s() ALT_PIN_OUT_SEL          0x%08X\n", __func__,
1353                 cx_read(ALT_PIN_OUT_SEL));
1354         dprintk(1, "%s() GPIO2                    0x%08X\n", __func__,
1355                 cx_read(GPIO2));
1356         dprintk(1, "%s() gpcnt(0x%08X)          0x%08X\n", __func__,
1357                 port->reg_gpcnt, cx_read(port->reg_gpcnt));
1358         dprintk(1, "%s() gpcnt_ctl(0x%08X)      0x%08x\n", __func__,
1359                 port->reg_gpcnt_ctl, cx_read(port->reg_gpcnt_ctl));
1360         dprintk(1, "%s() dma_ctl(0x%08X)        0x%08x\n", __func__,
1361                 port->reg_dma_ctl, cx_read(port->reg_dma_ctl));
1362         if (port->reg_src_sel)
1363                 dprintk(1, "%s() src_sel(0x%08X)        0x%08x\n", __func__,
1364                         port->reg_src_sel, cx_read(port->reg_src_sel));
1365         dprintk(1, "%s() lngth(0x%08X)          0x%08x\n", __func__,
1366                 port->reg_lngth, cx_read(port->reg_lngth));
1367         dprintk(1, "%s() hw_sop_ctrl(0x%08X)    0x%08x\n", __func__,
1368                 port->reg_hw_sop_ctrl, cx_read(port->reg_hw_sop_ctrl));
1369         dprintk(1, "%s() gen_ctrl(0x%08X)       0x%08x\n", __func__,
1370                 port->reg_gen_ctrl, cx_read(port->reg_gen_ctrl));
1371         dprintk(1, "%s() bd_pkt_status(0x%08X)  0x%08x\n", __func__,
1372                 port->reg_bd_pkt_status, cx_read(port->reg_bd_pkt_status));
1373         dprintk(1, "%s() sop_status(0x%08X)     0x%08x\n", __func__,
1374                 port->reg_sop_status, cx_read(port->reg_sop_status));
1375         dprintk(1, "%s() fifo_ovfl_stat(0x%08X) 0x%08x\n", __func__,
1376                 port->reg_fifo_ovfl_stat, cx_read(port->reg_fifo_ovfl_stat));
1377         dprintk(1, "%s() vld_misc(0x%08X)       0x%08x\n", __func__,
1378                 port->reg_vld_misc, cx_read(port->reg_vld_misc));
1379         dprintk(1, "%s() ts_clk_en(0x%08X)      0x%08x\n", __func__,
1380                 port->reg_ts_clk_en, cx_read(port->reg_ts_clk_en));
1381         dprintk(1, "%s() ts_int_msk(0x%08X)     0x%08x\n", __func__,
1382                 port->reg_ts_int_msk, cx_read(port->reg_ts_int_msk));
1383         dprintk(1, "%s() ts_int_status(0x%08X)  0x%08x\n", __func__,
1384                 port->reg_ts_int_stat, cx_read(port->reg_ts_int_stat));
1385         dprintk(1, "%s() PCI_INT_STAT           0x%08X\n", __func__,
1386                 cx_read(PCI_INT_STAT));
1387         dprintk(1, "%s() VID_B_INT_MSTAT        0x%08X\n", __func__,
1388                 cx_read(VID_B_INT_MSTAT));
1389         dprintk(1, "%s() VID_B_INT_SSTAT        0x%08X\n", __func__,
1390                 cx_read(VID_B_INT_SSTAT));
1391         dprintk(1, "%s() VID_C_INT_MSTAT        0x%08X\n", __func__,
1392                 cx_read(VID_C_INT_MSTAT));
1393         dprintk(1, "%s() VID_C_INT_SSTAT        0x%08X\n", __func__,
1394                 cx_read(VID_C_INT_SSTAT));
1395 }
1396
1397 int cx23885_start_dma(struct cx23885_tsport *port,
1398                              struct cx23885_dmaqueue *q,
1399                              struct cx23885_buffer   *buf)
1400 {
1401         struct cx23885_dev *dev = port->dev;
1402         u32 reg;
1403
1404         dprintk(1, "%s() w: %d, h: %d, f: %d\n", __func__,
1405                 dev->width, dev->height, dev->field);
1406
1407         /* clear dma in progress */
1408         cx23885_clear_bridge_error(dev);
1409
1410         /* Stop the fifo and risc engine for this port */
1411         cx_clear(port->reg_dma_ctl, port->dma_ctl_val);
1412
1413         /* setup fifo + format */
1414         cx23885_sram_channel_setup(dev,
1415                                    &dev->sram_channels[port->sram_chno],
1416                                    port->ts_packet_size, buf->risc.dma);
1417         if (debug > 5) {
1418                 cx23885_sram_channel_dump(dev,
1419                         &dev->sram_channels[port->sram_chno]);
1420                 cx23885_risc_disasm(port, &buf->risc);
1421         }
1422
1423         /* write TS length to chip */
1424         cx_write(port->reg_lngth, port->ts_packet_size);
1425
1426         if ((!(cx23885_boards[dev->board].portb & CX23885_MPEG_DVB)) &&
1427                 (!(cx23885_boards[dev->board].portc & CX23885_MPEG_DVB))) {
1428                 pr_err("%s() Unsupported .portb/c (0x%08x)/(0x%08x)\n",
1429                         __func__,
1430                         cx23885_boards[dev->board].portb,
1431                         cx23885_boards[dev->board].portc);
1432                 return -EINVAL;
1433         }
1434
1435         if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER)
1436                 cx23885_av_clk(dev, 0);
1437
1438         udelay(100);
1439
1440         /* If the port supports SRC SELECT, configure it */
1441         if (port->reg_src_sel)
1442                 cx_write(port->reg_src_sel, port->src_sel_val);
1443
1444         cx_write(port->reg_hw_sop_ctrl, port->hw_sop_ctrl_val);
1445         cx_write(port->reg_ts_clk_en, port->ts_clk_en_val);
1446         cx_write(port->reg_vld_misc, port->vld_misc_val);
1447         cx_write(port->reg_gen_ctrl, port->gen_ctrl_val);
1448         udelay(100);
1449
1450         /* NOTE: this is 2 (reserved) for portb, does it matter? */
1451         /* reset counter to zero */
1452         cx_write(port->reg_gpcnt_ctl, 3);
1453         q->count = 0;
1454
1455         /* Set VIDB pins to input */
1456         if (cx23885_boards[dev->board].portb == CX23885_MPEG_DVB) {
1457                 reg = cx_read(PAD_CTRL);
1458                 reg &= ~0x3; /* Clear TS1_OE & TS1_SOP_OE */
1459                 cx_write(PAD_CTRL, reg);
1460         }
1461
1462         /* Set VIDC pins to input */
1463         if (cx23885_boards[dev->board].portc == CX23885_MPEG_DVB) {
1464                 reg = cx_read(PAD_CTRL);
1465                 reg &= ~0x4; /* Clear TS2_SOP_OE */
1466                 cx_write(PAD_CTRL, reg);
1467         }
1468
1469         if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER) {
1470
1471                 reg = cx_read(PAD_CTRL);
1472                 reg = reg & ~0x1;    /* Clear TS1_OE */
1473
1474                 /* FIXME, bit 2 writing here is questionable */
1475                 /* set TS1_SOP_OE and TS1_OE_HI */
1476                 reg = reg | 0xa;
1477                 cx_write(PAD_CTRL, reg);
1478
1479                 /* Sets MOE_CLK_DIS to disable MoE clock */
1480                 /* sets MCLK_DLY_SEL/BCLK_DLY_SEL to 1 buffer delay each */
1481                 cx_write(CLK_DELAY, cx_read(CLK_DELAY) | 0x80000011);
1482
1483                 /* ALT_GPIO_ALT_SET: GPIO[0]
1484                  * IR_ALT_TX_SEL: GPIO[1]
1485                  * GPIO1_ALT_SEL: VIP_656_DATA[0]
1486                  * GPIO0_ALT_SEL: VIP_656_CLK
1487                  */
1488                 cx_write(ALT_PIN_OUT_SEL, 0x10100045);
1489         }
1490
1491         switch (dev->bridge) {
1492         case CX23885_BRIDGE_885:
1493         case CX23885_BRIDGE_887:
1494         case CX23885_BRIDGE_888:
1495                 /* enable irqs */
1496                 dprintk(1, "%s() enabling TS int's and DMA\n", __func__);
1497                 /* clear dma in progress */
1498                 cx23885_clear_bridge_error(dev);
1499                 cx_set(port->reg_ts_int_msk,  port->ts_int_msk_val);
1500                 cx_set(port->reg_dma_ctl, port->dma_ctl_val);
1501
1502                 /* clear dma in progress */
1503                 cx23885_clear_bridge_error(dev);
1504                 cx23885_irq_add(dev, port->pci_irqmask);
1505                 cx23885_irq_enable_all(dev);
1506
1507                 /* clear dma in progress */
1508                 cx23885_clear_bridge_error(dev);
1509                 break;
1510         default:
1511                 BUG();
1512         }
1513
1514         cx_set(DEV_CNTRL2, (1<<5)); /* Enable RISC controller */
1515         /* clear dma in progress */
1516         cx23885_clear_bridge_error(dev);
1517
1518         if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER)
1519                 cx23885_av_clk(dev, 1);
1520
1521         if (debug > 4)
1522                 cx23885_tsport_reg_dump(port);
1523
1524         cx23885_irq_get_mask(dev);
1525
1526         /* clear dma in progress */
1527         cx23885_clear_bridge_error(dev);
1528
1529         return 0;
1530 }
1531
1532 static int cx23885_stop_dma(struct cx23885_tsport *port)
1533 {
1534         struct cx23885_dev *dev = port->dev;
1535         u32 reg;
1536         int delay = 0;
1537         uint32_t reg1_val;
1538         uint32_t reg2_val;
1539
1540         dprintk(1, "%s()\n", __func__);
1541
1542         /* Stop interrupts and DMA */
1543         cx_clear(port->reg_ts_int_msk, port->ts_int_msk_val);
1544         cx_clear(port->reg_dma_ctl, port->dma_ctl_val);
1545         /* just in case wait for any dma to complete before allowing dealloc */
1546         mdelay(20);
1547         for (delay = 0; delay < 100; delay++) {
1548                 reg1_val = cx_read(TC_REQ);
1549                 reg2_val = cx_read(TC_REQ_SET);
1550                 if (reg1_val == 0 || reg2_val == 0)
1551                         break;
1552                 mdelay(1);
1553         }
1554         dev_dbg(&dev->pci->dev, "delay=%d reg1=0x%08x reg2=0x%08x\n",
1555                 delay, reg1_val, reg2_val);
1556
1557         if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER) {
1558                 reg = cx_read(PAD_CTRL);
1559
1560                 /* Set TS1_OE */
1561                 reg = reg | 0x1;
1562
1563                 /* clear TS1_SOP_OE and TS1_OE_HI */
1564                 reg = reg & ~0xa;
1565                 cx_write(PAD_CTRL, reg);
1566                 cx_write(port->reg_src_sel, 0);
1567                 cx_write(port->reg_gen_ctrl, 8);
1568         }
1569
1570         if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER)
1571                 cx23885_av_clk(dev, 0);
1572
1573         return 0;
1574 }
1575
1576 /* ------------------------------------------------------------------ */
1577
1578 int cx23885_buf_prepare(struct cx23885_buffer *buf, struct cx23885_tsport *port)
1579 {
1580         struct cx23885_dev *dev = port->dev;
1581         int size = port->ts_packet_size * port->ts_packet_count;
1582         struct sg_table *sgt = vb2_dma_sg_plane_desc(&buf->vb.vb2_buf, 0);
1583
1584         dprintk(1, "%s: %p\n", __func__, buf);
1585         if (vb2_plane_size(&buf->vb.vb2_buf, 0) < size)
1586                 return -EINVAL;
1587         vb2_set_plane_payload(&buf->vb.vb2_buf, 0, size);
1588
1589         cx23885_risc_databuffer(dev->pci, &buf->risc,
1590                                 sgt->sgl,
1591                                 port->ts_packet_size, port->ts_packet_count, 0);
1592         return 0;
1593 }
1594
1595 /*
1596  * The risc program for each buffer works as follows: it starts with a simple
1597  * 'JUMP to addr + 12', which is effectively a NOP. Then the code to DMA the
1598  * buffer follows and at the end we have a JUMP back to the start + 12 (skipping
1599  * the initial JUMP).
1600  *
1601  * This is the risc program of the first buffer to be queued if the active list
1602  * is empty and it just keeps DMAing this buffer without generating any
1603  * interrupts.
1604  *
1605  * If a new buffer is added then the initial JUMP in the code for that buffer
1606  * will generate an interrupt which signals that the previous buffer has been
1607  * DMAed successfully and that it can be returned to userspace.
1608  *
1609  * It also sets the final jump of the previous buffer to the start of the new
1610  * buffer, thus chaining the new buffer into the DMA chain. This is a single
1611  * atomic u32 write, so there is no race condition.
1612  *
1613  * The end-result of all this that you only get an interrupt when a buffer
1614  * is ready, so the control flow is very easy.
1615  */
1616 void cx23885_buf_queue(struct cx23885_tsport *port, struct cx23885_buffer *buf)
1617 {
1618         struct cx23885_buffer    *prev;
1619         struct cx23885_dev *dev = port->dev;
1620         struct cx23885_dmaqueue  *cx88q = &port->mpegq;
1621         unsigned long flags;
1622
1623         buf->risc.cpu[1] = cpu_to_le32(buf->risc.dma + 12);
1624         buf->risc.jmp[0] = cpu_to_le32(RISC_JUMP | RISC_CNT_INC);
1625         buf->risc.jmp[1] = cpu_to_le32(buf->risc.dma + 12);
1626         buf->risc.jmp[2] = cpu_to_le32(0); /* bits 63-32 */
1627
1628         spin_lock_irqsave(&dev->slock, flags);
1629         if (list_empty(&cx88q->active)) {
1630                 list_add_tail(&buf->queue, &cx88q->active);
1631                 dprintk(1, "[%p/%d] %s - first active\n",
1632                         buf, buf->vb.vb2_buf.index, __func__);
1633         } else {
1634                 buf->risc.cpu[0] |= cpu_to_le32(RISC_IRQ1);
1635                 prev = list_entry(cx88q->active.prev, struct cx23885_buffer,
1636                                   queue);
1637                 list_add_tail(&buf->queue, &cx88q->active);
1638                 prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
1639                 dprintk(1, "[%p/%d] %s - append to active\n",
1640                          buf, buf->vb.vb2_buf.index, __func__);
1641         }
1642         spin_unlock_irqrestore(&dev->slock, flags);
1643 }
1644
1645 /* ----------------------------------------------------------- */
1646
1647 static void do_cancel_buffers(struct cx23885_tsport *port, char *reason)
1648 {
1649         struct cx23885_dmaqueue *q = &port->mpegq;
1650         struct cx23885_buffer *buf;
1651         unsigned long flags;
1652
1653         spin_lock_irqsave(&port->slock, flags);
1654         while (!list_empty(&q->active)) {
1655                 buf = list_entry(q->active.next, struct cx23885_buffer,
1656                                  queue);
1657                 list_del(&buf->queue);
1658                 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
1659                 dprintk(1, "[%p/%d] %s - dma=0x%08lx\n",
1660                         buf, buf->vb.vb2_buf.index, reason,
1661                         (unsigned long)buf->risc.dma);
1662         }
1663         spin_unlock_irqrestore(&port->slock, flags);
1664 }
1665
1666 void cx23885_cancel_buffers(struct cx23885_tsport *port)
1667 {
1668         dprintk(1, "%s()\n", __func__);
1669         cx23885_stop_dma(port);
1670         do_cancel_buffers(port, "cancel");
1671 }
1672
1673 int cx23885_irq_417(struct cx23885_dev *dev, u32 status)
1674 {
1675         /* FIXME: port1 assumption here. */
1676         struct cx23885_tsport *port = &dev->ts1;
1677         int count = 0;
1678         int handled = 0;
1679
1680         if (status == 0)
1681                 return handled;
1682
1683         count = cx_read(port->reg_gpcnt);
1684         dprintk(7, "status: 0x%08x  mask: 0x%08x count: 0x%x\n",
1685                 status, cx_read(port->reg_ts_int_msk), count);
1686
1687         if ((status & VID_B_MSK_BAD_PKT)         ||
1688                 (status & VID_B_MSK_OPC_ERR)     ||
1689                 (status & VID_B_MSK_VBI_OPC_ERR) ||
1690                 (status & VID_B_MSK_SYNC)        ||
1691                 (status & VID_B_MSK_VBI_SYNC)    ||
1692                 (status & VID_B_MSK_OF)          ||
1693                 (status & VID_B_MSK_VBI_OF)) {
1694                 pr_err("%s: V4L mpeg risc op code error, status = 0x%x\n",
1695                        dev->name, status);
1696                 if (status & VID_B_MSK_BAD_PKT)
1697                         dprintk(1, "        VID_B_MSK_BAD_PKT\n");
1698                 if (status & VID_B_MSK_OPC_ERR)
1699                         dprintk(1, "        VID_B_MSK_OPC_ERR\n");
1700                 if (status & VID_B_MSK_VBI_OPC_ERR)
1701                         dprintk(1, "        VID_B_MSK_VBI_OPC_ERR\n");
1702                 if (status & VID_B_MSK_SYNC)
1703                         dprintk(1, "        VID_B_MSK_SYNC\n");
1704                 if (status & VID_B_MSK_VBI_SYNC)
1705                         dprintk(1, "        VID_B_MSK_VBI_SYNC\n");
1706                 if (status & VID_B_MSK_OF)
1707                         dprintk(1, "        VID_B_MSK_OF\n");
1708                 if (status & VID_B_MSK_VBI_OF)
1709                         dprintk(1, "        VID_B_MSK_VBI_OF\n");
1710
1711                 cx_clear(port->reg_dma_ctl, port->dma_ctl_val);
1712                 cx23885_sram_channel_dump(dev,
1713                         &dev->sram_channels[port->sram_chno]);
1714                 cx23885_417_check_encoder(dev);
1715         } else if (status & VID_B_MSK_RISCI1) {
1716                 dprintk(7, "        VID_B_MSK_RISCI1\n");
1717                 spin_lock(&port->slock);
1718                 cx23885_wakeup(port, &port->mpegq, count);
1719                 spin_unlock(&port->slock);
1720         }
1721         if (status) {
1722                 cx_write(port->reg_ts_int_stat, status);
1723                 handled = 1;
1724         }
1725
1726         return handled;
1727 }
1728
1729 static int cx23885_irq_ts(struct cx23885_tsport *port, u32 status)
1730 {
1731         struct cx23885_dev *dev = port->dev;
1732         int handled = 0;
1733         u32 count;
1734
1735         if ((status & VID_BC_MSK_OPC_ERR) ||
1736                 (status & VID_BC_MSK_BAD_PKT) ||
1737                 (status & VID_BC_MSK_SYNC) ||
1738                 (status & VID_BC_MSK_OF)) {
1739
1740                 if (status & VID_BC_MSK_OPC_ERR)
1741                         dprintk(7, " (VID_BC_MSK_OPC_ERR 0x%08x)\n",
1742                                 VID_BC_MSK_OPC_ERR);
1743
1744                 if (status & VID_BC_MSK_BAD_PKT)
1745                         dprintk(7, " (VID_BC_MSK_BAD_PKT 0x%08x)\n",
1746                                 VID_BC_MSK_BAD_PKT);
1747
1748                 if (status & VID_BC_MSK_SYNC)
1749                         dprintk(7, " (VID_BC_MSK_SYNC    0x%08x)\n",
1750                                 VID_BC_MSK_SYNC);
1751
1752                 if (status & VID_BC_MSK_OF)
1753                         dprintk(7, " (VID_BC_MSK_OF      0x%08x)\n",
1754                                 VID_BC_MSK_OF);
1755
1756                 pr_err("%s: mpeg risc op code error\n", dev->name);
1757
1758                 cx_clear(port->reg_dma_ctl, port->dma_ctl_val);
1759                 cx23885_sram_channel_dump(dev,
1760                         &dev->sram_channels[port->sram_chno]);
1761
1762         } else if (status & VID_BC_MSK_RISCI1) {
1763
1764                 dprintk(7, " (RISCI1            0x%08x)\n", VID_BC_MSK_RISCI1);
1765
1766                 spin_lock(&port->slock);
1767                 count = cx_read(port->reg_gpcnt);
1768                 cx23885_wakeup(port, &port->mpegq, count);
1769                 spin_unlock(&port->slock);
1770
1771         }
1772         if (status) {
1773                 cx_write(port->reg_ts_int_stat, status);
1774                 handled = 1;
1775         }
1776
1777         return handled;
1778 }
1779
1780 static irqreturn_t cx23885_irq(int irq, void *dev_id)
1781 {
1782         struct cx23885_dev *dev = dev_id;
1783         struct cx23885_tsport *ts1 = &dev->ts1;
1784         struct cx23885_tsport *ts2 = &dev->ts2;
1785         u32 pci_status, pci_mask;
1786         u32 vida_status, vida_mask;
1787         u32 audint_status, audint_mask;
1788         u32 ts1_status, ts1_mask;
1789         u32 ts2_status, ts2_mask;
1790         int vida_count = 0, ts1_count = 0, ts2_count = 0, handled = 0;
1791         int audint_count = 0;
1792         bool subdev_handled;
1793
1794         pci_status = cx_read(PCI_INT_STAT);
1795         pci_mask = cx23885_irq_get_mask(dev);
1796         if ((pci_status & pci_mask) == 0) {
1797                 dprintk(7, "pci_status: 0x%08x  pci_mask: 0x%08x\n",
1798                         pci_status, pci_mask);
1799                 goto out;
1800         }
1801
1802         vida_status = cx_read(VID_A_INT_STAT);
1803         vida_mask = cx_read(VID_A_INT_MSK);
1804         audint_status = cx_read(AUDIO_INT_INT_STAT);
1805         audint_mask = cx_read(AUDIO_INT_INT_MSK);
1806         ts1_status = cx_read(VID_B_INT_STAT);
1807         ts1_mask = cx_read(VID_B_INT_MSK);
1808         ts2_status = cx_read(VID_C_INT_STAT);
1809         ts2_mask = cx_read(VID_C_INT_MSK);
1810
1811         if (((pci_status & pci_mask) == 0) &&
1812                 ((ts2_status & ts2_mask) == 0) &&
1813                 ((ts1_status & ts1_mask) == 0))
1814                 goto out;
1815
1816         vida_count = cx_read(VID_A_GPCNT);
1817         audint_count = cx_read(AUD_INT_A_GPCNT);
1818         ts1_count = cx_read(ts1->reg_gpcnt);
1819         ts2_count = cx_read(ts2->reg_gpcnt);
1820         dprintk(7, "pci_status: 0x%08x  pci_mask: 0x%08x\n",
1821                 pci_status, pci_mask);
1822         dprintk(7, "vida_status: 0x%08x vida_mask: 0x%08x count: 0x%x\n",
1823                 vida_status, vida_mask, vida_count);
1824         dprintk(7, "audint_status: 0x%08x audint_mask: 0x%08x count: 0x%x\n",
1825                 audint_status, audint_mask, audint_count);
1826         dprintk(7, "ts1_status: 0x%08x  ts1_mask: 0x%08x count: 0x%x\n",
1827                 ts1_status, ts1_mask, ts1_count);
1828         dprintk(7, "ts2_status: 0x%08x  ts2_mask: 0x%08x count: 0x%x\n",
1829                 ts2_status, ts2_mask, ts2_count);
1830
1831         if (pci_status & (PCI_MSK_RISC_RD | PCI_MSK_RISC_WR |
1832                           PCI_MSK_AL_RD   | PCI_MSK_AL_WR   | PCI_MSK_APB_DMA |
1833                           PCI_MSK_VID_C   | PCI_MSK_VID_B   | PCI_MSK_VID_A   |
1834                           PCI_MSK_AUD_INT | PCI_MSK_AUD_EXT |
1835                           PCI_MSK_GPIO0   | PCI_MSK_GPIO1   |
1836                           PCI_MSK_AV_CORE | PCI_MSK_IR)) {
1837
1838                 if (pci_status & PCI_MSK_RISC_RD)
1839                         dprintk(7, " (PCI_MSK_RISC_RD   0x%08x)\n",
1840                                 PCI_MSK_RISC_RD);
1841
1842                 if (pci_status & PCI_MSK_RISC_WR)
1843                         dprintk(7, " (PCI_MSK_RISC_WR   0x%08x)\n",
1844                                 PCI_MSK_RISC_WR);
1845
1846                 if (pci_status & PCI_MSK_AL_RD)
1847                         dprintk(7, " (PCI_MSK_AL_RD     0x%08x)\n",
1848                                 PCI_MSK_AL_RD);
1849
1850                 if (pci_status & PCI_MSK_AL_WR)
1851                         dprintk(7, " (PCI_MSK_AL_WR     0x%08x)\n",
1852                                 PCI_MSK_AL_WR);
1853
1854                 if (pci_status & PCI_MSK_APB_DMA)
1855                         dprintk(7, " (PCI_MSK_APB_DMA   0x%08x)\n",
1856                                 PCI_MSK_APB_DMA);
1857
1858                 if (pci_status & PCI_MSK_VID_C)
1859                         dprintk(7, " (PCI_MSK_VID_C     0x%08x)\n",
1860                                 PCI_MSK_VID_C);
1861
1862                 if (pci_status & PCI_MSK_VID_B)
1863                         dprintk(7, " (PCI_MSK_VID_B     0x%08x)\n",
1864                                 PCI_MSK_VID_B);
1865
1866                 if (pci_status & PCI_MSK_VID_A)
1867                         dprintk(7, " (PCI_MSK_VID_A     0x%08x)\n",
1868                                 PCI_MSK_VID_A);
1869
1870                 if (pci_status & PCI_MSK_AUD_INT)
1871                         dprintk(7, " (PCI_MSK_AUD_INT   0x%08x)\n",
1872                                 PCI_MSK_AUD_INT);
1873
1874                 if (pci_status & PCI_MSK_AUD_EXT)
1875                         dprintk(7, " (PCI_MSK_AUD_EXT   0x%08x)\n",
1876                                 PCI_MSK_AUD_EXT);
1877
1878                 if (pci_status & PCI_MSK_GPIO0)
1879                         dprintk(7, " (PCI_MSK_GPIO0     0x%08x)\n",
1880                                 PCI_MSK_GPIO0);
1881
1882                 if (pci_status & PCI_MSK_GPIO1)
1883                         dprintk(7, " (PCI_MSK_GPIO1     0x%08x)\n",
1884                                 PCI_MSK_GPIO1);
1885
1886                 if (pci_status & PCI_MSK_AV_CORE)
1887                         dprintk(7, " (PCI_MSK_AV_CORE   0x%08x)\n",
1888                                 PCI_MSK_AV_CORE);
1889
1890                 if (pci_status & PCI_MSK_IR)
1891                         dprintk(7, " (PCI_MSK_IR        0x%08x)\n",
1892                                 PCI_MSK_IR);
1893         }
1894
1895         if (cx23885_boards[dev->board].ci_type == 1 &&
1896                         (pci_status & (PCI_MSK_GPIO1 | PCI_MSK_GPIO0)))
1897                 handled += netup_ci_slot_status(dev, pci_status);
1898
1899         if (cx23885_boards[dev->board].ci_type == 2 &&
1900                         (pci_status & PCI_MSK_GPIO0))
1901                 handled += altera_ci_irq(dev);
1902
1903         if (ts1_status) {
1904                 if (cx23885_boards[dev->board].portb == CX23885_MPEG_DVB)
1905                         handled += cx23885_irq_ts(ts1, ts1_status);
1906                 else
1907                 if (cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER)
1908                         handled += cx23885_irq_417(dev, ts1_status);
1909         }
1910
1911         if (ts2_status) {
1912                 if (cx23885_boards[dev->board].portc == CX23885_MPEG_DVB)
1913                         handled += cx23885_irq_ts(ts2, ts2_status);
1914                 else
1915                 if (cx23885_boards[dev->board].portc == CX23885_MPEG_ENCODER)
1916                         handled += cx23885_irq_417(dev, ts2_status);
1917         }
1918
1919         if (vida_status)
1920                 handled += cx23885_video_irq(dev, vida_status);
1921
1922         if (audint_status)
1923                 handled += cx23885_audio_irq(dev, audint_status, audint_mask);
1924
1925         if (pci_status & PCI_MSK_IR) {
1926                 subdev_handled = false;
1927                 v4l2_subdev_call(dev->sd_ir, core, interrupt_service_routine,
1928                                  pci_status, &subdev_handled);
1929                 if (subdev_handled)
1930                         handled++;
1931         }
1932
1933         if ((pci_status & pci_mask) & PCI_MSK_AV_CORE) {
1934                 cx23885_irq_disable(dev, PCI_MSK_AV_CORE);
1935                 schedule_work(&dev->cx25840_work);
1936                 handled++;
1937         }
1938
1939         if (handled)
1940                 cx_write(PCI_INT_STAT, pci_status & pci_mask);
1941 out:
1942         return IRQ_RETVAL(handled);
1943 }
1944
1945 static void cx23885_v4l2_dev_notify(struct v4l2_subdev *sd,
1946                                     unsigned int notification, void *arg)
1947 {
1948         struct cx23885_dev *dev;
1949
1950         if (sd == NULL)
1951                 return;
1952
1953         dev = to_cx23885(sd->v4l2_dev);
1954
1955         switch (notification) {
1956         case V4L2_SUBDEV_IR_RX_NOTIFY: /* Possibly called in an IRQ context */
1957                 if (sd == dev->sd_ir)
1958                         cx23885_ir_rx_v4l2_dev_notify(sd, *(u32 *)arg);
1959                 break;
1960         case V4L2_SUBDEV_IR_TX_NOTIFY: /* Possibly called in an IRQ context */
1961                 if (sd == dev->sd_ir)
1962                         cx23885_ir_tx_v4l2_dev_notify(sd, *(u32 *)arg);
1963                 break;
1964         }
1965 }
1966
1967 static void cx23885_v4l2_dev_notify_init(struct cx23885_dev *dev)
1968 {
1969         INIT_WORK(&dev->cx25840_work, cx23885_av_work_handler);
1970         INIT_WORK(&dev->ir_rx_work, cx23885_ir_rx_work_handler);
1971         INIT_WORK(&dev->ir_tx_work, cx23885_ir_tx_work_handler);
1972         dev->v4l2_dev.notify = cx23885_v4l2_dev_notify;
1973 }
1974
1975 static inline int encoder_on_portb(struct cx23885_dev *dev)
1976 {
1977         return cx23885_boards[dev->board].portb == CX23885_MPEG_ENCODER;
1978 }
1979
1980 static inline int encoder_on_portc(struct cx23885_dev *dev)
1981 {
1982         return cx23885_boards[dev->board].portc == CX23885_MPEG_ENCODER;
1983 }
1984
1985 /* Mask represents 32 different GPIOs, GPIO's are split into multiple
1986  * registers depending on the board configuration (and whether the
1987  * 417 encoder (wi it's own GPIO's) are present. Each GPIO bit will
1988  * be pushed into the correct hardware register, regardless of the
1989  * physical location. Certain registers are shared so we sanity check
1990  * and report errors if we think we're tampering with a GPIo that might
1991  * be assigned to the encoder (and used for the host bus).
1992  *
1993  * GPIO  2 through  0 - On the cx23885 bridge
1994  * GPIO 18 through  3 - On the cx23417 host bus interface
1995  * GPIO 23 through 19 - On the cx25840 a/v core
1996  */
1997 void cx23885_gpio_set(struct cx23885_dev *dev, u32 mask)
1998 {
1999         if (mask & 0x7)
2000                 cx_set(GP0_IO, mask & 0x7);
2001
2002         if (mask & 0x0007fff8) {
2003                 if (encoder_on_portb(dev) || encoder_on_portc(dev))
2004                         pr_err("%s: Setting GPIO on encoder ports\n",
2005                                 dev->name);
2006                 cx_set(MC417_RWD, (mask & 0x0007fff8) >> 3);
2007         }
2008
2009         /* TODO: 23-19 */
2010         if (mask & 0x00f80000)
2011                 pr_info("%s: Unsupported\n", dev->name);
2012 }
2013
2014 void cx23885_gpio_clear(struct cx23885_dev *dev, u32 mask)
2015 {
2016         if (mask & 0x00000007)
2017                 cx_clear(GP0_IO, mask & 0x7);
2018
2019         if (mask & 0x0007fff8) {
2020                 if (encoder_on_portb(dev) || encoder_on_portc(dev))
2021                         pr_err("%s: Clearing GPIO moving on encoder ports\n",
2022                                 dev->name);
2023                 cx_clear(MC417_RWD, (mask & 0x7fff8) >> 3);
2024         }
2025
2026         /* TODO: 23-19 */
2027         if (mask & 0x00f80000)
2028                 pr_info("%s: Unsupported\n", dev->name);
2029 }
2030
2031 u32 cx23885_gpio_get(struct cx23885_dev *dev, u32 mask)
2032 {
2033         if (mask & 0x00000007)
2034                 return (cx_read(GP0_IO) >> 8) & mask & 0x7;
2035
2036         if (mask & 0x0007fff8) {
2037                 if (encoder_on_portb(dev) || encoder_on_portc(dev))
2038                         pr_err("%s: Reading GPIO moving on encoder ports\n",
2039                                 dev->name);
2040                 return (cx_read(MC417_RWD) & ((mask & 0x7fff8) >> 3)) << 3;
2041         }
2042
2043         /* TODO: 23-19 */
2044         if (mask & 0x00f80000)
2045                 pr_info("%s: Unsupported\n", dev->name);
2046
2047         return 0;
2048 }
2049
2050 void cx23885_gpio_enable(struct cx23885_dev *dev, u32 mask, int asoutput)
2051 {
2052         if ((mask & 0x00000007) && asoutput)
2053                 cx_set(GP0_IO, (mask & 0x7) << 16);
2054         else if ((mask & 0x00000007) && !asoutput)
2055                 cx_clear(GP0_IO, (mask & 0x7) << 16);
2056
2057         if (mask & 0x0007fff8) {
2058                 if (encoder_on_portb(dev) || encoder_on_portc(dev))
2059                         pr_err("%s: Enabling GPIO on encoder ports\n",
2060                                 dev->name);
2061         }
2062
2063         /* MC417_OEN is active low for output, write 1 for an input */
2064         if ((mask & 0x0007fff8) && asoutput)
2065                 cx_clear(MC417_OEN, (mask & 0x7fff8) >> 3);
2066
2067         else if ((mask & 0x0007fff8) && !asoutput)
2068                 cx_set(MC417_OEN, (mask & 0x7fff8) >> 3);
2069
2070         /* TODO: 23-19 */
2071 }
2072
2073 static struct {
2074         int vendor, dev;
2075 } const broken_dev_id[] = {
2076         /* According with
2077          * https://openbenchmarking.org/system/1703021-RI-AMDZEN08075/Ryzen%207%201800X/lspci,
2078          * 0x1451 is PCI ID for the IOMMU found on Ryzen
2079          */
2080         { PCI_VENDOR_ID_AMD, 0x1451 },
2081         /* According to sudo lspci -nn,
2082          * 0x1423 is the PCI ID for the IOMMU found on Kaveri
2083          */
2084         { PCI_VENDOR_ID_AMD, 0x1423 },
2085         /* 0x1481 is the PCI ID for the IOMMU found on Starship/Matisse
2086          */
2087         { PCI_VENDOR_ID_AMD, 0x1481 },
2088         /* 0x1419 is the PCI ID for the IOMMU found on 15h (Models 10h-1fh) family
2089          */
2090         { PCI_VENDOR_ID_AMD, 0x1419 },
2091         /* 0x1631 is the PCI ID for the IOMMU found on Renoir/Cezanne
2092          */
2093         { PCI_VENDOR_ID_AMD, 0x1631 },
2094         /* 0x5a23 is the PCI ID for the IOMMU found on RD890S/RD990
2095          */
2096         { PCI_VENDOR_ID_ATI, 0x5a23 },
2097 };
2098
2099 static bool cx23885_does_need_dma_reset(void)
2100 {
2101         int i;
2102         struct pci_dev *pdev = NULL;
2103
2104         if (dma_reset_workaround == 0)
2105                 return false;
2106         else if (dma_reset_workaround == 2)
2107                 return true;
2108
2109         for (i = 0; i < ARRAY_SIZE(broken_dev_id); i++) {
2110                 pdev = pci_get_device(broken_dev_id[i].vendor,
2111                                       broken_dev_id[i].dev, NULL);
2112                 if (pdev) {
2113                         pci_dev_put(pdev);
2114                         return true;
2115                 }
2116         }
2117         return false;
2118 }
2119
2120 static int cx23885_initdev(struct pci_dev *pci_dev,
2121                            const struct pci_device_id *pci_id)
2122 {
2123         struct cx23885_dev *dev;
2124         struct v4l2_ctrl_handler *hdl;
2125         int err;
2126
2127         dev = kzalloc(sizeof(*dev), GFP_KERNEL);
2128         if (NULL == dev)
2129                 return -ENOMEM;
2130
2131         dev->need_dma_reset = cx23885_does_need_dma_reset();
2132
2133         err = v4l2_device_register(&pci_dev->dev, &dev->v4l2_dev);
2134         if (err < 0)
2135                 goto fail_free;
2136
2137         hdl = &dev->ctrl_handler;
2138         v4l2_ctrl_handler_init(hdl, 6);
2139         if (hdl->error) {
2140                 err = hdl->error;
2141                 goto fail_ctrl;
2142         }
2143         dev->v4l2_dev.ctrl_handler = hdl;
2144
2145         /* Prepare to handle notifications from subdevices */
2146         cx23885_v4l2_dev_notify_init(dev);
2147
2148         /* pci init */
2149         dev->pci = pci_dev;
2150         if (pci_enable_device(pci_dev)) {
2151                 err = -EIO;
2152                 goto fail_ctrl;
2153         }
2154
2155         if (cx23885_dev_setup(dev) < 0) {
2156                 err = -EINVAL;
2157                 goto fail_ctrl;
2158         }
2159
2160         /* print pci info */
2161         dev->pci_rev = pci_dev->revision;
2162         pci_read_config_byte(pci_dev, PCI_LATENCY_TIMER,  &dev->pci_lat);
2163         pr_info("%s/0: found at %s, rev: %d, irq: %d, latency: %d, mmio: 0x%llx\n",
2164                dev->name,
2165                pci_name(pci_dev), dev->pci_rev, pci_dev->irq,
2166                dev->pci_lat,
2167                 (unsigned long long)pci_resource_start(pci_dev, 0));
2168
2169         pci_set_master(pci_dev);
2170         err = dma_set_mask(&pci_dev->dev, 0xffffffff);
2171         if (err) {
2172                 pr_err("%s/0: Oops: no 32bit PCI DMA ???\n", dev->name);
2173                 goto fail_dma_set_mask;
2174         }
2175
2176         err = request_irq(pci_dev->irq, cx23885_irq,
2177                           IRQF_SHARED, dev->name, dev);
2178         if (err < 0) {
2179                 pr_err("%s: can't get IRQ %d\n",
2180                        dev->name, pci_dev->irq);
2181                 goto fail_dma_set_mask;
2182         }
2183
2184         switch (dev->board) {
2185         case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
2186                 cx23885_irq_add_enable(dev, PCI_MSK_GPIO1 | PCI_MSK_GPIO0);
2187                 break;
2188         case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF:
2189                 cx23885_irq_add_enable(dev, PCI_MSK_GPIO0);
2190                 break;
2191         }
2192
2193         /*
2194          * The CX2388[58] IR controller can start firing interrupts when
2195          * enabled, so these have to take place after the cx23885_irq() handler
2196          * is hooked up by the call to request_irq() above.
2197          */
2198         cx23885_ir_pci_int_enable(dev);
2199         cx23885_input_init(dev);
2200
2201         return 0;
2202
2203 fail_dma_set_mask:
2204         cx23885_dev_unregister(dev);
2205 fail_ctrl:
2206         v4l2_ctrl_handler_free(hdl);
2207         v4l2_device_unregister(&dev->v4l2_dev);
2208 fail_free:
2209         kfree(dev);
2210         return err;
2211 }
2212
2213 static void cx23885_finidev(struct pci_dev *pci_dev)
2214 {
2215         struct v4l2_device *v4l2_dev = pci_get_drvdata(pci_dev);
2216         struct cx23885_dev *dev = to_cx23885(v4l2_dev);
2217
2218         cx23885_input_fini(dev);
2219         cx23885_ir_fini(dev);
2220
2221         cx23885_shutdown(dev);
2222
2223         /* unregister stuff */
2224         free_irq(pci_dev->irq, dev);
2225
2226         pci_disable_device(pci_dev);
2227
2228         cx23885_dev_unregister(dev);
2229         v4l2_ctrl_handler_free(&dev->ctrl_handler);
2230         v4l2_device_unregister(v4l2_dev);
2231         kfree(dev);
2232 }
2233
2234 static const struct pci_device_id cx23885_pci_tbl[] = {
2235         {
2236                 /* CX23885 */
2237                 .vendor       = 0x14f1,
2238                 .device       = 0x8852,
2239                 .subvendor    = PCI_ANY_ID,
2240                 .subdevice    = PCI_ANY_ID,
2241         }, {
2242                 /* CX23887 Rev 2 */
2243                 .vendor       = 0x14f1,
2244                 .device       = 0x8880,
2245                 .subvendor    = PCI_ANY_ID,
2246                 .subdevice    = PCI_ANY_ID,
2247         }, {
2248                 /* --- end of list --- */
2249         }
2250 };
2251 MODULE_DEVICE_TABLE(pci, cx23885_pci_tbl);
2252
2253 static struct pci_driver cx23885_pci_driver = {
2254         .name     = "cx23885",
2255         .id_table = cx23885_pci_tbl,
2256         .probe    = cx23885_initdev,
2257         .remove   = cx23885_finidev,
2258 };
2259
2260 static int __init cx23885_init(void)
2261 {
2262         pr_info("cx23885 driver version %s loaded\n",
2263                 CX23885_VERSION);
2264         return pci_register_driver(&cx23885_pci_driver);
2265 }
2266
2267 static void __exit cx23885_fini(void)
2268 {
2269         pci_unregister_driver(&cx23885_pci_driver);
2270 }
2271
2272 module_init(cx23885_init);
2273 module_exit(cx23885_fini);