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

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

?? cx24110.c

?? h內核
?? C
?? 第 1 頁 / 共 2 頁
字號:
int cx24110_pll_write (struct dvb_frontend* fe, u32 data){	struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv;/* tuner data is 21 bits long, must be left-aligned in data *//* tuner cx24108 is written through a dedicated 3wire interface on the demod chip *//* FIXME (low): add error handling, avoid infinite loops if HW fails... */	dprintk("cx24110 debug: cx24108_write(%8.8x)\n",data);        cx24110_writereg(state,0x6d,0x30); /* auto mode at 62kHz */        cx24110_writereg(state,0x70,0x15); /* auto mode 21 bits */        /* if the auto tuner writer is still busy, clear it out */        while (cx24110_readreg(state,0x6d)&0x80)		cx24110_writereg(state,0x72,0);        /* write the topmost 8 bits */        cx24110_writereg(state,0x72,(data>>24)&0xff);        /* wait for the send to be completed */        while ((cx24110_readreg(state,0x6d)&0xc0)==0x80)		;        /* send another 8 bytes */        cx24110_writereg(state,0x72,(data>>16)&0xff);        while ((cx24110_readreg(state,0x6d)&0xc0)==0x80)		;        /* and the topmost 5 bits of this byte */        cx24110_writereg(state,0x72,(data>>8)&0xff);        while ((cx24110_readreg(state,0x6d)&0xc0)==0x80)		;        /* now strobe the enable line once */        cx24110_writereg(state,0x6d,0x32);        cx24110_writereg(state,0x6d,0x30);        return 0;}static int cx24110_initfe(struct dvb_frontend* fe){	struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv;/* fixme (low): error handling */        int i;	dprintk("%s: init chip\n", __FUNCTION__);        for(i=0;i<sizeof(cx24110_regdata)/sizeof(cx24110_regdata[0]);i++) {		cx24110_writereg(state, cx24110_regdata[i].reg, cx24110_regdata[i].data);        };	if (state->config->pll_init) state->config->pll_init(fe);	return 0;}static int cx24110_set_voltage (struct dvb_frontend* fe, fe_sec_voltage_t voltage){	struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv;	switch (voltage) {	case SEC_VOLTAGE_13:		return cx24110_writereg(state,0x76,(cx24110_readreg(state,0x76)&0x3b)|0xc0);	case SEC_VOLTAGE_18:		return cx24110_writereg(state,0x76,(cx24110_readreg(state,0x76)&0x3b)|0x40);	default:		return -EINVAL;	};}static int cx24110_send_diseqc_msg(struct dvb_frontend* fe,				    struct dvb_diseqc_master_cmd *cmd){	int i, rv;	struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv;	for (i = 0; i < cmd->msg_len; i++)		cx24110_writereg(state, 0x79 + i, cmd->msg[i]);	rv = cx24110_readreg(state, 0x76);	cx24110_writereg(state, 0x76, ((rv & 0x90) | 0x40) | ((cmd->msg_len-3) & 3));	for (i=500; i-- > 0 && !(cx24110_readreg(state,0x76)&0x40);)		; /* wait for LNB ready */	return 0;}static int cx24110_read_status(struct dvb_frontend* fe, fe_status_t* status){	struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv;	int sync = cx24110_readreg (state, 0x55);		*status = 0;		if (sync & 0x10)			*status |= FE_HAS_SIGNAL;		if (sync & 0x08)			*status |= FE_HAS_CARRIER;	sync = cx24110_readreg (state, 0x08);		if (sync & 0x40)			*status |= FE_HAS_VITERBI;		if (sync & 0x20)			*status |= FE_HAS_SYNC;		if ((sync & 0x60) == 0x60)			*status |= FE_HAS_LOCK;	return 0;	}static int cx24110_read_ber(struct dvb_frontend* fe, u32* ber)	{	struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv;/* fixme (maybe): value range is 16 bit. Scale? */	if(cx24110_readreg(state,0x24)&0x10) {		/* the Viterbi error counter has finished one counting window */		cx24110_writereg(state,0x24,0x04); /* select the ber reg */		state->lastber=cx24110_readreg(state,0x25)|			(cx24110_readreg(state,0x26)<<8);		cx24110_writereg(state,0x24,0x04); /* start new count window */		cx24110_writereg(state,0x24,0x14);	}	*ber = state->lastber;	return 0;	}static int cx24110_read_signal_strength(struct dvb_frontend* fe, u16* signal_strength)	{	struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv;/* no provision in hardware. Read the frontend AGC accumulator. No idea how to scale this, but I know it is 2s complement */	u8 signal = cx24110_readreg (state, 0x27)+128;	*signal_strength = (signal << 8) | signal;	return 0;	}static int cx24110_read_snr(struct dvb_frontend* fe, u16* snr)	{	struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv;/* no provision in hardware. Can be computed from the Es/N0 estimator, but I don't know how. */	if(cx24110_readreg(state,0x6a)&0x80) {		/* the Es/N0 error counter has finished one counting window */		state->lastesn0=cx24110_readreg(state,0x69)|			(cx24110_readreg(state,0x68)<<8);		cx24110_writereg(state,0x6a,0x84); /* start new count window */	}	*snr = state->lastesn0;	return 0;	}static int cx24110_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)	{	struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv;	u32 lastbyer;	if(cx24110_readreg(state,0x10)&0x40) {		/* the RS error counter has finished one counting window */		cx24110_writereg(state,0x10,0x60); /* select the byer reg */		lastbyer=cx24110_readreg(state,0x12)|			(cx24110_readreg(state,0x13)<<8)|			(cx24110_readreg(state,0x14)<<16);		cx24110_writereg(state,0x10,0x70); /* select the bler reg */		state->lastbler=cx24110_readreg(state,0x12)|			(cx24110_readreg(state,0x13)<<8)|			(cx24110_readreg(state,0x14)<<16);		cx24110_writereg(state,0x10,0x20); /* start new count window */	}	*ucblocks = state->lastbler;	return 0;}static int cx24110_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p)        {	struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv;	state->config->pll_set(fe, p);	cx24110_set_inversion (state, p->inversion);	cx24110_set_fec (state, p->u.qpsk.fec_inner);	cx24110_set_symbolrate (state, p->u.qpsk.symbol_rate);	cx24110_writereg(state,0x04,0x05); /* start aquisition */	return 0;        }static int cx24110_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p)	{   	struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv;		s32 afc; unsigned sclk;/* cannot read back tuner settings (freq). Need to have some private storage */	sclk = cx24110_readreg (state, 0x07) & 0x03;/* ok, real AFC (FEDR) freq. is afc/2^24*fsamp, fsamp=45/60/80/90MHz. * Need 64 bit arithmetic. Is thiss possible in the kernel? */		if (sclk==0) sclk=90999000L/2L;		else if (sclk==1) sclk=60666000L;		else if (sclk==2) sclk=80888000L;		else sclk=90999000L;		sclk>>=8;	afc = sclk*(cx24110_readreg (state, 0x44)&0x1f)+	      ((sclk*cx24110_readreg (state, 0x45))>>8)+	      ((sclk*cx24110_readreg (state, 0x46))>>16);		p->frequency += afc;	p->inversion = (cx24110_readreg (state, 0x22) & 0x10) ?					INVERSION_ON : INVERSION_OFF;	p->u.qpsk.fec_inner = cx24110_get_fec (state);        return 0;}static int cx24110_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t tone){   	struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv;	return cx24110_writereg(state,0x76,(cx24110_readreg(state,0x76)&~0x10)|(((tone==SEC_TONE_ON))?0x10:0));}static void cx24110_release(struct dvb_frontend* fe){	struct cx24110_state* state = (struct cx24110_state*) fe->demodulator_priv;		kfree(state);}static struct dvb_frontend_ops cx24110_ops;struct dvb_frontend* cx24110_attach(const struct cx24110_config* config,				    struct i2c_adapter* i2c){	struct cx24110_state* state = NULL;	int ret;	/* allocate memory for the internal state */	state = (struct cx24110_state*) kmalloc(sizeof(struct cx24110_state), GFP_KERNEL);	if (state == NULL) goto error;	/* setup the state */	state->config = config;	state->i2c = i2c;	memcpy(&state->ops, &cx24110_ops, sizeof(struct dvb_frontend_ops));	state->lastber = 0;	state->lastbler = 0;   	state->lastesn0 = 0;	/* check if the demod is there */	ret = cx24110_readreg(state, 0x00);	if ((ret != 0x5a) && (ret != 0x69)) goto error;	/* create dvb_frontend */	state->frontend.ops = &state->ops;	state->frontend.demodulator_priv = state;	return &state->frontend;error:	if (state) kfree(state);	return NULL;}static struct dvb_frontend_ops cx24110_ops = {	.info = {		.name = "Conexant CX24110 DVB-S",		.type = FE_QPSK,		.frequency_min = 950000,		.frequency_max = 2150000,		.frequency_stepsize = 1011,  /* kHz for QPSK frontends */		.frequency_tolerance = 29500,		.symbol_rate_min = 1000000,		.symbol_rate_max = 45000000,		.caps = FE_CAN_INVERSION_AUTO |			FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |			FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |			FE_CAN_QPSK | FE_CAN_RECOVER	},	.release = cx24110_release,	.init = cx24110_initfe,	.set_frontend = cx24110_set_frontend,	.get_frontend = cx24110_get_frontend,	.read_status = cx24110_read_status,	.read_ber = cx24110_read_ber,	.read_signal_strength = cx24110_read_signal_strength,	.read_snr = cx24110_read_snr,	.read_ucblocks = cx24110_read_ucblocks,	.diseqc_send_master_cmd = cx24110_send_diseqc_msg,	.set_tone = cx24110_set_tone,	.set_voltage = cx24110_set_voltage,};module_param(debug, int, 0644);MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");MODULE_DESCRIPTION("Conexant CX24110 DVB-S Demodulator driver");MODULE_AUTHOR("Peter Hettkamp");MODULE_LICENSE("GPL");EXPORT_SYMBOL(cx24110_attach);EXPORT_SYMBOL(cx24110_pll_write);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国一区二区在线观看| 69堂成人精品免费视频| 在线观看一区日韩| 久久亚洲精精品中文字幕早川悠里 | 日韩一区二区中文字幕| 国产精品久久久久毛片软件| 欧美亚洲另类激情小说| 中文字幕第一页久久| 免费欧美在线视频| 欧美在线免费观看亚洲| 国产精品乱码人人做人人爱| 激情综合网av| 91麻豆精品国产自产在线观看一区 | 亚洲一区二区视频在线观看| 丁香亚洲综合激情啪啪综合| 日韩视频免费直播| 视频一区视频二区在线观看| 色噜噜偷拍精品综合在线| 中文字幕中文乱码欧美一区二区 | 免费成人av资源网| 欧美视频在线观看一区二区| 亚洲人成网站影音先锋播放| 丁香婷婷综合五月| 欧美激情在线看| 国产精品一二三在| 久久久另类综合| 国产99久久久国产精品潘金| 久久久91精品国产一区二区精品| 国产在线视视频有精品| 26uuuu精品一区二区| 欧美三级电影网站| 丝袜亚洲精品中文字幕一区| 在线播放91灌醉迷j高跟美女 | 91蝌蚪porny| 亚洲色图一区二区| 91精品1区2区| 五月综合激情日本mⅴ| 91精品国产综合久久国产大片| 日韩电影一二三区| 日韩亚洲欧美在线观看| 黄色小说综合网站| 中文字幕电影一区| 91官网在线免费观看| 亚洲一区二区三区四区五区中文| 欧日韩精品视频| 丝袜亚洲另类丝袜在线| 亚洲精品在线电影| 成人激情视频网站| 亚洲一区在线看| 精品人在线二区三区| 国产精品羞羞答答xxdd| 国产精品国产三级国产a | 91丝袜高跟美女视频| 一级中文字幕一区二区| 一区二区在线观看免费| 欧美另类videos死尸| 精品综合久久久久久8888| 国产精品久久久久影视| 精品视频一区二区三区免费| 欧美aa在线视频| 国产精品成人网| 69成人精品免费视频| 国产不卡在线播放| 亚洲国产一区二区在线播放| 日韩欧美中文字幕制服| 成人高清免费观看| 日本不卡免费在线视频| 国产精品女同一区二区三区| 欧美日韩国产一区二区三区地区| 精品无人区卡一卡二卡三乱码免费卡| 国产精品美女视频| 91精品国产品国语在线不卡| 丰满少妇在线播放bd日韩电影| 亚洲制服欧美中文字幕中文字幕| 日韩亚洲欧美成人一区| 91蜜桃传媒精品久久久一区二区| 美女视频免费一区| 亚洲一级电影视频| 欧美极品aⅴ影院| 91精品国产综合久久福利软件| 成人天堂资源www在线| 午夜电影一区二区| 亚洲欧美日韩一区| 亚洲国产高清不卡| 欧美不卡视频一区| 欧美高清一级片在线| 91原创在线视频| 国产成人超碰人人澡人人澡| 日本午夜精品一区二区三区电影| 中文字幕一区二区三区在线观看 | 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产精品剧情在线亚洲| 精品国产123| 欧美一区二区三区系列电影| 欧美亚洲愉拍一区二区| www.在线欧美| 91精品国产色综合久久ai换脸| 91丨porny丨户外露出| 国产一区二区三区美女| 久久99国产精品免费网站| 日韩激情一二三区| 日韩精品久久久久久| 一区二区三区四区亚洲| 亚洲欧洲综合另类| 1024成人网色www| 国产精品女主播在线观看| 国产欧美一区二区三区沐欲| 久久这里只有精品6| 2020国产精品久久精品美国| 日韩欧美一区二区视频| 日韩欧美123| 欧美xxxxxxxx| www亚洲一区| 国产日韩精品一区二区三区在线| 精品国内片67194| 久久蜜臀精品av| 国产视频一区在线播放| 久久久国产精华| 国产精品色哟哟| 亚洲色欲色欲www| 亚洲综合视频在线| 青青草97国产精品免费观看无弹窗版| 天堂资源在线中文精品| 青青草97国产精品免费观看无弹窗版| 蜜芽一区二区三区| 国产主播一区二区三区| 国产一二精品视频| 不卡影院免费观看| 欧美性大战久久| 日韩欧美电影一区| 久久久久久久久岛国免费| 中文字幕高清不卡| 夜夜嗨av一区二区三区四季av| 亚洲www啪成人一区二区麻豆| 日本成人在线不卡视频| 国产毛片精品国产一区二区三区| 成人一区二区在线观看| 欧美性极品少妇| 欧美成人精品3d动漫h| 国产精品私人自拍| 亚瑟在线精品视频| 国产精品1024久久| 欧美三级在线看| 国产日韩精品一区二区浪潮av| 18成人在线观看| 奇米综合一区二区三区精品视频| 韩国午夜理伦三级不卡影院| 91麻豆.com| 久久蜜臀精品av| 亚洲亚洲人成综合网络| 国内精品伊人久久久久av影院| 97精品久久久午夜一区二区三区 | 亚洲日本乱码在线观看| 日韩电影在线免费| 99久久婷婷国产综合精品| 日韩久久精品一区| 一个色在线综合| 国产黑丝在线一区二区三区| 欧美三级一区二区| 一区视频在线播放| 老鸭窝一区二区久久精品| 一本一本大道香蕉久在线精品| 日韩亚洲欧美综合| 亚洲高清免费在线| 99九九99九九九视频精品| 日韩小视频在线观看专区| 亚洲婷婷综合久久一本伊一区| 久久国产精品免费| 911精品国产一区二区在线| 亚洲丝袜制服诱惑| 国产精品一区二区三区网站| 欧美日韩不卡视频| 一区二区三区国产| 成人激情午夜影院| 日本一区二区三级电影在线观看 | 中文字幕欧美一| 国产一区高清在线| 日韩午夜小视频| 亚洲成人一区在线| av亚洲精华国产精华精| 精品国精品国产| 精品一区二区日韩| 91精品国产品国语在线不卡| 亚洲一级电影视频| 欧美亚洲动漫另类| 亚洲猫色日本管| 色综合久久88色综合天天| 国产精品日韩精品欧美在线| 国产一区亚洲一区| 精品日本一线二线三线不卡| 老司机一区二区| 精品理论电影在线观看 | 亚洲bt欧美bt精品777| 99久久99久久精品国产片果冻| 国产亚洲精品资源在线26u| 六月丁香婷婷色狠狠久久| 日韩欧美国产小视频| 久久国产福利国产秒拍| 精品久久人人做人人爱| 韩国av一区二区三区|