• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/media/dvb/ttpci/

Lines Matching refs:av7110

3  * av7110.c: initialization and demux stuff
63 #include "av7110.h"
116 static void restart_feeds(struct av7110 *av7110);
129 static void init_av7110_av(struct av7110 *av7110)
132 struct saa7146_dev *dev = av7110->dev;
135 av7110->adac_type = DVB_ADAC_TI;
136 ret = av7110_set_volume(av7110, av7110->mixer.volume_left, av7110->mixer.volume_right);
140 ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetWSSConfig, 2, 2, wss_cfg_4_3);
143 ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetWSSConfig, 2, 3, wss_cfg_16_9);
147 ret = av7710_set_video_mode(av7110, vidmode);
153 av7110->analog_tuner_flags = 0;
154 av7110->current_input = 0;
156 av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, ADSwitch, 1, 0); // SPDIF on
157 if (i2c_writereg(av7110, 0x20, 0x00, 0x00) == 1) {
159 av7110->dvb_adapter.num);
160 av7110->adac_type = DVB_ADAC_CRYSTAL;
161 i2c_writereg(av7110, 0x20, 0x01, 0xd2);
162 i2c_writereg(av7110, 0x20, 0x02, 0x49);
163 i2c_writereg(av7110, 0x20, 0x03, 0x00);
164 i2c_writereg(av7110, 0x20, 0x04, 0x00);
169 } else if (0 == av7110_init_analog_module(av7110)) {
174 av7110->dvb_adapter.num);
175 av7110->adac_type = DVB_ADAC_NONE;
178 av7110->adac_type = adac;
180 av7110->adac_type, av7110->dvb_adapter.num);
183 if (av7110->adac_type == DVB_ADAC_NONE || av7110->adac_type == DVB_ADAC_MSP34x0) {
185 ret = av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, MainSwitch, 1, 0);
188 ret = av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, ADSwitch, 1, 1);
192 ((av7110->dev->pci->subsystem_vendor == 0x110a) ||
193 (av7110->dev->pci->subsystem_vendor == 0x13c2)) &&
194 (av7110->dev->pci->subsystem_device == 0x0000)) {
201 av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, SpdifSwitch, 1, 0); // SPDIF on
203 ret = av7110_set_volume(av7110, av7110->mixer.volume_left, av7110->mixer.volume_right);
208 static void recover_arm(struct av7110 *av7110)
210 dprintk(4, "%p\n",av7110);
212 av7110_bootarm(av7110);
215 init_av7110_av(av7110);
218 if (av7110->recover)
219 av7110->recover(av7110);
221 restart_feeds(av7110);
224 av7110_check_ir_config(av7110, true);
228 static void av7110_arm_sync(struct av7110 *av7110)
230 if (av7110->arm_thread)
231 kthread_stop(av7110->arm_thread);
233 av7110->arm_thread = NULL;
238 struct av7110 *av7110 = data;
242 dprintk(4, "%p\n",av7110);
245 timeout = wait_event_interruptible_timeout(av7110->arm_wait,
253 if (!av7110->arm_ready)
257 av7110_check_ir_config(av7110, false);
260 if (mutex_lock_interruptible(&av7110->dcomlock))
262 newloops = rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2);
263 mutex_unlock(&av7110->dcomlock);
265 if (newloops == av7110->arm_loops || av7110->arm_errors > 3) {
267 av7110->dvb_adapter.num);
269 recover_arm(av7110);
271 if (mutex_lock_interruptible(&av7110->dcomlock))
273 newloops = rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2) - 1;
274 mutex_unlock(&av7110->dcomlock);
276 av7110->arm_loops = newloops;
277 av7110->arm_errors = 0;
292 struct av7110 *av7110)
330 &av7110->p2t_filter[dvbdmxfilter->index]);
349 static inline void start_debi_dma(struct av7110 *av7110, int dir,
353 if (saa7146_wait_for_debi_done(av7110->dev, 0)) {
358 SAA7146_ISR_CLEAR(av7110->dev, MASK_19); /* for good measure */
359 SAA7146_IER_ENABLE(av7110->dev, MASK_19);
363 iwdebi(av7110, DEBISWAB, addr, 0, (len + 3) & ~3);
365 irdebi(av7110, DEBISWAB, addr, 0, len);
370 struct av7110 *av7110 = (struct av7110 *) data;
371 int type = av7110->debitype;
380 jiffies, saa7146_read(av7110->dev, PSR),
381 saa7146_read(av7110->dev, SSR));
384 av7110->debitype = -1;
389 dvb_dmx_swfilter_packets(&av7110->demux,
390 (const u8 *) av7110->debi_virt,
391 av7110->debilen / 188);
396 if (av7110->demux.recording)
397 av7110_record_cb(&av7110->p2t[handle],
398 (u8 *) av7110->debi_virt,
399 av7110->debilen);
406 if (av7110->handle2filter[handle])
407 DvbDmxFilterCallback((u8 *)av7110->debi_virt,
408 av7110->debilen, NULL, 0,
409 av7110->handle2filter[handle],
410 DMX_OK, av7110);
416 u8 *data = av7110->debi_virt;
424 av7110->ci_slot[data[0]].flags = flags;
426 ci_get_data(&av7110->ci_rbuffer,
427 av7110->debi_virt,
428 av7110->debilen);
434 CI_handle(av7110, (u8 *)av7110->debi_virt, av7110->debilen);
439 ((s8*)av7110->debi_virt)[Reserved_SIZE - 1] = 0;
440 printk("%s\n", (s8 *) av7110->debi_virt);
456 spin_lock(&av7110->debilock);
458 iwdebi(av7110, DEBINOSWAP, xfer, 0, 2);
459 ARM_ClearMailBox(av7110);
460 spin_unlock(&av7110->debilock);
463 /* irq from av7110 firmware writing the mailbox register in the DPRAM */
466 struct av7110 *av7110 = (struct av7110 *) data;
470 if (av7110->debitype != -1)
473 jiffies, saa7146_read(av7110->dev, PSR),
474 saa7146_read(av7110->dev, SSR));
476 if (saa7146_wait_for_debi_done(av7110->dev, 0)) {
481 spin_lock(&av7110->debilock);
482 ARM_ClearIrq(av7110);
484 /* see what the av7110 wants */
485 av7110->debitype = irdebi(av7110, DEBINOSWAP, IRQ_STATE, 0, 2);
486 av7110->debilen = irdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
487 rxbuf = irdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
488 txbuf = irdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
489 len = (av7110->debilen + 3) & ~3;
492 dprintk(8, "GPIO0 irq 0x%04x %d\n", av7110->debitype, av7110->debilen);
494 switch (av7110->debitype & 0xff) {
505 av7110->video_size.w = irdebi(av7110, DEBINOSWAP, STATUS_MPEG_WIDTH, 0, 2);
506 h_ar = irdebi(av7110, DEBINOSWAP, STATUS_MPEG_HEIGHT_AR, 0, 2);
508 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
509 iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
511 av7110->video_size.h = h_ar & 0xfff;
514 event.u.size.w = av7110->video_size.w;
515 event.u.size.h = av7110->video_size.h;
519 av7110->video_size.aspect_ratio = VIDEO_FORMAT_16_9;
521 av7110->videostate.video_format = VIDEO_FORMAT_16_9;
524 av7110->video_size.aspect_ratio = VIDEO_FORMAT_221_1;
526 av7110->videostate.video_format = VIDEO_FORMAT_221_1;
529 av7110->video_size.aspect_ratio = VIDEO_FORMAT_4_3;
531 av7110->videostate.video_format = VIDEO_FORMAT_4_3;
535 av7110->video_size.w, av7110->video_size.h,
536 av7110->video_size.aspect_ratio);
538 dvb_video_add_event(av7110, &event);
545 struct dvb_ringbuffer *cibuf = &av7110->ci_wbuffer;
549 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
550 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
551 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
557 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
558 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
559 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
564 dvb_ringbuffer_read(cibuf, av7110->debi_virt, len, 0);
566 iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2);
567 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2);
569 start_debi_dma(av7110, DEBI_WRITE, DPRAM_BASE + txbuf, len);
570 spin_unlock(&av7110->debilock);
576 if (!av7110->playing) {
577 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
578 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
579 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
583 if (av7110->debitype & 0x100) {
584 spin_lock(&av7110->aout.lock);
585 len = av7110_pes_play(av7110->debi_virt, &av7110->aout, 2048);
586 spin_unlock(&av7110->aout.lock);
588 if (len <= 0 && (av7110->debitype & 0x200)
589 &&av7110->videostate.play_state != VIDEO_FREEZED) {
590 spin_lock(&av7110->avout.lock);
591 len = av7110_pes_play(av7110->debi_virt, &av7110->avout, 2048);
592 spin_unlock(&av7110->avout.lock);
595 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
596 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
597 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
601 iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2);
602 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2);
604 start_debi_dma(av7110, DEBI_WRITE, DPRAM_BASE + txbuf, len);
605 spin_unlock(&av7110->debilock);
609 len = av7110->debilen;
612 av7110->bmp_state = BMP_LOADED;
613 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
614 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
615 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
616 wake_up(&av7110->bmpq);
620 if (len > av7110->bmplen)
621 len = av7110->bmplen;
624 iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2);
625 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2);
626 memcpy(av7110->debi_virt, av7110->bmpbuf+av7110->bmpp, len);
627 av7110->bmpp += len;
628 av7110->bmplen -= len;
630 start_debi_dma(av7110, DEBI_WRITE, DPRAM_BASE+txbuf, len);
631 spin_unlock(&av7110->debilock);
640 iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
648 start_debi_dma(av7110, DEBI_READ, DPRAM_BASE+rxbuf, len);
649 spin_unlock(&av7110->debilock);
654 iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
657 start_debi_dma(av7110, DEBI_READ, Reserved, len);
658 spin_unlock(&av7110->debilock);
662 if (av7110->ir.ir_handler)
663 av7110->ir.ir_handler(av7110,
664 swahw32(irdebi(av7110, DEBINOSWAP, Reserved, 0, 4)));
665 iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
670 av7110->debitype, av7110->debilen);
673 av7110->debitype = -1;
674 ARM_ClearMailBox(av7110);
675 spin_unlock(&av7110->debilock);
684 struct av7110 *av7110 = dvbdev->priv;
686 dprintk(4, "%p\n", av7110);
689 return av7110_osd_cmd(av7110, (osd_cmd_t *) parg);
691 return av7110_osd_capability(av7110, (osd_cap_t *) parg);
714 static inline int SetPIDs(struct av7110 *av7110, u16 vpid, u16 apid, u16 ttpid,
719 dprintk(4, "%p\n", av7110);
724 av7110->pids[DMX_PES_VIDEO] = 0;
725 av7110->pids[DMX_PES_AUDIO] = 0;
726 av7110->pids[DMX_PES_TELETEXT] = 0;
727 av7110->pids[DMX_PES_PCR] = 0;
730 if (av7110->audiostate.bypass_mode)
733 return av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, MultiPID, 6,
737 int ChangePIDs(struct av7110 *av7110, u16 vpid, u16 apid, u16 ttpid,
741 dprintk(4, "%p\n", av7110);
743 if (mutex_lock_interruptible(&av7110->pid_mutex))
747 av7110->pids[DMX_PES_VIDEO] = vpid;
749 av7110->pids[DMX_PES_AUDIO] = apid;
751 av7110->pids[DMX_PES_TELETEXT] = ttpid;
753 av7110->pids[DMX_PES_PCR] = pcrpid;
755 av7110->pids[DMX_PES_SUBTITLE] = 0;
757 if (av7110->fe_synced) {
758 pcrpid = av7110->pids[DMX_PES_PCR];
759 ret = SetPIDs(av7110, vpid, apid, ttpid, subpid, pcrpid);
762 mutex_unlock(&av7110->pid_mutex);
774 struct av7110 *av7110 = dvbdmxfeed->demux->priv;
781 dprintk(4, "%p\n", av7110);
795 av7110_p2t_init(&av7110->p2t_filter[dvbdmxfilter->index], dvbdmxfeed);
803 ret = av7110_fw_request(av7110, buf, 20, &handle, 1);
815 av7110->handle2filter[handle] = dvbdmxfilter;
823 struct av7110 *av7110 = dvbdmxfilter->feed->demux->priv;
829 dprintk(4, "%p\n", av7110);
838 av7110->handle2filter[handle] = NULL;
843 ret = av7110_fw_request(av7110, buf, 3, answ, 2);
859 struct av7110 *av7110 = dvbdmx->priv;
864 dprintk(4, "%p\n", av7110);
871 ret = ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]);
877 ret = ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]);
883 if (av7110->fe_synced)
885 ret = av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, Scan, 0);
892 ret = av7110_av_start_record(av7110, RP_AUDIO, dvbdmxfeed);
894 ret = av7110_av_start_record(av7110, RP_VIDEO, dvbdmxfeed);
902 struct av7110 *av7110 = dvbdmx->priv;
908 dprintk(4, "%p\n", av7110);
911 ret = av7110_av_stop(av7110, dvbdmxfeed->pes_type ? RP_VIDEO : RP_AUDIO);
914 if (!av7110->rec_mode)
916 if (!av7110->playing)
936 ret = ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]);
943 struct av7110 *av7110 = demux->priv;
946 dprintk(4, "%p\n", av7110);
963 dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout);
964 dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout);
965 ret = av7110_av_start_play(av7110,RP_AV);
1006 struct av7110 *av7110 = demux->priv;
1008 dprintk(4, "%p\n", av7110);
1046 static void restart_feeds(struct av7110 *av7110)
1048 struct dvb_demux *dvbdmx = &av7110->demux;
1053 dprintk(4, "%p\n", av7110);
1055 mode = av7110->playing;
1056 av7110->playing = 0;
1057 av7110->rec_mode = 0;
1077 av7110_av_start_play(av7110, mode);
1087 struct av7110 *av7110;
1093 av7110 = dvbdemux->priv;
1095 dprintk(4, "%p\n", av7110);
1100 ret = av7110_fw_request(av7110, &tag, 0, fwstc, 4);
1125 struct av7110* av7110 = fe->dvb->priv;
1129 return Set22K(av7110, 1);
1132 return Set22K(av7110, 0);
1142 struct av7110* av7110 = fe->dvb->priv;
1144 return av7110_diseqc_send(av7110, cmd->msg_len, cmd->msg, -1);
1150 struct av7110* av7110 = fe->dvb->priv;
1152 return av7110_diseqc_send(av7110, 0, NULL, minicmd);
1156 static int stop_ts_capture(struct av7110 *budget)
1168 static int start_ts_capture(struct av7110 *budget)
1185 struct av7110 *budget = demux->priv;
1188 dprintk(2, "av7110: %p\n", budget);
1200 struct av7110 *budget = demux->priv;
1213 struct av7110 *budget = (struct av7110 *) data;
1219 printk("av7110.c: vpeirq() called while budgetpatch disabled!"
1248 static int av7110_register(struct av7110 *av7110)
1251 struct dvb_demux *dvbdemux = &av7110->demux;
1252 struct dvb_demux *dvbdemux1 = &av7110->demux1;
1254 dprintk(4, "%p\n", av7110);
1256 if (av7110->registered)
1259 av7110->registered = 1;
1261 dvbdemux->priv = (void *) av7110;
1264 av7110->handle2filter[i] = NULL;
1274 dvb_dmx_init(&av7110->demux);
1275 av7110->demux.dmx.get_stc = dvb_get_stc;
1277 av7110->dmxdev.filternum = 32;
1278 av7110->dmxdev.demux = &dvbdemux->dmx;
1279 av7110->dmxdev.capabilities = 0;
1281 dvb_dmxdev_init(&av7110->dmxdev, &av7110->dvb_adapter);
1283 av7110->hw_frontend.source = DMX_FRONTEND_0;
1285 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &av7110->hw_frontend);
1290 av7110->mem_frontend.source = DMX_MEMORY_FE;
1292 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &av7110->mem_frontend);
1298 &av7110->hw_frontend);
1302 av7110_av_register(av7110);
1303 av7110_ca_register(av7110);
1306 dvb_register_device(&av7110->dvb_adapter, &av7110->osd_dev,
1307 &dvbdev_osd, av7110, DVB_DEVICE_OSD);
1310 dvb_net_init(&av7110->dvb_adapter, &av7110->dvb_net, &dvbdemux->dmx);
1316 dvbdemux1->priv = (void *) av7110;
1327 dvb_dmx_init(&av7110->demux1);
1329 av7110->dmxdev1.filternum = 256;
1330 av7110->dmxdev1.demux = &dvbdemux1->dmx;
1331 av7110->dmxdev1.capabilities = 0;
1333 dvb_dmxdev_init(&av7110->dmxdev1, &av7110->dvb_adapter);
1335 dvb_net_init(&av7110->dvb_adapter, &av7110->dvb_net1, &dvbdemux1->dmx);
1342 static void dvb_unregister(struct av7110 *av7110)
1344 struct dvb_demux *dvbdemux = &av7110->demux;
1345 struct dvb_demux *dvbdemux1 = &av7110->demux1;
1347 dprintk(4, "%p\n", av7110);
1349 if (!av7110->registered)
1353 dvb_net_release(&av7110->dvb_net1);
1355 dvb_dmxdev_release(&av7110->dmxdev1);
1356 dvb_dmx_release(&av7110->demux1);
1359 dvb_net_release(&av7110->dvb_net);
1362 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->hw_frontend);
1363 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->mem_frontend);
1365 dvb_dmxdev_release(&av7110->dmxdev);
1366 dvb_dmx_release(&av7110->demux);
1368 if (av7110->fe != NULL) {
1369 dvb_unregister_frontend(av7110->fe);
1370 dvb_frontend_detach(av7110->fe);
1372 dvb_unregister_device(av7110->osd_dev);
1373 av7110_av_unregister(av7110);
1374 av7110_ca_unregister(av7110);
1382 int i2c_writereg(struct av7110 *av7110, u8 id, u8 reg, u8 val)
1391 return i2c_transfer(&av7110->i2c_adap, &msgs, 1);
1400 static int check_firmware(struct av7110* av7110)
1406 ptr = av7110->bin_fw;
1409 printk("dvb-ttpci: this is not an av7110 firmware\n");
1427 av7110->bin_dpram = ptr;
1428 av7110->size_dpram = len;
1438 len > ((av7110->bin_fw + av7110->size_fw) - ptr)) {
1446 av7110->bin_root = ptr;
1447 av7110->size_root = len;
1453 static void put_firmware(struct av7110* av7110)
1455 av7110->bin_fw = NULL;
1458 static inline int get_firmware(struct av7110* av7110)
1460 av7110->bin_fw = dvb_ttpci_fw;
1461 av7110->size_fw = sizeof(dvb_ttpci_fw);
1462 return check_firmware(av7110);
1465 static void put_firmware(struct av7110* av7110)
1467 vfree(av7110->bin_fw);
1470 static int get_firmware(struct av7110* av7110)
1475 /* request the av7110 firmware, this will block until someone uploads it */
1476 ret = request_firmware(&fw, "dvb-ttpci-01.fw", &av7110->dev->pci->dev);
1498 av7110->bin_fw = (unsigned char *) vmalloc(fw->size);
1499 if (NULL == av7110->bin_fw) {
1505 memcpy(av7110->bin_fw, fw->data, fw->size);
1506 av7110->size_fw = fw->size;
1507 if ((ret = check_firmware(av7110)))
1508 vfree(av7110->bin_fw);
1518 struct av7110* av7110 = fe->dvb->priv;
1541 if (i2c_transfer (&av7110->i2c_adap, &msg, 1) != 1)
1554 struct av7110* av7110 = fe->dvb->priv;
1568 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1)
1585 struct av7110* av7110 = fe->dvb->priv;
1598 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1)
1611 struct av7110* av7110 = fe->dvb->priv;
1626 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1)
1642 struct av7110* av7110 = fe->dvb->priv;
1661 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1)
1669 struct av7110* av7110 = fe->dvb->priv;
1671 return request_firmware(fw, name, &av7110->dev->pci->dev);
1779 struct av7110* av7110 = fe->dvb->priv;
1805 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1) {
1814 if (i2c_transfer(&av7110->i2c_adap, &readmsg, 1) == 1)
1834 struct av7110* av7110 = fe->dvb->priv;
1861 if (i2c_transfer (&av7110->i2c_adap, &msg, 1) != 1) return -EIO;
1871 static int av7110_fe_lock_fix(struct av7110* av7110, fe_status_t status)
1876 av7110->fe_status = status;
1878 if (av7110->fe_synced == synced)
1881 if (av7110->playing) {
1882 av7110->fe_synced = synced;
1886 if (mutex_lock_interruptible(&av7110->pid_mutex))
1890 ret = SetPIDs(av7110, av7110->pids[DMX_PES_VIDEO],
1891 av7110->pids[DMX_PES_AUDIO],
1892 av7110->pids[DMX_PES_TELETEXT], 0,
1893 av7110->pids[DMX_PES_PCR]);
1895 ret = av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, Scan, 0);
1897 ret = SetPIDs(av7110, 0, 0, 0, 0, 0);
1899 ret = av7110_fw_cmd(av7110, COMTYPE_PID_FILTER, FlushTSQueue, 0);
1901 ret = av7110_wait_msgstate(av7110, GPMQBusy);
1906 av7110->fe_synced = synced;
1908 mutex_unlock(&av7110->pid_mutex);
1914 struct av7110* av7110 = fe->dvb->priv;
1916 int ret = av7110_fe_lock_fix(av7110, 0);
1918 av7110->saved_fe_params = *params;
1919 ret = av7110->fe_set_frontend(fe, params);
1926 struct av7110* av7110 = fe->dvb->priv;
1928 int ret = av7110_fe_lock_fix(av7110, 0);
1930 ret = av7110->fe_init(fe);
1936 struct av7110* av7110 = fe->dvb->priv;
1939 int ret = av7110->fe_read_status(fe, status);
1941 if (((*status ^ av7110->fe_status) & FE_HAS_LOCK) && (*status & FE_HAS_LOCK))
1942 ret = av7110_fe_lock_fix(av7110, *status);
1948 struct av7110* av7110 = fe->dvb->priv;
1950 int ret = av7110_fe_lock_fix(av7110, 0);
1952 ret = av7110->fe_diseqc_reset_overload(fe);
1959 struct av7110* av7110 = fe->dvb->priv;
1961 int ret = av7110_fe_lock_fix(av7110, 0);
1963 av7110->saved_master_cmd = *cmd;
1964 ret = av7110->fe_diseqc_send_master_cmd(fe, cmd);
1971 struct av7110* av7110 = fe->dvb->priv;
1973 int ret = av7110_fe_lock_fix(av7110, 0);
1975 av7110->saved_minicmd = minicmd;
1976 ret = av7110->fe_diseqc_send_burst(fe, minicmd);
1983 struct av7110* av7110 = fe->dvb->priv;
1985 int ret = av7110_fe_lock_fix(av7110, 0);
1987 av7110->saved_tone = tone;
1988 ret = av7110->fe_set_tone(fe, tone);
1995 struct av7110* av7110 = fe->dvb->priv;
1997 int ret = av7110_fe_lock_fix(av7110, 0);
1999 av7110->saved_voltage = voltage;
2000 ret = av7110->fe_set_voltage(fe, voltage);
2007 struct av7110* av7110 = fe->dvb->priv;
2009 int ret = av7110_fe_lock_fix(av7110, 0);
2011 ret = av7110->fe_dishnetwork_send_legacy_command(fe, cmd);
2015 static void dvb_s_recover(struct av7110* av7110)
2017 av7110_fe_init(av7110->fe);
2019 av7110_fe_set_voltage(av7110->fe, av7110->saved_voltage);
2020 if (av7110->saved_master_cmd.msg_len) {
2022 av7110_fe_diseqc_send_master_cmd(av7110->fe, &av7110->saved_master_cmd);
2025 av7110_fe_diseqc_send_burst(av7110->fe, av7110->saved_minicmd);
2027 av7110_fe_set_tone(av7110->fe, av7110->saved_tone);
2029 av7110_fe_set_frontend(av7110->fe, &av7110->saved_fe_params);
2032 static u8 read_pwm(struct av7110* av7110)
2039 if ((i2c_transfer(&av7110->i2c_adap, msg, 2) != 2) || (pwm == 0xff))
2045 static int frontend_init(struct av7110 *av7110)
2049 if (av7110->dev->pci->subsystem_vendor == 0x110a) {
2050 switch(av7110->dev->pci->subsystem_device) {
2052 av7110->fe = dvb_attach(ves1820_attach, &philips_cd1516_config,
2053 &av7110->i2c_adap, read_pwm(av7110));
2054 if (av7110->fe) {
2055 av7110->fe->ops.tuner_ops.set_params = philips_cd1516_tuner_set_params;
2060 } else if (av7110->dev->pci->subsystem_vendor == 0x13c2) {
2061 switch(av7110->dev->pci->subsystem_device) {
2067 av7110->fe = dvb_attach(ves1x93_attach, &alps_bsrv2_config, &av7110->i2c_adap);
2068 if (av7110->fe) {
2069 av7110->fe->ops.tuner_ops.set_params = alps_bsrv2_tuner_set_params;
2070 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2071 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2072 av7110->fe->ops.set_tone = av7110_set_tone;
2073 av7110->recover = dvb_s_recover;
2078 av7110->fe = dvb_attach(stv0299_attach, &alps_bsru6_config, &av7110->i2c_adap);
2079 if (av7110->fe) {
2080 av7110->fe->ops.tuner_ops.set_params = alps_bsru6_tuner_set_params;
2081 av7110->fe->tuner_priv = &av7110->i2c_adap;
2083 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2084 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2085 av7110->fe->ops.set_tone = av7110_set_tone;
2086 av7110->recover = dvb_s_recover;
2091 av7110->fe = dvb_attach(tda8083_attach, &grundig_29504_451_config, &av7110->i2c_adap);
2092 if (av7110->fe) {
2093 av7110->fe->ops.tuner_ops.set_params = grundig_29504_451_tuner_set_params;
2094 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2095 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2096 av7110->fe->ops.set_tone = av7110_set_tone;
2097 av7110->recover = dvb_s_recover;
2102 switch(av7110->dev->pci->subsystem_device) {
2105 av7110->fe = dvb_attach(ves1820_attach, &philips_cd1516_config, &av7110->i2c_adap,
2106 read_pwm(av7110));
2107 if (av7110->fe) {
2108 av7110->fe->ops.tuner_ops.set_params = philips_cd1516_tuner_set_params;
2113 av7110->fe = dvb_attach(ves1820_attach, &alps_tdbe2_config, &av7110->i2c_adap,
2114 read_pwm(av7110));
2115 if (av7110->fe) {
2116 av7110->fe->ops.tuner_ops.set_params = alps_tdbe2_tuner_set_params;
2124 av7110->fe = dvb_attach(sp8870_attach, &alps_tdlb7_config, &av7110->i2c_adap);
2125 if (av7110->fe) {
2126 av7110->fe->ops.tuner_ops.set_params = alps_tdlb7_tuner_set_params;
2133 av7110->fe = dvb_attach(l64781_attach, &grundig_29504_401_config, &av7110->i2c_adap);
2134 if (av7110->fe)
2135 av7110->fe->ops.tuner_ops.set_params = grundig_29504_401_tuner_set_params;
2140 av7110->fe = dvb_attach(ves1820_attach, &alps_tdbe2_config, &av7110->i2c_adap, read_pwm(av7110));
2141 if (av7110->fe) {
2142 av7110->fe->ops.tuner_ops.set_params = alps_tdbe2_tuner_set_params;
2148 av7110->fe = dvb_attach(ves1x93_attach, &alps_bsrv2_config, &av7110->i2c_adap);
2149 if (av7110->fe) {
2150 av7110->fe->ops.tuner_ops.set_params = alps_bsrv2_tuner_set_params;
2151 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2152 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2153 av7110->fe->ops.set_tone = av7110_set_tone;
2154 av7110->recover = dvb_s_recover;
2160 av7110->fe = dvb_attach(tda8083_attach, &grundig_29504_451_config, &av7110->i2c_adap);
2161 if (av7110->fe) {
2162 av7110->fe->ops.tuner_ops.set_params = grundig_29504_451_tuner_set_params;
2163 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2164 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2165 av7110->fe->ops.set_tone = av7110_set_tone;
2166 av7110->recover = dvb_s_recover;
2172 av7110->fe = dvb_attach(stv0297_attach, &nexusca_stv0297_config, &av7110->i2c_adap);
2173 if (av7110->fe) {
2174 av7110->fe->ops.tuner_ops.set_params = nexusca_stv0297_tuner_set_params;
2177 saa7146_setgpio(av7110->dev, 1, SAA7146_GPIO_OUTLO); // TDA9819 pin9(STD)
2178 saa7146_setgpio(av7110->dev, 3, SAA7146_GPIO_OUTLO); // TDA9819 pin30(VIF)
2181 av7110->dev->i2c_bitrate = SAA7146_I2C_BUS_BIT_RATE_240;
2188 av7110->fe = dvb_attach(stv0299_attach, &alps_bsbe1_config, &av7110->i2c_adap);
2189 if (av7110->fe) {
2190 av7110->fe->ops.tuner_ops.set_params = alps_bsbe1_tuner_set_params;
2191 av7110->fe->tuner_priv = &av7110->i2c_adap;
2193 if (dvb_attach(lnbp21_attach, av7110->fe, &av7110->i2c_adap, 0, 0) == NULL) {
2195 if (av7110->fe->ops.release)
2196 av7110->fe->ops.release(av7110->fe);
2197 av7110->fe = NULL;
2199 av7110->fe->ops.dishnetwork_send_legacy_command = NULL;
2200 av7110->recover = dvb_s_recover;
2207 if (!av7110->fe) {
2210 av7110->dev->pci->vendor,
2211 av7110->dev->pci->device,
2212 av7110->dev->pci->subsystem_vendor,
2213 av7110->dev->pci->subsystem_device);
2215 FE_FUNC_OVERRIDE(av7110->fe->ops.init, av7110->fe_init, av7110_fe_init);
2216 FE_FUNC_OVERRIDE(av7110->fe->ops.read_status, av7110->fe_read_status, av7110_fe_read_status);
2217 FE_FUNC_OVERRIDE(av7110->fe->ops.diseqc_reset_overload, av7110->fe_diseqc_reset_overload, av7110_fe_diseqc_reset_overload);
2218 FE_FUNC_OVERRIDE(av7110->fe->ops.diseqc_send_master_cmd, av7110->fe_diseqc_send_master_cmd, av7110_fe_diseqc_send_master_cmd);
2219 FE_FUNC_OVERRIDE(av7110->fe->ops.diseqc_send_burst, av7110->fe_diseqc_send_burst, av7110_fe_diseqc_send_burst);
2220 FE_FUNC_OVERRIDE(av7110->fe->ops.set_tone, av7110->fe_set_tone, av7110_fe_set_tone);
2221 FE_FUNC_OVERRIDE(av7110->fe->ops.set_voltage, av7110->fe_set_voltage, av7110_fe_set_voltage;)
2222 FE_FUNC_OVERRIDE(av7110->fe->ops.dishnetwork_send_legacy_command, av7110->fe_dishnetwork_send_legacy_command, av7110_fe_dishnetwork_send_legacy_command);
2223 FE_FUNC_OVERRIDE(av7110->fe->ops.set_frontend, av7110->fe_set_frontend, av7110_fe_set_frontend);
2225 ret = dvb_register_frontend(&av7110->dvb_adapter, av7110->fe);
2227 printk("av7110: Frontend registration failed!\n");
2228 dvb_frontend_detach(av7110->fe);
2229 av7110->fe = NULL;
2305 struct av7110 *av7110;
2400 /* prepare the av7110 device struct */
2401 av7110 = kzalloc(sizeof(struct av7110), GFP_KERNEL);
2402 if (!av7110) {
2407 av7110->card_name = (char*) pci_ext->ext_priv;
2408 av7110->dev = dev;
2409 dev->ext_priv = av7110;
2411 ret = get_firmware(av7110);
2415 ret = dvb_register_adapter(&av7110->dvb_adapter, av7110->card_name,
2425 av7110->i2c_adap.class = I2C_ADAP_CLASS_TV_DIGITAL;
2427 av7110->i2c_adap.class = I2C_CLASS_TV_DIGITAL;
2429 strlcpy(av7110->i2c_adap.name, pci_ext->ext_priv, sizeof(av7110->i2c_adap.name));
2431 saa7146_i2c_adapter_prepare(dev, &av7110->i2c_adap, SAA7146_I2C_BUS_BIT_RATE_120); /* 275 kHz */
2433 ret = i2c_add_adapter(&av7110->i2c_adap);
2437 ttpci_eeprom_parse_mac(&av7110->i2c_adap,
2438 av7110->dvb_adapter.proposed_mac);
2442 spin_lock_init(&av7110->feedlock1);
2443 av7110->grabbing = saa7146_vmalloc_build_pgtable(pdev, length,
2444 &av7110->pt);
2445 if (!av7110->grabbing)
2458 saa7146_write(dev, BASE_PAGE3, av7110->pt.dma | ME1 | 0x90);
2520 tasklet_init (&av7110->vpe_tasklet, vpeirq, (unsigned long) av7110);
2535 tasklet_init (&av7110->debi_tasklet, debiirq, (unsigned long) av7110);
2536 tasklet_init (&av7110->gpio_tasklet, gpioirq, (unsigned long) av7110);
2538 mutex_init(&av7110->pid_mutex);
2541 spin_lock_init(&av7110->debilock);
2542 mutex_init(&av7110->dcomlock);
2543 av7110->debitype = -1;
2546 av7110->osdwin = 1;
2547 mutex_init(&av7110->osd_mutex);
2550 av7110->vidmode = tv_standard == 1 ? VIDEO_MODE_NTSC : VIDEO_MODE_PAL;
2553 init_waitqueue_head(&av7110->arm_wait);
2554 av7110->arm_thread = NULL;
2557 av7110->debi_virt = pci_alloc_consistent(pdev, 8192, &av7110->debi_bus);
2558 if (!av7110->debi_virt)
2562 av7110->iobuf = vmalloc(AVOUTLEN+AOUTLEN+BMPLEN+4*IPACKS);
2563 if (!av7110->iobuf)
2566 ret = av7110_av_init(av7110);
2571 av7110->bmpbuf = av7110->iobuf+AVOUTLEN+AOUTLEN;
2572 init_waitqueue_head(&av7110->bmpq);
2574 ret = av7110_ca_init(av7110);
2579 ret = av7110_bootarm(av7110);
2583 ret = av7110_firmversion(av7110);
2587 if (FW_VERSION(av7110->arm_app)<0x2501)
2589 "System might be unstable!\n", FW_VERSION(av7110->arm_app));
2591 thread = kthread_run(arm_thread, (void *) av7110, "arm_mon");
2596 av7110->arm_thread = thread;
2599 av7110->mixer.volume_left = volume;
2600 av7110->mixer.volume_right = volume;
2602 init_av7110_av(av7110);
2604 ret = av7110_register(av7110);
2611 ret = av7110_init_v4l(av7110);
2615 av7110->dvb_adapter.priv = av7110;
2616 ret = frontend_init(av7110);
2621 av7110_ir_init(av7110);
2623 printk(KERN_INFO "dvb-ttpci: found av7110-%d.\n", av7110_num);
2629 av7110_exit_v4l(av7110);
2631 dvb_unregister(av7110);
2633 av7110_arm_sync(av7110);
2637 av7110_ca_exit(av7110);
2639 av7110_av_exit(av7110);
2641 vfree(av7110->iobuf);
2643 pci_free_consistent(pdev, 8192, av7110->debi_virt, av7110->debi_bus);
2645 if (av7110->grabbing)
2646 saa7146_vfree_destroy_pgtable(pdev, av7110->grabbing, &av7110->pt);
2648 i2c_del_adapter(&av7110->i2c_adap);
2650 dvb_unregister_adapter(&av7110->dvb_adapter);
2652 put_firmware(av7110);
2654 kfree(av7110);
2660 struct av7110 *av7110 = saa->ext_priv;
2661 dprintk(4, "%p\n", av7110);
2664 av7110_ir_exit(av7110);
2675 tasklet_kill(&av7110->vpe_tasklet);
2676 saa7146_vfree_destroy_pgtable(saa->pci, av7110->grabbing, &av7110->pt);
2678 av7110_exit_v4l(av7110);
2680 av7110_arm_sync(av7110);
2682 tasklet_kill(&av7110->debi_tasklet);
2683 tasklet_kill(&av7110->gpio_tasklet);
2685 dvb_unregister(av7110);
2690 av7110_ca_exit(av7110);
2691 av7110_av_exit(av7110);
2693 vfree(av7110->iobuf);
2694 pci_free_consistent(saa->pci, 8192, av7110->debi_virt,
2695 av7110->debi_bus);
2697 i2c_del_adapter(&av7110->i2c_adap);
2699 dvb_unregister_adapter (&av7110->dvb_adapter);
2703 put_firmware(av7110);
2705 kfree(av7110);
2715 struct av7110 *av7110 = dev->ext_priv;
2740 SAA7146_IER_DISABLE(av7110->dev, MASK_19);
2741 SAA7146_ISR_CLEAR(av7110->dev, MASK_19);
2742 tasklet_schedule(&av7110->debi_tasklet);
2747 tasklet_schedule(&av7110->gpio_tasklet);
2751 tasklet_schedule(&av7110->vpe_tasklet);