📄 lcd.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 + -