⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bttv-cards.c

📁 优龙2410linux2.6.8内核源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	.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 + -