www.pudn.com > EXT.rar > SimpleLED.c
/* * Copyright (C) 2004 Gexin TECH ** This file just for GX-ARM9-2410EP Sat Feb 7 2004 Zhen-feng Zhao * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of this archive * for more details. */ #include #include #include #include #include /* for in_interrupt */ #include #include #include /* for udelay */ #include #include #include #include #include #define SimpleLED_MAJOR 97 devfs_handle_t dev_handle; /* register handle to store device fs */ int SimpleLED_temp_count=0; static long ioremap_addr; ssize_t SimpleLED_read (struct file * file ,char * buf, size_t count, loff_t * f_ops) { printk("s3c2410: device file-read operation!\n"); return count; } /*=========== SimpleD Write =======================*/ ssize_t SimpleLED_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops) { //printk("s3c2410: device file-write operation!\n"); outw(count,ioremap_addr); return count; } /*=========== SimpleD Ioctl =======================*/ ssize_t SimpleLED_ioctl (struct inode * inode ,struct file * file, unsigned int cmd, long data) { printk("s3c2410: device ioctl operation!\n"); } /*============ SimpleD device open ==============*/ ssize_t SimpleLED_open (struct inode * inode ,struct file * file) { return 0; } /*============ SimpleD device close =============*/ ssize_t SimpleLED_release (struct inode * inode ,struct file * file) { outw(0x0000,ioremap_addr); return 0; } struct file_operations SimpleLED_ops ={ open: SimpleLED_open, read: SimpleLED_read, write: SimpleLED_write, ioctl: SimpleLED_ioctl, release: SimpleLED_release, }; static int __init HW_SimpleLED_init(void) { int ret = -ENODEV; int delay ; ret = devfs_register_chrdev(SimpleLED_MAJOR, "SimpleLED", &SimpleLED_ops); if( ret < 0 ){ printk (" s3c2410: init_module failed with %d\n", ret); return ret; } else { printk(KERN_INFO" S3c2410 SimpleLED register success!!!\n"); ; } dev_handle = devfs_register( NULL, "SimpleLED", DEVFS_FL_DEFAULT, SimpleLED_MAJOR, 0, S_IFCHR, &SimpleLED_ops, NULL); ioremap_addr=ioremap(0x20000000,0x0f); outw(0x55aa,ioremap_addr); printk("remap address = %x\n",ioremap_addr); //!!!!!!!!!!!!!! return ret; } int __init s3c2410_SimpleLED_init(void) { int ret = -ENODEV; ret = HW_SimpleLED_init(); if (ret) return ret; return 0; } int init_module() { s3c2410_SimpleLED_init(); } void cleanup_module() { devfs_unregister_chrdev( SimpleLED_MAJOR, "SimpleLED" ); devfs_unregister( dev_handle ); }