Lines Matching defs:av7110

4  * av7110.c: initialization and demux stuff
45 #include "av7110.h"
102 static void restart_feeds(struct av7110 *av7110);
117 static void init_av7110_av(struct av7110 *av7110)
120 struct saa7146_dev *dev = av7110->dev;
123 av7110->adac_type = DVB_ADAC_TI;
124 ret = av7110_set_volume(av7110, av7110->mixer.volume_left, av7110->mixer.volume_right);
128 ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetMonitorType,
129 1, (u16) av7110->display_ar);
132 ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetPanScanType,
133 1, av7110->display_panscan);
137 ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetWSSConfig, 2, 2, wss_cfg_4_3);
140 ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetWSSConfig, 2, 3, wss_cfg_16_9);
144 ret = av7710_set_video_mode(av7110, vidmode);
150 av7110->analog_tuner_flags = 0;
151 av7110->current_input = 0;
153 av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, ADSwitch, 1, 0); // SPDIF on
154 if (i2c_writereg(av7110, 0x20, 0x00, 0x00) == 1) {
156 av7110->dvb_adapter.num);
157 av7110->adac_type = DVB_ADAC_CRYSTAL;
158 i2c_writereg(av7110, 0x20, 0x01, 0xd2);
159 i2c_writereg(av7110, 0x20, 0x02, 0x49);
160 i2c_writereg(av7110, 0x20, 0x03, 0x00);
161 i2c_writereg(av7110, 0x20, 0x04, 0x00);
166 } else if (0 == av7110_init_analog_module(av7110)) {
171 av7110->dvb_adapter.num);
172 av7110->adac_type = DVB_ADAC_NONE;
175 av7110->adac_type = adac;
177 av7110->adac_type, av7110->dvb_adapter.num);
180 if (av7110->adac_type == DVB_ADAC_NONE || av7110->adac_type == DVB_ADAC_MSP34x0) {
182 ret = av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, MainSwitch, 1, 0);
185 ret = av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, ADSwitch, 1, 1);
189 ((av7110->dev->pci->subsystem_vendor == 0x110a) ||
190 (av7110->dev->pci->subsystem_vendor == 0x13c2)) &&
191 (av7110->dev->pci->subsystem_device == 0x0000)) {
198 av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, SpdifSwitch, 1, 0); // SPDIF on
200 ret = av7110_set_volume(av7110, av7110->mixer.volume_left, av7110->mixer.volume_right);
205 static void recover_arm(struct av7110 *av7110)
207 dprintk(4, "%p\n",av7110);
209 av7110_bootarm(av7110);
212 init_av7110_av(av7110);
215 if (av7110->recover)
216 av7110->recover(av7110);
218 restart_feeds(av7110);
221 av7110_set_ir_config(av7110);
225 static void av7110_arm_sync(struct av7110 *av7110)
227 if (av7110->arm_thread)
228 kthread_stop(av7110->arm_thread);
230 av7110->arm_thread = NULL;
235 struct av7110 *av7110 = data;
239 dprintk(4, "%p\n",av7110);
242 timeout = wait_event_interruptible_timeout(av7110->arm_wait,
250 if (!av7110->arm_ready)
253 if (mutex_lock_interruptible(&av7110->dcomlock))
255 newloops = rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2);
256 mutex_unlock(&av7110->dcomlock);
258 if (newloops == av7110->arm_loops || av7110->arm_errors > 3) {
260 av7110->dvb_adapter.num);
262 recover_arm(av7110);
264 if (mutex_lock_interruptible(&av7110->dcomlock))
266 newloops = rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2) - 1;
267 mutex_unlock(&av7110->dcomlock);
269 av7110->arm_loops = newloops;
270 av7110->arm_errors = 0;
284 struct av7110 *av7110)
321 &av7110->p2t_filter[dvbdmxfilter->index]);
341 static inline void start_debi_dma(struct av7110 *av7110, int dir,
345 if (saa7146_wait_for_debi_done(av7110->dev, 0)) {
350 SAA7146_ISR_CLEAR(av7110->dev, MASK_19); /* for good measure */
351 SAA7146_IER_ENABLE(av7110->dev, MASK_19);
355 iwdebi(av7110, DEBISWAB, addr, 0, (len + 3) & ~3);
357 irdebi(av7110, DEBISWAB, addr, 0, len);
362 struct av7110 *av7110 = from_tasklet(av7110, t, debi_tasklet);
363 int type = av7110->debitype;
372 jiffies, saa7146_read(av7110->dev, PSR),
373 saa7146_read(av7110->dev, SSR));
376 av7110->debitype = -1;
381 dvb_dmx_swfilter_packets(&av7110->demux,
382 (const u8 *) av7110->debi_virt,
383 av7110->debilen / 188);
388 if (av7110->demux.recording)
389 av7110_record_cb(&av7110->p2t[handle],
390 (u8 *) av7110->debi_virt,
391 av7110->debilen);
398 if (av7110->handle2filter[handle])
399 DvbDmxFilterCallback((u8 *)av7110->debi_virt,
400 av7110->debilen, NULL, 0,
401 av7110->handle2filter[handle],
402 av7110);
408 u8 *data = av7110->debi_virt;
417 av7110->ci_slot[data_0].flags = flags;
419 ci_get_data(&av7110->ci_rbuffer,
420 av7110->debi_virt,
421 av7110->debilen);
427 CI_handle(av7110, (u8 *)av7110->debi_virt, av7110->debilen);
432 ((s8*)av7110->debi_virt)[Reserved_SIZE - 1] = 0;
433 printk("%s\n", (s8 *) av7110->debi_virt);
453 spin_lock(&av7110->debilock);
455 iwdebi(av7110, DEBINOSWAP, xfer, 0, 2);
456 ARM_ClearMailBox(av7110);
457 spin_unlock(&av7110->debilock);
460 /* irq from av7110 firmware writing the mailbox register in the DPRAM */
463 struct av7110 *av7110 = from_tasklet(av7110, t, gpio_tasklet);
467 if (av7110->debitype != -1)
470 jiffies, saa7146_read(av7110->dev, PSR),
471 saa7146_read(av7110->dev, SSR));
473 if (saa7146_wait_for_debi_done(av7110->dev, 0)) {
478 spin_lock(&av7110->debilock);
479 ARM_ClearIrq(av7110);
481 /* see what the av7110 wants */
482 av7110->debitype = irdebi(av7110, DEBINOSWAP, IRQ_STATE, 0, 2);
483 av7110->debilen = irdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
484 rxbuf = irdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
485 txbuf = irdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
486 len = (av7110->debilen + 3) & ~3;
489 dprintk(8, "GPIO0 irq 0x%04x %d\n", av7110->debitype, av7110->debilen);
491 switch (av7110->debitype & 0xff) {
502 av7110->video_size.w = irdebi(av7110, DEBINOSWAP, STATUS_MPEG_WIDTH, 0, 2);
503 h_ar = irdebi(av7110, DEBINOSWAP, STATUS_MPEG_HEIGHT_AR, 0, 2);
505 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
506 iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
508 av7110->video_size.h = h_ar & 0xfff;
511 event.u.size.w = av7110->video_size.w;
512 event.u.size.h = av7110->video_size.h;
516 av7110->video_size.aspect_ratio = VIDEO_FORMAT_16_9;
518 av7110->videostate.video_format = VIDEO_FORMAT_16_9;
521 av7110->video_size.aspect_ratio = VIDEO_FORMAT_221_1;
523 av7110->videostate.video_format = VIDEO_FORMAT_221_1;
526 av7110->video_size.aspect_ratio = VIDEO_FORMAT_4_3;
528 av7110->videostate.video_format = VIDEO_FORMAT_4_3;
532 av7110->video_size.w, av7110->video_size.h,
533 av7110->video_size.aspect_ratio);
535 dvb_video_add_event(av7110, &event);
542 struct dvb_ringbuffer *cibuf = &av7110->ci_wbuffer;
546 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
547 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
548 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
554 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
555 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
556 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
561 dvb_ringbuffer_read(cibuf, av7110->debi_virt, len);
563 iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2);
564 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2);
566 start_debi_dma(av7110, DEBI_WRITE, DPRAM_BASE + txbuf, len);
567 spin_unlock(&av7110->debilock);
573 if (!av7110->playing) {
574 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
575 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
576 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
580 if (av7110->debitype & 0x100) {
581 spin_lock(&av7110->aout.lock);
582 len = av7110_pes_play(av7110->debi_virt, &av7110->aout, 2048);
583 spin_unlock(&av7110->aout.lock);
585 if (len <= 0 && (av7110->debitype & 0x200)
586 &&av7110->videostate.play_state != VIDEO_FREEZED) {
587 spin_lock(&av7110->avout.lock);
588 len = av7110_pes_play(av7110->debi_virt, &av7110->avout, 2048);
589 spin_unlock(&av7110->avout.lock);
592 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
593 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
594 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
598 iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2);
599 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2);
601 start_debi_dma(av7110, DEBI_WRITE, DPRAM_BASE + txbuf, len);
602 spin_unlock(&av7110->debilock);
606 len = av7110->debilen;
609 av7110->bmp_state = BMP_LOADED;
610 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
611 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
612 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
613 wake_up(&av7110->bmpq);
617 if (len > av7110->bmplen)
618 len = av7110->bmplen;
621 iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2);
622 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2);
623 memcpy(av7110->debi_virt, av7110->bmpbuf+av7110->bmpp, len);
624 av7110->bmpp += len;
625 av7110->bmplen -= len;
627 start_debi_dma(av7110, DEBI_WRITE, DPRAM_BASE+txbuf, len);
628 spin_unlock(&av7110->debilock);
637 iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
645 start_debi_dma(av7110, DEBI_READ, DPRAM_BASE+rxbuf, len);
646 spin_unlock(&av7110->debilock);
651 iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
654 start_debi_dma(av7110, DEBI_READ, Reserved, len);
655 spin_unlock(&av7110->debilock);
660 av7110_ir_handler(av7110,
661 swahw32(irdebi(av7110, DEBINOSWAP, Reserved,
664 iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
669 av7110->debitype, av7110->debilen);
672 av7110->debitype = -1;
673 ARM_ClearMailBox(av7110);
674 spin_unlock(&av7110->debilock);
683 struct av7110 *av7110 = dvbdev->priv;
685 dprintk(4, "%p\n", av7110);
688 return av7110_osd_cmd(av7110, (osd_cmd_t *) parg);
690 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);
783 if (av7110->full_ts)
798 av7110_p2t_init(&av7110->p2t_filter[dvbdmxfilter->index], dvbdmxfeed);
806 ret = av7110_fw_request(av7110, buf, 20, &handle, 1);
817 av7110->handle2filter[handle] = dvbdmxfilter;
825 struct av7110 *av7110 = dvbdmxfilter->feed->demux->priv;
831 dprintk(4, "%p\n", av7110);
833 if (av7110->full_ts)
843 av7110->handle2filter[handle] = NULL;
848 ret = av7110_fw_request(av7110, buf, 3, answ, 2);
863 struct av7110 *av7110 = dvbdmx->priv;
868 dprintk(4, "%p\n", av7110);
875 ret = ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]);
881 ret = ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]);
887 if (av7110->fe_synced)
889 ret = av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, Scan, 0);
894 if ((dvbdmxfeed->ts_type & TS_PACKET) && !av7110->full_ts) {
896 ret = av7110_av_start_record(av7110, RP_AUDIO, dvbdmxfeed);
898 ret = av7110_av_start_record(av7110, RP_VIDEO, dvbdmxfeed);
906 struct av7110 *av7110 = dvbdmx->priv;
912 dprintk(4, "%p\n", av7110);
915 ret = av7110_av_stop(av7110, dvbdmxfeed->pes_type ? RP_VIDEO : RP_AUDIO);
918 if (!av7110->rec_mode)
920 if (!av7110->playing)
940 ret = ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]);
947 struct av7110 *av7110 = demux->priv;
950 dprintk(4, "%p\n", av7110);
955 if (!av7110->full_ts && feed->pid > 0x1fff)
967 dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout);
968 dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout);
969 ret = av7110_av_start_play(av7110,RP_AV);
984 if (av7110->full_ts) {
1015 struct av7110 *av7110 = demux->priv;
1017 dprintk(4, "%p\n", av7110);
1036 if (av7110->full_ts) {
1060 static void restart_feeds(struct av7110 *av7110)
1062 struct dvb_demux *dvbdmx = &av7110->demux;
1068 dprintk(4, "%p\n", av7110);
1070 mode = av7110->playing;
1071 av7110->playing = 0;
1072 av7110->rec_mode = 0;
1074 feeding = av7110->feeding1; /* full_ts mod */
1093 av7110->feeding1 = feeding; /* full_ts mod */
1096 av7110_av_start_play(av7110, mode);
1106 struct av7110 *av7110;
1112 av7110 = dvbdemux->priv;
1114 dprintk(4, "%p\n", av7110);
1119 ret = av7110_fw_request(av7110, &tag, 0, fwstc, 4);
1144 struct av7110* av7110 = fe->dvb->priv;
1148 return Set22K(av7110, 1);
1151 return Set22K(av7110, 0);
1161 struct av7110* av7110 = fe->dvb->priv;
1163 return av7110_diseqc_send(av7110, cmd->msg_len, cmd->msg, -1);
1169 struct av7110* av7110 = fe->dvb->priv;
1171 return av7110_diseqc_send(av7110, 0, NULL, minicmd);
1175 static int stop_ts_capture(struct av7110 *budget)
1187 static int start_ts_capture(struct av7110 *budget)
1207 struct av7110 *budget = demux->priv;
1210 dprintk(2, "av7110: %p\n", budget);
1222 struct av7110 *budget = demux->priv;
1235 struct av7110 *budget = from_tasklet(budget, t, vpe_tasklet);
1272 static int av7110_register(struct av7110 *av7110)
1275 struct dvb_demux *dvbdemux = &av7110->demux;
1276 struct dvb_demux *dvbdemux1 = &av7110->demux1;
1278 dprintk(4, "%p\n", av7110);
1280 if (av7110->registered)
1283 av7110->registered = 1;
1285 dvbdemux->priv = (void *) av7110;
1288 av7110->handle2filter[i] = NULL;
1290 dvbdemux->filternum = (av7110->full_ts) ? 256 : 32;
1291 dvbdemux->feednum = (av7110->full_ts) ? 256 : 32;
1298 dvb_dmx_init(&av7110->demux);
1299 av7110->demux.dmx.get_stc = dvb_get_stc;
1301 av7110->dmxdev.filternum = (av7110->full_ts) ? 256 : 32;
1302 av7110->dmxdev.demux = &dvbdemux->dmx;
1303 av7110->dmxdev.capabilities = 0;
1305 dvb_dmxdev_init(&av7110->dmxdev, &av7110->dvb_adapter);
1307 av7110->hw_frontend.source = DMX_FRONTEND_0;
1309 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &av7110->hw_frontend);
1314 av7110->mem_frontend.source = DMX_MEMORY_FE;
1316 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &av7110->mem_frontend);
1322 &av7110->hw_frontend);
1326 av7110_av_register(av7110);
1327 av7110_ca_register(av7110);
1330 dvb_register_device(&av7110->dvb_adapter, &av7110->osd_dev,
1331 &dvbdev_osd, av7110, DVB_DEVICE_OSD, 0);
1334 dvb_net_init(&av7110->dvb_adapter, &av7110->dvb_net, &dvbdemux->dmx);
1340 dvbdemux1->priv = (void *) av7110;
1351 dvb_dmx_init(&av7110->demux1);
1353 av7110->dmxdev1.filternum = 256;
1354 av7110->dmxdev1.demux = &dvbdemux1->dmx;
1355 av7110->dmxdev1.capabilities = 0;
1357 dvb_dmxdev_init(&av7110->dmxdev1, &av7110->dvb_adapter);
1359 dvb_net_init(&av7110->dvb_adapter, &av7110->dvb_net1, &dvbdemux1->dmx);
1366 static void dvb_unregister(struct av7110 *av7110)
1368 struct dvb_demux *dvbdemux = &av7110->demux;
1369 struct dvb_demux *dvbdemux1 = &av7110->demux1;
1371 dprintk(4, "%p\n", av7110);
1373 if (!av7110->registered)
1377 dvb_net_release(&av7110->dvb_net1);
1379 dvb_dmxdev_release(&av7110->dmxdev1);
1380 dvb_dmx_release(&av7110->demux1);
1383 dvb_net_release(&av7110->dvb_net);
1386 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->hw_frontend);
1387 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->mem_frontend);
1389 dvb_dmxdev_release(&av7110->dmxdev);
1390 dvb_dmx_release(&av7110->demux);
1392 if (av7110->fe != NULL) {
1393 dvb_unregister_frontend(av7110->fe);
1394 dvb_frontend_detach(av7110->fe);
1396 dvb_unregister_device(av7110->osd_dev);
1397 av7110_av_unregister(av7110);
1398 av7110_ca_unregister(av7110);
1406 int i2c_writereg(struct av7110 *av7110, u8 id, u8 reg, u8 val)
1415 return i2c_transfer(&av7110->i2c_adap, &msgs, 1);
1418 u8 i2c_readreg(struct av7110 *av7110, u8 id, u8 reg)
1430 i2c_transfer(&av7110->i2c_adap, msgs, 2);
1440 static int check_firmware(struct av7110* av7110)
1446 ptr = av7110->bin_fw;
1449 printk("dvb-ttpci: this is not an av7110 firmware\n");
1467 av7110->bin_dpram = ptr;
1468 av7110->size_dpram = len;
1478 len > ((av7110->bin_fw + av7110->size_fw) - ptr)) {
1486 av7110->bin_root = ptr;
1487 av7110->size_root = len;
1491 static void put_firmware(struct av7110* av7110)
1493 vfree(av7110->bin_fw);
1496 static int get_firmware(struct av7110* av7110)
1501 /* request the av7110 firmware, this will block until someone uploads it */
1502 ret = request_firmware(&fw, "dvb-ttpci-01.fw", &av7110->dev->pci->dev);
1521 av7110->bin_fw = vmalloc(fw->size);
1522 if (NULL == av7110->bin_fw) {
1528 memcpy(av7110->bin_fw, fw->data, fw->size);
1529 av7110->size_fw = fw->size;
1530 if ((ret = check_firmware(av7110)))
1531 vfree(av7110->bin_fw);
1540 struct av7110* av7110 = fe->dvb->priv;
1569 if (i2c_transfer (&av7110->i2c_adap, &msg, 1) != 1)
1583 struct av7110* av7110 = fe->dvb->priv;
1597 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1)
1615 struct av7110* av7110 = fe->dvb->priv;
1628 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1)
1642 struct av7110* av7110 = fe->dvb->priv;
1657 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1)
1674 struct av7110* av7110 = fe->dvb->priv;
1693 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1)
1701 struct av7110* av7110 = fe->dvb->priv;
1703 return request_firmware(fw, name, &av7110->dev->pci->dev);
1812 struct av7110* av7110 = fe->dvb->priv;
1838 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1) {
1847 if (i2c_transfer(&av7110->i2c_adap, &readmsg, 1) == 1)
1868 struct av7110* av7110 = fe->dvb->priv;
1903 if (i2c_transfer (&av7110->i2c_adap, &msg, 1) != 1) return -EIO;
1913 static int av7110_fe_lock_fix(struct av7110 *av7110, enum fe_status status)
1918 av7110->fe_status = status;
1920 if (av7110->fe_synced == synced)
1923 if (av7110->playing) {
1924 av7110->fe_synced = synced;
1928 if (mutex_lock_interruptible(&av7110->pid_mutex))
1932 ret = SetPIDs(av7110, av7110->pids[DMX_PES_VIDEO],
1933 av7110->pids[DMX_PES_AUDIO],
1934 av7110->pids[DMX_PES_TELETEXT], 0,
1935 av7110->pids[DMX_PES_PCR]);
1937 ret = av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, Scan, 0);
1939 ret = SetPIDs(av7110, 0, 0, 0, 0, 0);
1941 ret = av7110_fw_cmd(av7110, COMTYPE_PID_FILTER, FlushTSQueue, 0);
1943 ret = av7110_wait_msgstate(av7110, GPMQBusy);
1948 av7110->fe_synced = synced;
1950 mutex_unlock(&av7110->pid_mutex);
1956 struct av7110* av7110 = fe->dvb->priv;
1958 int ret = av7110_fe_lock_fix(av7110, 0);
1960 ret = av7110->fe_set_frontend(fe);
1967 struct av7110* av7110 = fe->dvb->priv;
1969 int ret = av7110_fe_lock_fix(av7110, 0);
1971 ret = av7110->fe_init(fe);
1978 struct av7110* av7110 = fe->dvb->priv;
1981 int ret = av7110->fe_read_status(fe, status);
1983 if (((*status ^ av7110->fe_status) & FE_HAS_LOCK) && (*status & FE_HAS_LOCK))
1984 ret = av7110_fe_lock_fix(av7110, *status);
1990 struct av7110* av7110 = fe->dvb->priv;
1992 int ret = av7110_fe_lock_fix(av7110, 0);
1994 ret = av7110->fe_diseqc_reset_overload(fe);
2001 struct av7110* av7110 = fe->dvb->priv;
2003 int ret = av7110_fe_lock_fix(av7110, 0);
2005 av7110->saved_master_cmd = *cmd;
2006 ret = av7110->fe_diseqc_send_master_cmd(fe, cmd);
2014 struct av7110* av7110 = fe->dvb->priv;
2016 int ret = av7110_fe_lock_fix(av7110, 0);
2018 av7110->saved_minicmd = minicmd;
2019 ret = av7110->fe_diseqc_send_burst(fe, minicmd);
2027 struct av7110* av7110 = fe->dvb->priv;
2029 int ret = av7110_fe_lock_fix(av7110, 0);
2031 av7110->saved_tone = tone;
2032 ret = av7110->fe_set_tone(fe, tone);
2040 struct av7110* av7110 = fe->dvb->priv;
2042 int ret = av7110_fe_lock_fix(av7110, 0);
2044 av7110->saved_voltage = voltage;
2045 ret = av7110->fe_set_voltage(fe, voltage);
2052 struct av7110* av7110 = fe->dvb->priv;
2054 int ret = av7110_fe_lock_fix(av7110, 0);
2056 ret = av7110->fe_dishnetwork_send_legacy_command(fe, cmd);
2060 static void dvb_s_recover(struct av7110* av7110)
2062 av7110_fe_init(av7110->fe);
2064 av7110_fe_set_voltage(av7110->fe, av7110->saved_voltage);
2065 if (av7110->saved_master_cmd.msg_len) {
2067 av7110_fe_diseqc_send_master_cmd(av7110->fe, &av7110->saved_master_cmd);
2070 av7110_fe_diseqc_send_burst(av7110->fe, av7110->saved_minicmd);
2072 av7110_fe_set_tone(av7110->fe, av7110->saved_tone);
2074 av7110_fe_set_frontend(av7110->fe);
2077 static u8 read_pwm(struct av7110* av7110)
2084 if ((i2c_transfer(&av7110->i2c_adap, msg, 2) != 2) || (pwm == 0xff))
2090 static int frontend_init(struct av7110 *av7110)
2094 if (av7110->dev->pci->subsystem_vendor == 0x110a) {
2095 switch(av7110->dev->pci->subsystem_device) {
2097 av7110->fe = dvb_attach(ves1820_attach, &philips_cd1516_config,
2098 &av7110->i2c_adap, read_pwm(av7110));
2099 if (av7110->fe) {
2100 av7110->fe->ops.tuner_ops.set_params = philips_cd1516_tuner_set_params;
2105 } else if (av7110->dev->pci->subsystem_vendor == 0x13c2) {
2106 switch(av7110->dev->pci->subsystem_device) {
2112 av7110->fe = dvb_attach(ves1x93_attach, &alps_bsrv2_config, &av7110->i2c_adap);
2113 if (av7110->fe) {
2114 av7110->fe->ops.tuner_ops.set_params = alps_bsrv2_tuner_set_params;
2115 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2116 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2117 av7110->fe->ops.set_tone = av7110_set_tone;
2118 av7110->recover = dvb_s_recover;
2123 av7110->fe = dvb_attach(stv0299_attach, &alps_bsru6_config, &av7110->i2c_adap);
2124 if (av7110->fe) {
2125 av7110->fe->ops.tuner_ops.set_params = alps_bsru6_tuner_set_params;
2126 av7110->fe->tuner_priv = &av7110->i2c_adap;
2128 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2129 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2130 av7110->fe->ops.set_tone = av7110_set_tone;
2131 av7110->recover = dvb_s_recover;
2136 av7110->fe = dvb_attach(tda8083_attach, &grundig_29504_451_config, &av7110->i2c_adap);
2137 if (av7110->fe) {
2138 av7110->fe->ops.tuner_ops.set_params = grundig_29504_451_tuner_set_params;
2139 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2140 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2141 av7110->fe->ops.set_tone = av7110_set_tone;
2142 av7110->recover = dvb_s_recover;
2147 switch(av7110->dev->pci->subsystem_device) {
2150 av7110->fe = dvb_attach(ves1820_attach, &philips_cd1516_config, &av7110->i2c_adap,
2151 read_pwm(av7110));
2152 if (av7110->fe) {
2153 av7110->fe->ops.tuner_ops.set_params = philips_cd1516_tuner_set_params;
2158 av7110->fe = dvb_attach(ves1820_attach, &alps_tdbe2_config, &av7110->i2c_adap,
2159 read_pwm(av7110));
2160 if (av7110->fe) {
2161 av7110->fe->ops.tuner_ops.set_params = alps_tdbe2_tuner_set_params;
2172 fe = dvb_attach(sp8870_attach, &alps_tdlb7_config, &av7110->i2c_adap);
2175 av7110->fe = fe;
2183 av7110->fe = dvb_attach(l64781_attach, &grundig_29504_401_config, &av7110->i2c_adap);
2184 if (av7110->fe)
2185 av7110->fe->ops.tuner_ops.set_params = grundig_29504_401_tuner_set_params;
2190 av7110->fe = dvb_attach(ves1820_attach, &alps_tdbe2_config, &av7110->i2c_adap, read_pwm(av7110));
2191 if (av7110->fe) {
2192 av7110->fe->ops.tuner_ops.set_params = alps_tdbe2_tuner_set_params;
2198 av7110->fe = dvb_attach(ves1x93_attach, &alps_bsrv2_config, &av7110->i2c_adap);
2199 if (av7110->fe) {
2200 av7110->fe->ops.tuner_ops.set_params = alps_bsrv2_tuner_set_params;
2201 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2202 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2203 av7110->fe->ops.set_tone = av7110_set_tone;
2204 av7110->recover = dvb_s_recover;
2210 av7110->fe = dvb_attach(tda8083_attach, &grundig_29504_451_config, &av7110->i2c_adap);
2211 if (av7110->fe) {
2212 av7110->fe->ops.tuner_ops.set_params = grundig_29504_451_tuner_set_params;
2213 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2214 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2215 av7110->fe->ops.set_tone = av7110_set_tone;
2216 av7110->recover = dvb_s_recover;
2222 av7110->fe = dvb_attach(stv0297_attach, &nexusca_stv0297_config, &av7110->i2c_adap);
2223 if (av7110->fe) {
2224 av7110->fe->ops.tuner_ops.set_params = nexusca_stv0297_tuner_set_params;
2227 saa7146_setgpio(av7110->dev, 1, SAA7146_GPIO_OUTLO); // TDA9819 pin9(STD)
2228 saa7146_setgpio(av7110->dev, 3, SAA7146_GPIO_OUTLO); // TDA9819 pin30(VIF)
2231 av7110->dev->i2c_bitrate = SAA7146_I2C_BUS_BIT_RATE_240;
2238 av7110->fe = dvb_attach(stv0299_attach, &alps_bsbe1_config, &av7110->i2c_adap);
2239 if (av7110->fe) {
2240 av7110->fe->ops.tuner_ops.set_params = alps_bsbe1_tuner_set_params;
2241 av7110->fe->tuner_priv = &av7110->i2c_adap;
2243 if (dvb_attach(lnbp21_attach, av7110->fe, &av7110->i2c_adap, 0, 0) == NULL) {
2245 if (av7110->fe->ops.release)
2246 av7110->fe->ops.release(av7110->fe);
2247 av7110->fe = NULL;
2249 av7110->fe->ops.dishnetwork_send_legacy_command = NULL;
2250 av7110->recover = dvb_s_recover;
2257 if (!av7110->fe) {
2261 av7110->dev->pci->vendor,
2262 av7110->dev->pci->device,
2263 av7110->dev->pci->subsystem_vendor,
2264 av7110->dev->pci->subsystem_device);
2266 FE_FUNC_OVERRIDE(av7110->fe->ops.init, av7110->fe_init, av7110_fe_init);
2267 FE_FUNC_OVERRIDE(av7110->fe->ops.read_status, av7110->fe_read_status, av7110_fe_read_status);
2268 FE_FUNC_OVERRIDE(av7110->fe->ops.diseqc_reset_overload, av7110->fe_diseqc_reset_overload, av7110_fe_diseqc_reset_overload);
2269 FE_FUNC_OVERRIDE(av7110->fe->ops.diseqc_send_master_cmd, av7110->fe_diseqc_send_master_cmd, av7110_fe_diseqc_send_master_cmd);
2270 FE_FUNC_OVERRIDE(av7110->fe->ops.diseqc_send_burst, av7110->fe_diseqc_send_burst, av7110_fe_diseqc_send_burst);
2271 FE_FUNC_OVERRIDE(av7110->fe->ops.set_tone, av7110->fe_set_tone, av7110_fe_set_tone);
2272 FE_FUNC_OVERRIDE(av7110->fe->ops.set_voltage, av7110->fe_set_voltage, av7110_fe_set_voltage);
2273 FE_FUNC_OVERRIDE(av7110->fe->ops.dishnetwork_send_legacy_command, av7110->fe_dishnetwork_send_legacy_command, av7110_fe_dishnetwork_send_legacy_command);
2274 FE_FUNC_OVERRIDE(av7110->fe->ops.set_frontend, av7110->fe_set_frontend, av7110_fe_set_frontend);
2276 ret = dvb_register_frontend(&av7110->dvb_adapter, av7110->fe);
2278 printk("av7110: Frontend registration failed!\n");
2279 dvb_frontend_detach(av7110->fe);
2280 av7110->fe = NULL;
2351 struct av7110 *av7110;
2446 /* prepare the av7110 device struct */
2447 av7110 = kzalloc(sizeof(struct av7110), GFP_KERNEL);
2448 if (!av7110) {
2453 av7110->card_name = (char*) pci_ext->ext_priv;
2454 av7110->dev = dev;
2455 dev->ext_priv = av7110;
2457 ret = get_firmware(av7110);
2461 ret = dvb_register_adapter(&av7110->dvb_adapter, av7110->card_name,
2470 strscpy(av7110->i2c_adap.name, pci_ext->ext_priv,
2471 sizeof(av7110->i2c_adap.name));
2473 saa7146_i2c_adapter_prepare(dev, &av7110->i2c_adap, SAA7146_I2C_BUS_BIT_RATE_120); /* 275 kHz */
2475 ret = i2c_add_adapter(&av7110->i2c_adap);
2479 ttpci_eeprom_parse_mac(&av7110->i2c_adap,
2480 av7110->dvb_adapter.proposed_mac);
2485 av7110->full_ts = true;
2488 if (i2c_readreg(av7110, 0xaa, 0) == 0x4f && i2c_readreg(av7110, 0xaa, 1) == 0x45) {
2489 u8 flags = i2c_readreg(av7110, 0xaa, 2);
2491 av7110->full_ts = true;
2494 if (av7110->full_ts) {
2496 spin_lock_init(&av7110->feedlock1);
2497 av7110->grabbing = saa7146_vmalloc_build_pgtable(pdev, length,
2498 &av7110->pt);
2499 if (!av7110->grabbing)
2517 saa7146_write(dev, BASE_PAGE3, av7110->pt.dma | ME1 | 0x90);
2521 tasklet_setup(&av7110->vpe_tasklet, vpeirq);
2524 spin_lock_init(&av7110->feedlock1);
2525 av7110->grabbing = saa7146_vmalloc_build_pgtable(pdev, length,
2526 &av7110->pt);
2527 if (!av7110->grabbing)
2540 saa7146_write(dev, BASE_PAGE3, av7110->pt.dma | ME1 | 0x90);
2602 tasklet_setup(&av7110->vpe_tasklet, vpeirq);
2617 tasklet_setup(&av7110->debi_tasklet, debiirq);
2618 tasklet_setup(&av7110->gpio_tasklet, gpioirq);
2620 mutex_init(&av7110->pid_mutex);
2623 spin_lock_init(&av7110->debilock);
2624 mutex_init(&av7110->dcomlock);
2625 av7110->debitype = -1;
2628 av7110->osdwin = 1;
2629 mutex_init(&av7110->osd_mutex);
2632 av7110->vidmode = tv_standard == 1 ? AV7110_VIDEO_MODE_NTSC
2636 init_waitqueue_head(&av7110->arm_wait);
2637 av7110->arm_thread = NULL;
2640 av7110->debi_virt = pci_alloc_consistent(pdev, 8192, &av7110->debi_bus);
2641 if (!av7110->debi_virt)
2645 av7110->iobuf = vmalloc(AVOUTLEN+AOUTLEN+BMPLEN+4*IPACKS);
2646 if (!av7110->iobuf)
2649 ret = av7110_av_init(av7110);
2654 av7110->bmpbuf = av7110->iobuf+AVOUTLEN+AOUTLEN;
2655 init_waitqueue_head(&av7110->bmpq);
2657 ret = av7110_ca_init(av7110);
2662 ret = av7110_bootarm(av7110);
2666 ret = av7110_firmversion(av7110);
2670 if (FW_VERSION(av7110->arm_app)<0x2501)
2673 FW_VERSION(av7110->arm_app));
2675 thread = kthread_run(arm_thread, (void *) av7110, "arm_mon");
2680 av7110->arm_thread = thread;
2683 av7110->mixer.volume_left = volume;
2684 av7110->mixer.volume_right = volume;
2686 ret = av7110_register(av7110);
2690 init_av7110_av(av7110);
2695 ret = av7110_init_v4l(av7110);
2699 av7110->dvb_adapter.priv = av7110;
2700 ret = frontend_init(av7110);
2704 mutex_init(&av7110->ioctl_mutex);
2707 av7110_ir_init(av7110);
2709 printk(KERN_INFO "dvb-ttpci: found av7110-%d.\n", av7110_num);
2715 av7110_exit_v4l(av7110);
2717 dvb_unregister(av7110);
2719 av7110_arm_sync(av7110);
2723 av7110_ca_exit(av7110);
2725 av7110_av_exit(av7110);
2727 vfree(av7110->iobuf);
2729 pci_free_consistent(pdev, 8192, av7110->debi_virt, av7110->debi_bus);
2731 if (av7110->grabbing)
2732 saa7146_vfree_destroy_pgtable(pdev, av7110->grabbing, &av7110->pt);
2734 i2c_del_adapter(&av7110->i2c_adap);
2736 dvb_unregister_adapter(&av7110->dvb_adapter);
2738 put_firmware(av7110);
2740 kfree(av7110);
2746 struct av7110 *av7110 = saa->ext_priv;
2747 dprintk(4, "%p\n", av7110);
2750 av7110_ir_exit(av7110);
2752 if (budgetpatch || av7110->full_ts) {
2763 tasklet_kill(&av7110->vpe_tasklet);
2764 saa7146_vfree_destroy_pgtable(saa->pci, av7110->grabbing, &av7110->pt);
2766 av7110_exit_v4l(av7110);
2768 av7110_arm_sync(av7110);
2770 tasklet_kill(&av7110->debi_tasklet);
2771 tasklet_kill(&av7110->gpio_tasklet);
2773 dvb_unregister(av7110);
2778 av7110_ca_exit(av7110);
2779 av7110_av_exit(av7110);
2781 vfree(av7110->iobuf);
2782 pci_free_consistent(saa->pci, 8192, av7110->debi_virt,
2783 av7110->debi_bus);
2785 i2c_del_adapter(&av7110->i2c_adap);
2787 dvb_unregister_adapter (&av7110->dvb_adapter);
2791 put_firmware(av7110);
2793 kfree(av7110);
2803 struct av7110 *av7110 = dev->ext_priv;
2828 SAA7146_IER_DISABLE(av7110->dev, MASK_19);
2829 SAA7146_ISR_CLEAR(av7110->dev, MASK_19);
2830 tasklet_schedule(&av7110->debi_tasklet);
2835 tasklet_schedule(&av7110->gpio_tasklet);
2839 tasklet_schedule(&av7110->vpe_tasklet);
2887 .name = "av7110",