📄 bttv-cards.c
字号:
video_inputs: 5, audio_inputs: 1, tuner: -1, svhs: 4, gpiomask: 0, muxsel: { 2, 3, 1, 0, 0}, audiomux: { 0 }, needs_tvaudio: 1, tuner_type: -1,},{ name: "FlyVideo 98", video_inputs: 3, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 0x8dfe00, muxsel: {2, 3, 1, 1}, audiomux: { 0, 0x8dff00, 0x8df700, 0x8de700, 0x8dff00, 0 }, needs_tvaudio: 1, tuner_type: -1,},{ name: "iProTV", video_inputs: 3, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 1, muxsel: { 2, 3, 1, 1}, audiomux: { 1, 0, 0, 0, 0 }, tuner_type: -1,},{/* ---- card 0x20 ---------------------------------- */ name: "Intel Create and Share PCI", video_inputs: 4, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 7, muxsel: { 2, 3, 1, 1}, audiomux: { 4, 4, 4, 4, 4}, needs_tvaudio: 1, tuner_type: -1,},{ name: "Terratec TerraTValue", video_inputs: 3, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 0xffff00, muxsel: { 2, 3, 1, 1}, audiomux: { 0x500, 0, 0x300, 0x900, 0x900}, needs_tvaudio: 1, tuner_type: -1,},{ name: "Leadtek WinFast 2000", video_inputs: 3, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 0xfff000, muxsel: { 2, 3, 1, 1,0}, audiomux: { 0x621000,0x6ddf07,0x621100,0x620000,0xE210000,0x620000}, needs_tvaudio: 1, pll: PLL_28, tuner_type: -1,},{ name: "Chronos Video Shuttle II", video_inputs: 3, audio_inputs: 3, tuner: 0, svhs: 2, gpiomask: 0x1800, muxsel: { 2, 3, 1, 1}, audiomux: { 0, 0, 0x1000, 0x1000, 0x0800}, needs_tvaudio: 1, pll: PLL_28, tuner_type: -1,},{/* ---- card 0x24 ---------------------------------- */ name: "Typhoon TView TV/FM Tuner", video_inputs: 3, audio_inputs: 3, tuner: 0, svhs: 2, gpiomask: 0x1800, muxsel: { 2, 3, 1, 1}, audiomux: { 0, 0x800, 0, 0, 0x1800, 0 }, needs_tvaudio: 1, pll: PLL_28, tuner_type: -1,},{ name: "PixelView PlayTV pro", video_inputs: 3, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 0xff, muxsel: { 2, 3, 1, 1 }, audiomux: { 0x21, 0x20, 0x24, 0x2c, 0x29, 0x29 }, no_msp34xx: 1, pll: PLL_28, tuner_type: -1,},{ name: "TView99 CPH063", video_inputs: 4, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 0x551e00, muxsel: { 2, 3, 1, 0}, audiomux: { 0x551400, 0x551200, 0, 0, 0, 0x551200 }, needs_tvaudio: 1, pll: PLL_28, tuner_type: -1,},{ name: "Pinnacle PCTV Rave", video_inputs: 3, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 0x03000F, muxsel: { 2, 3, 1, 1}, audiomux: { 2, 0, 0, 0, 1}, needs_tvaudio: 1, pll: PLL_28, tuner_type: -1,},{/* ---- card 0x28 ---------------------------------- */ name: "STB2", video_inputs: 3, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 7, muxsel: { 2, 3, 1, 1}, audiomux: { 4, 0, 2, 3, 1}, no_msp34xx: 1, needs_tvaudio: 1, tuner_type: -1,},{ name: "AVerMedia TVPhone 98", video_inputs: 3, audio_inputs: 4, tuner: 0, svhs: 2, gpiomask: 12, muxsel: { 2, 3, 1, 1}, audiomux: { 13, 14, 11, 7, 0, 0}, needs_tvaudio: 1, pll: PLL_28, tuner_type: 5, audio_hook: avermedia_tvphone_audio,},{ name: "ProVideo PV951", /* pic16c54 */ video_inputs: 3, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 0, muxsel: { 2, 3, 1, 1}, audiomux: { 0, 0, 0, 0, 0}, no_msp34xx: 1, pll: PLL_28, tuner_type: 1,},{ name: "Little OnAir TV", video_inputs: 3, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 0xe00b, muxsel: {2, 3, 1, 1}, audiomux: {0xff9ff6, 0xff9ff6, 0xff1ff7, 0, 0xff3ffc}, no_msp34xx: 1, tuner_type: -1,},{/* ---- card 0x2c ---------------------------------- */ name: "Sigma TVII-FM", video_inputs: 2, audio_inputs: 1, tuner: 0, svhs: -1, gpiomask: 3, muxsel: {2, 3, 1, 1}, audiomux: {1, 1, 0, 2, 3}, no_msp34xx: 1, pll: PLL_NONE, tuner_type: -1,},{ name: "MATRIX-Vision MV-Delta 2", video_inputs: 5, audio_inputs: 1, tuner: -1, svhs: 3, gpiomask: 0, muxsel: { 2, 3, 1, 0, 0}, audiomux: {0 }, no_msp34xx: 1, pll: PLL_28, tuner_type: -1,},{ name: "Zoltrix Genie TV", video_inputs: 3, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 0xbcf03f, muxsel: { 2, 3, 1, 1}, audiomux: { 0xbc803f, 0, 0xbcb03f, 0, 0xbcb03f}, no_msp34xx: 1, pll: PLL_28, tuner_type: 5,},{ name: "Terratec TV/Radio+", video_inputs: 3, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 0x1f0000, muxsel: { 2, 3, 1, 1}, audiomux: { 0xe2ffff, 0xebffff, 0, 0, 0xe0ffff, 0xe2ffff }, no_msp34xx: 1, pll: PLL_35, tuner_type: 1,},{/* ---- card 0x30 ---------------------------------- */ name: "Dynalink Magic TView ", video_inputs: 3, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 15, muxsel: { 2, 3, 1, 1}, audiomux: {2,0,0,0,1}, needs_tvaudio: 1, pll: PLL_28, tuner_type: -1,},{ name: "GV-BCTV3", video_inputs: 3, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 0x010f00, muxsel: {2, 3, 0, 0}, audiomux: {0x10000, 0, 0x10000, 0, 0, 0}, no_msp34xx: 1, pll: PLL_28, tuner_type: TUNER_ALPS_TSHC6_NTSC, audio_hook: gvbctv3pci_audio,},{ name: "Prolink PV-BT878P+4E (PixelView PlayTV PAK)", video_inputs: 4, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 0xAA0000, muxsel: { 2,3,1,1 }, audiomux: { 0x20000, 0, 0x80000, 0x80000, 0xa8000, 0x46000 }, no_msp34xx: 1, pll: PLL_28, tuner_type: TUNER_PHILIPS_PAL_I,},{ name: "Eagle Wireless Capricorn2 (bt878A)", video_inputs: 4, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 7, muxsel: { 2, 0, 1, 1}, audiomux: { 0, 1, 2, 3, 4}, pll: PLL_28, tuner_type: -1 /* TUNER_ALPS_TMDH2_NTSC */,},{/* ---- card 0x34 ---------------------------------- */ name: "Pinnacle Studio PCTV Pro", /* David H鋜deman <david@2gen.com> */ video_inputs: 3, audio_inputs: 1, tuner: 0, svhs: 2, gpiomask: 0x03000F, muxsel: { 2, 3, 1, 1}, audiomux: { 1, 65537, 0, 0, 10}, needs_tvaudio: 1, pll: PLL_28, tuner_type: -1,},{ name: "Typhoon TView RDS", /* Claas Langbehn <claas@bigfoot.com> */ video_inputs: 3, audio_inputs: 3, tuner: 0, svhs: 2, gpiomask: 0xffff, muxsel: { 2, 3, 1, 1}, audiomux: { 0xb002, 0, 0x12, 0x12, 0x3007 }, needs_tvaudio: 1, pll: PLL_28, tuner_type: TUNER_PHILIPS_PAL_I,}};const int bttv_num_tvcards = (sizeof(bttv_tvcards)/sizeof(struct tvcard));/* ----------------------------------------------------------------------- */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->dev, PCI_SUBSYSTEM_ID, &tmp); btv->cardid = tmp << 16; pci_read_config_word(btv->dev, 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: subsystem: %04x:%04x => %s => card=%d\n", btv->nr, btv->cardid & 0xffff, btv->cardid >> 16, cards[type].name,cards[type].cardnr); btv->type = cards[type].cardnr; } else { /* 404 */ printk(KERN_INFO "bttv%d: subsystem: %04x:%04x (UNKNOWN)\n", btv->nr, btv->cardid&0xffff, btv->cardid>>16); printk(KERN_DEBUG "please mail id, board name and " "the correct card= insmod option to " "kraxel@goldbach.in-berlin.de\n"); } } /* let the user override the autodetected type */ if (card[btv->nr] >= 0 && card[btv->nr] < bttv_num_tvcards) btv->type=card[btv->nr]; /* print which card config we are using */ sprintf(btv->video_dev.name,"BT%d%s(%.23s)", btv->id, (btv->id==848 && btv->revision==0x12) ? "A" : "", bttv_tvcards[btv->type].name); printk(KERN_INFO "bttv%d: model: %s [%s]\n",btv->nr,btv->video_dev.name, (card[btv->nr] >= 0 && card[btv->nr] < bttv_num_tvcards) ? "insmod option" : "autodetected"); /* overwrite gpio stuff ?? */ if (-1 == audioall && -1 == audiomux[0]) return; if (-1 != audiomux[0]) { gpiobits = 0; for (i = 0; i < 5; i++) { bttv_tvcards[btv->type].audiomux[i] = audiomux[i]; gpiobits |= audiomux[i]; } } else { gpiobits = audioall; for (i = 0; i < 5; i++) { bttv_tvcards[btv->type].audiomux[i] = audioall; } } bttv_tvcards[btv->type].gpiomask = (-1 != gpiomask) ? gpiomask : gpiobits; printk(KERN_INFO "bttv%d: gpio config override: mask=0x%x, mux=", btv->nr,bttv_tvcards[btv->type].gpiomask); for (i = 0; i < 5; i++) { printk("%s0x%x", i ? "," : "", bttv_tvcards[btv->type].audiomux[i]); } printk("\n");}/* * (most) board specific initialisations goes here */void __devinit bttv_init_card(struct bttv *btv){ int eeprom = 0; if (btv->type == BTTV_MIRO || btv->type == BTTV_MIROPRO) { /* auto detect tuner for MIRO cards */ btv->tuner_type=((btread(BT848_GPIO_DATA)>>10)-1)&7;#if 0 if (btv->type == BTTV_MIROPRO) { if (bttv_verbose) printk(KERN_INFO "Initializing TEA5757...\n"); init_tea5757(btv); }#endif } if (btv->type == BTTV_HAUPPAUGE || btv->type == BTTV_HAUPPAUGE878) { /* pick up some config infos from the eeprom */ if (0xa0 != eeprom) { eeprom = 0xa0; bttv_readee(btv,eeprom_data,0xa0); } hauppauge_eeprom(btv); } if (btv->type == BTTV_PXC200) init_PXC200(btv); /* pll configuration */ if (!(btv->id==848 && btv->revision==0x11)) { /* defaults from card list */ if (PLL_28 == bttv_tvcards[btv->type].pll) { btv->pll.pll_ifreq=28636363; btv->pll.pll_crystal=BT848_IFORM_XT0; } if (PLL_35 == bttv_tvcards[btv->type].pll) { btv->pll.pll_ifreq=35468950; btv->pll.pll_crystal=BT848_IFORM_XT1; } /* insmod options can override */ switch (pll[btv->nr]) { case 0: /* none */ btv->pll.pll_crystal = 0; btv->pll.pll_ifreq = 0; btv->pll.pll_ofreq = 0; break; case 1: /* 28 MHz */ case 28: btv->pll.pll_ifreq = 28636363; btv->pll.pll_ofreq = 0; btv->pll.pll_crystal = BT848_IFORM_XT0; break; case 2: /* 35 MHz */ case 35: btv->pll.pll_ifreq = 35468950; btv->pll.pll_ofreq = 0; btv->pll.pll_crystal = BT848_IFORM_XT1; break; } } /* tuner configuration (from card list / insmod option) */ if (-1 != bttv_tvcards[btv->type].tuner_type) btv->tuner_type = bttv_tvcards[btv->type].tuner_type; if (-1 != tuner[btv->nr]) btv->tuner_type = tuner[btv->nr]; if (btv->tuner_type != -1) bttv_call_i2c_clients(btv,TUNER_SET_TYPE,&btv->tuner_type); /* try to detect audio/fader chips */ if (!bttv_tvcards[btv->type].no_msp34xx && bttv_I2CRead(btv, I2C_MSP3400, "MSP34xx") >=0) { if (autoload) request_module("msp3400"); } if (bttv_I2CRead(btv, I2C_TDA9875, "TDA9875") >=0) { if (autoload) request_module("tda9875"); } if (bttv_I2CRead(btv, I2C_TDA7432, "TDA7432") >=0) { if (autoload) request_module("tda7432"); } if (bttv_tvcards[btv->type].needs_tvaudio) { if (autoload) request_module("tvaudio"); } if (bttv_tvcards[btv->type].tuner != -1) { if (autoload) request_module("tuner"); }}/* ----------------------------------------------------------------------- *//* some hauppauge specific stuff */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -