亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
91精品免费在线| 欧美一区二区播放| av中文一区二区三区| 国产成人免费视频| 国产精品77777竹菊影视小说| 日韩高清一区二区| 国产成人精品在线看| 成人免费的视频| 欧美在线免费视屏| 日韩精品专区在线影院重磅| 欧美变态凌虐bdsm| 中文字幕av不卡| 偷拍一区二区三区四区| 日本网站在线观看一区二区三区| 久久超碰97人人做人人爱| 丁香一区二区三区| 欧美日韩在线播放一区| 久久久久国产精品人| 樱花草国产18久久久久| 青青青伊人色综合久久| 99久久久国产精品| 日韩一区二区免费电影| 亚洲嫩草精品久久| 精品午夜一区二区三区在线观看| 91色porny| 国产精品嫩草99a| 久久精品av麻豆的观看方式| 91网上在线视频| 国产精品免费av| 国产乱色国产精品免费视频| 欧美色综合久久| 1000部国产精品成人观看| 国产一区在线观看视频| 欧美成人r级一区二区三区| 亚洲国产精品影院| 欧美日韩中文精品| 亚洲尤物视频在线| 欧亚一区二区三区| 亚洲婷婷综合久久一本伊一区| 国产精品资源站在线| 久久综合国产精品| 国产mv日韩mv欧美| 国产农村妇女毛片精品久久麻豆 | 捆绑紧缚一区二区三区视频| 一本色道久久综合狠狠躁的推荐 | 国产成人免费视频网站高清观看视频| 欧美一区二区三区在线观看 | 国产欧美精品在线观看| 国产成人精品免费网站| 国产精品国产馆在线真实露脸| 岛国av在线一区| 一区二区欧美在线观看| 欧美亚洲图片小说| 看电视剧不卡顿的网站| 久久精品欧美一区二区三区不卡 | 美国欧美日韩国产在线播放| 欧美tk丨vk视频| 99久久精品国产麻豆演员表| 亚洲一区二区三区激情| 欧美一区在线视频| 成人福利视频网站| 亚洲成人动漫一区| 中文字幕不卡的av| 欧美日韩国产综合一区二区三区| 经典一区二区三区| 亚洲在线视频免费观看| 精品理论电影在线| 91成人免费网站| 国产在线精品一区二区三区不卡| 中文字幕一区二区不卡| 日韩欧美一卡二卡| 在线一区二区三区四区五区| 国产a精品视频| 免费欧美在线视频| 亚洲第一主播视频| 一区二区三区精品久久久| 国产婷婷一区二区| 欧美成人精品福利| 日韩午夜三级在线| 欧美顶级少妇做爰| 精品视频全国免费看| 欧美在线|欧美| 91一区二区三区在线播放| 国产精品一二三在| 久久国产精品99久久久久久老狼| 亚洲精品五月天| 一区二区三区在线免费播放| 中文字幕一区二区三区在线不卡| 欧美韩国日本不卡| 中文字幕欧美日本乱码一线二线| 欧美r级电影在线观看| 精品久久久久久最新网址| 久久众筹精品私拍模特| 欧美激情综合在线| 综合色中文字幕| 一区二区三区高清| 人人超碰91尤物精品国产| 久久精品国产网站| 高清shemale亚洲人妖| 一本到不卡免费一区二区| 欧美日韩另类一区| 久久久www成人免费毛片麻豆 | 波多野结衣一区二区三区 | 国产精品美女一区二区三区| 国产精品女主播av| 丝袜国产日韩另类美女| 国产精品主播直播| 欧美日韩精品免费| 欧美激情一区二区在线| 亚洲福利一区二区三区| 国产毛片精品一区| 欧美午夜精品久久久久久孕妇| 日韩欧美黄色影院| 亚洲另类中文字| 国产精品主播直播| 欧美日韩国产精选| 亚洲乱码国产乱码精品精可以看| 麻豆91精品视频| 欧美色中文字幕| 又紧又大又爽精品一区二区| 国产综合久久久久久久久久久久| 91一区二区在线观看| 国产精品污www在线观看| 欧美bbbbb| 日韩久久免费av| 日本系列欧美系列| 91精品欧美福利在线观看| 亚洲综合图片区| 日本高清不卡在线观看| 日韩理论电影院| 91久久精品一区二区三| 中文字幕一区在线观看| 99精品在线观看视频| 亚洲精品国产精品乱码不99| 色综合久久六月婷婷中文字幕| 国产精品国产三级国产aⅴ无密码| 国产激情一区二区三区四区| 欧美激情一区二区三区四区| 成人午夜视频网站| 一区二区欧美国产| 欧美一区二区三区视频免费播放 | 26uuu精品一区二区三区四区在线| 日韩av网站免费在线| 精品国产一区久久| 成人国产精品免费观看动漫| 亚洲欧美激情一区二区| 欧美日韩高清影院| 国产乱码精品1区2区3区| 亚洲视频一区二区免费在线观看| 欧美三级日韩三级国产三级| 日韩精品成人一区二区三区| 久久这里只有精品6| 91福利视频在线| 国产一区二区在线观看免费| 亚洲婷婷在线视频| 2020国产精品| 在线不卡免费欧美| 成人国产视频在线观看| 蜜桃免费网站一区二区三区| 国产精品视频在线看| 日韩一区二区三区电影| 欧美日韩国产乱码电影| 九九视频精品免费| 亚洲午夜精品网| 亚洲三级免费观看| 国产婷婷色一区二区三区四区| 欧美挠脚心视频网站| www.性欧美| www.99精品| 成人在线一区二区三区| 国产精品亚洲午夜一区二区三区| 亚洲国产精品天堂| 亚洲欧美日韩国产一区二区三区| 国产欧美一区二区三区在线看蜜臀| 91精品国产品国语在线不卡| 欧美亚洲一区二区在线观看| 在线亚洲+欧美+日本专区| 色综合激情五月| 色一情一伦一子一伦一区| 成人av免费观看| 欧美曰成人黄网| 欧美精品三级日韩久久| 欧美一区二区视频在线观看2020 | 国产成人在线影院 | 国产无人区一区二区三区| 欧美激情在线一区二区| 亚洲男同1069视频| 天堂久久一区二区三区| 国产尤物一区二区| 不卡的av在线播放| 欧美久久婷婷综合色| 精品国产一区久久| 亚洲精品亚洲人成人网| 亚洲一区二区三区小说| 久久精品国产一区二区三| av亚洲精华国产精华| 欧美日韩国产精品成人| 国产精品国产三级国产三级人妇| 亚洲影院免费观看| 国产福利精品一区|