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

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

?? i2c-algo-pxa.c

?? linux和2410結合開發 用他可以生成2410所需的zImage文件
?? C
字號:
/* *  i2c-algo-pxa.c * *  I2C algorithm for the PXA I2C bus access. *  Byte driven algorithm similar to pcf. * *  Copyright (C) 2002 Intrinsyc Software Inc. * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License version 2 as *  published by the Free Software Foundation. * *  History: *    Apr 2002: Initial version [CS] *    Jun 2002: Properly seperated algo/adap [FB] *  */#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/i2c.h>          /* struct i2c_msg and others */#include <linux/i2c-id.h>#include "i2c-pxa.h"/* * Set this to zero to remove all the debug statements via dead code elimination. *///#define DEBUG       1#if DEBUGstatic unsigned int i2c_debug = DEBUG;#else#define i2c_debug	0#endifstatic int pxa_scan = 1;static int i2c_pxa_valid_messages( struct i2c_msg msgs[], int num){	int i;	if (num < 1 || num > MAX_MESSAGES){		if( i2c_debug) 			printk(KERN_INFO "Invalid number of messages (max=%d, num=%d)\n", 				MAX_MESSAGES, num);		return -EINVAL;	}	/* check consistency of our messages */	for (i=0;i<num;i++){		if (&msgs[i]==NULL){			if( i2c_debug) printk(KERN_INFO "Msgs is NULL\n");			return -EINVAL;		} else {			if (msgs[i].len < 0 || msgs[i].buf == NULL){				if( i2c_debug)printk(KERN_INFO "Length is less than zero");				return -EINVAL;			}			if (msgs[0].len == 0){  /* this is SMBUS_QUICK */				if( i2c_debug)printk(KERN_INFO "Message length is zero\n");				return 0;			}		}	}	return 1;}static int i2c_pxa_readbytes(struct i2c_adapter *i2c_adap, char *buf, 			int count, int last){        int i, timeout=0;        struct i2c_algo_pxa_data *adap = i2c_adap->algo_data;        /* increment number of bytes to read by one -- read dummy byte */        for (i = 0; i <= count; i++) {                if (i!=0){                        /* set ACK to NAK for last received byte ICR[ACKNAK] = 1                                only if not a repeated start */                        if ((i == count) && last) {				adap->transfer( last, I2C_RECEIVE, 0);			}else{				adap->transfer( 0, I2C_RECEIVE, 1);                        }			timeout = adap->wait_for_interrupt(I2C_RECEIVE);#ifdef DEBUG                        if (timeout==BUS_ERROR){				printk(KERN_INFO "i2c_pxa_readbytes: bus error -> forcing reset\n");                                adap->reset();                                return I2C_RETRY;                        }#endif                        if (timeout){                                adap->reset();                                return I2C_RETRY;                        }                }                if (i) {                        buf[i - 1] = adap->read_byte();                } else {                        adap->read_byte(); /* dummy read */                }        }        return (i - 1);}static int i2c_pxa_sendbytes(struct i2c_adapter *i2c_adap, const char *buf,                         int count, int last){        struct i2c_algo_pxa_data *adap = i2c_adap->algo_data;        int wrcount, timeout;        for (wrcount=0; wrcount<count; ++wrcount) {                adap->write_byte(buf[wrcount]);                if ((wrcount==(count-1)) && last) {			adap->transfer( last, I2C_TRANSMIT, 0);		}else{			adap->transfer( 0, I2C_TRANSMIT, 1);                }		timeout = adap->wait_for_interrupt(I2C_TRANSMIT);#ifdef DEBUG                if (timeout==BUS_ERROR) {			printk(KERN_INFO "i2c_pxa_sendbytes: bus error -> forcing reset.\n");                        adap->reset();                        return I2C_RETRY;                }#endif                if (timeout) {                        adap->reset();                        return I2C_RETRY;                }        }        return (wrcount);}static inline int i2c_pxa_set_ctrl_byte(struct i2c_algo_pxa_data * adap, struct i2c_msg *msg){	u16 flags = msg->flags; 	u8 addr;                            	addr = (u8) ( (0x7f & msg->addr) << 1 );	if (flags & I2C_M_RD ) 		addr |= 1;      	if (flags & I2C_M_REV_DIR_ADDR )		addr ^= 1;	adap->write_byte(addr);	return 0;}       static int i2c_pxa_do_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[], int num){	struct i2c_algo_pxa_data * adap;	struct i2c_msg *pmsg=NULL;	int i;	int ret=0, timeout;	adap = i2c_adap->algo_data;	timeout = adap->wait_bus_not_busy();	if (timeout) {		return I2C_RETRY;	}	for (i = 0;ret >= 0 && i < num; i++) {		int last = i + 1 == num;		pmsg = &msgs[i];		ret = i2c_pxa_set_ctrl_byte(adap,pmsg);		/* Send START */		if (i == 0) {			adap->start();		}else{			adap->repeat_start();		}		adap->transfer(0, I2C_TRANSMIT, 0);		/* Wait for ITE (transmit empty) */		timeout = adap->wait_for_interrupt(I2C_TRANSMIT);#ifdef DEBUG		/* Check for ACK (bus error) */		if (timeout==BUS_ERROR){			printk(KERN_INFO "i2c_pxa_do_xfer: bus error -> forcing reset\n");			adap->reset();			return I2C_RETRY;		}#endif		if (timeout) {			adap->abort();			adap->reset();			return I2C_RETRY;		}/* FIXME: handle arbitration... */#if 0		/* Check for bus arbitration loss */		if (adap->arbitration_loss()){			printk("Arbitration loss detected \n");			adap->reset();			return I2C_RETRY;		}#endif		/* Read */		if (pmsg->flags & I2C_M_RD) {			/* read bytes into buffer*/			ret = i2c_pxa_readbytes(i2c_adap, pmsg->buf, pmsg->len, last);#if DEBUG > 2			if (ret != pmsg->len) {				printk(KERN_INFO"i2c_pxa_do_xfer: read %d/%d bytes.\n",					ret, pmsg->len);			} else {				printk(KERN_INFO"i2c_pxa_do_xfer: read %d bytes.\n",ret);			}#endif		} else { /* Write */			ret = i2c_pxa_sendbytes(i2c_adap, pmsg->buf, pmsg->len, last);#if DEBUG > 2			if (ret != pmsg->len) {				printk(KERN_INFO"i2c_pxa_do_xfer: wrote %d/%d bytes.\n",					ret, pmsg->len);			} else {				printk(KERN_INFO"i2c_pxa_do_xfer: wrote %d bytes.\n",ret);			}#endif		}	}	if (ret<0){		return ret;	}else{		return i;	}}static int i2c_pxa_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[], int num){	int retval = i2c_pxa_valid_messages( msgs, num);	if( retval > 0)	{		int i;		for (i=i2c_adap->retries; i>=0; i--){			int retval = i2c_pxa_do_xfer(i2c_adap,msgs,num);			if (retval!=I2C_RETRY){				return retval;			}			if( i2c_debug)printk(KERN_INFO"Retrying transmission \n");			udelay(100);		}   		if( i2c_debug)printk(KERN_INFO"Retried %i times\n",i2c_adap->retries);		return -EREMOTEIO;	}	return retval;}struct i2c_algorithm i2c_pxa_algorithm  = {        name:                   "PXA-I2C-Algorithm",        id:                     I2C_ALGO_PXA,        master_xfer:            i2c_pxa_xfer,        smbus_xfer:             NULL,        slave_send:             NULL,        slave_recv:             NULL,        algo_control:           NULL,};/*  * registering functions to load algorithms at runtime  */int i2c_pxa_add_bus(struct i2c_adapter *i2c_adap){        struct i2c_algo_pxa_data *adap = i2c_adap->algo_data;        printk(KERN_INFO"I2C: Adding %s.\n", i2c_adap->name);        i2c_adap->algo = &i2c_pxa_algorithm;        MOD_INC_USE_COUNT;        /* register new adapter to i2c module... */        i2c_add_adapter(i2c_adap);	adap->reset();	/* scan bus */	if (pxa_scan) {		int i;		printk(KERN_INFO "I2C: Scanning bus ");		for (i = 0x02; i < 0xff; i+=2) {			if( i==(I2C_PXA_SLAVE_ADDR<<1)) continue;			if (adap->wait_bus_not_busy()) {				printk(KERN_INFO "I2C: scanning bus %s - TIMEOUTed.\n",						i2c_adap->name);                                return -EIO;			}			adap->write_byte(i);			adap->start();			adap->transfer(0, I2C_TRANSMIT, 0);			if ((adap->wait_for_interrupt(I2C_TRANSMIT) != BUS_ERROR)) {				printk("(%02x)",i>>1);				adap->abort();			} else {//				printk(".");			}			adap->stop();			udelay(adap->udelay);		}		printk("\n");	}        return 0;}int i2c_pxa_del_bus(struct i2c_adapter *i2c_adap){        int res;        if ((res = i2c_del_adapter(i2c_adap)) < 0)                return res;        MOD_DEC_USE_COUNT;        printk(KERN_INFO "I2C: Removing %s.\n", i2c_adap->name);        return 0;}static int __init i2c_algo_pxa_init (void){        printk(KERN_INFO "I2C: PXA algorithm module loaded.\n");        return 0;}EXPORT_SYMBOL(i2c_pxa_add_bus);EXPORT_SYMBOL(i2c_pxa_del_bus);MODULE_PARM(pxa_scan, "i");MODULE_PARM_DESC(pxa_scan, "Scan for active chips on the bus");MODULE_AUTHOR("Intrinsyc Software Inc.");MODULE_LICENSE("GPL");module_init(i2c_algo_pxa_init);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
极品销魂美女一区二区三区| 99在线精品一区二区三区| 国产精品白丝av| 欧美日韩免费一区二区三区| 久久久www成人免费无遮挡大片| 综合亚洲深深色噜噜狠狠网站| 日本亚洲三级在线| 99re66热这里只有精品3直播| 日韩一级大片在线观看| 一区二区三区美女| 高清成人在线观看| 日韩精品资源二区在线| 一区二区三区在线高清| 粉嫩一区二区三区性色av| 91精品国产综合久久精品app| 亚洲欧洲av一区二区三区久久| 韩国一区二区视频| 欧美日本国产视频| 亚洲综合一二三区| 91丨porny丨首页| 国产欧美日韩视频一区二区| 久久精品国产澳门| 欧美肥妇毛茸茸| 亚洲一级电影视频| 色婷婷香蕉在线一区二区| 国产精品久久久久久久午夜片| 99久久99精品久久久久久| 26uuuu精品一区二区| 青青草国产精品97视觉盛宴| 欧美人与z0zoxxxx视频| 亚洲综合成人在线视频| 在线观看免费成人| 亚洲精品一二三| 91免费版在线| 亚洲乱码国产乱码精品精98午夜| 成人av片在线观看| 国产午夜三级一区二区三| 国产在线播放一区| 久久精品亚洲精品国产欧美| 精品午夜一区二区三区在线观看 | k8久久久一区二区三区 | 欧美亚洲丝袜传媒另类| 亚洲欧美一区二区三区孕妇| 99久久99久久精品免费观看| 亚洲久本草在线中文字幕| 99国产精品久久久久| 成人欧美一区二区三区1314 | 国产精品国产精品国产专区不蜜 | 1区2区3区欧美| 99视频精品免费视频| 亚洲理论在线观看| 欧美三级电影网站| 日本成人中文字幕| 精品国产一区二区国模嫣然| 国产露脸91国语对白| 中文字幕一区二| 欧美午夜电影网| 喷水一区二区三区| 国产欧美一区二区精品忘忧草 | 国产精品1024| 亚洲三级在线播放| 欧美精品久久一区二区三区| 精品一区二区三区日韩| 亚洲欧美另类图片小说| 欧美三级电影一区| 国产在线国偷精品免费看| 中文字幕一区二区三| 欧美日韩国产成人在线免费| 狠狠色狠狠色合久久伊人| 亚洲国产高清在线| 欧美日本韩国一区| 激情五月激情综合网| 国产精品一区在线| 精品日韩成人av| 亚洲激情五月婷婷| 99国产精品国产精品毛片| 久久久国产精华| 成人午夜视频免费看| 一二三区精品福利视频| 91精品国产综合久久精品麻豆| 国产毛片精品视频| 亚洲妇熟xx妇色黄| 国产精品久久久久一区| 91精品国产免费| 97国产精品videossex| 久草这里只有精品视频| 玉米视频成人免费看| 久久久精品天堂| 欧美妇女性影城| 91网址在线看| 国产美女娇喘av呻吟久久| 午夜精品123| 中文字幕亚洲综合久久菠萝蜜| 欧美成人激情免费网| 欧美自拍丝袜亚洲| 岛国精品在线播放| 国产精品一区二区男女羞羞无遮挡| 一区二区三区中文字幕| 中文字幕av一区二区三区高| 精品国产乱码久久| 欧美老女人在线| 欧美性猛交xxxx乱大交退制版| 成人深夜在线观看| 国产一区二区三区观看| 蜜臀久久99精品久久久久久9| 一区二区三区四区亚洲| 一区在线中文字幕| 亚洲国产精品精华液ab| 亚洲精品在线免费观看视频| 欧美精品久久天天躁| 欧美久久久久久久久久| 在线观看中文字幕不卡| 91福利在线导航| 色婷婷综合久久| 欧美亚洲国产一区在线观看网站 | 欧美日韩一级片网站| 国产传媒日韩欧美成人| 精品综合久久久久久8888| 亚洲成人av一区二区三区| 99re这里都是精品| 国产91对白在线观看九色| 激情欧美日韩一区二区| 麻豆国产精品777777在线| 男人操女人的视频在线观看欧美| 日本在线不卡视频| 国产精品 日产精品 欧美精品| 日韩av网站在线观看| 国内精品伊人久久久久影院对白| 图片区小说区区亚洲影院| 亚洲综合无码一区二区| 国产精品麻豆视频| 欧美成人猛片aaaaaaa| 欧美一级搡bbbb搡bbbb| 欧美日韩一级片在线观看| 色综合久久中文字幕综合网| 成人一区在线观看| 国产成人午夜精品5599| 日本不卡的三区四区五区| 日日嗨av一区二区三区四区| 91黄色小视频| 久久疯狂做爰流白浆xx| 欧美视频一区二区| 久久精品国产亚洲一区二区三区| 国内成+人亚洲+欧美+综合在线 | 成人av高清在线| 色八戒一区二区三区| 欧美丰满一区二区免费视频| 精品国产自在久精品国产| 久久久久一区二区三区四区| 中文字幕一区二区不卡| 同产精品九九九| 国产成人啪免费观看软件| 99re这里都是精品| 欧美一级日韩一级| 欧美国产日韩亚洲一区| 亚洲综合色区另类av| 久久国产精品免费| 91污片在线观看| 久久亚洲精精品中文字幕早川悠里| 中文字幕在线一区二区三区| 日韩电影免费在线看| 成人av在线影院| 欧美一级欧美三级在线观看| 中文字幕一区二区日韩精品绯色| 日本v片在线高清不卡在线观看| av综合在线播放| 精品国产人成亚洲区| 一区二区三区中文字幕电影| 国产精品一区专区| 宅男噜噜噜66一区二区66| 亚洲欧洲韩国日本视频| 麻豆精品国产91久久久久久| 欧美在线综合视频| 中文字幕欧美日本乱码一线二线| 亚洲第一电影网| www.欧美.com| 久久久国产一区二区三区四区小说 | 日韩美女视频在线| 亚洲人吸女人奶水| 国产盗摄一区二区三区| 欧美夫妻性生活| 亚洲第一成人在线| 色综合天天综合狠狠| 中文字幕av不卡| 久久不见久久见免费视频1| 欧美日韩激情在线| 尤物av一区二区| 99久久99久久综合| 日本一区二区高清| 国产伦精品一区二区三区视频青涩 | 国产日本亚洲高清| 国产美女娇喘av呻吟久久| 日韩一区和二区| 日韩精品一二三区| 欧美酷刑日本凌虐凌虐| 亚洲成人av在线电影| 欧美日韩一区二区三区高清| 亚洲午夜精品网| 欧美日韩亚洲综合在线 | 亚洲少妇30p|