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

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

?? saa7134-dvb.c

?? V4l driver for DVB HD
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * * (c) 2004 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs] * *  Extended 3 / 2005 by Hartmut Hackmann to support various *  cards with the tda10046 DVB-T channel decoder * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include <linux/init.h>#include <linux/list.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/slab.h>#include <linux/delay.h>#include <linux/kthread.h>#include <linux/suspend.h>#include "compat.h"#include "saa7134-reg.h"#include "saa7134.h"#include <media/v4l2-common.h>#include "dvb-pll.h"#ifdef HAVE_MT352# include "mt352.h"# include "mt352_priv.h" /* FIXME */#endif#ifdef HAVE_TDA1004X# include "tda1004x.h"#endif#ifdef HAVE_NXT200X# include "nxt200x.h"#endifMODULE_AUTHOR("Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]");MODULE_LICENSE("GPL");static unsigned int antenna_pwr = 0;module_param(antenna_pwr, int, 0444);MODULE_PARM_DESC(antenna_pwr,"enable antenna power (Pinnacle 300i)");/* ------------------------------------------------------------------ */#ifdef HAVE_MT352static int pinnacle_antenna_pwr(struct saa7134_dev *dev, int on){	u32 ok;	if (!on) {		saa_setl(SAA7134_GPIO_GPMODE0 >> 2,     (1 << 26));		saa_clearl(SAA7134_GPIO_GPSTATUS0 >> 2, (1 << 26));		return 0;	}	saa_setl(SAA7134_GPIO_GPMODE0 >> 2,     (1 << 26));	saa_setl(SAA7134_GPIO_GPSTATUS0 >> 2,   (1 << 26));	udelay(10);	saa_setl(SAA7134_GPIO_GPMODE0 >> 2,     (1 << 28));	saa_clearl(SAA7134_GPIO_GPSTATUS0 >> 2, (1 << 28));	udelay(10);	saa_setl(SAA7134_GPIO_GPSTATUS0 >> 2,   (1 << 28));	udelay(10);	ok = saa_readl(SAA7134_GPIO_GPSTATUS0) & (1 << 27);	printk("%s: %s %s\n", dev->name, __FUNCTION__,	       ok ? "on" : "off");	if (!ok)		saa_clearl(SAA7134_GPIO_GPSTATUS0 >> 2,   (1 << 26));	return ok;}static int mt352_pinnacle_init(struct dvb_frontend* fe){	static u8 clock_config []  = { CLOCK_CTL,  0x3d, 0x28 };	static u8 reset []         = { RESET,      0x80 };	static u8 adc_ctl_1_cfg [] = { ADC_CTL_1,  0x40 };	static u8 agc_cfg []       = { AGC_TARGET, 0x28, 0xa0 };	static u8 capt_range_cfg[] = { CAPT_RANGE, 0x31 };	static u8 fsm_ctl_cfg[]    = { 0x7b,       0x04 };	static u8 gpp_ctl_cfg []   = { GPP_CTL,    0x0f };	static u8 scan_ctl_cfg []  = { SCAN_CTL,   0x0d };	static u8 irq_cfg []       = { INTERRUPT_EN_0, 0x00, 0x00, 0x00, 0x00 };	struct saa7134_dev *dev= fe->dvb->priv;	printk("%s: %s called\n",dev->name,__FUNCTION__);	mt352_write(fe, clock_config,   sizeof(clock_config));	udelay(200);	mt352_write(fe, reset,          sizeof(reset));	mt352_write(fe, adc_ctl_1_cfg,  sizeof(adc_ctl_1_cfg));	mt352_write(fe, agc_cfg,        sizeof(agc_cfg));	mt352_write(fe, capt_range_cfg, sizeof(capt_range_cfg));	mt352_write(fe, gpp_ctl_cfg,    sizeof(gpp_ctl_cfg));	mt352_write(fe, fsm_ctl_cfg,    sizeof(fsm_ctl_cfg));	mt352_write(fe, scan_ctl_cfg,   sizeof(scan_ctl_cfg));	mt352_write(fe, irq_cfg,        sizeof(irq_cfg));	return 0;}static int mt352_aver777_init(struct dvb_frontend* fe){	static u8 clock_config []  = { CLOCK_CTL,  0x38, 0x2d };	static u8 reset []         = { RESET,      0x80 };	static u8 adc_ctl_1_cfg [] = { ADC_CTL_1,  0x40 };	static u8 agc_cfg []       = { AGC_TARGET, 0x28, 0xa0 };	static u8 capt_range_cfg[] = { CAPT_RANGE, 0x33 };	mt352_write(fe, clock_config,   sizeof(clock_config));	udelay(200);	mt352_write(fe, reset,          sizeof(reset));	mt352_write(fe, adc_ctl_1_cfg,  sizeof(adc_ctl_1_cfg));	mt352_write(fe, agc_cfg,        sizeof(agc_cfg));	mt352_write(fe, capt_range_cfg, sizeof(capt_range_cfg));	return 0;}static int mt352_pinnacle_pll_set(struct dvb_frontend* fe,				  struct dvb_frontend_parameters* params,				  u8* pllbuf){	u8 off[] = { 0x00, 0xf1};	u8 on[]  = { 0x00, 0x71};	struct i2c_msg msg = {.addr=0x43, .flags=0, .buf=off, .len = sizeof(off)};	struct saa7134_dev *dev = fe->dvb->priv;	struct v4l2_frequency f;	/* set frequency (mt2050) */	f.tuner     = 0;	f.type      = V4L2_TUNER_DIGITAL_TV;	f.frequency = params->frequency / 1000 * 16 / 1000;	i2c_transfer(&dev->i2c_adap, &msg, 1);	saa7134_i2c_call_clients(dev,VIDIOC_S_FREQUENCY,&f);	msg.buf = on;	i2c_transfer(&dev->i2c_adap, &msg, 1);	pinnacle_antenna_pwr(dev, antenna_pwr);	/* mt352 setup */	mt352_pinnacle_init(fe);	pllbuf[0] = 0xc2;	pllbuf[1] = 0x00;	pllbuf[2] = 0x00;	pllbuf[3] = 0x80;	pllbuf[4] = 0x00;	return 0;}static int mt352_aver777_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params, u8* pllbuf){	pllbuf[0] = 0xc2;	dvb_pll_configure(&dvb_pll_philips_td1316, pllbuf+1,			  params->frequency,			  params->u.ofdm.bandwidth);	return 0;}static struct mt352_config pinnacle_300i = {	.demod_address = 0x3c >> 1,	.adc_clock     = 20333,	.if2           = 36150,	.no_tuner      = 1,	.demod_init    = mt352_pinnacle_init,	.pll_set       = mt352_pinnacle_pll_set,};static struct mt352_config avermedia_777 = {	.demod_address = 0xf,	.demod_init    = mt352_aver777_init,	.pll_set       = mt352_aver777_pll_set,};#endif/* ------------------------------------------------------------------ */#ifdef HAVE_TDA1004Xstatic int philips_tda6651_pll_set(u8 addr, struct dvb_frontend *fe, struct dvb_frontend_parameters *params){	struct saa7134_dev *dev = fe->dvb->priv;	u8 tuner_buf[4];	struct i2c_msg tuner_msg = {.addr = addr,.flags = 0,.buf = tuner_buf,.len =			sizeof(tuner_buf) };	int tuner_frequency = 0;	u8 band, cp, filter;	/* determine charge pump */	tuner_frequency = params->frequency + 36166000;	if (tuner_frequency < 87000000)		return -EINVAL;	else if (tuner_frequency < 130000000)		cp = 3;	else if (tuner_frequency < 160000000)		cp = 5;	else if (tuner_frequency < 200000000)		cp = 6;	else if (tuner_frequency < 290000000)		cp = 3;	else if (tuner_frequency < 420000000)		cp = 5;	else if (tuner_frequency < 480000000)		cp = 6;	else if (tuner_frequency < 620000000)		cp = 3;	else if (tuner_frequency < 830000000)		cp = 5;	else if (tuner_frequency < 895000000)		cp = 7;	else		return -EINVAL;	/* determine band */	if (params->frequency < 49000000)		return -EINVAL;	else if (params->frequency < 161000000)		band = 1;	else if (params->frequency < 444000000)		band = 2;	else if (params->frequency < 861000000)		band = 4;	else		return -EINVAL;	/* setup PLL filter */	switch (params->u.ofdm.bandwidth) {	case BANDWIDTH_6_MHZ:		filter = 0;		break;	case BANDWIDTH_7_MHZ:		filter = 0;		break;	case BANDWIDTH_8_MHZ:		filter = 1;		break;	default:		return -EINVAL;	}	/* calculate divisor	 * ((36166000+((1000000/6)/2)) + Finput)/(1000000/6)	 */	tuner_frequency = (((params->frequency / 1000) * 6) + 217496) / 1000;	/* setup tuner buffer */	tuner_buf[0] = (tuner_frequency >> 8) & 0x7f;	tuner_buf[1] = tuner_frequency & 0xff;	tuner_buf[2] = 0xca;	tuner_buf[3] = (cp << 5) | (filter << 3) | band;	if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1)		return -EIO;	msleep(1);	return 0;}static int philips_tda6651_pll_init(u8 addr, struct dvb_frontend *fe){	struct saa7134_dev *dev = fe->dvb->priv;	static u8 tu1216_init[] = { 0x0b, 0xf5, 0x85, 0xab };	struct i2c_msg tuner_msg = {.addr = addr,.flags = 0,.buf = tu1216_init,.len = sizeof(tu1216_init) };	/* setup PLL configuration */	if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1)		return -EIO;	msleep(1);	return 0;}/* ------------------------------------------------------------------ */static int philips_tu1216_pll_60_init(struct dvb_frontend *fe){	return philips_tda6651_pll_init(0x60, fe);}static int philips_tu1216_pll_60_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params){	return philips_tda6651_pll_set(0x60, fe, params);}static int philips_tu1216_request_firmware(struct dvb_frontend *fe,					   const struct firmware **fw, char *name){	struct saa7134_dev *dev = fe->dvb->priv;	return request_firmware(fw, name, &dev->pci->dev);}static struct tda1004x_config philips_tu1216_60_config = {	.demod_address = 0x8,	.invert        = 1,	.invert_oclk   = 0,	.xtal_freq     = TDA10046_XTAL_4M,	.agc_config    = TDA10046_AGC_DEFAULT,	.if_freq       = TDA10046_FREQ_3617,	.pll_init      = philips_tu1216_pll_60_init,	.pll_set       = philips_tu1216_pll_60_set,	.pll_sleep     = NULL,	.request_firmware = philips_tu1216_request_firmware,};/* ------------------------------------------------------------------ */static int philips_tu1216_pll_61_init(struct dvb_frontend *fe){	return philips_tda6651_pll_init(0x61, fe);}static int philips_tu1216_pll_61_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params){	return philips_tda6651_pll_set(0x61, fe, params);}static struct tda1004x_config philips_tu1216_61_config = {	.demod_address = 0x8,	.invert        = 1,	.invert_oclk   = 0,	.xtal_freq     = TDA10046_XTAL_4M,	.agc_config    = TDA10046_AGC_DEFAULT,	.if_freq       = TDA10046_FREQ_3617,	.pll_init      = philips_tu1216_pll_61_init,	.pll_set       = philips_tu1216_pll_61_set,	.pll_sleep     = NULL,	.request_firmware = philips_tu1216_request_firmware,};/* ------------------------------------------------------------------ */static int philips_europa_pll_init(struct dvb_frontend *fe){	struct saa7134_dev *dev = fe->dvb->priv;	static u8 msg[] = { 0x0b, 0xf5, 0x86, 0xab };	struct i2c_msg init_msg = {.addr = 0x61,.flags = 0,.buf = msg,.len = sizeof(msg) };	/* setup PLL configuration */	if (i2c_transfer(&dev->i2c_adap, &init_msg, 1) != 1)		return -EIO;	msleep(1);	/* switch the board to dvb mode */	init_msg.addr = 0x43;	init_msg.len  = 0x02;	msg[0] = 0x00;	msg[1] = 0x40;	if (i2c_transfer(&dev->i2c_adap, &init_msg, 1) != 1)		return -EIO;	return 0;}static int philips_td1316_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params){	return philips_tda6651_pll_set(0x61, fe, params);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费视频视频| 26uuu亚洲综合色| 久久色.com| 亚洲伊人伊色伊影伊综合网| 国产剧情一区在线| 91精品综合久久久久久| 成人免费小视频| 丁香天五香天堂综合| 日韩欧美在线影院| 亚洲成人午夜影院| 在线观看亚洲一区| 亚洲美女精品一区| 99久久久国产精品| 国产精品美女久久久久aⅴ| 激情欧美日韩一区二区| 777午夜精品免费视频| 亚洲精品v日韩精品| 99久久精品免费| 国产精品欧美一级免费| 国产精品一区免费在线观看| 日韩精品一区二区三区在线观看| 日韩高清电影一区| 欧美乱妇15p| 亚洲成人动漫精品| 欧美日韩精品电影| 日日夜夜精品视频天天综合网| 色婷婷精品大在线视频| 亚洲女同一区二区| 91成人网在线| 性欧美疯狂xxxxbbbb| 欧美性色黄大片| 婷婷开心久久网| 欧美人妇做爰xxxⅹ性高电影| 一区二区三区丝袜| 欧美日韩亚洲综合在线| 午夜国产不卡在线观看视频| 欧美日韩高清不卡| 久久国产精品99久久人人澡| 精品国产免费一区二区三区香蕉| 蜜桃久久久久久久| 国产视频一区在线播放| 成人一道本在线| 亚洲日本va午夜在线电影| 91麻豆精东视频| 性做久久久久久久免费看| 日韩欧美精品三级| 国产99精品国产| 一级精品视频在线观看宜春院 | 亚洲丝袜自拍清纯另类| 97久久精品人人澡人人爽| 一区二区三区中文字幕精品精品| 欧美日本一区二区在线观看| 免费在线观看日韩欧美| 国产喂奶挤奶一区二区三区| 色综合久久久久| 免费欧美在线视频| 国产精品嫩草影院com| 欧美性猛片xxxx免费看久爱| 美女高潮久久久| 中文字幕制服丝袜一区二区三区 | 欧美三级视频在线观看| 日本欧美在线观看| 国产精品丝袜久久久久久app| 91成人国产精品| 精品亚洲欧美一区| 亚洲精品乱码久久久久久 | 中文字幕av不卡| 欧美亚洲国产一区在线观看网站| 蜜臀av国产精品久久久久| 国产精品私人自拍| 日韩欧美国产综合一区| 91香蕉视频黄| 国产在线精品一区二区不卡了 | 奇米色一区二区| 国产精品网站在线观看| 在线成人免费视频| 成人av在线播放网址| 日本亚洲电影天堂| 人人狠狠综合久久亚洲| 国产精品久久一卡二卡| 欧美成人一区二区三区片免费 | 艳妇臀荡乳欲伦亚洲一区| 精品久久久久久久久久久久久久久 | 国产精品欧美综合在线| 日韩三级免费观看| 欧美亚洲国产一区在线观看网站| 国产一区二区视频在线| 日韩电影免费一区| 亚洲第一福利一区| 亚洲欧美乱综合| 国产精品天美传媒| 久久这里都是精品| 日韩精品一区二区三区在线播放| 欧美亚洲一区二区在线观看| 波多野结衣精品在线| 国产在线精品一区二区三区不卡| 日韩av中文在线观看| 亚洲无人区一区| 伊人夜夜躁av伊人久久| 亚洲免费在线观看| 中文字幕一区二区三区四区| 91精品1区2区| 色噜噜狠狠成人中文综合| 成人av影院在线| va亚洲va日韩不卡在线观看| 成人av在线电影| 成人免费观看男女羞羞视频| 国产成人欧美日韩在线电影| 国产在线精品一区二区不卡了| 久久99精品国产91久久来源| 日韩电影免费在线看| 日韩电影免费一区| 美女一区二区视频| 国内精品写真在线观看| 韩国毛片一区二区三区| 国产在线不卡一卡二卡三卡四卡| 狠狠色丁香婷婷综合久久片| 国产高清成人在线| 成人免费毛片高清视频| 91在线高清观看| 欧美日韩精品一区二区三区| 欧美日韩精品系列| 日韩欧美一区二区免费| 精品久久久久香蕉网| 久久人人爽人人爽| 国产精品另类一区| 亚洲色图制服诱惑| 亚洲成精国产精品女| 免费精品99久久国产综合精品| 久久99精品国产麻豆婷婷| 高清在线成人网| 在线日韩一区二区| 日韩视频一区二区三区在线播放| 日韩欧美亚洲国产另类| 中文字幕高清一区| 亚洲男人都懂的| 日韩精品一级二级| 国产传媒久久文化传媒| 色综合久久久久久久久久久| 欧美巨大另类极品videosbest| 久久综合色婷婷| 亚洲欧美日韩国产成人精品影院| 午夜精品久久久久久久久| 国产一二精品视频| 99视频一区二区三区| 日韩三级免费观看| 中文字幕一区二区三| 日本不卡视频在线| 97国产一区二区| 日韩精品影音先锋| 自拍偷拍欧美精品| 狠狠网亚洲精品| 欧美午夜精品电影| 亚洲国产成人在线| 丝袜美腿亚洲一区二区图片| 国产精品18久久久久久vr| 欧美午夜电影在线播放| 国产午夜精品一区二区三区嫩草 | 国产精品国产成人国产三级| 亚洲va欧美va天堂v国产综合| 国产成人精品aa毛片| 欧美久久久久中文字幕| 国产精品乱码人人做人人爱| 日本亚洲一区二区| 91久久免费观看| 久久精品一区二区三区av| 亚洲a一区二区| eeuss鲁一区二区三区| 欧美r级在线观看| 亚洲成a人v欧美综合天堂 | 欧美丰满一区二区免费视频| 亚洲国产成人一区二区三区| 美国欧美日韩国产在线播放| 色噜噜狠狠色综合中国| 久久综合九色综合97_久久久| 亚洲电影中文字幕在线观看| 制服丝袜在线91| 最新国产成人在线观看| 国产老肥熟一区二区三区| 日韩一区二区影院| 丝袜美腿亚洲综合| 欧美日韩精品一区二区在线播放| 亚洲免费观看高清完整版在线 | 蜜臀av一区二区在线观看 | 日韩在线卡一卡二| 欧美午夜不卡视频| 亚洲日本护士毛茸茸| 99国产精品久久久| 中文字幕av免费专区久久| 国产精品资源网站| 国产亚洲视频系列| 国产精品77777| 国产日韩v精品一区二区| 狠狠色丁香久久婷婷综合_中| 日韩一区二区三区观看| 天天综合天天综合色| 欧美久久久久久久久| 青青草国产精品97视觉盛宴| 日韩欧美国产一区二区在线播放| 玖玖九九国产精品|