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