33 #include <linux/module.h>
38 #include <linux/poll.h>
40 #include <linux/kernel.h>
41 #include <linux/sched.h>
42 #include <linux/types.h>
43 #include <linux/fcntl.h>
45 #include <linux/string.h>
46 #include <linux/pci.h>
50 #include <linux/i2c.h>
52 #include <linux/slab.h>
53 #include <asm/unaligned.h>
54 #include <asm/byteorder.h>
74 #define TS_BUFLEN (TS_WIDTH*TS_HEIGHT)
75 #define TS_MAX_PACKETS (TS_BUFLEN/TS_SIZE)
83 static int hw_sections;
86 static int budgetpatch;
87 static int wss_cfg_4_3 = 0x4008;
88 static int wss_cfg_16_9 = 0x0007;
89 static int tv_standard;
95 MODULE_PARM_DESC(vidmode,
"analog video out: 0 off, 1 CVBS+RGB (default), 2 CVBS+YC, 3 YC");
97 MODULE_PARM_DESC(pids_off,
"clear video/audio/PCR PID filters when demux is closed");
99 MODULE_PARM_DESC(adac,
"audio DAC type: 0 TI, 1 CRYSTAL, 2 MSP (use if autodetection fails)");
101 MODULE_PARM_DESC(hw_sections,
"0 use software section filter, 1 use hardware");
104 " signal on SCART pin 16 to switch SCART video mode from CVBS to RGB");
108 MODULE_PARM_DESC(budgetpatch,
"use budget-patch hardware modification: default 0 (0 no, 1 autodetect, 2 always)");
110 MODULE_PARM_DESC(full_ts,
"enable code for full-ts hardware modification: 0 disable (default), 1 enable");
112 MODULE_PARM_DESC(wss_cfg_4_3,
"WSS 4:3 - default 0x4008 - bit 15: disable, 14: burst mode, 13..0: wss data");
114 MODULE_PARM_DESC(wss_cfg_16_9,
"WSS 16:9 - default 0x0007 - bit 15: disable, 14: burst mode, 13..0: wss data");
124 static int av7110_num;
126 #define FE_FUNC_OVERRIDE(fe_func, av7110_copy, av7110_func) \
128 if (fe_func != NULL) { \
129 av7110_copy = fe_func; \
130 fe_func = av7110_func; \
144 printk(
"dvb-ttpci:cannot set internal volume to maximum:%d\n",ret);
149 printk(
"dvb-ttpci: unable to set aspect ratio\n");
153 printk(
"dvb-ttpci: unable to set pan scan\n");
157 printk(
"dvb-ttpci: unable to configure 4:3 wss\n");
160 printk(
"dvb-ttpci: unable to configure 16:9 wss\n");
162 ret = av7710_set_video_mode(av7110, vidmode);
164 printk(
"dvb-ttpci:cannot set video mode:%d\n",ret);
170 if (dev->
pci->subsystem_vendor == 0x13c2 && dev->
pci->subsystem_device == 0x000a)
173 printk (
"dvb-ttpci: Crystal audio DAC @ card %d detected\n",
187 else if (dev->
pci->subsystem_vendor == 0x110a) {
188 printk(
"dvb-ttpci: DVB-C w/o analog module @ card %d detected\n",
194 printk(
"dvb-ttpci: adac type set to %d @ card %d\n",
202 printk(
"dvb-ttpci:cannot switch on SCART(Main):%d\n",ret);
205 printk(
"dvb-ttpci:cannot switch on SCART(AD):%d\n",ret);
207 ((av7110->
dev->pci->subsystem_vendor == 0x110a) ||
208 (av7110->
dev->pci->subsystem_vendor == 0x13c2)) &&
209 (av7110->
dev->pci->subsystem_device == 0x0000)) {
215 if (dev->
pci->subsystem_vendor == 0x13c2 && dev->
pci->subsystem_device == 0x000e)
220 printk(
"dvb-ttpci:cannot set volume :%d\n",ret);
230 init_av7110_av(av7110);
236 restart_feeds(av7110);
238 #if defined(CONFIG_INPUT_EVDEV) || defined(CONFIG_INPUT_EVDEV_MODULE)
243 static void av7110_arm_sync(
struct av7110 *av7110)
251 static int arm_thread(
void *
data)
253 struct av7110 *av7110 =
data;
271 #if defined(CONFIG_INPUT_EVDEV) || defined(CONFIG_INPUT_EVDEV_MODULE)
303 static int DvbDmxFilterCallback(
u8 *
buffer1,
size_t buffer1_len,
307 struct av7110 *av7110)
309 if (!dvbdmxfilter->
feed->demux->dmx.frontend)
314 switch (dvbdmxfilter->
type) {
316 if ((((buffer1[1] << 8) | buffer1[2]) & 0xfff) + 3 != buffer1_len)
318 if (dvbdmxfilter->
doneq) {
330 return dvbdmxfilter->
feed->cb.sec(buffer1, buffer1_len,
331 buffer2, buffer2_len,
338 return dvbdmxfilter->
feed->cb.ts(buffer1, buffer1_len,
339 buffer2, buffer2_len,
340 &dvbdmxfilter->
feed->feed.ts,
344 dvbdmxfilter->
feed->pid,
353 static inline void print_time(
char *
s)
358 printk(
"%s: %d.%d\n", s, (
int)tv.tv_sec, (
int)tv.tv_usec);
364 static inline void start_debi_dma(
struct av7110 *av7110,
int dir,
365 unsigned long addr,
unsigned int len)
369 printk(
KERN_ERR "%s: saa7146_wait_for_debi_done timed out\n", __func__);
378 iwdebi(av7110,
DEBISWAB, addr, 0, (len + 3) & ~3);
380 irdebi(av7110,
DEBISWAB, addr, 0, len);
383 static void debiirq(
unsigned long cookie)
385 struct av7110 *av7110 = (
struct av7110 *)cookie;
387 int handle = (type >> 8) & 0x1f;
388 unsigned int xfer = 0;
391 dprintk(4,
"type 0x%04x\n", type);
394 printk(
"DEBI irq oops @ %ld, psr:0x%08x, ssr:0x%08x\n",
401 switch (type & 0xff) {
411 if (av7110->
demux.recording)
433 if ((data[0] < 2) && data[2] == 0xff) {
454 printk(
"av7110%d: ", av7110->num);
457 for (i = 2; i < av7110->
debilen; i++)
459 for (i = 2; i < av7110->
debilen; i++)
475 dprintk(4,
"debi DATA_CI_PUT\n");
477 dprintk(4,
"debi DATA_MPEG_PLAY\n");
479 dprintk(4,
"debi DATA_BMP_LOAD\n");
489 ARM_ClearMailBox(av7110);
494 static void gpioirq(
unsigned long cookie)
496 struct av7110 *av7110 = (
struct av7110 *)cookie;
502 printk(
"dvb-ttpci: GPIO0 irq oops @ %ld, psr:0x%08x, ssr:0x%08x\n",
507 printk(
KERN_ERR "%s: saa7146_wait_for_debi_done timed out\n", __func__);
512 ARM_ClearIrq(av7110);
519 len = (av7110->
debilen + 3) & ~3;
546 switch ((h_ar >> 12) & 0xf)
564 dprintk(8,
"GPIO0 irq: DATA_MPEG_VIDEO_EVENT: w/h/ar = %u/%u/%u\n",
586 if (avail < len + 2) {
614 spin_lock(&av7110->
aout.lock);
616 spin_unlock(&av7110->
aout.lock);
618 if (len <= 0 && (av7110->
debitype & 0x200)
620 spin_lock(&av7110->
avout.lock);
622 spin_unlock(&av7110->
avout.lock);
630 dprintk(8,
"GPIO0 PES_PLAY len=%04x\n", len);
633 dprintk(8,
"DMA: MPEG_PLAY\n");
640 dprintk(8,
"gpio DATA_BMP_LOAD len %d\n", len);
647 dprintk(8,
"gpio DATA_BMP_LOAD done\n");
659 dprintk(8,
"gpio DATA_BMP_LOAD DMA len %d\n", len);
669 if (!len || len > 4 * 1024) {
677 dprintk(8,
"DMA: TS_REC etc.\n");
683 if (!len || len > 0xff) {
692 if (av7110->
ir.ir_handler)
693 av7110->
ir.ir_handler(av7110,
699 printk(
"dvb-ttpci: gpioirq unknown type=%d len=%d\n",
704 ARM_ClearMailBox(av7110);
709 #ifdef CONFIG_DVB_AV7110_OSD
710 static int dvb_osd_ioctl(
struct file *
file,
711 unsigned int cmd,
void *parg)
714 struct av7110 *av7110 = dvbdev->
priv;
719 return av7110_osd_cmd(av7110, (
osd_cmd_t *) parg);
721 return av7110_osd_capability(av7110, (
osd_cap_t *) parg);
739 .fops = &dvb_osd_fops,
740 .kernel_ioctl = dvb_osd_ioctl,
745 static inline int SetPIDs(
struct av7110 *av7110,
u16 vpid,
u16 apid,
u16 ttpid,
752 if (vpid == 0x1fff || apid == 0x1fff ||
753 ttpid == 0x1fff || subpid == 0x1fff || pcrpid == 0x1fff) {
754 vpid = apid = ttpid = subpid = pcrpid = 0;
765 pcrpid, vpid, apid, ttpid, subpid, aflags);
777 if (!(vpid & 0x8000))
779 if (!(apid & 0x8000))
781 if (!(ttpid & 0x8000))
783 if (!(pcrpid & 0x8000))
790 ret = SetPIDs(av7110, vpid, apid, ttpid, subpid, pcrpid);
805 struct av7110 *av7110 = dvbdmxfeed->
demux->priv;
819 buf[4] = (dvbdmxfilter->
filter.filter_value[0] << 8) |
821 for (i = 3; i < 18; i++)
823 (dvbdmxfilter->
filter.filter_value[i] << 8) |
834 buf[2] = dvbdmxfeed->
pid;
838 if (ret != 0 || handle >= 32) {
839 printk(
"dvb-ttpci: %s error buf %04x %04x %04x %04x "
840 "ret %d handle %04x\n",
841 __func__, buf[0], buf[1], buf[2], buf[3],
857 struct av7110 *av7110 = dvbdmxfilter->
feed->demux->priv;
870 printk(
"%s tried to stop invalid filter %04x, filter type = %x\n",
871 __func__, handle, dvbdmxfilter->
type);
881 if (ret != 0 || answ[1] != handle) {
882 printk(
"dvb-ttpci: %s error cmd %04x %04x %04x ret %x "
883 "resp %04x %04x pid %d\n",
884 __func__, buf[0], buf[1], buf[2], ret,
885 answ[0], answ[1], dvbdmxfilter->
feed->pid);
896 struct av7110 *av7110 = dvbdmx->
priv;
903 npids[0] = npids[1] = npids[2] = npids[3] = npids[4] = 0xffff;
905 npids[
i] = (pid[
i]&0x8000) ? 0 : pid[i];
908 ret =
ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]);
910 ret = StartHWFilter(dvbdmxfeed->
filter);
914 ret =
ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]);
919 if (dvbdmxfeed->
pes_type < 2 && npids[0])
928 if (dvbdmxfeed->
pes_type == 0 && !(dvbdmx->
pids[0] & 0x8000))
930 if (dvbdmxfeed->
pes_type == 1 && !(dvbdmx->
pids[1] & 0x8000))
939 struct av7110 *av7110 = dvbdmx->
priv;
940 u16 *pid = dvbdmx->
pids, npids[5];
956 npids[0] = npids[1] = npids[2] = npids[3] = npids[4] = 0xffff;
961 ret = StopHWFilter(dvbdmxfeed->
filter);
969 npids[
i] = (pid[
i]&0x8000) ? 0 : pid[i];
973 ret =
ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]);
980 struct av7110 *av7110 = demux->
priv;
985 if (!demux->
dmx.frontend)
994 switch (demux->
dmx.frontend->source) {
998 !(demux->
pids[0] & 0x8000) &&
999 !(demux->
pids[1] & 0x8000)) {
1008 ret = dvb_feed_start_pid(feed);
1013 ret = StartHWFilter(feed->
filter);
1018 budget_start_feed(feed);
1025 for (i = 0; i < demux->
filternum; i++) {
1034 ret = StartHWFilter(&demux->
filter[i]);
1048 struct av7110 *av7110 = demux->
priv;
1062 ret = dvb_feed_stop_pid(feed);
1066 ret = StopHWFilter(feed->
filter);
1070 budget_stop_feed(feed);
1080 rc = StopHWFilter(&demux->
filter[i]);
1093 static void restart_feeds(
struct av7110 *av7110)
1109 for (i = 0; i < dvbdmx->
feednum; i++) {
1110 feed = &dvbdmx->
feed[
i];
1113 for (j = 0; j < dvbdmx->
filternum; j++) {
1122 av7110_start_feed(feed);
1132 static int dvb_get_stc(
struct dmx_demux *demux,
unsigned int num,
1139 struct av7110 *av7110;
1143 dvbdemux = demux->
priv;
1145 av7110 = dvbdemux->
priv;
1157 dprintk(2,
"fwstc = %04hx %04hx %04hx %04hx\n",
1158 fwstc[0], fwstc[1], fwstc[2], fwstc[3]);
1160 *stc = (((
uint64_t) ((fwstc[3] & 0x8000) >> 15)) << 32) |
1164 dprintk(4,
"stc = %lu\n", (
unsigned long)*stc);
1177 struct av7110* av7110 = fe->
dvb->priv;
1181 return Set22K(av7110, 1);
1184 return Set22K(av7110, 0);
1191 static int av7110_diseqc_send_master_cmd(
struct dvb_frontend* fe,
1194 struct av7110* av7110 = fe->
dvb->priv;
1199 static int av7110_diseqc_send_burst(
struct dvb_frontend* fe,
1202 struct av7110* av7110 = fe->
dvb->priv;
1208 static int stop_ts_capture(
struct av7110 *
budget)
1210 dprintk(2,
"budget: %p\n", budget);
1220 static int start_ts_capture(
struct av7110 *budget)
1222 dprintk(2,
"budget: %p\n", budget);
1237 struct av7110 *budget = demux->
priv;
1240 dprintk(2,
"av7110: %p\n", budget);
1244 status = start_ts_capture(budget);
1252 struct av7110 *budget = demux->
priv;
1255 dprintk(2,
"budget: %p\n", budget);
1258 status = stop_ts_capture(budget);
1263 static void vpeirq(
unsigned long cookie)
1265 struct av7110 *budget = (
struct av7110 *)cookie;
1272 newdma -= newdma % 188;
1277 budget->
ttbp = newdma;
1279 if (!budget->
feeding1 || (newdma == olddma))
1287 printk(
"vpeirq: %02x Event Counter 1 0x%04x\n",
1292 if (newdma > olddma)
1302 static int av7110_register(
struct av7110 *av7110)
1315 dvbdemux->
priv = (
void *) av7110;
1317 for (i = 0; i < 32; i++)
1329 av7110->
demux.dmx.get_stc = dvb_get_stc;
1333 av7110->
dmxdev.capabilities = 0;
1351 ret = dvbdemux->
dmx.connect_frontend(&dvbdemux->
dmx,
1359 #ifdef CONFIG_DVB_AV7110_OSD
1370 dvbdemux1->
priv = (
void *) av7110;
1375 dvbdemux1->
stop_feed = budget_stop_feed;
1383 av7110->
dmxdev1.filternum = 256;
1385 av7110->
dmxdev1.capabilities = 0;
1390 printk(
"dvb-ttpci: additional demux1 for budget-patch registered\n");
1396 static void dvb_unregister(
struct av7110 *av7110)
1408 dvbdemux->
dmx.close(&dvbdemux1->
dmx);
1415 dvbdemux->
dmx.close(&dvbdemux->
dmx);
1422 if (av7110->
fe !=
NULL) {
1456 msgs[0].
addr = msgs[1].
addr =
id / 2;
1458 msgs[0].
len = 1; msgs[1].
len = 1;
1459 msgs[0].
buf = mm1; msgs[1].
buf = mm2;
1470 static int check_firmware(
struct av7110* av7110)
1477 if (ptr[0] !=
'A' || ptr[1] !=
'V' ||
1478 ptr[2] !=
'F' || ptr[3] !=
'W') {
1479 printk(
"dvb-ttpci: this is not an av7110 firmware\n");
1490 printk(
"dvb-ttpci: dpram file is way too big.\n");
1493 if (crc !=
crc32_le(0, ptr, len)) {
1494 printk(
"dvb-ttpci: crc32 of dpram file does not match.\n");
1507 if (len <= 200000 || len >= 300000 ||
1509 printk(
"dvb-ttpci: root file has strange size (%d). aborting.\n", len);
1512 if( crc !=
crc32_le(0, ptr, len)) {
1513 printk(
"dvb-ttpci: crc32 of root file does not match.\n");
1521 static void put_firmware(
struct av7110* av7110)
1526 static int get_firmware(
struct av7110* av7110)
1536 " file not found: dvb-ttpci-01.fw\n");
1538 "/usr/lib/hotplug/firmware or /lib/firmware\n");
1540 " http://www.linuxtv.org/download/dvb/firmware/\n");
1543 " (error %i)\n", ret);
1547 if (fw->
size <= 200000) {
1548 printk(
"dvb-ttpci: this firmware is way too small.\n");
1556 dprintk(1,
"out of memory\n");
1563 if ((ret = check_firmware(av7110)))
1570 static int alps_bsrv2_tuner_set_params(
struct dvb_frontend *fe)
1573 struct av7110* av7110 = fe->
dvb->priv;
1576 struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf =
buf, .len =
sizeof(
buf) };
1592 buf[0] = (div >> 8) & 0x7f;
1593 buf[1] = div & 0xff;
1594 buf[2] = ((div & 0x18000) >> 10) | 0x95;
1595 buf[3] = (pwr << 6) | 0x30;
1600 if (fe->
ops.i2c_gate_ctrl)
1601 fe->
ops.i2c_gate_ctrl(fe, 1);
1608 .demod_address = 0x08,
1613 static int alps_tdbe2_tuner_set_params(
struct dvb_frontend *fe)
1616 struct av7110* av7110 = fe->
dvb->priv;
1621 div = (p->
frequency + 35937500 + 31250) / 62500;
1623 data[0] = (div >> 8) & 0x7f;
1624 data[1] = div & 0xff;
1625 data[2] = 0x85 | ((div >> 10) & 0x60);
1626 data[3] = (p->
frequency < 174000000 ? 0x88 : p->
frequency < 470000000 ? 0x84 : 0x81);
1628 if (fe->
ops.i2c_gate_ctrl)
1629 fe->
ops.i2c_gate_ctrl(fe, 1);
1636 .demod_address = 0x09,
1645 static int grundig_29504_451_tuner_set_params(
struct dvb_frontend *fe)
1648 struct av7110* av7110 = fe->
dvb->priv;
1654 data[0] = (div >> 8) & 0x7f;
1655 data[1] = div & 0xff;
1659 if (fe->
ops.i2c_gate_ctrl)
1660 fe->
ops.i2c_gate_ctrl(fe, 1);
1667 .demod_address = 0x68,
1672 static int philips_cd1516_tuner_set_params(
struct dvb_frontend *fe)
1675 struct av7110* av7110 = fe->
dvb->priv;
1681 div = (f + 36125000 + 31250) / 62500;
1683 data[0] = (div >> 8) & 0x7f;
1684 data[1] = div & 0xff;
1686 data[3] = (f < 174000000 ? 0xa1 : f < 470000000 ? 0x92 : 0x34);
1688 if (fe->
ops.i2c_gate_ctrl)
1689 fe->
ops.i2c_gate_ctrl(fe, 1);
1696 .demod_address = 0x09,
1704 static int alps_tdlb7_tuner_set_params(
struct dvb_frontend *fe)
1707 struct av7110* av7110 = fe->
dvb->priv;
1712 div = (p->
frequency + 36200000) / 166666;
1719 data[0] = (div >> 8) & 0x7f;
1720 data[1] = div & 0xff;
1724 if (fe->
ops.i2c_gate_ctrl)
1725 fe->
ops.i2c_gate_ctrl(fe, 1);
1733 #if defined(CONFIG_DVB_SP8870) || defined(CONFIG_DVB_SP8870_MODULE)
1734 struct av7110* av7110 = fe->
dvb->priv;
1744 .demod_address = 0x71,
1745 .request_firmware = alps_tdlb7_request_firmware,
1749 static u8 nexusca_stv0297_inittab[] = {
1842 static int nexusca_stv0297_tuner_set_params(
struct dvb_frontend *fe)
1845 struct av7110* av7110 = fe->
dvb->priv;
1852 div = (p->
frequency + 36150000 + 31250) / 62500;
1854 data[0] = (div >> 8) & 0x7f;
1855 data[1] = div & 0xff;
1869 if (fe->
ops.i2c_gate_ctrl)
1870 fe->
ops.i2c_gate_ctrl(fe, 1);
1872 printk(
"nexusca: pll transfer failed!\n");
1877 for(i = 0; i < 20; i++) {
1878 if (fe->
ops.i2c_gate_ctrl)
1879 fe->
ops.i2c_gate_ctrl(fe, 1);
1881 if (data[0] & 0x40)
break;
1890 .demod_address = 0x1C,
1891 .inittab = nexusca_stv0297_inittab,
1893 .stop_during_read = 1,
1898 static int grundig_29504_401_tuner_set_params(
struct dvb_frontend *fe)
1901 struct av7110* av7110 = fe->
dvb->priv;
1903 u8 cfg, cpump, band_select;
1907 div = (36125000 + p->
frequency) / 166666;
1929 data[0] = (div >> 8) & 0x7f;
1930 data[1] = div & 0xff;
1931 data[2] = ((div >> 10) & 0x60) |
cfg;
1932 data[3] = (cpump << 6) | band_select;
1934 if (fe->
ops.i2c_gate_ctrl)
1935 fe->
ops.i2c_gate_ctrl(fe, 1);
1941 .demod_address = 0x55,
1972 ret = SetPIDs(av7110, 0, 0, 0, 0, 0);
1987 static int av7110_fe_set_frontend(
struct dvb_frontend *fe)
1989 struct av7110* av7110 = fe->
dvb->priv;
1991 int ret = av7110_fe_lock_fix(av7110, 0);
2000 struct av7110* av7110 = fe->
dvb->priv;
2002 int ret = av7110_fe_lock_fix(av7110, 0);
2010 struct av7110* av7110 = fe->
dvb->priv;
2016 ret = av7110_fe_lock_fix(av7110, *status);
2020 static int av7110_fe_diseqc_reset_overload(
struct dvb_frontend* fe)
2022 struct av7110* av7110 = fe->
dvb->priv;
2024 int ret = av7110_fe_lock_fix(av7110, 0);
2030 static int av7110_fe_diseqc_send_master_cmd(
struct dvb_frontend* fe,
2033 struct av7110* av7110 = fe->
dvb->priv;
2035 int ret = av7110_fe_lock_fix(av7110, 0);
2045 struct av7110* av7110 = fe->
dvb->priv;
2047 int ret = av7110_fe_lock_fix(av7110, 0);
2057 struct av7110* av7110 = fe->
dvb->priv;
2059 int ret = av7110_fe_lock_fix(av7110, 0);
2069 struct av7110* av7110 = fe->
dvb->priv;
2071 int ret = av7110_fe_lock_fix(av7110, 0);
2079 static int av7110_fe_dishnetwork_send_legacy_command(
struct dvb_frontend* fe,
unsigned long cmd)
2081 struct av7110* av7110 = fe->
dvb->priv;
2083 int ret = av7110_fe_lock_fix(av7110, 0);
2089 static void dvb_s_recover(
struct av7110* av7110)
2091 av7110_fe_init(av7110->
fe);
2103 av7110_fe_set_frontend(av7110->
fe);
2106 static u8 read_pwm(
struct av7110* av7110)
2110 struct i2c_msg msg[] = { { .
addr = 0x50,.flags = 0,.buf = &
b,.len = 1 },
2111 { .addr = 0x50,.flags =
I2C_M_RD,.buf = &
pwm,.len = 1} };
2119 static int frontend_init(
struct av7110 *av7110)
2123 if (av7110->
dev->pci->subsystem_vendor == 0x110a) {
2124 switch(av7110->
dev->pci->subsystem_device) {
2127 &av7110->
i2c_adap, read_pwm(av7110));
2129 av7110->
fe->ops.tuner_ops.set_params = philips_cd1516_tuner_set_params;
2134 }
else if (av7110->
dev->pci->subsystem_vendor == 0x13c2) {
2135 switch(av7110->
dev->pci->subsystem_device) {
2143 av7110->
fe->ops.tuner_ops.set_params = alps_bsrv2_tuner_set_params;
2144 av7110->
fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2145 av7110->
fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2146 av7110->
fe->ops.set_tone = av7110_set_tone;
2147 av7110->
recover = dvb_s_recover;
2154 av7110->
fe->ops.tuner_ops.set_params = alps_bsru6_tuner_set_params;
2157 av7110->
fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2158 av7110->
fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2159 av7110->
fe->ops.set_tone = av7110_set_tone;
2160 av7110->
recover = dvb_s_recover;
2167 av7110->
fe->ops.tuner_ops.set_params = grundig_29504_451_tuner_set_params;
2168 av7110->
fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2169 av7110->
fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2170 av7110->
fe->ops.set_tone = av7110_set_tone;
2171 av7110->
recover = dvb_s_recover;
2176 switch(av7110->
dev->pci->subsystem_device) {
2182 av7110->
fe->ops.tuner_ops.set_params = philips_cd1516_tuner_set_params;
2190 av7110->
fe->ops.tuner_ops.set_params = alps_tdbe2_tuner_set_params;
2200 av7110->
fe->ops.tuner_ops.set_params = alps_tdlb7_tuner_set_params;
2209 av7110->
fe->ops.tuner_ops.set_params = grundig_29504_401_tuner_set_params;
2216 av7110->
fe->ops.tuner_ops.set_params = alps_tdbe2_tuner_set_params;
2224 av7110->
fe->ops.tuner_ops.set_params = alps_bsrv2_tuner_set_params;
2225 av7110->
fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2226 av7110->
fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2227 av7110->
fe->ops.set_tone = av7110_set_tone;
2228 av7110->
recover = dvb_s_recover;
2236 av7110->
fe->ops.tuner_ops.set_params = grundig_29504_451_tuner_set_params;
2237 av7110->
fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2238 av7110->
fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2239 av7110->
fe->ops.set_tone = av7110_set_tone;
2240 av7110->
recover = dvb_s_recover;
2248 av7110->
fe->ops.tuner_ops.set_params = nexusca_stv0297_tuner_set_params;
2264 av7110->
fe->ops.tuner_ops.set_params = alps_bsbe1_tuner_set_params;
2268 printk(
"dvb-ttpci: LNBP21 not found!\n");
2269 if (av7110->
fe->ops.release)
2270 av7110->
fe->ops.release(av7110->
fe);
2273 av7110->
fe->ops.dishnetwork_send_legacy_command =
NULL;
2274 av7110->
recover = dvb_s_recover;
2284 printk(
"dvb-ttpci: A frontend driver was not found for device [%04x:%04x] subsystem [%04x:%04x]\n",
2285 av7110->
dev->pci->vendor,
2286 av7110->
dev->pci->device,
2287 av7110->
dev->pci->subsystem_vendor,
2288 av7110->
dev->pci->subsystem_device);
2302 printk(
"av7110: Frontend registration failed!\n");
2375 struct av7110 *av7110;
2386 if (budgetpatch == 1) {
2461 printk(
"dvb-ttpci: BUDGET-PATCH DETECTED.\n");
2471 av7110 = kzalloc(
sizeof(
struct av7110),
GFP_KERNEL);
2473 dprintk(1,
"out of memory\n");
2481 ret = get_firmware(av7110);
2488 goto err_put_firmware_1;
2500 goto err_dvb_unregister_adapter_2;
2513 if (flags != 0xff && (flags & 0x01))
2518 printk(
KERN_INFO "dvb-ttpci: full-ts mode enabled for saa7146 port B\n");
2546 }
else if (budgetpatch) {
2665 goto err_saa71466_vfree_4;
2670 goto err_pci_free_5;
2674 goto err_iobuf_vfree_6;
2682 goto err_av7110_av_exit_7;
2687 goto err_av7110_ca_exit_8;
2691 goto err_stop_arm_9;
2694 printk (
"dvb-ttpci: Warning, firmware version 0x%04x is too old. "
2697 thread =
kthread_run(arm_thread, (
void *) av7110,
"arm_mon");
2698 if (IS_ERR(thread)) {
2699 ret = PTR_ERR(thread);
2700 goto err_stop_arm_9;
2708 ret = av7110_register(av7110);
2710 goto err_arm_thread_stop_10;
2712 init_av7110_av(av7110);
2719 goto err_av7110_unregister_11;
2722 ret = frontend_init(av7110);
2724 goto err_av7110_exit_v4l_12;
2726 #if defined(CONFIG_INPUT_EVDEV) || defined(CONFIG_INPUT_EVDEV_MODULE)
2734 err_av7110_exit_v4l_12:
2736 err_av7110_unregister_11:
2737 dvb_unregister(av7110);
2738 err_arm_thread_stop_10:
2739 av7110_arm_sync(av7110);
2742 err_av7110_ca_exit_8:
2744 err_av7110_av_exit_7:
2750 err_saa71466_vfree_4:
2755 err_dvb_unregister_adapter_2:
2758 put_firmware(av7110);
2766 struct av7110 *av7110 = saa->
ext_priv;
2769 #if defined(CONFIG_INPUT_EVDEV) || defined(CONFIG_INPUT_EVDEV_MODULE)
2772 if (budgetpatch || av7110->
full_ts) {
2780 SAA7146_IER_DISABLE(saa,
MASK_10);
2788 av7110_arm_sync(av7110);
2793 dvb_unregister(av7110);
2811 put_firmware(av7110);
2823 struct av7110 *av7110 = dev->
ext_priv;
2848 SAA7146_IER_DISABLE(av7110->
dev, MASK_19);
2865 #define MAKE_AV7110_INFO(x_var,x_name) \
2866 static struct saa7146_pci_extension_data x_var = { \
2867 .ext_priv = x_name, \
2868 .ext = &av7110_extension_driver }
2870 MAKE_AV7110_INFO(tts_1_X_fsc,
"Technotrend/Hauppauge WinTV DVB-S rev1.X or Fujitsu Siemens DVB-C");
2876 MAKE_AV7110_INFO(tts_1_3se,
"Technotrend/Hauppauge WinTV DVB-S rev1.3 SE");
2911 .pci_tbl = &pci_tbl[0],
2912 .attach = av7110_attach,
2915 .irq_mask = MASK_19 | MASK_03 |
MASK_10,
2916 .irq_func = av7110_irq,
2920 static int __init av7110_init(
void)
2928 static void __exit av7110_exit(
void)
2937 "Siemens, Technotrend, Hauppauge");