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

📄 lcd.c

📁 基于三星S3C2440 或者S3C2410 平台下7寸lcd显示驱动其驱动芯片为bit16
💻 C
字号:
#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/S3C2440.h>#include <asm/hardware.h>#include <linux/devfs_fs_kernel.h>#define DEVICE_NAME   "lcd"#define U8 unsigned char#define U32 unsigned int#define	BIT1611bank0addr	0x00#define	BIT1611bank1addr	0x02extern void Init_Iic(void);extern void Delay(int times);extern void _Wr2410Iic_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 lcd_devfs_dir; unsigned char *dbuf;unsigned int major ;static unsigned char bank0data[]={         //      0    1    2    3   4     5    6    7    8    9    A    B    C    D    E    F       /* 0x0000*/    0xC6,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0x00,0x8B,0x3B,/* 0x0010*/    0x15,0x2E,0x0F,0xC2,0xA8,0xA8,0x22,0x16,0x79,0x32,0x39,0x39,0x22,0x18,0xBB,0x11,/* 0x0020*/    0x02,0x05,0xEF,0x06,0x01,0x80,0x02,0x03,0x04,0x4C,0x35,0x36,0x27,0x51,0x00,0x02,/* 0x    */    0x37,0x14,0x34,0x00,0x01,0x04,0xC9,0x8C,0x00,0x40,0xC0,0x0C,0x00,0x00,0x00,0xE0,/* 0x    */    0x10,0x9F,0xA2,0x4C,0x30,0x1A,0x31,0x10,0x96,0x40,0x30,0x15,0x00,0x10,0x40,0x70,/* 0x    */    0x2C,0x70,0x01,0x05,0xEF,0xEA,0x2E,0x90,0x60,0x41,0xF4,0xEC,0x10,0x20,0x00,0x02,/* 0x    */    0x07,0x94,0x3B,0x00,0x00,0x64,0x64,0x14,0xB0,0x77,0x00,0x30,0x20,0x17,0x15,0x15,/* 0x    */    0x00,0xC0,0x40,0x00,0x00,0x00,0x17,0x12,0x12,0x00,0x00,0x00,0x80,0x80,0x80,0x80,/* 0x    */    0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x40,0x40,0xEF,0x90,0x12,0x87,0x78,0x00,0x00,/* 0x    */    0xFF,0x00,0xFF,0x00,0x24,0x48,0x6C,0x90,0xB4,0xD8,0x20,0x20,0x20,0x20,0x20,0x20,/* 0x    */    0x20,0x00,0x00,0x00,0x88,0x56,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x    */    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x    */    0xF8,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x0C,0xB7,0x00,0x00,0x00,/* 0x    */    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x    */    0x4E,0x00,0x20,0x00,0x00,0x40,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x00f0*/    0x00,0x00,0x00,0x00,0x00,0x7A,0x35,0xD8,0xED,0x00,0x00,0x02,0x12,0x00,0x00,0x00};static unsigned char bank1data[]={         //      0    1    2    3   4     5    6    7    8    9    A    B    C    D    E    F       /* 0x0100*/    0x00,0x78,0x0C,0x07,0x28,0x00,0x18,0x84,0x10,0x31,0x00,0x00,0x00,0x5C,0x30,0x00,/* 0x0110*/    0x03,0x80,0x80,0x80,0x40,0xC4,0x09,0xB8,0x4A,0x38,0x02,0xF9,0xD0,0xFC,0x00,0x7C,/* 0x0120*/    0x80,0x00,0xFF,0x00,0x81,0x00,0xFF,0xFF,0x00,0x00,0x44,0x33,0x40,0x40,0x22,0x88,/* 0x0130*/    0x00,0x3C,0x14,0x64,0x40,0x20,0x77,0xDC,0x38,0x19,0x00,0x0F,0x07,0x00,0x07,0xFF,/* 0x    */    0x00,0x00,0x00,0x0C,0x00,0x00,0x18,0x1C,0x20,0x24,0x08,0x2C,0x30,0x34,0x3A,0x34,/* 0x    */    0x00,0x44,0x00,0x00,0x50,0x54,0x10,0x1C,0x00,0x64,0x68,0x6C,0x70,0x64,0x10,0x0E,/* 0x    */    0x00,0x00,0x00,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x00,/* 0x    */    0x1E,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x    */    0x00,0x00,0xB4,0xFF,0x00,0x01,0xD0,0x46,0x19,0x2D,0x13,0x1A,0x00,0x8E,0x5F,0x06,/* 0x    */    0x39,0x31,0x09,0x82,0x00,0x00,0x01,0x21,0x00,0xA4,0x00,0xBB,0x00,0x00,0x00,0x00,/* 0x    */    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x01b0*/    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x    */    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x    */    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x    */    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x    */    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};static unsigned char RGBbank0data[]={         //      0    1    2    3   4     5    6    7    8    9    A    B    C    D    E    F       /* 0x0000*/    0XC6,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0x00,0x8B,0x3B,/* 0x0010*/    0X05,0x31,0x71,0xC1,0xA8,0xA8,0x22,0x16,0x79,0x32,0xDC,0xDC,0x11,0x18,0xBB,0x11,/* 0x0020*/    0X02,0x02,0xF6,0xEA,0x00,0x80,0xA0,0x06,0x07,0x4C,0x36,0x36,0x27,0x51,0x00,0x02,/* 0x    */    0X37,0x14,0x34,0x00,0x01,0x04,0xC9,0x8C,0x00,0x40,0xC0,0x0C,0x00,0x00,0x00,0xE0,/* 0x    */    0X10,0x9F,0xA2,0x4C,0x30,0x1A,0x31,0x10,0x1C,0x3C,0x30,0x15,0x01,0x10,0x40,0x70,/* 0x    */    0X0D,0x70,0x01,0x04,0xF2,0xEA,0x29,0x70,0x40,0x41,0xF4,0xF4,0x00,0x20,0x00,0x02,/* 0x    */    0X00,0x94,0x3B,0x00,0x00,0x64,0x64,0x14,0xB0,0x77,0x00,0x30,0x20,0x16,0x15,0x15,/* 0x    */    0X00,0xC0,0x40,0x00,0x00,0x00,0x12,0x12,0x12,0x00,0x00,0x00,0x80,0x80,0x80,0x80,/* 0x    */    0X80,0x80,0x80,0x80,0x80,0x80,0x80,0x40,0x40,0xEF,0x90,0x12,0x87,0x78,0x00,0x00,/* 0x    */    0XFF,0x00,0xFF,0x00,0x24,0x48,0x6C,0x90,0xB4,0xD8,0x20,0x20,0x20,0x20,0x20,0x20,/* 0x  0a*/    0X20,0x00,0x00,0x00,0x88,0x56,0x22,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x  0b*/    0X00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x  0c*/    0XF8,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x0C,0xB7,0x00,0x00,0x00,/* 0x  0d*/    0X00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x  0e*/    0X4E,0x00,0x20,0x00,0x00,0x40,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x00f0*/    0X00,0x00,0x00,0x00,0x00,0x7A,0x35,0xD8,0xED,0x00,0x00,0x02,0x12,0x00,0x00,0x00};static unsigned char RGBbank1data[]={         //      0    1    2    3   4     5    6    7    8    9    A    B    C    D    E    F       /* 0x0100*/    0X00,0x80,0x0C,0x07,0x28,0x00,0x18,0x84,0x10,0x31,0x00,0x00,0x00,0x5C,0x30,0x00,/* 0x0110*/    0X03,0x80,0x80,0x80,0x40,0xC4,0x09,0xB8,0x4A,0x38,0x02,0xF9,0xD0,0xFC,0x00,0x7C,/* 0x0120*/    0X80,0x00,0xFF,0x00,0x81,0x00,0xFF,0xFF,0x00,0x00,0x44,0x33,0x40,0x40,0x22,0x88,/* 0x0130*/    0X00,0x3C,0x14,0x64,0x40,0x20,0x77,0xDC,0x38,0x19,0x00,0x0F,0x07,0x00,0x07,0xFF,/* 0x    */    0X00,0x00,0x00,0x0C,0x00,0x00,0x18,0x1C,0x20,0x24,0x08,0x2C,0x30,0x34,0x3A,0x34,/* 0x    */    0X00,0x44,0x00,0x00,0x50,0x54,0x10,0x1C,0x00,0x64,0x68,0x6C,0x70,0x64,0x10,0x0E,/* 0x    */    0X00,0x00,0x00,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x00,/* 0x    */    0X1E,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x    */    0X00,0x00,0xB4,0xFF,0x00,0x01,0xD0,0x46,0x19,0x2D,0x13,0x1A,0x00,0x8E,0x5F,0x06,/* 0x    */    0X39,0x31,0x09,0x82,0x00,0x00,0x01,0x21,0x00,0xA4,0x00,0xBB,0x00,0x00,0x00,0x00,/* 0x    */    0X00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x01b0*/    0X00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x    */    0X00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x    */    0X00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x    */    0X00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* 0x    */    0X00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};static int lcd_open(struct inode *inode,struct file *file){		return 0;}static intlcd_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 ssize_tlcd_rd(struct file *filep,char * buffer,size_t length,loff_t * off){	int ret = 0;	 return ret;}static ssize_tlcd_wr(struct file *filep,char * buffer,size_t length,loff_t * off){	int i = 0;	unsigned char buf[258];	dbuf = kmalloc(length*sizeof(char),GFP_KERNEL);	copy_from_user(dbuf,buffer,length);	Init_Iic();	if(dbuf[0]==1)    	{        	_Wr2410Iic(BIT1611bank0addr,0x0c,0xff);        	Delay(1);          	Delay(1);          	_Wr2410Iic(BIT1611bank0addr,0x0c,0x00);        	Delay(1);          	Delay(1);          	_Wr2410Iic(BIT1611bank0addr,0x0c,0xff);        	Delay(1);          	Delay(1);		for(i=0;i<256;i++)    		{       		buf[i]=bank0data[i];    		}    		_Wr2410Iic_E2PROM(BIT1611bank0addr,0,buf,256);		for(i=0;i<256;i++)   		{        		buf[i]=bank1data[i];   		}   		_Wr2410Iic_E2PROM(BIT1611bank1addr,0,buf,256);	}     	else       	{         	_Wr2410Iic(BIT1611bank0addr,0x0c,0xff);        	Delay(1);          	Delay(1);          	_Wr2410Iic(BIT1611bank0addr,0x0c,0x00);        	Delay(1);          	Delay(1);          	_Wr2410Iic(BIT1611bank0addr,0x0c,0xff);        	Delay(1);          	Delay(1);        		for(i=0;i<256;i++)    		{       		buf[i]=RGBbank0data[i];    		}    		_Wr2410Iic_E2PROM(BIT1611bank0addr,0,buf,256);		for(i=0;i<256;i++)   		{        		buf[i]=RGBbank1data[i];   		}   		_Wr2410Iic_E2PROM(BIT1611bank1addr,0,buf,256);     	}	kfree(dbuf);	return 0;		}static int lcd_release (struct inode *inode,struct file *file){	return 0;	}struct  file_operations Fops = {	    owner:THIS_MODULE,	    read:lcd_rd,	    write:lcd_wr,	    ioctl:lcd_ioctl,	    open:lcd_open,	    release:lcd_release,};static int __initlcd_init (void){ 	lcd_devfs_dir = devfs_mk_dir(NULL, "LCD", NULL);	if(!lcd_devfs_dir)  		return -EBUSY;	devfs_register(lcd_devfs_dir,DEVICE_NAME,DEVFS_FL_AUTO_DEVNUM,0,			0,S_IFCHR|S_IRUGO|S_IWUGO,&Fops,NULL);	return 0;}void __exit lcd_exit(void){	devfs_unregister(lcd_devfs_dir);	}module_init(lcd_init);module_exit(lcd_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("rui zhuo");MODULE_DESCRIPTION("E2PROM Driver for X1227");

⌨️ 快捷键说明

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