⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 e2prom_driver.c

📁 一个嵌入linux下s3c2410通过i2c读写eerom的驱动程序和应用程序。
💻 C
字号:
//====================================================================// File Name : E2PROM_Driver.c// Function  : X1227 E2PROM Driver Program// Date      : July 16, 2004// Version   : 0.0//====================================================================#include <linux/init.h>#include <linux/module.h>#include <linux/version.h>#include <linux/types.h>#include <linux/errno.h>    /* error codes */#include <asm/uaccess.h>#include <linux/kernel.h>    /* printk() */#include <linux/slab.h>#include <linux/fcntl.h>#include <linux/fs.h>     /* everything... */#include <asm/semaphore.h>#include <asm/arch/cpu_s3c2410.h>#include <asm/hardware.h>#include <linux/devfs_fs_kernel.h>#define DEVICE_NAME   "e2prom"#define U8 unsigned char#define U32 unsigned intextern void Init_Iic(void);extern void _Wr2410Iic_E2PROM(U32 slvAddr,U32 addr,U8 *buffer,U32 length);extern void _Rd2410Iic_E2PROM(U32 slvAddr,U32 addr,U8 *buffer,U32 length);extern void _Wr2410Iic(U32 slvAddr,U32 addr,U8 wdata);extern void Test_Iic(void);devfs_handle_t X1227_devfs_dir; unsigned char *dbuf;unsigned int major ;//**********************[Read]*********************************static ssize_trtc_rd(struct file *filep,char * buffer,size_t length,loff_t * off){	int ret = 0;//	U8 rdata;	dbuf = kmalloc(length*sizeof(unsigned char) , GFP_KERNEL);	Init_Iic();   		_Rd2410Iic_E2PROM(0xaf,0x20,dbuf,length);		 copy_to_user(buffer,dbuf,length);	 kfree(dbuf);	 return ret;}static ssize_trtc_wr(struct file *filep,char * buffer,size_t length,loff_t * off){//	U8 data;	int ret = 0;//	unsigned int reg, mreg, lreg;	dbuf = kmalloc(length*sizeof(char),GFP_KERNEL);	copy_from_user(dbuf,buffer,length);	Init_Iic(); 	//_Wr2410Iic(0xde,0x3f,0x02);		_Wr2410Iic_E2PROM(0xae,0x20,dbuf,length);		kfree(dbuf);	return ret;				}static intrtc_ioctl (struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg){	int rc = 0;	switch (cmd)	{	    default:		return -ENOIOCTLCMD;	}//endswitch	return rc;}/*static int rtc_open(struct inode *inode,struct file *file){		return 0;}*/static int rtc_release (struct inode *inode,struct file *file){	return 0;	}struct  file_operations Fops = {	    owner:THIS_MODULE,	    read:rtc_rd,	    write:rtc_wr,	    ioctl:rtc_ioctl,//	    open:rtc_open,	    release:rtc_release,};static int __initE2PROM1227_init (void){ 	X1227_devfs_dir = devfs_mk_dir(NULL, "X1227", NULL);	if(!X1227_devfs_dir)  		return -EBUSY;		devfs_register(X1227_devfs_dir,DEVICE_NAME,DEVFS_FL_AUTO_DEVNUM,0,			0,S_IFCHR|S_IRUGO|S_IWUGO,&Fops,NULL);	printk ("X1227 E2PROM driver installed OK\n");	printk ("TestIic is starting!\n");  	Test_Iic();	return 0;}void __exitE2PROM1227_exit(void){	devfs_unregister(X1227_devfs_dir);	printk("X1227 E2PROM driver uninstalled OK\n");}module_init(E2PROM1227_init);module_exit(E2PROM1227_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("rui zhuo");MODULE_DESCRIPTION("E2PROM Driver for X1227");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -