驱动程序:
//////////////////////////////////////////////////////////////////////////
// FILE : e2prom.c
// DATE : 09/02/2011
// DESCRIPTION : rfid-card i2c driver source
// OS : Linux 2.6.35.7
// AUTHOR : light.wu
//////////////////////////////////////////////////////////////////////////
// START: 在 SCL 线是高电平时,SDA线从高电平向低电平切换
// STOP: 当 SCL 是高电平时,SDA线由低电平向高电平切换
// 所有主机在 SCL 线上产生它们自己的时钟来传输 IIC 总线上的报文 数据只在时钟的高电平周期有效,
// (可理解为传输出去)。数据 SDA 只有在 SCL 为低电平时才可以发生改变。
// ACK 数据传输必须带响应 相关的响应时钟脉冲由主机产生 在响应的时钟脉冲期间 发送器释放 SDA
// 线为高 ,在响应的时钟脉冲期间 ,接收器必须将 SDA 线拉低 使它在这个时钟脉冲的高电平期间保持稳定的低电平。
//
//////////////////////////////////////////////////////////////////////////
#include<linux/init.h>
#include<linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/delay.h>
#include <asm/irq.h>
#include <mach/regs-gpio.h>
#include <mach/hardware.h>
#include <linux/device.h>
#include <linux/gpio.h>
#include <linux/slab.h>
#include <linux/irq.h>
#include <linux/poll.h>
#include <linux/delay.h>
#include <asm/io.h>
#define GPIO_IIC_SCL 0 // S5PV210_GPG3(5),
#define GPIO_IIC_SDA 1 // S5PV210_GPG3(6),
#define I2C_AT24CXX_ADDRESS 0xb0
#define I2C_AT24C02_MAXSIZE 0xff
#define SCL_H { gpio_set_value (S5PV210_GPG3(5), 1) ; }
#define SCL_L { gpio_set_value (S5PV210_GPG3(5), 0) ; }
#define SDA_H { gpio_set_value (S5PV210_GPG3(6), 1) ; }
#define SDA_L { gpio_set_value (S5PV210_GPG3(6), 0) ; }
#define SDA_IN { gpio_direction_input (S5PV210_GPG3(6)); }
#define SDA_OUT { gpio_direction_output (S5PV210_GPG3(6),1); }
#define SDA_OUT0 { gpio_direction_output (S5PV210_GPG3(6),0); }
#define WHILE_SDA_HIGH (gpio_get_value (S5PV210_GPG3(6)))
#define E2PROM_DEV_NAME "e2prom"
static int major = 239 ;
module_param( major, int, 0 ) ;
unsigned int ByteDelayTimeout = 0x700 ;
unsigned int BitDelayTimeout = 0x1000;
static void ByteDelay ( void ) ;
static void BitDelay ( void ) ;
static int e2prom_open ( struct inode *, struct file * ) ;
static int e2prom_release ( struct inode *, struct file * ) ;
static int e2prom_read ( struct file *, char *, size_t, loff_t * ) ;
static int