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

📄 bttv-cards.c

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
	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 + -