📄 bttv-cards.c
字号:
.muxsel = { 2, 3, 1, 0 }, /* Tuner, Radio, external, internal, off, on */ .audiomux = { 0x08, 0x0f, 0x0a, 0x08, 0x0f, 0x08 }, .needs_tvaudio = 0, .no_msp34xx = 1, .pll = PLL_28, .tuner_type = 2, .audio_hook = adtvk503_audio,},{ /* ---- card 0x64 ---------------------------------- */ .name = "Hercules Smart TV Stereo", .video_inputs = 4, .audio_inputs = 1, .tuner = 0, .svhs = 2, .gpiomask = 0x00, .muxsel = { 2, 3, 1, 1 }, .needs_tvaudio = 1, .no_msp34xx = 1, .pll = PLL_28, .tuner_type = 5, /* Notes: - card lacks subsystem ID - stereo variant w/ daughter board with tda9874a @0xb0 - Audio Routing: always from tda9874 independent of GPIO (?) external line in: unknown - Other chips: em78p156elp @ 0x96 (probably IR remote control) hef4053 (instead 4052) for unknown function */},{ .name = "Pace TV & Radio Card", .video_inputs = 4, .audio_inputs = 1, .tuner = 0, .svhs = 2, .muxsel = { 2, 3, 1, 1}, // Tuner, CVid, SVid, CVid over SVid connector .gpiomask = 0, .no_tda9875 = 1, .no_tda7432 = 1, .tuner_type = 1, .has_radio = 1, .pll = PLL_28, /* Bt878, Bt832, FI1246 tuner; no pci subsystem id only internal line out: (4pin header) RGGL Radio must be decoded by msp3410d (not routed through)*/ // .digital_mode = DIGITAL_MODE_CAMERA, // todo!},{ /* Chris Willing <chris@vislab.usyd.edu.au> */ .name = "IVC-200", .video_inputs = 1, .audio_inputs = 0, .tuner = -1, .tuner_type = -1, .svhs = -1, .gpiomask = 0xdf, .muxsel = { 2 }, .pll = PLL_28,},{ .name = "Grand X-Guard / Trust 814PCI", .video_inputs = 16, .audio_inputs = 0, .tuner = -1, .svhs = -1, .tuner_type = 4, .gpiomask2 = 0xff, .muxsel = { 2,2,2,2, 3,3,3,3, 1,1,1,1, 0,0,0,0 }, .muxsel_hook = xguard_muxsel, .no_msp34xx = 1, .no_tda9875 = 1, .no_tda7432 = 1, .pll = PLL_28,},{ /* ---- card 0x68 ---------------------------------- */ .name = "Nebula Electronics DigiTV", .video_inputs = 1, .tuner = -1, .svhs = -1, .muxsel = { 2, 3, 1, 0}, .no_msp34xx = 1, .no_tda9875 = 1, .no_tda7432 = 1, .pll = PLL_28, .tuner_type = -1, .has_dvb = 1, .no_gpioirq = 1,},{ /* Jorge Boncompte - DTI2 <jorge@dti2.net> */ .name = "ProVideo PV143", .video_inputs = 4, .audio_inputs = 0, .tuner = -1, .svhs = -1, .gpiomask = 0, .muxsel = { 2, 3, 1, 0 }, .audiomux = { 0 }, .needs_tvaudio = 0, .no_msp34xx = 1, .pll = PLL_28, .tuner_type = -1,},{ /* M.Klahr@phytec.de */ .name = "PHYTEC VD-009-X1 MiniDIN (bt878)", .video_inputs = 4, .audio_inputs = 0, .tuner = -1, /* card has no tuner */ .svhs = 3, .gpiomask = 0x00, .muxsel = { 2, 3, 1, 0}, .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */ .needs_tvaudio = 1, .pll = PLL_28, .tuner_type = -1,},{ .name = "PHYTEC VD-009-X1 Combi (bt878)", .video_inputs = 4, .audio_inputs = 0, .tuner = -1, /* card has no tuner */ .svhs = 3, .gpiomask = 0x00, .muxsel = { 2, 3, 1, 1}, .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */ .needs_tvaudio = 1, .pll = PLL_28, .tuner_type = -1,},{ /* ---- card 0x6c ---------------------------------- */ .name = "PHYTEC VD-009 MiniDIN (bt878)", .video_inputs = 10, .audio_inputs = 0, .tuner = -1, /* card has no tuner */ .svhs = 9, .gpiomask = 0x00, .gpiomask2 = 0x03, /* gpiomask2 defines the bits used to switch audio via the upper nibble of muxsel. here: used for xternal video-mux */ .muxsel = { 0x02, 0x12, 0x22, 0x32, 0x03, 0x13, 0x23, 0x33, 0x01, 0x00 }, .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */ .needs_tvaudio = 1, .pll = PLL_28, .tuner_type = -1,},{ .name = "PHYTEC VD-009 Combi (bt878)", .video_inputs = 10, .audio_inputs = 0, .tuner = -1, /* card has no tuner */ .svhs = 9, .gpiomask = 0x00, .gpiomask2 = 0x03, /* gpiomask2 defines the bits used to switch audio via the upper nibble of muxsel. here: used for xternal video-mux */ .muxsel = { 0x02, 0x12, 0x22, 0x32, 0x03, 0x13, 0x23, 0x33, 0x01, 0x01 }, .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */ .needs_tvaudio = 1, .pll = PLL_28, .tuner_type = -1,},{ .name = "IVC-100", .video_inputs = 4, .audio_inputs = 0, .tuner = -1, .tuner_type = -1, .svhs = -1, .gpiomask = 0xdf, .muxsel = { 2, 3, 1, 0 }, .pll = PLL_28,},{ /* IVC-120G - Alan Garfield <alan@fromorbit.com> */ .name = "IVC-120G", .video_inputs = 16, .audio_inputs = 0, /* card has no audio */ .tuner = -1, /* card has no tuner */ .tuner_type = -1, .svhs = -1, /* card has no svhs */ .needs_tvaudio = 0, .no_msp34xx = 1, .no_tda9875 = 1, .no_tda7432 = 1, .gpiomask = 0x00, .muxsel = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 }, .muxsel_hook = ivc120_muxsel, .pll = PLL_28,},{ /* ---- card 0x70 ---------------------------------- */ .name = "pcHDTV HD-2000 TV", .video_inputs = 4, .audio_inputs = 1, .tuner = 0, .svhs = 2, .muxsel = { 2, 3, 1, 0}, .tuner_type = TUNER_PHILIPS_ATSC,},{ .name = "Twinhan DST + clones", .no_msp34xx = 1, .no_tda9875 = 1, .no_tda7432 = 1, .tuner_type = TUNER_ABSENT, .no_video = 1, .has_dvb = 1,},{ .name = "Winfast VC100", .video_inputs = 3, .audio_inputs = 0, .svhs = 1, .tuner = -1, // no tuner .muxsel = { 3, 1, 1, 3}, // Vid In, SVid In, Vid over SVid in connector .no_msp34xx = 1, .no_tda9875 = 1, .no_tda7432 = 1, .tuner_type = TUNER_ABSENT, .no_video = 1, .pll = PLL_28,},{ .name = "Teppro TEV-560/InterVision IV-560", .video_inputs = 3, .audio_inputs = 1, .tuner = 0, .svhs = 2, .gpiomask = 3, .muxsel = { 2, 3, 1, 1}, .audiomux = { 1, 1, 1, 1, 0}, .needs_tvaudio = 1, .tuner_type = TUNER_PHILIPS_PAL, .pll = PLL_35,},{ /* ---- card 0x74 ---------------------------------- */ .name = "SIMUS GVC1100", .video_inputs = 4, .audio_inputs = 0, .tuner = -1, .svhs = -1, .tuner_type = -1, .pll = PLL_28, .muxsel = { 2, 2, 2, 2}, .gpiomask = 0x3F, .muxsel_hook = gvc1100_muxsel,},{ /* Carlos Silva r3pek@r3pek.homelinux.org || card 0x75 */ .name = "NGS NGSTV+", .video_inputs = 3, .tuner = 0, .svhs = 2, .gpiomask = 0x008007, .muxsel = {2, 3, 0, 0}, .audiomux = {0, 0, 0, 0, 0x000003, 0}, .pll = PLL_28, .tuner_type = TUNER_PHILIPS_PAL, .has_remote = 1,},{ /* http://linuxmedialabs.com */ .name = "LMLBT4", .video_inputs = 4, /* IN1,IN2,IN3,IN4 */ .audio_inputs = 0, .tuner = -1, .svhs = -1, .muxsel = { 2, 3, 1, 0 }, .no_msp34xx = 1, .no_tda9875 = 1, .no_tda7432 = 1, .needs_tvaudio = 0,},{ /* Helmroos Harri <harri.helmroos@pp.inet.fi> */ .name = "Tekram M205 PRO", .video_inputs = 3, .audio_inputs = 1, .tuner = 0, .tuner_type = TUNER_PHILIPS_PAL, .svhs = 2, .needs_tvaudio = 0, .gpiomask = 0x68, .muxsel = { 2, 3, 1}, .audiomux = { 0x68, 0x68, 0x61, 0x61, 0x00 }, .pll = PLL_28,},{ /* ---- card 0x78 ---------------------------------- */ /* Javier Cendan Ares <jcendan@lycos.es> */ /* bt878 TV + FM without subsystem ID */ .name = "Conceptronic CONTVFMi", .video_inputs = 3, .audio_inputs = 1, .tuner = 0, .svhs = 2, .gpiomask = 0x008007, .muxsel = { 2, 3, 1, 1 }, .audiomux = { 0, 1, 2, 2, 3 }, .needs_tvaudio = 0, .pll = PLL_28, .tuner_type = TUNER_PHILIPS_PAL, .has_remote = 1, .has_radio = 1,},{ /*Eric DEBIEF <debief@telemsa.com>*/ /*EURESYS Picolo Tetra : 4 Conexant Fusion 878A, no audio, video input set with analog multiplexers GPIO controled*/ /* adds picolo_tetra_muxsel(), picolo_tetra_init(), the folowing declaration strucure, and #define BTTV_PICOLO_TETRA_CHIP*/ /*0x79 in bttv.h*/ .name = "Euresys Picolo Tetra", .video_inputs = 4, .audio_inputs = 0, .tuner = -1, .svhs = -1, .gpiomask = 0, .gpiomask2 = 0x3C<<16,/*Set the GPIO[18]->GPIO[21] as output pin.==> drive the video inputs through analog multiplexers*/ .no_msp34xx = 1, .no_tda9875 = 1, .no_tda7432 = 1, .muxsel = {2,2,2,2},/*878A input is always MUX0, see above.*/ .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */ .pll = PLL_28, .needs_tvaudio = 0, .muxsel_hook = picolo_tetra_muxsel,/*Required as it doesn't follow the classic input selection policy*/},{ /* Spirit TV Tuner from http://spiritmodems.com.au */ /* Stafford Goodsell <surge@goliath.homeunix.org> */ .name = "Spirit TV Tuner", .video_inputs = 3, .audio_inputs = 1, .tuner = 0, .svhs = 2, .gpiomask = 0x0000000f, .muxsel = { 2, 1, 1 }, .audiomux = { 0x02, 0x00, 0x00, 0x00, 0x00}, .tuner_type = TUNER_TEMIC_PAL, .no_msp34xx = 1, .no_tda9875 = 1,},{ /* Wolfram Joost <wojo@frokaschwei.de> */ .name = "AVerMedia AVerTV DVB-T 771", .video_inputs = 2, .svhs = 1, .tuner = -1, .tuner_type = TUNER_ABSENT, .muxsel = { 3 , 3 }, .no_msp34xx = 1, .no_tda9875 = 1, .no_tda7432 = 1, .pll = PLL_28, .has_dvb = 1, .no_gpioirq = 1,#if 0 /* untested */ .has_remote = 1,#endif}};const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards);/* ----------------------------------------------------------------------- */static unsigned char eeprom_data[256];/* * identify card */void __devinit bttv_idcard(struct bttv *btv){ unsigned int gpiobits; int i,type; unsigned short tmp; /* read PCI subsystem ID */ pci_read_config_word(btv->c.pci, PCI_SUBSYSTEM_ID, &tmp); btv->cardid = tmp << 16; pci_read_config_word(btv->c.pci, PCI_SUBSYSTEM_VENDOR_ID, &tmp); btv->cardid |= tmp; if (0 != btv->cardid && 0xffffffff != btv->cardid) { /* look for the card */ for (type = -1, i = 0; cards[i].id != 0; i++) if (cards[i].id == btv->cardid) type = i; if (type != -1) { /* found it */ printk(KERN_INFO "bttv%d: detected: %s [card=%d], " "PCI subsystem ID is %04x:%04x\n", btv->c.nr,cards[type].name,cards[type].cardnr, btv->cardid & 0xffff, (btv->cardid >> 16) & 0xffff); btv->c.type = cards[type].cardnr; } else { /* 404 */ printk(KERN_INFO "bttv%d: subsystem: %04x:%04x (UNKNOWN)\n", btv->c.nr, btv->cardid & 0xffff, (btv->cardid >> 16) & 0xffff); printk(KERN_DEBUG "please mail id, board name and " "the correct card= insmod option to kraxel@bytesex.org\n"); } } /* let the user override the autodetected type */ if (card[btv->c.nr] < bttv_num_tvcards) btv->c.type=card[btv->c.nr]; /* print which card config we are using */ printk(KERN_INFO "bttv%d: using: %s [card=%d,%s]\n",btv->c.nr, bttv_tvcards[btv->c.type].name, btv->c.type, card[btv->c.nr] < bttv_num_tvcards ? "insmod option" : "autodetected"); /* overwrite gpio stuff ?? */ if (UNSET == audioall && UNSET == audiomux[0]) return; if (UNSET != audiomux[0]) { gpiobits = 0; for (i = 0; i < 5; i++) { bttv_tvcards[btv->c.type].audiomux[i] = audiomux[i]; gpiobits |= audiomux[i]; } } else { gpiobits = audioall; for (i = 0; i < 5; i++) { bttv_tvcards[btv->c.type].audiomux[i] = audioall; } } bttv_tvcards[btv->c.type].gpiomask = (UNSET != gpiomask) ? gpiomask : gpiobits; printk(KERN_INFO "bttv%d: gpio config override: mask=0x%x, mux=", btv->c.nr,bttv_tvcards[btv->c.type].gpiomask); for (i = 0; i < 5; i++) { printk("%s0x%x", i ? "," : "", bttv_tvcards[btv->c.type].audiomux[i]); } printk("\n");}/* * (most) board sp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -