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

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

?? i2c-old.c

?? linux和2410結(jié)合開(kāi)發(fā) 用他可以生成2410所需的zImage文件
?? C
字號(hào):
/* *	Generic i2c interface for linux * *	(c) 1998 Gerd Knorr <kraxel@cs.tu-berlin.de> * */#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/errno.h>#include <linux/types.h>#include <linux/string.h>#include <linux/delay.h>#include <linux/locks.h>#include <linux/sched.h>#include <linux/slab.h>#include <linux/i2c-old.h>#define REGPRINT(x)   if (verbose)   (x)#define I2C_DEBUG(x)  if (i2c_debug) (x)static int scan      = 0;static int verbose   = 0;static int i2c_debug = 0;#if LINUX_VERSION_CODE >= 0x020117MODULE_PARM(scan,"i");MODULE_PARM(verbose,"i");MODULE_PARM(i2c_debug,"i");#endif/* ----------------------------------------------------------------------- */static struct i2c_bus    *busses[I2C_BUS_MAX];static struct i2c_driver *drivers[I2C_DRIVER_MAX];static int bus_count = 0, driver_count = 0;extern int saa7111_init(void);extern int saa7185_init(void);extern int bt819_init(void);extern int bt856_init(void);int i2c_init(void){	printk(KERN_INFO "i2c: initialized%s\n",		scan ? " (i2c bus scan enabled)" : "");	/* anything to do here ? */#if defined(CONFIG_VIDEO_BUZ) || defined(CONFIG_VIDEO_CYBERPRO)	saa7111_init();#endif#ifdef CONFIG_VIDEO_BUZ	saa7185_init();#endif#ifdef CONFIG_VIDEO_LML33	bt819_init();	bt856_init();#endif	return 0;}/* ----------------------------------------------------------------------- */static void i2c_attach_device(struct i2c_bus *bus, struct i2c_driver *driver){	struct i2c_device *device;	int i,j,ack=1;	unsigned char addr;	LOCK_FLAGS;    	/* probe for device */	LOCK_I2C_BUS(bus);	for (addr = driver->addr_l; addr <= driver->addr_h; addr += 2) 	{		i2c_start(bus);		ack = i2c_sendbyte(bus,addr,0);		i2c_stop(bus);		if (!ack)			break;	}	UNLOCK_I2C_BUS(bus);	if (ack)		return;	/* got answer */	for (i = 0; i < I2C_DEVICE_MAX; i++)		if (NULL == driver->devices[i])			break;	if (I2C_DEVICE_MAX == i)		return;	for (j = 0; j < I2C_DEVICE_MAX; j++)		if (NULL == bus->devices[j])			break;	if (I2C_DEVICE_MAX == j)		return;	if (NULL == (device = kmalloc(sizeof(struct i2c_device),GFP_KERNEL)))		return;	device->bus = bus;	device->driver = driver;	device->addr = addr;	/* Attach */		if (driver->attach(device)!=0) 	{		kfree(device);		return;	}	driver->devices[i] = device;	driver->devcount++;	bus->devices[j] = device;	bus->devcount++;	if (bus->attach_inform)		bus->attach_inform(bus,driver->id);	REGPRINT(printk("i2c: device attached: %s (addr=0x%02x, bus=%s, driver=%s)\n",device->name,addr,bus->name,driver->name));}static void i2c_detach_device(struct i2c_device *device){	int i;	if (device->bus->detach_inform)		device->bus->detach_inform(device->bus,device->driver->id);	device->driver->detach(device);	for (i = 0; i < I2C_DEVICE_MAX; i++)		if (device == device->driver->devices[i])			break;	if (I2C_DEVICE_MAX == i) 	{		printk(KERN_WARNING "i2c: detach_device #1: device not found: %s\n",			device->name);		return;	}	device->driver->devices[i] = NULL;	device->driver->devcount--;	for (i = 0; i < I2C_DEVICE_MAX; i++)		if (device == device->bus->devices[i])			break;	if (I2C_DEVICE_MAX == i) 	{		printk(KERN_WARNING "i2c: detach_device #2: device not found: %s\n",		       device->name);		return;	}	device->bus->devices[i] = NULL;	device->bus->devcount--;	REGPRINT(printk("i2c: device detached: %s (addr=0x%02x, bus=%s, driver=%s)\n",device->name,device->addr,device->bus->name,device->driver->name));	kfree(device);}/* ----------------------------------------------------------------------- */int i2c_register_bus(struct i2c_bus *bus){	int i,ack;	LOCK_FLAGS;	memset(bus->devices,0,sizeof(bus->devices));	bus->devcount = 0;	for (i = 0; i < I2C_BUS_MAX; i++)		if (NULL == busses[i])			break;	if (I2C_BUS_MAX == i)		return -ENOMEM;	busses[i] = bus;	bus_count++;	REGPRINT(printk("i2c: bus registered: %s\n",bus->name));		MOD_INC_USE_COUNT;	if (scan) 	{		/* scan whole i2c bus */		LOCK_I2C_BUS(bus);		for (i = 0; i < 256; i+=2) 		{			i2c_start(bus);			ack = i2c_sendbyte(bus,i,0);			i2c_stop(bus);			if (!ack) 			{				printk(KERN_INFO "i2c: scanning bus %s: found device at addr=0x%02x\n",					bus->name,i);			}		}		UNLOCK_I2C_BUS(bus);	}	/* probe available drivers */	for (i = 0; i < I2C_DRIVER_MAX; i++)		if (drivers[i])			i2c_attach_device(bus,drivers[i]);	return 0;}int i2c_unregister_bus(struct i2c_bus *bus){	int i;	/* detach devices */	for (i = 0; i < I2C_DEVICE_MAX; i++)		if (bus->devices[i])			i2c_detach_device(bus->devices[i]);	for (i = 0; i < I2C_BUS_MAX; i++)		if (bus == busses[i])			break;	if (I2C_BUS_MAX == i) 	{		printk(KERN_WARNING "i2c: unregister_bus #1: bus not found: %s\n",			bus->name);		return -ENODEV;	}		MOD_DEC_USE_COUNT;		busses[i] = NULL;	bus_count--;	REGPRINT(printk("i2c: bus unregistered: %s\n",bus->name));	return 0;    }/* ----------------------------------------------------------------------- */int i2c_register_driver(struct i2c_driver *driver){	int i;	memset(driver->devices,0,sizeof(driver->devices));	driver->devcount = 0;	for (i = 0; i < I2C_DRIVER_MAX; i++)		if (NULL == drivers[i])			break;	if (I2C_DRIVER_MAX == i)		return -ENOMEM;	drivers[i] = driver;	driver_count++;		MOD_INC_USE_COUNT;		REGPRINT(printk("i2c: driver registered: %s\n",driver->name));	/* Probe available busses */	for (i = 0; i < I2C_BUS_MAX; i++)		if (busses[i])			i2c_attach_device(busses[i],driver);	return 0;}int i2c_unregister_driver(struct i2c_driver *driver){	int i;	/* detach devices */	for (i = 0; i < I2C_DEVICE_MAX; i++)		if (driver->devices[i])			i2c_detach_device(driver->devices[i]);	for (i = 0; i < I2C_DRIVER_MAX; i++)		if (driver == drivers[i])			break;	if (I2C_DRIVER_MAX == i) 	{		printk(KERN_WARNING "i2c: unregister_driver: driver not found: %s\n",			driver->name);		return -ENODEV;	}	MOD_DEC_USE_COUNT;		drivers[i] = NULL;	driver_count--;	REGPRINT(printk("i2c: driver unregistered: %s\n",driver->name));	return 0;}/* ----------------------------------------------------------------------- */int i2c_control_device(struct i2c_bus *bus, int id,		       unsigned int cmd, void *arg){	int i;	for (i = 0; i < I2C_DEVICE_MAX; i++)		if (bus->devices[i] && bus->devices[i]->driver->id == id)			break;	if (i == I2C_DEVICE_MAX)		return -ENODEV;	if (NULL == bus->devices[i]->driver->command)		return -ENODEV;	return bus->devices[i]->driver->command(bus->devices[i],cmd,arg);}/* ----------------------------------------------------------------------- */#define I2C_SET(bus,ctrl,data)  (bus->i2c_setlines(bus,ctrl,data))#define I2C_GET(bus)            (bus->i2c_getdataline(bus))void i2c_start(struct i2c_bus *bus){	I2C_SET(bus,0,1);	I2C_SET(bus,1,1);	I2C_SET(bus,1,0);	I2C_SET(bus,0,0);	I2C_DEBUG(printk("%s: < ",bus->name));}void i2c_stop(struct i2c_bus *bus){	I2C_SET(bus,0,0);	I2C_SET(bus,1,0);	I2C_SET(bus,1,1);	I2C_DEBUG(printk(">\n"));}void i2c_one(struct i2c_bus *bus){	I2C_SET(bus,0,1);	I2C_SET(bus,1,1);	I2C_SET(bus,0,1);}void i2c_zero(struct i2c_bus *bus){	I2C_SET(bus,0,0);	I2C_SET(bus,1,0);	I2C_SET(bus,0,0);}int i2c_ack(struct i2c_bus *bus){	int ack;    	I2C_SET(bus,0,1);	I2C_SET(bus,1,1);	ack = I2C_GET(bus);	I2C_SET(bus,0,1);	return ack;}int i2c_sendbyte(struct i2c_bus *bus,unsigned char data,int wait_for_ack){	int i, ack;    	I2C_SET(bus,0,0);	for (i=7; i>=0; i--)		(data&(1<<i)) ? i2c_one(bus) : i2c_zero(bus);	if (wait_for_ack)		udelay(wait_for_ack);	ack=i2c_ack(bus);	I2C_DEBUG(printk("%02x%c ",(int)data,ack?'-':'+'));	return ack;}unsigned char i2c_readbyte(struct i2c_bus *bus,int last){	int i;	unsigned char data=0;    	I2C_SET(bus,0,1);	for (i=7; i>=0; i--) 	{		I2C_SET(bus,1,1);		if (I2C_GET(bus))			data |= (1<<i);		I2C_SET(bus,0,1);	}	last ? i2c_one(bus) : i2c_zero(bus);	I2C_DEBUG(printk("=%02x%c ",(int)data,last?'-':'+'));	return data;}/* ----------------------------------------------------------------------- */int i2c_read(struct i2c_bus *bus, unsigned char addr){	int ret;    	if (bus->i2c_read)		return bus->i2c_read(bus, addr);	i2c_start(bus);	i2c_sendbyte(bus,addr,0);	ret = i2c_readbyte(bus,1);	i2c_stop(bus);	return ret;}int i2c_write(struct i2c_bus *bus, unsigned char addr,	      unsigned char data1, unsigned char data2, int both){	int ack;	if (bus->i2c_write)		return bus->i2c_write(bus, addr, data1, data2, both);	i2c_start(bus);	i2c_sendbyte(bus,addr,0);	ack = i2c_sendbyte(bus,data1,0);	if (both)		ack = i2c_sendbyte(bus,data2,0);	i2c_stop(bus);	return ack ? -1 : 0 ;}/* ----------------------------------------------------------------------- */#ifdef MODULE#if LINUX_VERSION_CODE >= 0x020100EXPORT_SYMBOL(i2c_register_bus);EXPORT_SYMBOL(i2c_unregister_bus);EXPORT_SYMBOL(i2c_register_driver);EXPORT_SYMBOL(i2c_unregister_driver);EXPORT_SYMBOL(i2c_control_device);EXPORT_SYMBOL(i2c_start);EXPORT_SYMBOL(i2c_stop);EXPORT_SYMBOL(i2c_one);EXPORT_SYMBOL(i2c_zero);EXPORT_SYMBOL(i2c_ack);EXPORT_SYMBOL(i2c_sendbyte);EXPORT_SYMBOL(i2c_readbyte);EXPORT_SYMBOL(i2c_read);EXPORT_SYMBOL(i2c_write);#endifint init_module(void){	return i2c_init();}void cleanup_module(void){}#endifMODULE_LICENSE("GPL");

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美美女一区二区在线观看| 综合久久久久综合| 欧美一级理论性理论a| 欧美久久一区二区| 欧美三级电影网站| 欧美色图12p| 欧美日本国产一区| 欧美一区二区视频在线观看2020| 欧美日韩国产成人在线91| 国产视频一区二区在线| 日韩欧美一区中文| 久久免费精品国产久精品久久久久| 精品国产一区二区三区久久久蜜月| 精品国免费一区二区三区| 久久先锋影音av鲁色资源网| 国产欧美中文在线| 国产精品国产三级国产aⅴ入口| 国产精品国产馆在线真实露脸 | 国产精品久久久久久久久动漫| 中文字幕乱码亚洲精品一区| 亚洲欧洲日韩在线| 亚洲电影第三页| 久久福利视频一区二区| 国产精品1区2区3区| 成人一级视频在线观看| 色综合天天综合网国产成人综合天| 色av一区二区| 91精选在线观看| 久久精品一区蜜桃臀影院| 国产精品灌醉下药二区| 亚洲尤物在线视频观看| 美腿丝袜一区二区三区| 福利一区二区在线观看| 欧洲一区在线电影| 日韩三区在线观看| 国产精品不卡一区| 天堂久久一区二区三区| 黄色小说综合网站| 日本高清成人免费播放| 日韩女优电影在线观看| 中文字幕一区二区三区在线观看| 五月婷婷欧美视频| 国产乱国产乱300精品| 91久久精品午夜一区二区| 日韩欧美国产小视频| 综合久久给合久久狠狠狠97色| 日韩电影在线一区二区三区| 国产精品69毛片高清亚洲| 欧美色涩在线第一页| 久久精品亚洲乱码伦伦中文| 亚洲午夜国产一区99re久久| 国产制服丝袜一区| 欧美日韩中文一区| 国产欧美一区二区三区网站| 亚洲国产一区在线观看| 国产不卡免费视频| 69堂国产成人免费视频| √…a在线天堂一区| 久久精品国产一区二区| 色狠狠一区二区三区香蕉| 久久免费精品国产久精品久久久久| 一区二区理论电影在线观看| 国产精品一区二区在线观看网站| 色综合天天综合给合国产| 久久这里只有精品6| 亚洲国产精品欧美一二99| 丁香婷婷综合色啪| 日韩一区二区三区在线观看| 亚洲精品午夜久久久| 国产成人精品三级| 欧美电视剧在线观看完整版| 亚洲国产欧美日韩另类综合| 成人免费高清在线观看| 日韩欧美国产一区二区在线播放| 亚洲综合免费观看高清完整版在线| 国产精品一卡二卡在线观看| 欧美疯狂做受xxxx富婆| 一区二区在线观看视频| 成人免费看视频| 久久久一区二区三区捆绑**| 欧美96一区二区免费视频| 在线影视一区二区三区| 亚洲欧洲精品一区二区三区| 国产精品夜夜嗨| 精品久久久久久亚洲综合网 | 不卡影院免费观看| 久久婷婷色综合| 美女视频网站久久| 欧美一区二区视频观看视频| 一区二区三区不卡视频在线观看| 97久久超碰国产精品电影| 中文在线免费一区三区高中清不卡| 精品一区在线看| 精品久久久久99| 蜜臀av一区二区| 日韩一卡二卡三卡| 六月婷婷色综合| 日韩视频免费直播| 麻豆高清免费国产一区| 日韩欧美一区电影| 蜜桃av噜噜一区| 精品粉嫩超白一线天av| 国产又黄又大久久| 久久久国产午夜精品 | 欧美日韩高清不卡| 亚洲第四色夜色| 欧美肥妇free| 免费在线观看一区二区三区| 欧美一区二区三区婷婷月色| 美女视频黄久久| 精品日韩一区二区三区免费视频| 毛片不卡一区二区| 久久精品欧美一区二区三区不卡 | 欧美日韩国产影片| 亚洲第一福利视频在线| 9191国产精品| 久久99国产乱子伦精品免费| www国产成人免费观看视频 深夜成人网| 极品少妇xxxx精品少妇| 久久久久国产精品人| 成人小视频免费观看| 亚洲免费观看视频| 欧美性极品少妇| 蜜臀va亚洲va欧美va天堂| 欧美精品一区在线观看| 成人激情电影免费在线观看| 亚洲欧美综合在线精品| 欧美日韩一区中文字幕| av高清久久久| 亚洲色图制服丝袜| 欧美丰满高潮xxxx喷水动漫| 国产在线一区二区| 国产精品情趣视频| 欧美日韩综合不卡| 韩国欧美国产1区| 亚洲日本电影在线| 制服.丝袜.亚洲.中文.综合| 国产一区二区视频在线| 中文字幕一区二区三区四区| 欧美欧美午夜aⅴ在线观看| 久久国产精品99精品国产| 国产精品第五页| 91精品国产综合久久久蜜臀粉嫩| 国产精品伊人色| 亚洲一区二区三区视频在线播放| 精品免费视频一区二区| 色系网站成人免费| 蜜桃视频在线观看一区二区| 国产精品国产三级国产aⅴ原创 | 不卡高清视频专区| 午夜精品一区二区三区免费视频| 2024国产精品| 欧美色偷偷大香| 国产精品996| 天天做天天摸天天爽国产一区| 国产亚洲综合在线| 欧美视频一区二区在线观看| 国内精品在线播放| 亚洲一二三四在线观看| 久久久国际精品| 制服丝袜成人动漫| 91丝袜国产在线播放| 韩国精品一区二区| 首页欧美精品中文字幕| 一色屋精品亚洲香蕉网站| 日韩欧美不卡在线观看视频| 91久久精品一区二区三区| 国产精品99久久久久久有的能看 | 欧美a级理论片| 亚洲精品五月天| 国产目拍亚洲精品99久久精品| 欧美日韩亚洲另类| 91婷婷韩国欧美一区二区| 国产在线精品一区二区| 天堂蜜桃一区二区三区| 亚洲乱码精品一二三四区日韩在线| 久久免费视频色| 日韩无一区二区| 欧美日韩一区二区三区免费看| 成人av在线资源网站| 欧美在线你懂得| 风间由美一区二区av101| 美女看a上一区| 亚洲成人激情自拍| 一区二区三区精品视频| 国产欧美精品区一区二区三区| 日韩精品一区二区三区在线观看 | 亚洲一二三区在线观看| 1000部国产精品成人观看| 久久久99精品久久| 久久这里只有精品6| 精品乱码亚洲一区二区不卡| 欧美一区二区三区免费视频| 精品视频色一区| 欧美性一二三区| 欧美亚洲高清一区二区三区不卡| 91一区二区三区在线播放| 成人自拍视频在线| 顶级嫩模精品视频在线看| 国产成人精品网址|