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

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

?? if101_io.c

?? cmmb if101 linux driver sample
?? C
字號:
#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/sched.h>#include <linux/mm.h>#include <asm/page.h>#include <linux/poll.h>#include <linux/kdev_t.h>#include <asm/semaphore.h>#include <asm/arch/pxa-regs.h>#include <linux/slab.h>#include <linux/delay.h>#include <asm/uaccess.h>#include <linux/i2c.h>#include <linux/miscdevice.h>#include <linux/devfs_fs_kernel.h>#include "IF101_Operation.h"#include "IF101_Communication.h"#include "IF101_IO.h"#include <linux/interrupt.h>static char INNODEV_NAME[] = "if101";struct class *dev_class;static unsigned char if101_major = 254;int wq_status;wait_queue_head_t wq;unsigned char *g_buffer;#define BUFFER_SIZE 100*1024static irqreturn_t inno_intr_handler(int irq, void *device, struct pt_regs *regs){	wq_status = 1;	wake_up_interruptible(&wq);	//	printk("TV interrupt occured!!!!!");        return IRQ_RETVAL(1);}static int inno_open(struct inode* inode, struct file* filp){	INNO_RETURN_CODE ret;	printk("inno open\n");	g_buffer = kmalloc(BUFFER_SIZE, GFP_KERNEL);	if(g_buffer == NULL){		printk("malloc memory fail\n");		return -1;	}	memset(g_buffer, 0xFF, BUFFER_SIZE);	init_waitqueue_head(&wq);	INNO_I2C_Init(1);		printk("after inno_i2c_innit(1)\n"); //zc	ret = INNO_I2C_Test();	if(ret != INNO_NO_ERROR){		printk("INNO_I2C_Test fail. ret = %d\n", ret);		INNO_I2C_Init(0);		return -1;	}	printk("after inno_i2c_test\n");//zc	ret = INNO_SPI_Init(1);	if(ret != INNO_NO_ERROR)		printk("INNO_SPI_Init fail\n");	ret = INNO_SPI_Test();	if(ret != INNO_NO_ERROR){		printk("INNO_SPI_Test fail\n");		INNO_SPI_Init(0);		return -1;	}	printk("after spi init");	INNO_GPIO_INT_Init(1, inno_intr_handler);		return 0;}static int inno_close(struct inode* inode, struct file* filp){	printk("inno close\n");	INNO_I2C_Init(0);	INNO_SPI_Init(0);	INNO_GPIO_INT_Init(0, NULL);	kfree(g_buffer);	return 0;}static unsigned int inno_poll(struct file* filp, poll_table *wait){	printk("inno poll\n");	return 0;}static ssize_t inno_read(struct file* filp, char* buf, size_t count, loff_t* offset){	unsigned int lg0_channel_len, lg1_channel_len;	int ret ;	wq_status = 0;	ret = wait_event_interruptible_timeout(wq,wq_status == 1 ,5 * HZ);	if(ret <= 0){		printk("read cmmb data timeout or interrupted\n");		return -1;		}	//printk("after wake up \n");	ret = INNO_GetChannelLength(&lg0_channel_len, &lg1_channel_len);	if(ret != INNO_NO_ERROR){		printk("get channel length fail\n");	}	printk("lg0 channel length = 0x%X\n", lg0_channel_len);	printk("lg1 channel length = 0x%X\n", lg1_channel_len);	if(lg0_channel_len > 0){		ret = INNO_GetChannelData(LG0_CHANNEL, g_buffer, lg0_channel_len);			if(ret != INNO_NO_ERROR){			printk("get channel data fail\n");		}		copy_to_user(buf, g_buffer, lg0_channel_len);		return lg0_channel_len;	}	else if(lg1_channel_len > 0){		ret = INNO_GetChannelData(LG1_CHANNEL, g_buffer, lg1_channel_len);			if(ret != INNO_NO_ERROR){			printk("get channel data fail\n");		}		copy_to_user(buf, g_buffer, lg1_channel_len);		return lg1_channel_len;	}		return 0;}static int inno_ioctl(struct inode* inode, struct file* filp, unsigned int cmd, unsigned long arg){	INNO_RETURN_CODE ret = INNO_NO_ERROR;	switch(cmd){		case IOCTL_GET_FW_VERSION:		{			unsigned char version[2];			ret = INNO_GetFirmwareVersion(&version[0], &version[1]);			if(ret != INNO_NO_ERROR)				return ret;			copy_to_user((void *)arg, version, sizeof(unsigned char) * 2);			break;		}		case IOCTL_SET_RECEIVE_TS0:		{			ret = INNO_SetReceiveTs0();			if(ret != INNO_NO_ERROR)				return ret;			break;		}		case IOCTL_SET_RECEIVE_PROGRAM:		{			int ts_info[4];			copy_from_user(ts_info,(void *)arg, sizeof(int) * 4);			ret = INNO_SetReceiveProgram(ts_info[0],ts_info[1],ts_info[2],ts_info[3]);			if(ret != INNO_NO_ERROR)				return ret;			break;		}		case IOCTL_SET_FREQUENCY:		{			unsigned char freq;			copy_from_user(&freq, (void *)arg, sizeof(unsigned char));			printk("freq  ===  %d \n", freq);			ret = INNO_SetTunerFrequency(freq, CP_40TS); 			if(ret != INNO_NO_ERROR)				return ret;			break;		}		case IOCTL_SCAN_FREQUENCY:		{			unsigned char freq[2];			copy_from_user(&freq, (void *)arg, sizeof(unsigned char) * 2);			ret = INNO_ScanFrequency(freq[0], freq[1]);			if(ret != INNO_NO_ERROR)				return ret;			break;		}		case IOCTL_SET_PM:		{			PM_MODE pm;				copy_from_user(&pm, (void *)arg, sizeof(PM_MODE));			ret = INNO_SetPowerManagement(PM_MODE_RESUME); 			if(ret != INNO_NO_ERROR)				return ret;			break;		}		case IOCTL_SET_DEMOD_CONFIG:		{			DEMOD_CONFIG setting[2];			copy_from_user(&setting, (void *)arg, sizeof(DEMOD_CONFIG) * 2);			ret = INNO_SetDemodConfig(setting);			if(ret != INNO_NO_ERROR)				return ret;			break;		}		case IOCTL_GET_DEMOD_CONFIG:		{			DEMOD_CONFIG checking[2];			ret = INNO_GetDemodConfig(checking);			if(ret != INNO_NO_ERROR)				return ret;			copy_to_user((void *)arg, checking, sizeof(checking));			break;		}		case IOCTL_GET_SYS_STATUS:		{			SYS_STATUS status;			ret = INNO_GetSystemStatus(&status);			if(ret != INNO_NO_ERROR)				return ret;			copy_to_user((void *)arg, &status, sizeof(SYS_STATUS));			break;		}	}	return ret;}static struct file_operations if101_fops = {	.owner		= THIS_MODULE,	.open		= inno_open,	.read		= inno_read,	.poll		= inno_poll,	.ioctl		= inno_ioctl,	.release	= inno_close,};static int __init init_if101_module(void){	int res;	res = register_chrdev(if101_major, INNODEV_NAME, &if101_fops);	if (res < 0){ 		printk("failed to register device.\n"); 			return res; 	}	printk("major = %d\n", if101_major);	return 0;}static void __exit cleanup_if101_module(void){	unregister_chrdev(if101_major, INNODEV_NAME);	printk("cleanup_if101_module\n");	return;}module_init(init_if101_module);module_exit(cleanup_if101_module);MODULE_LICENSE("GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区在线播放| 国产午夜精品久久| 精品午夜久久福利影院| 欧美一级二级在线观看| 毛片av一区二区三区| www国产成人免费观看视频 深夜成人网| 日本成人在线看| 久久综合久色欧美综合狠狠| 国产成人精品www牛牛影视| 国产精品二区一区二区aⅴ污介绍| 91网址在线看| 日韩主播视频在线| www国产成人| 色综合夜色一区| 蜜臂av日日欢夜夜爽一区| 国产色婷婷亚洲99精品小说| 色偷偷成人一区二区三区91| 婷婷综合在线观看| 国产日韩在线不卡| 欧美日韩中文国产| 国产一区二区三区在线观看精品| 中文字幕在线视频一区| 欧美另类高清zo欧美| 国产成人自拍网| 亚洲成人1区2区| 国产欧美综合在线观看第十页| 色一情一伦一子一伦一区| 久久精品72免费观看| 亚洲欧美乱综合| 精品91自产拍在线观看一区| 99久久国产综合精品女不卡| 蜜臂av日日欢夜夜爽一区| 亚洲欧洲精品天堂一级| 91麻豆精品国产91| 91麻豆国产香蕉久久精品| 久久精品国产**网站演员| 一区二区三区.www| 久久精品水蜜桃av综合天堂| 国产亚洲va综合人人澡精品| 欧美日韩在线精品一区二区三区激情| 国产一区二区精品久久| 午夜视频一区二区| 最新成人av在线| 精品电影一区二区| 欧美日韩在线播| 91小视频在线| 国产剧情av麻豆香蕉精品| 午夜精品久久久久久久久| 亚洲欧洲日韩女同| 亚洲精品一区二区三区精华液| 中文字幕一区免费在线观看| 久久嫩草精品久久久精品| 欧美精品乱码久久久久久| 91啦中文在线观看| 国产91精品精华液一区二区三区| 日韩中文字幕区一区有砖一区| 日韩理论片网站| 亚洲国产经典视频| 久久久久成人黄色影片| 精品久久久久久久久久久久包黑料| 欧美视频一区二区三区| 97久久精品人人爽人人爽蜜臀| 国产精品资源网站| 国产中文一区二区三区| 麻豆91精品视频| 日韩专区欧美专区| 日韩和欧美一区二区三区| 夜夜嗨av一区二区三区四季av| 国产精品国模大尺度视频| 国产精品网曝门| 国产精品久久久久婷婷二区次| 国产亚洲精品bt天堂精选| 久久伊人蜜桃av一区二区| 精品美女被调教视频大全网站| 日韩亚洲电影在线| 精品国精品自拍自在线| 精品对白一区国产伦| 久久夜色精品一区| 国产欧美一区二区三区在线老狼| 久久久亚洲精品石原莉奈| 日本一区二区三区高清不卡| 国产免费久久精品| 亚洲欧洲av在线| 一区二区三区四区视频精品免费| 亚洲乱码日产精品bd| 亚洲一区在线电影| 亚洲线精品一区二区三区| 亚洲成人激情社区| 蜜桃视频一区二区三区 | 色综合一区二区| 色噜噜狠狠成人网p站| 欧美影视一区二区三区| 56国语精品自产拍在线观看| 欧美一区二区三区视频免费| 日韩欧美综合在线| 国产农村妇女精品| 亚洲精品成人悠悠色影视| 亚洲v精品v日韩v欧美v专区| 老色鬼精品视频在线观看播放| 国产一区二区导航在线播放| 不卡电影一区二区三区| 欧美综合一区二区三区| 日韩免费看网站| 国产精品区一区二区三区| 亚洲综合色视频| 裸体一区二区三区| a美女胸又www黄视频久久| 欧美三级中文字幕| 久久久久久久久久久久久久久99 | 日韩欧美一区中文| 国产天堂亚洲国产碰碰| 一区二区三区四区在线免费观看| 日韩国产一二三区| 成人开心网精品视频| 欧美精品成人一区二区三区四区| 久久久久久电影| 亚洲综合小说图片| 国产精品一二三区在线| 欧美在线制服丝袜| 国产亚洲一本大道中文在线| 亚洲伊人色欲综合网| 国产成人无遮挡在线视频| 欧美系列一区二区| 国产亚洲精品中文字幕| 丝瓜av网站精品一区二区| 国产成人综合网站| 日韩一区二区三区免费观看 | 亚洲精品国产一区二区精华液 | 视频精品一区二区| 9l国产精品久久久久麻豆| 精品久久久久久无| 夜夜嗨av一区二区三区网页| 国产成人免费av在线| 欧美色偷偷大香| 国产精品久久久久久亚洲伦| 免费成人你懂的| 欧美午夜精品一区二区三区| 国产精品三级av在线播放| 久久99久久精品| 欧美放荡的少妇| 亚洲狼人国产精品| www.日韩在线| 国产日韩影视精品| 经典三级在线一区| 制服丝袜亚洲网站| 香蕉加勒比综合久久| 在线免费观看日本欧美| 中文字幕一区二区在线播放| 国产精品18久久久久久久久久久久 | 在线播放视频一区| 一级做a爱片久久| 99久久国产综合精品女不卡| 亚洲国产成人自拍| 国产高清不卡二三区| 亚洲精品在线观看视频| 美女脱光内衣内裤视频久久网站 | 亚洲精品免费在线| 91香蕉视频在线| 综合欧美一区二区三区| 成人av影院在线| 国产精品私房写真福利视频| 成人午夜av电影| 国产精品区一区二区三区| 成人av网站免费| 国产精品免费人成网站| 成人国产亚洲欧美成人综合网| 欧美激情在线看| 成人的网站免费观看| 亚洲特黄一级片| 99国产精品久久久久久久久久久 | 日韩国产欧美视频| 欧美一级免费观看| 久久 天天综合| 久久久99精品免费观看| 国产成人aaa| 亚洲特级片在线| 欧美亚日韩国产aⅴ精品中极品| 一区二区三区国产精华| 欧美日韩视频在线一区二区| 亚洲午夜电影在线观看| 7777精品久久久大香线蕉| 久久精品国产亚洲一区二区三区| 欧美一级高清大全免费观看| 韩国精品一区二区| 国产精品久久久久久久久免费相片 | 日本aⅴ精品一区二区三区| 国产精品成人一区二区艾草 | 中文字幕乱码日本亚洲一区二区 | 欧美三级一区二区| 日本不卡一二三| 欧美mv日韩mv| 成人av网址在线观看| 亚洲一区二区黄色| 日韩欧美的一区| 成人精品视频一区二区三区 | 国产精品色呦呦| 欧美性色黄大片| 激情文学综合插| 亚洲视频网在线直播| 欧美精品一二三区|