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

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

?? i2c-elektor.c

?? linux下S3C2410的I2C總線的驅動
?? C
字號:
/* ------------------------------------------------------------------------- *//* i2c-elektor.c i2c-hw access for PCF8584 style isa bus adaptes             *//* ------------------------------------------------------------------------- *//*   Copyright (C) 1995-97 Simon G. Vogl                   1998-99 Hans Berglund    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., 675 Mass Ave, Cambridge, MA 02139, USA.		     *//* ------------------------------------------------------------------------- *//* With some changes from Ky鰏ti M鋖kki <kmalkki@cc.hut.fi> and even   Frodo Looijaard <frodol@dds.nl> *//* Partialy rewriten by Oleg I. Vdovikin for mmapped support of    for Alpha Processor Inc. UP-2000(+) boards */#include <linux/kernel.h>#include <linux/ioport.h>#include <linux/module.h>#include <linux/delay.h>#include <linux/slab.h>#include <linux/version.h>#include <linux/init.h>#include <linux/pci.h>#include <asm/irq.h>#include <asm/io.h>#include <linux/i2c.h>#include <linux/i2c-algo-pcf.h>#include <linux/i2c-elektor.h>#include "i2c-pcf8584.h"#define DEFAULT_BASE 0x330static int base   = 0;static int irq    = 0;static int clock  = 0x1c;static int own    = 0x55;static int mmapped = 0;static int i2c_debug = 0;/* vdovikin: removed static struct i2c_pcf_isa gpi; code -   this module in real supports only one device, due to missing arguments  in some functions, called from the algo-pcf module. Sometimes it's  need to be rewriten - but for now just remove this for simpler reading */#if (LINUX_VERSION_CODE < 0x020301)static struct wait_queue *pcf_wait = NULL;#elsestatic wait_queue_head_t pcf_wait;#endifstatic int pcf_pending;/* ----- global defines -----------------------------------------------	*/#define DEB(x)	if (i2c_debug>=1) x#define DEB2(x) if (i2c_debug>=2) x#define DEB3(x) if (i2c_debug>=3) x#define DEBE(x)	x	/* error messages 				*//* ----- local functions ----------------------------------------------	*/static void pcf_isa_setbyte(void *data, int ctl, int val){	int address = ctl ? (base + 1) : base;	if (ctl && irq) {		val |= I2C_PCF_ENI;	}	DEB3(printk("i2c-elektor.o: Write 0x%X 0x%02X\n", address, val & 255));	switch (mmapped) {	case 0: /* regular I/O */		outb(val, address);		break;	case 2: /* double mapped I/O needed for UP2000 board,                   I don't know why this... */		writeb(val, address);		/* fall */	case 1: /* memory mapped I/O */		writeb(val, address);		break;	}}static int pcf_isa_getbyte(void *data, int ctl){	int address = ctl ? (base + 1) : base;	int val = mmapped ? readb(address) : inb(address);	DEB3(printk("i2c-elektor.o: Read 0x%X 0x%02X\n", address, val));	return (val);}static int pcf_isa_getown(void *data){	return (own);}static int pcf_isa_getclock(void *data){	return (clock);}static void pcf_isa_waitforpin(void) {	int timeout = 2;	if (irq > 0) {		cli();		if (pcf_pending == 0) {			interruptible_sleep_on_timeout(&pcf_wait, timeout*HZ );		} else			pcf_pending = 0;		sti();	} else {		udelay(100);	}}static void pcf_isa_handler(int this_irq, void *dev_id, struct pt_regs *regs) {	pcf_pending = 1;	wake_up_interruptible(&pcf_wait);}static int pcf_isa_init(void){	if (!mmapped) {		if (check_region(base, 2) < 0 ) {			printk("i2c-elektor.o: requested I/O region (0x%X:2) is in use.\n", base);			return -ENODEV;		} else {			request_region(base, 2, "i2c (isa bus adapter)");		}	}	if (irq > 0) {		if (request_irq(irq, pcf_isa_handler, 0, "PCF8584", 0) < 0) {			printk("i2c-elektor.o: Request irq%d failed\n", irq);			irq = 0;		} else			enable_irq(irq);	}	return 0;}static void __exit pcf_isa_exit(void){	if (irq > 0) {		disable_irq(irq);		free_irq(irq, 0);	}	if (!mmapped) {		release_region(base , 2);	}}static int pcf_isa_reg(struct i2c_client *client){	return 0;}static int pcf_isa_unreg(struct i2c_client *client){	return 0;}static void pcf_isa_inc_use(struct i2c_adapter *adap){	MOD_INC_USE_COUNT;}static void pcf_isa_dec_use(struct i2c_adapter *adap){	MOD_DEC_USE_COUNT;}/* ------------------------------------------------------------------------ * Encapsulate the above functions in the correct operations structure. * This is only done when more than one hardware adapter is supported. */static struct i2c_algo_pcf_data pcf_isa_data = {	NULL,	pcf_isa_setbyte,	pcf_isa_getbyte,	pcf_isa_getown,	pcf_isa_getclock,	pcf_isa_waitforpin,	10, 10, 100,		/*	waits, timeout */};static struct i2c_adapter pcf_isa_ops = {	"PCF8584 ISA adapter",	I2C_HW_P_ELEK,	NULL,	&pcf_isa_data,	pcf_isa_inc_use,	pcf_isa_dec_use,	pcf_isa_reg,	pcf_isa_unreg,};static int __init i2c_pcfisa_init(void) {#ifdef __alpha__	/* check to see we have memory mapped PCF8584 connected to the 	Cypress cy82c693 PCI-ISA bridge as on UP2000 board */	if ((base == 0) && pci_present()) {				struct pci_dev *cy693_dev =                    pci_find_device(PCI_VENDOR_ID_CONTAQ, 		                    PCI_DEVICE_ID_CONTAQ_82C693, NULL);		if (cy693_dev) {			char config;			/* yeap, we've found cypress, let's check config */			if (!pci_read_config_byte(cy693_dev, 0x47, &config)) {								DEB3(printk("i2c-elektor.o: found cy82c693, config register 0x47 = 0x%02x.\n", config));				/* UP2000 board has this register set to 0xe1,                                   but the most significant bit as seems can be 				   reset during the proper initialisation                                   sequence if guys from API decides to do that                                   (so, we can even enable Tsunami Pchip                                   window for the upper 1 Gb) */				/* so just check for ROMCS at 0xe0000,                                   ROMCS enabled for writes				   and external XD Bus buffer in use. */				if ((config & 0x7f) == 0x61) {					/* seems to be UP2000 like board */					base = 0xe0000;                                        /* I don't know why we need to                                           write twice */					mmapped = 2;                                        /* UP2000 drives ISA with					   8.25 MHz (PCI/4) clock					   (this can be read from cypress) */					clock = I2C_PCF_CLK | I2C_PCF_TRNS90;					printk("i2c-elektor.o: found API UP2000 like board, will probe PCF8584 later.\n");				}			}		}	}#endif	/* sanity checks for mmapped I/O */	if (mmapped && base < 0xc8000) {		printk("i2c-elektor.o: incorrect base address (0x%0X) specified for mmapped I/O.\n", base);		return -ENODEV;	}	printk("i2c-elektor.o: i2c pcf8584-isa adapter module\n");	if (base == 0) {		base = DEFAULT_BASE;	}#if (LINUX_VERSION_CODE >= 0x020301)	init_waitqueue_head(&pcf_wait);#endif	if (pcf_isa_init() == 0) {		if (i2c_pcf_add_bus(&pcf_isa_ops) < 0)			return -ENODEV;	} else {		return -ENODEV;	}		printk("i2c-elektor.o: found device at %#x.\n", base);	return 0;}static void i2c_pcfisa_exit(void){	i2c_pcf_del_bus(&pcf_isa_ops);	pcf_isa_exit();}EXPORT_NO_SYMBOLS;MODULE_AUTHOR("Hans Berglund <hb@spacetec.no>");MODULE_DESCRIPTION("I2C-Bus adapter routines for PCF8584 ISA bus adapter");MODULE_LICENSE("GPL");MODULE_PARM(base, "i");MODULE_PARM(irq, "i");MODULE_PARM(clock, "i");MODULE_PARM(own, "i");MODULE_PARM(mmapped, "i");MODULE_PARM(i2c_debug, "i");module_init(i2c_pcfisa_init);module_exit(i2c_pcfisa_exit);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色8久久精品久久久久久蜜| va亚洲va日韩不卡在线观看| 亚洲另类在线视频| 午夜精品在线视频一区| 一区二区三区精品在线| 亚洲女同ⅹxx女同tv| 成人欧美一区二区三区黑人麻豆 | 国产精品中文字幕欧美| 麻豆国产精品视频| 在线亚洲人成电影网站色www| 91香蕉视频在线| xnxx国产精品| 秋霞电影网一区二区| 麻豆精品视频在线观看免费| 精品一区二区精品| 欧美美女喷水视频| 亚洲欧美日韩在线| 成人免费av网站| 久久精品人人做人人综合| 国产精品美女久久久久高潮| 亚洲乱码国产乱码精品精小说 | 国产日韩精品一区| 美女视频黄免费的久久 | 午夜电影久久久| 91免费版在线看| 国产精品超碰97尤物18| 一区二区视频在线| 99re亚洲国产精品| 中文字幕一区二区三区视频| 亚洲成人一区在线| 欧美天堂亚洲电影院在线播放| 日韩欧美精品三级| 日韩精品欧美成人高清一区二区| 国产一区二区三区高清播放| 91亚洲国产成人精品一区二区三| 欧美日韩国产小视频| 久久伊99综合婷婷久久伊| 国产精品久久久久毛片软件| 日本在线观看不卡视频| 大陆成人av片| 国产精品久久一级| 91在线免费播放| 亚洲精品成人在线| 欧美亚洲国产一卡| 无吗不卡中文字幕| 欧美一区二区三区成人| 国产精品灌醉下药二区| 久久成人羞羞网站| 久久久久久夜精品精品免费| 亚洲v中文字幕| 91麻豆精品国产91久久久久久 | 日本在线播放一区二区三区| 99久精品国产| 亚洲第一搞黄网站| 欧美一区午夜视频在线观看| 亚洲色图第一区| 欧美日韩国产不卡| 裸体健美xxxx欧美裸体表演| 欧美日韩中字一区| 国产精品久久久久久久久免费相片| 日本欧美一区二区在线观看| 欧亚一区二区三区| 精品一区二区三区欧美| 欧美一区二区三区在线观看| 一个色在线综合| 欧美成人精品福利| 99久久国产免费看| 日韩**一区毛片| 国产精品初高中害羞小美女文| 国产91丝袜在线播放九色| 欧美刺激午夜性久久久久久久| 亚洲成人免费影院| 国产免费观看久久| 91麻豆精品91久久久久同性| 亚洲成人动漫在线免费观看| 色播五月激情综合网| 成人欧美一区二区三区黑人麻豆| 成人一道本在线| 亚洲va韩国va欧美va精品| 欧美性xxxxxxxx| 国产精品99精品久久免费| 久久久99精品久久| 欧美久久久久久久久| 亚洲国产aⅴ成人精品无吗| 欧美三级欧美一级| 成人亚洲一区二区一| 亚洲欧美日韩一区二区三区在线观看 | 26uuu久久天堂性欧美| 麻豆专区一区二区三区四区五区| 色偷偷成人一区二区三区91| 亚洲免费色视频| 久久久天堂av| 91精品国产91久久综合桃花| 韩国一区二区视频| 亚洲一区二区三区影院| 3d成人h动漫网站入口| 精品一区二区三区av| 中文字幕乱码亚洲精品一区| 色偷偷久久一区二区三区| 亚洲国产精品久久久久婷婷884 | 亚洲男女毛片无遮挡| 日本二三区不卡| 成人毛片老司机大片| 亚洲国产日韩av| 亚洲人成网站精品片在线观看| 精品视频免费在线| 91视频精品在这里| 成人黄色一级视频| 国产成人鲁色资源国产91色综 | 欧美激情一区三区| 欧美不卡在线视频| 欧美一区二区在线播放| 国产成人h网站| 国产乱一区二区| 激情五月婷婷综合| 激情综合色播五月| 美女诱惑一区二区| 经典三级视频一区| 精品午夜一区二区三区在线观看| 国产精品午夜电影| 自拍偷拍亚洲欧美日韩| 日韩午夜激情电影| 日韩一区二区免费电影| 99国产精品久久久久久久久久| 亚洲国产日韩在线一区模特| 久久久99久久| 国产精品乱子久久久久| 日韩一级片在线观看| 色综合天天狠狠| 在线观看免费视频综合| 国产成人午夜视频| 99免费精品在线| 91福利精品第一导航| 国产精品亚洲第一区在线暖暖韩国| 夜夜精品视频一区二区| 国产欧美日韩亚州综合| 91精品免费在线观看| 欧美日韩在线播放一区| 东方aⅴ免费观看久久av| 看电视剧不卡顿的网站| 亚洲不卡av一区二区三区| 亚洲免费观看在线观看| 国产午夜精品美女毛片视频| 欧美成人激情免费网| 欧美电影在线免费观看| 在线精品视频小说1| 成人av网站在线| 欧美日韩久久一区二区| 欧洲精品一区二区三区在线观看| 波多野结衣中文字幕一区| 久久成人综合网| 91热门视频在线观看| 成人av电影在线| 777a∨成人精品桃花网| 欧美精品在线视频| 国产三级三级三级精品8ⅰ区| 久久久久国产精品麻豆| 日韩免费观看高清完整版在线观看| 7777精品伊人久久久大香线蕉 | 久久精品欧美一区二区三区麻豆| 制服丝袜激情欧洲亚洲| 欧美揉bbbbb揉bbbbb| 欧美性感一区二区三区| 精品视频免费看| 日本一区二区三级电影在线观看 | 一区二区三区日韩在线观看| 国产精品第五页| 美女网站一区二区| 色综合一个色综合| 精品精品国产高清a毛片牛牛| 精品久久久久久久久久久久包黑料 | 中文字幕亚洲电影| 日韩1区2区3区| 在线日韩一区二区| 日本一区二区三区久久久久久久久不| 最近日韩中文字幕| 韩国女主播一区二区三区| 国产高清不卡二三区| 国产成人在线电影| 欧美电视剧免费全集观看| 国产农村妇女毛片精品久久麻豆 | 欧美视频在线不卡| 国产精品五月天| 国产精品99久久久久久有的能看| 懂色av一区二区夜夜嗨| 色综合天天综合狠狠| 8x8x8国产精品| 亚洲图片欧美综合| 91影视在线播放| 国产精品美女久久久久久久久久久| 亚洲视频网在线直播| 亚洲成人7777| 欧美午夜精品久久久久久孕妇| 日韩免费观看2025年上映的电影 | 欧美精品一区二| 日韩va亚洲va欧美va久久| 粉嫩aⅴ一区二区三区四区五区| 色综合色狠狠综合色| 制服丝袜日韩国产| 秋霞午夜av一区二区三区|