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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? i2c-tomega8.c

?? linux下S3C2410的I2C總線的驅(qū)動(dòng)
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
	if(ps2_hdevent0)		ps2_hdevent0(0, data);}static int mega8_PS20_init (void){	unsigned char data[10];	unsigned char id;	init_waitqueue_head(&(ps2dev0.wq));	ps2dev0.waiting=0;	ps2dev0.ps2device=PS2_DEVICE_NULL;	ps2dev0.ndata=0;	DPRINTK("PS/2 0 initialization...\n");	mega8_device_request (DTYPE_PS2_0);	//reset ps2 device	PS20_SET_WAITING();	mega8_PS20_Send(KBD_RESET);	mega8_PS20_WaitData(&data[0], KBD_TIMEOUT);	mega8_PS20_WaitData(&data[1], KBD_TIMEOUT);	if(data[0]!=KBD_ACK){		printk("no PS/2 device found on PS/2 Port 0!\n");		mega8_device_release (DTYPE_PS2_0);		return -1;	}	if(data[1]!=KBD_BAT){		printk("PS/2 device respond error on PS/2 Port 0!\n");		mega8_device_release (DTYPE_PS2_0);		return -1;	}	DPRINTK("PS/2 device found on PS/2 Port 0!\n");	mdelay(10);	//wait data receive	mega8_PS20_FlushData();	//get ps2 device id	mega8_PS20_Send(KBD_READID);	mega8_PS20_WaitData(&data[0], KBD_TIMEOUT);	mega8_PS20_WaitData(&id, KBD_TIMEOUT);	// maybe keyboard can't respond.	if(id==0xAB){		mega8_PS20_WaitData(&id, KBD_TIMEOUT);		printk("PS/2 keyboard found on PS/2 Port 0.\n");		ps2dev0.ps2device=PS2_DEVICE_KBD;		PS20_CLR_WAITING();		ps2_hdevent0=Ps2_kbd_init_hw(0);	}	else if(id == 0x00){		printk("PS/2 standard mouse found on PS/2 Port 0.\n");		ps2dev0.ps2device=PS2_DEVICE_MOUSE;		PS20_CLR_WAITING();		ps2_hdevent0=Ps2_Mouse_init_hw(0);	}else{		printk("unknown PS/2 device id=0x%x on PS/2 Port 0.\n", id);		mega8_device_release (DTYPE_PS2_0);		return -1;	}	if(ps2_hdevent0==NULL){		printk("PS/2 device init failed on PS/2 Port 0.\n");		mega8_device_release (DTYPE_PS2_0);	}	return 0;}static void mega8_PS20_exit (void){	if(ps2dev0.ps2device==PS2_DEVICE_KBD)		Ps2_kbd_release();	mega8_device_release (DTYPE_PS2_0);}#endif	//#ifdef CONFIG_I2C_MEGA8_PS2_0#ifdef CONFIG_I2C_MEGA8_PS2_1static PS2_DEV ps2dev1;static ps2_handle_event ps2_hdevent1=NULL;#define PS21_SET_WAITING()		ps2dev1.waiting=1#define PS21_CLR_WAITING()		ps2dev1.waiting=0/*********************************************************\	send a data to ps2 device via i2c\*********************************************************/int mega8_PS21_Send(unsigned char data){	int ret;	I2C_control i2c_ctrl;	i2c_ctrl.cmd=CMD_PS2_1;	i2c_ctrl.ctrl=data;	ret=i2c_master_send(&mega8_client, (const char*)&i2c_ctrl, sizeof(i2c_ctrl));	if(ret<0){		DPRINTK("ps2 1 send  failed!.\n");		return -1;	}	return 0;}#define mega8_PS21_FlushData()		ps2dev1.ndata=0;/*********************************************************\	wait ps2 send back data via i2c\*********************************************************/int mega8_PS21_WaitData(unsigned char *data, long timeout){	if(ps2dev1.ndata==1){		*data=ps2dev1.data;		ps2dev1.ndata=0;		return 0;	}	if(timeout==0){		interruptible_sleep_on(&ps2dev1.wq);		*data=ps2dev1.data;		ps2dev1.ndata=0;		return 0;	}	if(interruptible_sleep_on_timeout(&ps2dev1.wq, timeout)==0){		*data=0;		ps2dev1.ndata=0;		return -1;	}	*data=ps2dev1.data;	ps2dev1.ndata=0;	return 0;}static void mega8_ps2_raw1(unsigned char data){	ps2dev1.ndata=1;	if(ps2dev1.waiting){		ps2dev1.data=data;		wake_up_interruptible(&(ps2dev1.wq));		return;	}#ifdef DEBUG	if(ps2dev1.ps2device==PS2_DEVICE_KBD){		//send data into keyboard		DPRINTK("keyboard receive data=0x%x\n", data);	}	else if(ps2dev1.ps2device==PS2_DEVICE_MOUSE){		DPRINTK("mouse receive data=0x%x\n", data);	}#endif	if(ps2_hdevent1)		ps2_hdevent1(1, data);}static int mega8_PS21_init (void){	unsigned char data[10];	unsigned char id;	init_waitqueue_head(&(ps2dev1.wq));	ps2dev1.waiting=0;	ps2dev1.ps2device=PS2_DEVICE_NULL;	ps2dev1.ndata=0;	DPRINTK("PS/2 1 initialization...\n");	mega8_device_request (DTYPE_PS2_1);	//reset ps2 device	PS21_SET_WAITING();	mega8_PS21_Send(KBD_RESET);	mega8_PS21_WaitData(&data[0], KBD_TIMEOUT);	mega8_PS21_WaitData(&data[1], KBD_TIMEOUT);	if(data[0]!=KBD_ACK){		printk("no PS/2 device found on PS/2 Port 1!\n");		mega8_device_release (DTYPE_PS2_1);		return -1;	}	if(data[1]!=KBD_BAT){		printk("PS/2 device respond error on PS/2 Port 1!\n");		mega8_device_release (DTYPE_PS2_1);		return -1;	}	DPRINTK("PS/2 device found on PS/2 Port 1!\n");	mdelay(10);	//wait data receive	mega8_PS21_FlushData();	//get ps2 device id	mega8_PS21_Send(KBD_READID);	mega8_PS21_WaitData(&data[0], KBD_TIMEOUT);	mega8_PS21_WaitData(&id, KBD_TIMEOUT);	// maybe keyboard can't respond.	if(id==0xAB){		mega8_PS21_WaitData(&id, KBD_TIMEOUT);		printk("PS/2 keyboard found on PS/2 Port 1.\n");		ps2dev1.ps2device=PS2_DEVICE_KBD;		PS21_CLR_WAITING();		ps2_hdevent1=Ps2_kbd_init_hw(1);	}	else if(id == 0x00){		printk("PS/2 standard mouse found on PS/2 Port 1.\n");		ps2dev1.ps2device=PS2_DEVICE_MOUSE;		PS21_CLR_WAITING();		ps2_hdevent1=Ps2_Mouse_init_hw(1);	}else{		printk("unknown PS/2 device id=0x%x on PS/2 Port 1.\n", id);		mega8_device_release (DTYPE_PS2_1);		return -1;	}	if(ps2_hdevent1==NULL){		printk("PS/2 device init failed on PS/2 Port 1.\n");		mega8_device_release (DTYPE_PS2_1);	}	return 0;}static void mega8_PS21_exit (void){	if(ps2dev0.ps2device==PS2_DEVICE_KBD)		Ps2_kbd_release();	mega8_device_release (DTYPE_PS2_1);}#endif	//#ifdef CONFIG_I2C_MEGA8_PS2_0#if defined( CONFIG_I2C_MEGA8_PS2_0) ||defined( CONFIG_I2C_MEGA8_PS2_1)#include "ps2_kbd_mouse.c"#endif/**************************//* Mega8 Keyboard Driver End *//**************************/static int RequestArray[6];static void mega8_device_request (int devtype){	if (devtype < 0 || devtype >= sizeof(RequestArray)/sizeof(int))		return ;	RequestArray[devtype]++;	DPRINTK("device %d request: %d\n", devtype, RequestArray[devtype]);}static void mega8_device_release (int devtype){	if (devtype < 0 || devtype > sizeof(RequestArray)/sizeof(int))		return ;	RequestArray[devtype]--;	if (RequestArray[devtype] < 0)		RequestArray[devtype] = 0;}static int i2c_mega8_initialized;static int i2c_mega8_slvRcv( char *buf, int len, int begin){	static int index = 0;	static I2C_MEGA8_BUFFER frame;	char *p = frame.m_buffer;	if(begin==1)	//the first byte of a i2c frame		index=0;	DPRINTK ("mega8 slv Rcv:%d\n",*buf);	memcpy(p + index, buf, len);	index += len;	DPRINTK ("index:%d\n",index);	if (index >= BUFFER_TYPE_LEN){		switch (GetI2C_Devtype(frame.m_cmd)){			case	DTYPE_SECURITY:				break;#ifdef CONFIG_I2C_MEGA8_MATRIX_KEYBOARD			case	DTYPE_MKEYB:				if (index >= sizeof (frame.m_kbd)){					DPRINTK ("Request kbd:%d\n", RequestArray[DTYPE_MKEYB]);					if (RequestArray[DTYPE_MKEYB]){						mega8_kbd_raw((I2C_kbd * )&frame);					}					index = 0;				}				break;#endif#ifdef CONFIG_I2C_MEGA8_IC_CARD			case	DTYPE_ICCARD:				if((frame.m_cmd==CMD_ICC_FAILED && index >= ICCARD_COUNT_FAILED_OFFSET) ||					(index>ICCARD_COUNT_OFFSET && index >= frame.m_iccard.iccard_cnt+ICCARD_COUNT_OFFSET && frame.m_cmd==CMD_ICC_READ)||					(index>=ICCARD_COUNT_OFFSET && frame.m_cmd==CMD_ICC_WRITE) ||					(index >= ICCARD_COUNT_PWD_OFFSET && frame.m_cmd == CMD_ICC_VERIFY) ||					(index >= ICCARD_COUNT_TYPESEL_OFFSET && frame.m_cmd == CMD_ICC_TYPESEL)){					DPRINTK ("Request ic-card:%d\n", RequestArray[DTYPE_ICCARD]);					if (RequestArray[DTYPE_ICCARD]){						mega8_iccard_raw((I2C_ICCard * )&frame);					}					index = 0;				}				break;#endif#ifdef CONFIG_I2C_MEGA8_PS2_0			case	DTYPE_PS2_0:				if(index >= sizeof(frame.m_ps2)){					DPRINTK ("Request ps2-0:%d\n", RequestArray[DTYPE_PS2_0]);					if (RequestArray[DTYPE_PS2_0]){						mega8_ps2_raw0(frame.m_ps2.ps2data);					}					index = 0;				}				break;#endif#ifdef CONFIG_I2C_MEGA8_PS2_1			case	DTYPE_PS2_1:				if(index >= sizeof(frame.m_ps2)){					DPRINTK ("Request ps2-1:%d\n", RequestArray[DTYPE_PS2_1]);					if (RequestArray[DTYPE_PS2_1]){						mega8_ps2_raw1(frame.m_ps2.ps2data);					}					index = 0;				}				break;#endif			case	DTYPE_ALL:				break;			}	}	return 0;}static int i2c_mega8_attach_adapter(struct i2c_adapter *adap){	int i;	char name[8];	if ((i = i2c_adapter_id(adap)) < 0) {		DPRINTK("Unknown adapter ?!?\n");		return -ENODEV;	}	if (i >= I2CDEV_ADAPS_MAX) {		DPRINTK("Adapter number too large?!? (%d)\n",i);		return -ENODEV;	}	sprintf (name, "%d", i);	if (! i2cdev_adaps[i]) {		i2cdev_adaps[i] = adap;		mega8_client.adapter = adap;		i2c_attach_client(&mega8_client);#ifdef CONFIG_I2C_MEGA8_MATRIX_KEYBOARD		/* init mega8 keyboard */#ifdef CONFIG_DEVFS_FS		mega8_kbd_init (devfs_handle);#else		mega8_kbd_init();#endif#endif //#ifdef CONFIG_I2C_MEGA8_MATRIX_KEYBOARD		/* init mega8 ic card controller */#ifdef CONFIG_I2C_MEGA8_IC_CARD#ifdef CONFIG_DEVFS_FS		mega8_iccard_init (devfs_handle);#else		mega8_iccard_init();#endif#endif //#ifdef CONFIG_I2C_MEGA8_IC_CARD	} else {#ifdef CONFIG_I2C_MEGA8_MATRIX_KEYBOARD		/* exit mega8 keyboard*/		mega8_kbd_exit();#endif#ifdef CONFIG_I2C_MEGA8_IC_CARD		/* exit mega8 ic card controller*/		/* ......*/		mega8_iccard_exit();#endif#ifdef CONFIG_I2C_MEGA8_PS2_0		mega8_PS20_exit();#endif	//#ifdef CONFIG_I2C_MEGA8_PS2_0#ifdef CONFIG_I2C_MEGA8_PS2_1		mega8_PS21_exit();#endif	//#ifdef CONFIG_I2C_MEGA8_PS2_1				i2cdev_adaps[i] = NULL;		DPRINTK ("detach_client\n");		i2c_detach_client (&mega8_client);#ifdef DEBUG		DPRINTK("Adapter unregistered: %s\n",adap->name);#endif	}	return 0;}static int i2c_mega8_detach_client(struct i2c_client *client){	return 0;}static int i2c_mega8_command(struct i2c_client *client, unsigned int cmd,                           void *arg){	return -1;}static int __init i2c_mega8_init(void){	int res;	I2C_control i2c_ctrl;	int mega8_ctrl=0;	DPRINTK(KERN_DEBUG "i2c /dev entries driver module\n");	memset(RequestArray, 0 , sizeof(RequestArray));	i2c_mega8_initialized = 0;#ifdef CONFIG_DEVFS_FS	devfs_handle = devfs_mk_dir(NULL, "mcu", NULL);#endif	i2c_mega8_initialized ++;	if ((res = i2c_add_driver(&i2c_mega8_driver))) {		DPRINTK("Driver registration failed, module not inserted.\n");		i2c_mega8_cleanup();		return res;	}	i2c_mega8_initialized ++;	//set owner i2c address to mega8	i2c_ctrl.cmd=CMD_MST_ADDR;	i2c_ctrl.ctrl=I2COWNER_ADDRESS;	res=i2c_master_send(&mega8_client, (const char*)&i2c_ctrl, sizeof(i2c_ctrl));	if(res<0){		DPRINTK("set ower address failed!.\n");	}	//set chip ctrl#ifdef CONFIG_I2C_MEGA8_MATRIX_KEYBOARD	mega8_ctrl |= CTRL_MKEn;#endif#ifdef CONFIG_I2C_MEGA8_IC_CARD	mega8_ctrl |= CTRL_ICEn;#endif#ifdef CONFIG_I2C_MEGA8_PS2_0	mega8_ctrl |= CTRL_PS0En;#endif#ifdef CONFIG_I2C_MEGA8_PS2_1	mega8_ctrl |= CTRL_PS1En;#endif	i2c_ctrl.cmd=CMD_CTRL;	i2c_ctrl.ctrl = mega8_ctrl;	res=i2c_master_send(&mega8_client, (const char*)&i2c_ctrl, sizeof(i2c_ctrl));	if(res<0){		DPRINTK("set chip controller failed!.\n");	}#ifdef CONFIG_I2C_MEGA8_PS2_0	mega8_PS20_init();#endif	//#ifdef CONFIG_I2C_MEGA8_PS2_0#ifdef CONFIG_I2C_MEGA8_PS2_1	mega8_PS21_init();#endif	//#ifdef CONFIG_I2C_MEGA8_PS2_1	return 0;}static void i2c_mega8_cleanup(void){	int res;#if 0	if (i2c_mega8_initialized >= 2) {		if ((res = i2c_del_driver(&i2c_mega8_driver))) {			DPRINTK("Driver deregistration failed, "			       "module not removed.\n");			return;		}		i2c_mega8_initialized --;	}	if (i2c_mega8_initialized >= 1) {		i2c_mega8_initialized --;	}#endif	if ((res = i2c_del_driver(&i2c_mega8_driver))) {		DPRINTK("Driver deregistration failed, "		       "module not removed.\n");		return;	}}EXPORT_NO_SYMBOLS;MODULE_AUTHOR("Richard R.Zhang");MODULE_DESCRIPTION("I2C Mega8 driver");MODULE_LICENSE("GPL");module_init(i2c_mega8_init);module_exit(i2c_mega8_cleanup);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区不卡在线观看 | 亚洲欧美国产毛片在线| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美群妇大交群中文字幕| 一本到高清视频免费精品| 91麻豆免费看| 日本韩国欧美三级| 欧美午夜电影在线播放| 欧亚洲嫩模精品一区三区| 国产乱子轮精品视频| 激情久久五月天| 国产一区二区不卡| 成人免费视频网站在线观看| 成人性色生活片| 93久久精品日日躁夜夜躁欧美| av在线播放一区二区三区| av电影天堂一区二区在线观看| 不卡欧美aaaaa| 日本久久一区二区三区| 欧美影院一区二区| 欧美肥妇bbw| 精品国产百合女同互慰| 国产人久久人人人人爽| 国产精品久久久久久久蜜臀| 亚洲欧美色图小说| 日韩二区在线观看| 国产在线视视频有精品| 不卡影院免费观看| 欧美又粗又大又爽| 欧美一区2区视频在线观看| 久久综合99re88久久爱| 中文子幕无线码一区tr| 一区二区免费在线| 蜜桃在线一区二区三区| 国产·精品毛片| 欧美日韩性生活| 久久综合久久综合亚洲| 综合网在线视频| 日韩国产在线一| 国产成人在线看| 欧美性感一区二区三区| 欧美成人精品福利| **网站欧美大片在线观看| 天天亚洲美女在线视频| 国产精品一色哟哟哟| 欧洲精品视频在线观看| 精品少妇一区二区| 亚洲欧美综合另类在线卡通| 婷婷夜色潮精品综合在线| 福利一区福利二区| 91精品啪在线观看国产60岁| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲国产日韩精品| 欧美高清性hdvideosex| 久久久三级国产网站| 亚洲国产一区二区在线播放| 国产高清成人在线| 欧美日韩在线播放一区| 久久九九久久九九| 日韩二区三区四区| 95精品视频在线| 久久久综合视频| 亚洲1区2区3区4区| av电影一区二区| 亚洲精品一区二区三区四区高清 | 国产精品夜夜嗨| 欧美色精品在线视频| 国产精品情趣视频| 久久99国内精品| 欧美日韩亚洲综合| 中文字幕一区二区三区不卡| 久草这里只有精品视频| 欧美在线你懂得| 亚洲色图.com| 国产suv精品一区二区883| 日韩午夜激情视频| 香蕉成人啪国产精品视频综合网 | 欧美一区二区三区白人| 亚洲色图20p| 成人动漫一区二区| 国产亚洲成aⅴ人片在线观看| 调教+趴+乳夹+国产+精品| 91丨九色丨国产丨porny| 国产色一区二区| 麻豆国产精品一区二区三区| 欧美日韩成人一区二区| 一区二区三区四区亚洲| 91蜜桃网址入口| 国产精品大尺度| 粉嫩嫩av羞羞动漫久久久| 久久看人人爽人人| 国产一区视频导航| 精品久久久久久久久久久久包黑料| 日韩影院在线观看| 欧美日韩成人综合| 日韩成人免费看| 91精品国产色综合久久ai换脸| 一区二区三区四区在线| 91久久国产最好的精华液| 亚洲免费在线观看视频| 97精品久久久午夜一区二区三区| 国产欧美日韩不卡| 国产 日韩 欧美大片| 久久精品一二三| 国产九九视频一区二区三区| 久久久精品黄色| 国产精品18久久久久久久网站| 26uuu国产电影一区二区| 久久成人综合网| 久久看人人爽人人| 国产福利一区在线| 国产精品麻豆网站| 色又黄又爽网站www久久| 亚洲色图欧美在线| 欧美色综合天天久久综合精品| 亚洲综合激情网| 欧美日韩亚洲不卡| 日本欧美久久久久免费播放网| 宅男在线国产精品| 精品一区二区在线观看| 国产亚洲成av人在线观看导航| 国产.欧美.日韩| 亚洲欧美偷拍三级| 欧美日韩精品一区二区三区四区| 日韩一区欧美二区| 久久影院午夜片一区| 国产成人综合亚洲91猫咪| 国产精品国产a级| 91精彩视频在线观看| 日韩电影一区二区三区| 久久网这里都是精品| 99r国产精品| 午夜精品国产更新| 久久先锋影音av鲁色资源网| www.日韩精品| 亚洲成人www| 久久在线免费观看| 91啪在线观看| 日韩激情视频网站| 国产人成一区二区三区影院| 色婷婷久久一区二区三区麻豆| 五月综合激情婷婷六月色窝| www久久久久| 欧美影院午夜播放| 国产自产高清不卡| 亚洲六月丁香色婷婷综合久久| 欧美精选一区二区| 国产91露脸合集magnet| 亚洲午夜精品在线| 国产亚洲福利社区一区| 欧美视频一区二区在线观看| 国产在线播放一区| 处破女av一区二区| 亚洲午夜影视影院在线观看| 精品成a人在线观看| 色综合色综合色综合| 激情综合网最新| 亚洲自拍偷拍图区| 国产日韩欧美精品一区| 欧美高清激情brazzers| 国产成人亚洲精品青草天美| 亚洲成人午夜影院| 欧美国产一区在线| 日韩丝袜美女视频| 欧洲精品一区二区三区在线观看| 国产精品资源站在线| 午夜不卡在线视频| 最新成人av在线| 久久精品一区四区| 91精品国产91热久久久做人人 | 欧美乱妇15p| 成人激情小说网站| 精品一区二区影视| 亚洲r级在线视频| 国产精品久久久久婷婷| 欧美精品一区二区三区蜜桃| 欧美一a一片一级一片| 不卡的av网站| 国产九九视频一区二区三区| 日韩成人一级大片| 亚洲午夜电影网| 亚洲天堂精品视频| 欧美极品aⅴ影院| 欧美一二区视频| 欧美日韩国产美女| 一本久久a久久免费精品不卡| 国产一区二区在线免费观看| 日韩电影一区二区三区四区| 夜夜嗨av一区二区三区四季av| 国产精品网站在线播放| 久久久久久麻豆| 精品国产乱码久久久久久影片| 欧美一区二区三区在线| 在线观看欧美日本| 色综合久久久久综合| 成人18精品视频| www.亚洲精品| 大陆成人av片| 成人手机在线视频| 亚洲国产成人在线|