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

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

?? i2c-aa.c

?? Dragonball I2C驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
/******************************************************************************	Copyright (C) 2002 Motorola GSG-China	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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.*******************************************************************************//************************************************************************ *  File Name : i2c-aa.c *  Description : *	Implementation of i2c Adapter/Algorithm Driver *  Auther *  History: *  	2002/2/7 use msgs[] *  Data *  ID ************************************************************************/#include <linux/kernel.h>#include <linux/module.h>#include <linux/delay.h>#include <linux/slab.h>#include <linux/version.h>#include <linux/init.h>#include <asm/uaccess.h>#include <linux/ioport.h>#include <linux/errno.h>#include <linux/sched.h>#include <linux/hfs_sysdep.h>#include <linux/i2c.h>#include <linux/i2c-algo-bit.h>#include <linux/i2c-id.h>#include "i2c-aa.h"#include <asm/irq.h>#define POLLING_MODE/************************************************************************ * 	Globel Variable Define ************************************************************************/ 	static struct I2C_AA_REG *i2c_aa_reg = (struct I2C_AA_REG *)I2C_AA_REG_ADDR;#define i2c_aa_stop() i2c_aa_reg->i2cr &= ~(0x20)#define i2c_aa_repeat_start() i2c_aa_reg->i2cr |= 0x04void i2c_aa_bus_release(void);#if (LINUX_VERSION_CODE < 0x020301)static struct wait_queue *aa_wait = NULL;#elsestatic wait_queue_head_t aa_wait;#endifSINT16 __init i2c_aa_init(void);void __exit i2c_aa_cleanup(void);static void i2c_aa_inc(struct i2c_adapter *adap);static void i2c_aa_dec(struct i2c_adapter *adap);int i2c_aa_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[ ], int num);int i2c_smbus_aa_xfer(struct i2c_adapter * adapter, u16 addr, unsigned short flags, char read_write, u8 command, int size, union i2c_smbus_data * data);#ifndef POLLING_MODEstatic void i2c_aa_isr (SINT16 irq, void * dev_id, struct pt_regs * reg);#endifint i2c_aa_ioctl(struct i2c_adapter * adapter, unsigned int cmd, unsigned long arg);static struct i2c_algorithm i2c_aa_algorithm = {	/* name */		"DBMX1 I2C A/A",	/* id: */		I2C_ALGO_BIT,	/* master_xfer:*/	i2c_aa_xfer,	/* smbus_xfer: */	i2c_smbus_aa_xfer,	/* slave_send: */	NULL,	/* slave_recv: */	NULL,	/* algo_control: */	i2c_aa_ioctl,	/* functionality: */	NULL};	static struct i2c_adapter i2c_mx1_adapter = {	/* name: */				"DBMX1 I2C adapter",	/* id = algo->id | hwdep.struct->id */	I2C_ALGO_BIT | I2C_HW_B_SER,		/* i2c_algorithm: */			&i2c_aa_algorithm,	/* algo_data */				NULL,	/* inc_use */				i2c_aa_inc,	/* dec_use */				i2c_aa_dec,	/* client_regester */			NULL,	/* client_unregister */ 		NULL};/* return 1 : bus is idle/stop signal is detect , and Arbitration Lost * return 0 : bus is busy/start signal is detect */int i2c_aa_bus_grab(void){	unsigned int val;	while(!((val = i2c_aa_reg->i2sr) & (UINT32)0x20))	{		if ( val & 0x10)		{			return 1;		}	}	return 0;}int i2c_aa_start(){	/* Set Master Mode and signal a start bit */	//printk(" i2c_aa_start starts \n");	i2c_aa_reg->i2cr |= 0x20;	while(i2c_aa_bus_grab()){		//printk(" enter i2c_aa_bus_grab \n");		i2c_aa_stop();		i2c_aa_bus_release();		/*	check IBB[I2SR:5] (I2C bus busy bit) until it is not busy *******/ 		while((i2c_aa_reg->i2sr) & (UINT32)0x20);		/*	set IEN[I2CR:7] (I2C Enable)	*********************************/		i2c_aa_reg->i2cr |= (UINT32)0x80;		/* Set the TXAK[I2CR:6] to disable the I2C transmit ACK *****************/		i2c_aa_reg->i2cr |= (UINT32)0x08;		i2c_aa_reg->i2cr |= 0x20;	}	//printk(" i2c_aa_start ends \n");	return 0;}/* return when a stop signal is detect */void i2c_aa_bus_release(void){		short int i=0;	int dummy;	while((i2c_aa_reg->i2sr & (UINT32)0x20)&& i<1000){		i++;		if (i==999){			/*Reset the module process suggested in reference manual (tahiti)*/			i2c_aa_reg->i2cr = (UINT32)0x00;			i2c_aa_reg->i2cr |= (UINT32)0x0A;			dummy = (UINT8)i2c_aa_reg->i2dr;			i2c_aa_reg->i2sr = (UINT32)0x00;			i2c_aa_reg->i2cr = (UINT32)0x00;		}			//printk("wait for the bus release command\n");	}}/* wait until the interrupt pending then , clear IIF[I2SR:1] */void i2c_aa_transfer_complete(void){	while(!(i2c_aa_reg->i2sr & (UINT32)0x02));	i2c_aa_reg->i2sr &= ~(UINT32)0x02;}/* wait until MX1 received the acknowledge *///This Funtion will hand the MX1, dont know why//LEOvoid i2c_aa_received_acknowledge(void){	while(i2c_aa_reg->i2sr & (UINT32)0x01);}void test(void){	unsigned int value;		printk("<1>--------------------------------------\n");	value = READREG(IFDR);	printk("<1>IFDR: 0x%x\n", value);	value = READREG(I2CR);	printk("<1>I2CR: 0x%x\n", value);	value = READREG(I2SR);	printk("<1>I2SR: 0x%x\n", value);	printk("<1>--------------------------------------\n");}/************************************************************************ * 	I2C_AA Driver ************************************************************************/ 	void i2c_aa_inc(struct i2c_adapter *adap){	FUNC_START;	MOD_INC_USE_COUNT;	FUNC_END;}void i2c_aa_dec(struct i2c_adapter *adap){	FUNC_START;	MOD_DEC_USE_COUNT;	FUNC_END;}#ifndef POLLING_MODE#include "i2c_rw.h"#endif/*----------------------------------------------------------------------- * SINT16 __init i2c_aa_init(void) * initializes the I2C module in the DBMX1, and registers itself to the  * Linux I2C system * * Parameters: * 	None * Return: * 	0	indicates SUCCESS * 	-1	indicates FAILURE * --------------------------------------------------------------------*/SINT16 __init i2c_aa_init(void){	int tmp;	tmp = 0;	FUNC_START;	/* 	 * port enable for I2c signal 	 * PA15 : I2C_DATA	 * PA16 : I2C_CLK	 */#ifdef POLLING_MODE	MX1_REG_PTA_DDIR |=  0x00018000;	MX1_REG_PTA_GIUS &= ~0x00018000;#else	MX1_REG_PTA_DDIR |=  0x00018000;	MX1_REG_PTA_GIUS &= ~0x00018000;	//MX1_REG_PTA_GPR  &= ~0x00018000;	//MX1_REG_PTA_PUEN &= ~0x00018000;#endif		/* Init queue */#if (LINUX_VERSION_CODE >= 0x020301)	init_waitqueue_head(&aa_wait);#endif	/* add the I2C adapter/algorithm driver to the linux kernel */	if (i2c_add_adapter(&i2c_mx1_adapter))	{		CSI_LOC;		return -1;	}#ifndef POLLING_MODE	/* install the I2C_AA ISR to the Linux Kernel */	tmp = request_irq(I2C_AA_IRQ,		    (void *)i2c_aa_isr,//		    SA_SHIRQ | SA_INTERRUPT,			SA_INTERRUPT,		    "I2C_AA",		    "i2c_bus");	if (tmp < 0)		i2c_del_adapter(&i2c_mx1_adapter);	enable_irq(I2C_AA_IRQ);	IOW(0x223008, I2C_AA_IRQ); // enable #endif	/* Set clock Freq. */	i2c_aa_reg->ifdr = (UINT32)DEFAULT_FREQ;	FUNC_END;	return tmp;}/* SMbus Xfer Data */int i2c_smbus_aa_xfer(struct i2c_adapter * adapter, u16 addr,                                    unsigned short flags,                                   char read_write, u8 command, int size,                                    union i2c_smbus_data * data){	/* So we need to generate a series of msgs. In the case of writing, we	  need to use only one message; when reading, we need two. We initialize	  most things with sane defaults, to keep the code below somewhat	  simpler. */	  	struct i2c_msg msg[2];	  	char keybuf[2];		keybuf[0] = 0;		keybuf[1] = 0;		msg[0].addr = addr;		//msg[0].addr &= 0xFFFE;		msg[0].flags = 0x00;		msg[0].len = 1;		msg[0].buf = &command;				msg[1].addr = addr;		//msg[1].addr &= 0xFFFE;		msg[1].flags = I2C_M_RD;		msg[1].len = 2;		msg[1].buf = keybuf;		printk("good\n");		i2c_transfer(adapter, msg, 2 );		data->word = keybuf[0] | (keybuf[1] << 8);		return 0;#if 0	char msgbuf0[34];	char msgbuf1[34];	int num = read_write == I2C_SMBUS_READ?2:1;	struct i2c_msg msg[2] = { { addr, flags, 1, msgbuf0 }, 	                          { addr, flags | I2C_M_RD, 0, msgbuf1 }	                        };	int i;	printk("Enter i2c_smbus_aa_xfer\n");	msgbuf0[0] = command;	switch(size) {	case I2C_SMBUS_QUICK:		msg[0].len = 0;		/* Special case: The read/write field is used as data */		msg[0].flags = flags | (read_write==I2C_SMBUS_READ)?I2C_M_RD:0;		num = 1;		break;	case I2C_SMBUS_BYTE:		if (read_write == I2C_SMBUS_READ) {			/* Special case: only a read! */			msg[0].flags = I2C_M_RD | flags;			num = 1;		}		break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美一区二区精品久导航 | 日韩欧美激情四射| 亚洲大型综合色站| 欧美精选一区二区| 日韩国产欧美在线视频| 欧美一级专区免费大片| 青青草伊人久久| 日韩一区二区电影网| 精品一区免费av| 国产欧美日韩综合精品一区二区| av一区二区三区四区| 一区二区三区美女视频| 欧美日本在线看| 国内精品久久久久影院色| 中文字幕巨乱亚洲| 日本久久电影网| 日本怡春院一区二区| 2020国产成人综合网| bt欧美亚洲午夜电影天堂| 亚洲国产日韩综合久久精品| 欧美一级艳片视频免费观看| 国产精品77777| 亚洲伦理在线精品| 欧美一级黄色录像| 春色校园综合激情亚洲| 午夜精品久久久久久久久久| 久久网这里都是精品| 91免费版在线看| 麻豆91在线播放免费| 国产精品电影一区二区| 欧美卡1卡2卡| 成人av电影在线网| 男男成人高潮片免费网站| 国产精品国产精品国产专区不蜜| 欧美日韩一级片网站| 九一九一国产精品| 亚洲自拍与偷拍| 精品国产凹凸成av人网站| 色婷婷综合久久久中文字幕| 久久精品免费观看| 一区二区在线观看免费视频播放| 日韩女优视频免费观看| 91蜜桃网址入口| 国产精品综合二区| 视频一区中文字幕| 亚洲精品免费在线播放| 久久久久久久综合狠狠综合| 欧美理论片在线| 91一区二区在线观看| 国产精品影视在线| 日韩精品欧美成人高清一区二区| 中文字幕在线免费不卡| 精品国产乱码久久久久久浪潮| 在线免费不卡视频| 国产精品一区二区久久不卡| 奇米影视在线99精品| 亚洲综合成人网| 亚洲色图都市小说| 中文一区一区三区高中清不卡| 日韩欧美视频在线| 欧美三级电影在线观看| 91免费观看视频| www..com久久爱| 国产电影精品久久禁18| 久久99久久99| 欧美aa在线视频| 天天色天天操综合| 亚洲在线中文字幕| 一区二区三区中文在线观看| 亚洲欧洲日韩综合一区二区| 国产蜜臀97一区二区三区| 久久综合色婷婷| 欧美成人性战久久| 日韩欧美国产麻豆| 日韩欧美国产系列| 日韩欧美国产精品| 精品久久免费看| 精品久久久久久久久久久久久久久 | 午夜国产不卡在线观看视频| 亚洲精品免费电影| 亚洲精品国久久99热| 亚洲乱码国产乱码精品精的特点 | 色噜噜狠狠成人中文综合| 大陆成人av片| 成人sese在线| 色一情一乱一乱一91av| 91丝袜呻吟高潮美腿白嫩在线观看| 99r国产精品| 久久精品一区二区三区av| 亚洲精品一区二区三区影院 | 久久精子c满五个校花| 久久久久久9999| 国产精品乱人伦一区二区| 国产精品久久久久aaaa樱花| 中文字幕一区av| 一区二区三区在线观看视频| 亚洲国产欧美日韩另类综合| 五月婷婷久久丁香| 捆绑变态av一区二区三区| 国产大片一区二区| 91影院在线观看| 欧美精品在线观看一区二区| 精品日韩在线观看| 国产精品女主播在线观看| 综合久久给合久久狠狠狠97色| 亚洲一区二区三区四区五区黄| 日本免费新一区视频| 国产盗摄女厕一区二区三区 | 欧美三级日本三级少妇99| 在线成人小视频| 国产日韩v精品一区二区| 亚洲视频免费看| 日本aⅴ亚洲精品中文乱码| 国产一区二区在线视频| 91美女片黄在线观看91美女| 日韩无一区二区| 国产精品另类一区| 婷婷久久综合九色国产成人 | 成人自拍视频在线观看| www.欧美.com| 91精品国产乱码| 国产精品美女久久福利网站| 天天做天天摸天天爽国产一区| 国产激情偷乱视频一区二区三区| 91精彩视频在线| 久久久亚洲综合| 亚洲国产精品一区二区www| 国内精品久久久久影院一蜜桃| 一本到高清视频免费精品| 精品电影一区二区三区| 一区二区三区四区中文字幕| 久久精品99久久久| 欧美性猛交xxxxxx富婆| 亚洲国产成人在线| 日本麻豆一区二区三区视频| 久久蜜桃一区二区| 五月婷婷久久综合| 一本一道久久a久久精品 | 国产日产亚洲精品系列| 婷婷一区二区三区| www.日韩av| 久久久国际精品| 奇米色777欧美一区二区| 日本久久精品电影| 国产精品国产馆在线真实露脸 | 欧美在线视频日韩| 国产精品丝袜在线| 久久国产精品99久久久久久老狼 | 欧美大片在线观看| 一区二区不卡在线视频 午夜欧美不卡在| 经典三级在线一区| 91麻豆精品国产91久久久久久久久 | 91精品91久久久中77777| 国产精品少妇自拍| 国产精品自在欧美一区| 欧美大白屁股肥臀xxxxxx| 天堂资源在线中文精品| 色狠狠综合天天综合综合| 国产精品乱人伦| 成人动漫一区二区| 中文字幕av一区二区三区| 国产高清不卡一区| 久久你懂得1024| 国产精品1区二区.| 久久女同精品一区二区| 国产一区在线视频| 2017欧美狠狠色| 国产呦精品一区二区三区网站| 精品福利二区三区| 韩国精品主播一区二区在线观看| 日韩精品一区国产麻豆| 麻豆精品视频在线观看视频| 日韩欧美你懂的| 精品亚洲porn| 久久免费视频色| 成人av在线资源网站| 国产精品乱码妇女bbbb| 91老司机福利 在线| 亚洲免费大片在线观看| 91麻豆国产精品久久| 亚洲一区二区免费视频| 欧美一区二区成人6969| 麻豆精品一区二区av白丝在线| 精品国产乱码久久久久久老虎| 国产精品小仙女| 亚洲欧美在线另类| 色一区在线观看| 三级欧美韩日大片在线看| 精品国产乱码91久久久久久网站| 国产美女精品人人做人人爽| 国产精品区一区二区三区| 色天天综合色天天久久| 三级一区在线视频先锋| 欧美精品一区二区精品网| 懂色av噜噜一区二区三区av| 亚洲欧美日韩中文字幕一区二区三区| 91久久精品国产91性色tv| 人妖欧美一区二区| 国产视频一区二区在线| 欧洲在线/亚洲|