亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? budget-av.c

?? V4l driver for DVB HD
?? C
?? 第 1 頁 / 共 3 頁
字號:
	0x33, 0xfc,	0x34, 0x93,	0xff, 0xff};static int philips_sd1878_tda8261_pll_set(struct dvb_frontend *fe,		struct i2c_adapter *i2c,		struct dvb_frontend_parameters *params){	u8              buf[4];	int             rc;	struct i2c_msg  tuner_msg = {.addr=0x60,.flags=0,.buf=buf,.len=sizeof(buf)};	if((params->frequency < 950000) || (params->frequency > 2150000))		return -EINVAL;	rc=dvb_pll_configure(&dvb_pll_philips_sd1878_tda8261, buf,			params->frequency, 0);	if(rc < 0) return rc;	if(i2c_transfer(i2c, &tuner_msg, 1) != 1)		return -EIO;    return 0;}static int philips_sd1878_ci_set_symbol_rate(struct dvb_frontend *fe,		u32 srate, u32 ratio){	u8 aclk = 0;	u8 bclk = 0;	u8 m1;	aclk = 0xb5;	if (srate < 2000000)		bclk = 0x86;	else if (srate < 5000000)		bclk = 0x89;	else if (srate < 15000000)		bclk = 0x8f;	else if (srate < 45000000)		bclk = 0x95;	m1 = 0x14;	if (srate < 4000000)		m1 = 0x10;	stv0299_writereg(fe, 0x0e, 0x23);	stv0299_writereg(fe, 0x0f, 0x94);	stv0299_writereg(fe, 0x10, 0x39);	stv0299_writereg(fe, 0x13, aclk);	stv0299_writereg(fe, 0x14, bclk);	stv0299_writereg(fe, 0x15, 0xc9);	stv0299_writereg(fe, 0x1f, (ratio >> 16) & 0xff);	stv0299_writereg(fe, 0x20, (ratio >> 8) & 0xff);	stv0299_writereg(fe, 0x21, (ratio) & 0xf0);	stv0299_writereg(fe, 0x0f, 0x80 | m1);	return 0;}static struct stv0299_config philips_sd1878_config = {	.demod_address = 0x68,	.inittab = philips_sd1878_inittab,	.mclk = 88000000UL,	.invert = 0,	.skip_reinit = 0,	.lock_output = STV0229_LOCKOUTPUT_1,	.volt13_op0_op1 = STV0299_VOLT13_OP0,	.min_delay_ms = 100,	.set_symbol_rate = philips_sd1878_ci_set_symbol_rate,	.pll_set = philips_sd1878_tda8261_pll_set,};static u8 read_pwm(struct budget_av *budget_av){	u8 b = 0xff;	u8 pwm;	struct i2c_msg msg[] = { {.addr = 0x50,.flags = 0,.buf = &b,.len = 1},	{.addr = 0x50,.flags = I2C_M_RD,.buf = &pwm,.len = 1}	};	if ((i2c_transfer(&budget_av->budget.i2c_adap, msg, 2) != 2)	    || (pwm == 0xff))		pwm = 0x48;	return pwm;}#define SUBID_DVBS_KNC1		0x0010#define SUBID_DVBS_KNC1_PLUS	0x0011#define SUBID_DVBS_TYPHOON	0x4f56#define SUBID_DVBS_CINERGY1200	0x1154#define SUBID_DVBS_CYNERGY1200N 0x1155#define SUBID_DVBS_TV_STAR	0x0014#define SUBID_DVBS_TV_STAR_CI	0x0016#define SUBID_DVBS_EASYWATCH	0x001e#define SUBID_DVBC_KNC1		0x0020#define SUBID_DVBC_KNC1_PLUS	0x0021#define SUBID_DVBC_CINERGY1200	0x1156#define SUBID_DVBT_KNC1_PLUS	0x0031#define SUBID_DVBT_KNC1		0x0030#define SUBID_DVBT_CINERGY1200	0x1157static void frontend_init(struct budget_av *budget_av){	struct saa7146_dev * saa = budget_av->budget.dev;	struct dvb_frontend * fe = NULL;	/* Enable / PowerON Frontend */	saa7146_setgpio(saa, 0, SAA7146_GPIO_OUTLO);	/* additional setup necessary for the PLUS cards */	switch (saa->pci->subsystem_device) {		case SUBID_DVBS_KNC1_PLUS:		case SUBID_DVBC_KNC1_PLUS:		case SUBID_DVBT_KNC1_PLUS:			saa7146_setgpio(saa, 3, SAA7146_GPIO_OUTHI);			break;	}	switch (saa->pci->subsystem_device) {	case SUBID_DVBS_KNC1:		if (saa->pci->subsystem_vendor == 0x1894) {			fe = stv0299_attach(&cinergy_1200s_1894_0010_config,					     &budget_av->budget.i2c_adap);		} else {			fe = stv0299_attach(&typhoon_config,					     &budget_av->budget.i2c_adap);		}		break;	case SUBID_DVBS_TV_STAR:	case SUBID_DVBS_TV_STAR_CI:	case SUBID_DVBS_CYNERGY1200N:	case SUBID_DVBS_EASYWATCH:		fe = stv0299_attach(&philips_sd1878_config,				&budget_av->budget.i2c_adap);		break;	case SUBID_DVBS_KNC1_PLUS:	case SUBID_DVBS_TYPHOON:		fe = stv0299_attach(&typhoon_config,				    &budget_av->budget.i2c_adap);		break;	case SUBID_DVBS_CINERGY1200:		fe = stv0299_attach(&cinergy_1200s_config,				    &budget_av->budget.i2c_adap);		break;	case SUBID_DVBC_KNC1:	case SUBID_DVBC_KNC1_PLUS:		fe = tda10021_attach(&philips_cu1216_config,				     &budget_av->budget.i2c_adap,				     read_pwm(budget_av));		break;	case SUBID_DVBT_KNC1:	case SUBID_DVBT_KNC1_PLUS:		fe = tda10046_attach(&philips_tu1216_config,				     &budget_av->budget.i2c_adap);		break;	case SUBID_DVBC_CINERGY1200:		fe = tda10021_attach(&philips_cu1216_config,				     &budget_av->budget.i2c_adap,				     read_pwm(budget_av));		break;	case SUBID_DVBT_CINERGY1200:		fe = tda10046_attach(&philips_tu1216_config,				     &budget_av->budget.i2c_adap);		break;	}	if (fe == NULL) {		printk(KERN_ERR "budget-av: A frontend driver was not found "				"for device %04x/%04x subsystem %04x/%04x\n",		       saa->pci->vendor,		       saa->pci->device,		       saa->pci->subsystem_vendor,		       saa->pci->subsystem_device);		return;	}	budget_av->budget.dvb_frontend = fe;	if (dvb_register_frontend(&budget_av->budget.dvb_adapter,				  budget_av->budget.dvb_frontend)) {		printk(KERN_ERR "budget-av: Frontend registration failed!\n");		if (budget_av->budget.dvb_frontend->ops->release)			budget_av->budget.dvb_frontend->ops->release(budget_av->budget.dvb_frontend);		budget_av->budget.dvb_frontend = NULL;	}}static void budget_av_irq(struct saa7146_dev *dev, u32 * isr){	struct budget_av *budget_av = (struct budget_av *) dev->ext_priv;	dprintk(8, "dev: %p, budget_av: %p\n", dev, budget_av);	if (*isr & MASK_10)		ttpci_budget_irq10_handler(dev, isr);}static int budget_av_detach(struct saa7146_dev *dev){	struct budget_av *budget_av = (struct budget_av *) dev->ext_priv;	int err;	dprintk(2, "dev: %p\n", dev);	if (1 == budget_av->has_saa7113) {		saa7146_setgpio(dev, 0, SAA7146_GPIO_OUTLO);		msleep(200);		saa7146_unregister_device(&budget_av->vd, dev);	}	if (budget_av->budget.ci_present)		ciintf_deinit(budget_av);	if (budget_av->budget.dvb_frontend != NULL)		dvb_unregister_frontend(budget_av->budget.dvb_frontend);	err = ttpci_budget_deinit(&budget_av->budget);	kfree(budget_av);	return err;}static struct saa7146_ext_vv vv_data;static int budget_av_attach(struct saa7146_dev *dev, struct saa7146_pci_extension_data *info){	struct budget_av *budget_av;	u8 *mac;	int err;	dprintk(2, "dev: %p\n", dev);	if (!(budget_av = kzalloc(sizeof(struct budget_av), GFP_KERNEL)))		return -ENOMEM;	budget_av->has_saa7113 = 0;	budget_av->budget.ci_present = 0;	dev->ext_priv = budget_av;	if ((err = ttpci_budget_init(&budget_av->budget, dev, info, THIS_MODULE))) {		kfree(budget_av);		return err;	}	/* knc1 initialization */	saa7146_write(dev, DD1_STREAM_B, 0x04000000);	saa7146_write(dev, DD1_INIT, 0x07000600);	saa7146_write(dev, MC2, MASK_09 | MASK_25 | MASK_10 | MASK_26);	if (saa7113_init(budget_av) == 0) {		budget_av->has_saa7113 = 1;		if (0 != saa7146_vv_init(dev, &vv_data)) {			/* fixme: proper cleanup here */			ERR(("cannot init vv subsystem.\n"));			return err;		}		if ((err = saa7146_register_device(&budget_av->vd, dev, "knc1", VFL_TYPE_GRABBER))) {			/* fixme: proper cleanup here */			ERR(("cannot register capture v4l2 device.\n"));			return err;		}		/* beware: this modifies dev->vv ... */		saa7146_set_hps_source_and_sync(dev, SAA7146_HPS_SOURCE_PORT_A,						SAA7146_HPS_SYNC_PORT_A);		saa7113_setinput(budget_av, 0);	}	/* fixme: find some sane values here... */	saa7146_write(dev, PCI_BT_V1, 0x1c00101f);	mac = budget_av->budget.dvb_adapter.proposed_mac;	if (i2c_readregs(&budget_av->budget.i2c_adap, 0xa0, 0x30, mac, 6)) {		printk(KERN_ERR "KNC1-%d: Could not read MAC from KNC1 card\n",		       budget_av->budget.dvb_adapter.num);		memset(mac, 0, 6);	} else {		printk(KERN_INFO "KNC1-%d: MAC addr = %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",		       budget_av->budget.dvb_adapter.num,		       mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);	}	budget_av->budget.dvb_adapter.priv = budget_av;	frontend_init(budget_av);	if (!budget_av->has_saa7113) {		ciintf_init(budget_av);	}	return 0;}#define KNC1_INPUTS 2static struct v4l2_input knc1_inputs[KNC1_INPUTS] = {	{0, "Composite", V4L2_INPUT_TYPE_TUNER, 1, 0, V4L2_STD_PAL_BG | V4L2_STD_NTSC_M, 0},	{1, "S-Video", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG | V4L2_STD_NTSC_M, 0},};static struct saa7146_extension_ioctls ioctls[] = {	{VIDIOC_ENUMINPUT, SAA7146_EXCLUSIVE},	{VIDIOC_G_INPUT, SAA7146_EXCLUSIVE},	{VIDIOC_S_INPUT, SAA7146_EXCLUSIVE},	{0, 0}};static int av_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg){	struct saa7146_dev *dev = fh->dev;	struct budget_av *budget_av = (struct budget_av *) dev->ext_priv;	switch (cmd) {	case VIDIOC_ENUMINPUT:{		struct v4l2_input *i = arg;		dprintk(1, "VIDIOC_ENUMINPUT %d.\n", i->index);		if (i->index < 0 || i->index >= KNC1_INPUTS) {			return -EINVAL;		}		memcpy(i, &knc1_inputs[i->index], sizeof(struct v4l2_input));		return 0;	}	case VIDIOC_G_INPUT:{		int *input = (int *) arg;		*input = budget_av->cur_input;		dprintk(1, "VIDIOC_G_INPUT %d.\n", *input);		return 0;	}	case VIDIOC_S_INPUT:{		int input = *(int *) arg;		dprintk(1, "VIDIOC_S_INPUT %d.\n", input);		return saa7113_setinput(budget_av, input);	}	default:		return -ENOIOCTLCMD;	}	return 0;}static struct saa7146_standard standard[] = {	{.name = "PAL",.id = V4L2_STD_PAL,	 .v_offset = 0x17,.v_field = 288,	 .h_offset = 0x14,.h_pixels = 680,	 .v_max_out = 576,.h_max_out = 768 },	{.name = "NTSC",.id = V4L2_STD_NTSC,	 .v_offset = 0x16,.v_field = 240,	 .h_offset = 0x06,.h_pixels = 708,	 .v_max_out = 480,.h_max_out = 640, },};static struct saa7146_ext_vv vv_data = {	.inputs = 2,	.capabilities = 0,	// perhaps later: V4L2_CAP_VBI_CAPTURE, but that need tweaking with the saa7113	.flags = 0,	.stds = &standard[0],	.num_stds = sizeof(standard) / sizeof(struct saa7146_standard),	.ioctls = &ioctls[0],	.ioctl = av_ioctl,};static struct saa7146_extension budget_extension;MAKE_BUDGET_INFO(knc1s, "KNC1 DVB-S", BUDGET_KNC1S);MAKE_BUDGET_INFO(knc1c, "KNC1 DVB-C", BUDGET_KNC1C);MAKE_BUDGET_INFO(knc1t, "KNC1 DVB-T", BUDGET_KNC1T);MAKE_BUDGET_INFO(kncxs, "KNC TV STAR DVB-S", BUDGET_TVSTAR);MAKE_BUDGET_INFO(satewpls, "Satelco EasyWatch DVB-S light", BUDGET_TVSTAR);MAKE_BUDGET_INFO(knc1sp, "KNC1 DVB-S Plus", BUDGET_KNC1SP);MAKE_BUDGET_INFO(knc1cp, "KNC1 DVB-C Plus", BUDGET_KNC1CP);MAKE_BUDGET_INFO(knc1tp, "KNC1 DVB-T Plus", BUDGET_KNC1TP);MAKE_BUDGET_INFO(cin1200s, "TerraTec Cinergy 1200 DVB-S", BUDGET_CIN1200S);MAKE_BUDGET_INFO(cin1200sn, "TerraTec Cinergy 1200 DVB-S", BUDGET_CIN1200S);MAKE_BUDGET_INFO(cin1200c, "Terratec Cinergy 1200 DVB-C", BUDGET_CIN1200C);MAKE_BUDGET_INFO(cin1200t, "Terratec Cinergy 1200 DVB-T", BUDGET_CIN1200T);static struct pci_device_id pci_tbl[] = {	MAKE_EXTENSION_PCI(knc1s, 0x1131, 0x4f56),	MAKE_EXTENSION_PCI(knc1s, 0x1131, 0x0010),	MAKE_EXTENSION_PCI(knc1s, 0x1894, 0x0010),	MAKE_EXTENSION_PCI(knc1sp, 0x1131, 0x0011),	MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0014),	MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0016),	MAKE_EXTENSION_PCI(satewpls, 0x1894, 0x001e),	MAKE_EXTENSION_PCI(knc1c, 0x1894, 0x0020),	MAKE_EXTENSION_PCI(knc1cp, 0x1894, 0x0021),	MAKE_EXTENSION_PCI(knc1t, 0x1894, 0x0030),	MAKE_EXTENSION_PCI(knc1tp, 0x1894, 0x0031),	MAKE_EXTENSION_PCI(cin1200s, 0x153b, 0x1154),	MAKE_EXTENSION_PCI(cin1200sn, 0x153b, 0x1155),	MAKE_EXTENSION_PCI(cin1200c, 0x153b, 0x1156),	MAKE_EXTENSION_PCI(cin1200t, 0x153b, 0x1157),	{	 .vendor = 0,	}};MODULE_DEVICE_TABLE(pci, pci_tbl);static struct saa7146_extension budget_extension = {	.name = "budget_av",	.flags = SAA7146_I2C_SHORT_DELAY,	.pci_tbl = pci_tbl,	.module = THIS_MODULE,	.attach = budget_av_attach,	.detach = budget_av_detach,	.irq_mask = MASK_10,	.irq_func = budget_av_irq,};static int __init budget_av_init(void){	return saa7146_register_extension(&budget_extension);}static void __exit budget_av_exit(void){	saa7146_unregister_extension(&budget_extension);}module_init(budget_av_init);module_exit(budget_av_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("Ralph Metzler, Marcus Metzler, Michael Hunold, others");MODULE_DESCRIPTION("driver for the SAA7146 based so-called "		   "budget PCI DVB w/ analog input and CI-module (e.g. the KNC cards)");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久一二三区| 欧美性受xxxx黑人xyx| 精品福利在线导航| 经典一区二区三区| 久久久国产午夜精品| 国产乱理伦片在线观看夜一区 | 日韩av中文字幕一区二区三区| 欧亚一区二区三区| 午夜视频在线观看一区| 欧美一区二区观看视频| 国产最新精品免费| 国产精品美女久久久久久久| 色婷婷综合久久久久中文| 一区二区三区自拍| 91精品国产全国免费观看| 国产精品自拍毛片| 亚洲欧洲综合另类在线| 在线不卡中文字幕播放| 国产一区二区三区高清播放| 亚洲三级免费电影| 91精品欧美久久久久久动漫| 国产精品一区二区三区乱码| 亚洲精选免费视频| 欧美二区在线观看| 国产不卡高清在线观看视频| 亚洲免费看黄网站| 欧美一区二区二区| av激情亚洲男人天堂| 婷婷丁香激情综合| 国产视频一区在线播放| 欧美日精品一区视频| 黄色日韩网站视频| 亚洲综合激情网| 精品成人一区二区| 色婷婷亚洲综合| 久久99精品国产麻豆婷婷| 亚洲视频一二三| 欧美成人一区二区| 色呦呦国产精品| 国产另类ts人妖一区二区| 亚洲一区二区3| 欧美激情一区不卡| 日韩一区二区免费电影| 一本色道久久综合亚洲91| 久久国产剧场电影| 亚洲国产精品精华液网站| 国产清纯白嫩初高生在线观看91 | 久久99国产乱子伦精品免费| 最新不卡av在线| 久久毛片高清国产| 欧美精品自拍偷拍动漫精品| av一二三不卡影片| 国产剧情av麻豆香蕉精品| 日韩福利视频网| 亚洲一区二区三区四区五区黄 | 国产精品嫩草久久久久| 日韩欧美久久一区| 欧美日韩国产在线观看| 99精品视频免费在线观看| 韩国精品主播一区二区在线观看| 亚洲尤物视频在线| 亚洲视频在线一区| 国产精品亲子伦对白| 久久影院电视剧免费观看| 91麻豆精品国产91久久久久久久久| 99国产精品久久久久久久久久久| 国产一区二区三区精品视频| 美脚の诱脚舐め脚责91| 午夜视频一区二区三区| 亚洲综合一二三区| 成人免费一区二区三区视频| 国产欧美日韩不卡| 国产亚洲综合av| 久久久99精品久久| 久久精品亚洲乱码伦伦中文| ww久久中文字幕| 欧美精品一区二区三区在线| 欧美不卡视频一区| 精品久久久久久久一区二区蜜臀| 欧美一级二级在线观看| 日韩一区二区电影在线| 日韩欧美一级精品久久| 日韩女优电影在线观看| 日韩欧美国产精品| 久久综合色之久久综合| 久久美女高清视频| 国产女同互慰高潮91漫画| 国产肉丝袜一区二区| 国产午夜亚洲精品午夜鲁丝片| 精品国产欧美一区二区| 久久久久国产免费免费| 欧美国产日韩亚洲一区| 亚洲色图视频网| 亚洲午夜三级在线| 日韩av在线播放中文字幕| 免费成人av资源网| 国产精品白丝av| 99riav久久精品riav| 色悠悠久久综合| 911精品国产一区二区在线| 91精品国产日韩91久久久久久| 精品欧美一区二区久久 | 欧美日韩国产123区| 日韩欧美久久久| 中国av一区二区三区| 亚洲制服欧美中文字幕中文字幕| 视频一区视频二区中文| 国产乱码精品一区二区三| 99久久久精品| 欧美久久免费观看| 久久九九久精品国产免费直播| 中文字幕不卡的av| 日日摸夜夜添夜夜添亚洲女人| 国产一区二区三区四区五区入口| 成人福利视频在线| 在线不卡中文字幕| 国产精品九色蝌蚪自拍| 图片区小说区区亚洲影院| 国产一区二区三区在线观看免费| 97aⅴ精品视频一二三区| 日韩午夜激情电影| 亚洲人成人一区二区在线观看 | 精品少妇一区二区三区| 国产精品久久久久一区| 日韩精品三区四区| av动漫一区二区| 欧美刺激午夜性久久久久久久 | 亚洲一区二区精品视频| 国产在线麻豆精品观看| 在线视频观看一区| 久久精品一区二区三区不卡 | 欧美日韩国产小视频在线观看| 久久久精品tv| 日韩二区三区四区| 99精品视频在线播放观看| 精品免费视频.| 亚洲激情在线激情| 国产高清不卡一区| 欧美一区二区黄色| 亚洲国产精品嫩草影院| 成人免费福利片| 精品区一区二区| 五月天中文字幕一区二区| 99综合影院在线| 久久久久久久综合日本| 日本不卡一区二区| 一本久久综合亚洲鲁鲁五月天| 精品国内二区三区| 日韩不卡一二三区| 欧美系列一区二区| 亚洲精品成人悠悠色影视| 国产成a人无v码亚洲福利| 日韩欧美国产综合一区| 午夜不卡在线视频| 欧洲色大大久久| 日韩理论片网站| 成人免费福利片| 欧美激情一区二区三区在线| 国精产品一区一区三区mba桃花| 91精品国产综合久久久久| 亚洲图片欧美视频| 中文字幕欧美三区| 国产一区亚洲一区| 久久综合色8888| 精品在线观看免费| 精品国产髙清在线看国产毛片| 日本强好片久久久久久aaa| 欧美日韩一区视频| 亚洲超碰精品一区二区| 欧美日韩一级片网站| 亚洲va韩国va欧美va| 欧美日韩一区三区四区| 亚洲国产精品一区二区久久恐怖片| 在线视频中文字幕一区二区| 一区二区三区欧美亚洲| 欧美亚洲综合色| 亚洲高清中文字幕| 4438x亚洲最大成人网| 丝袜美腿亚洲综合| 欧美电视剧免费全集观看| 久久精品国产99国产精品| 精品国产凹凸成av人导航| 国产精品1区二区.| 国产精品美女久久久久久久网站| 99久久免费精品| 亚洲第一福利视频在线| 777亚洲妇女| 极品少妇一区二区| 国产精品免费看片| 色狠狠综合天天综合综合| 五月激情综合色| 精品99999| 成人av在线网站| 亚洲成人777| 久久久五月婷婷| 91亚洲精品久久久蜜桃网站| 午夜欧美2019年伦理| 精品日本一线二线三线不卡| 高清国产一区二区三区| 一区二区三区在线观看网站|