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