📄 s3c44b0-key.c
字号:
#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <asm/delay.h>#include <asm/uaccess.h>#include <linux/fs.h>#include <linux/devfs_fs_kernel.h>#include <linux/sched.h>#include <asm/hardware.h>//#undef DEBUG#define DEBUG#ifdef DEBUG#define DPRINTK(x... ) printk("s3c44b0_key:"##x)#else #define DPRINTK(x...)#endif#define DEVICE_NAME "s3c44b0-key"#define KEYMinor 1static int KEYMajor = 0;static int s3c44b0_KEY_read(struct file *filp, char *buf, size_t count,loff_t *f_pos){ return 0;}static int s3c44b0_KEY_open(struct inode *inode,struct file *filp){ MOD_INC_USE_COUNT; DPRINTK("open\n"); return 0;}static int s3c44b0_KEY_release(struct inode *inode, struct file *filp){ MOD_DEC_USE_COUNT; DPRINTK("release\n"); return 0;}static struct file_operations s3c44b0_fops = { owner: THIS_MODULE, open: s3c44b0_KEY_open, write: s3c44b0_KEY_read, release:s3c44b0_KEY_release,};static void s3c44b0x_KEY_isr(int irq,void *dev_id,struct pt_regs *regs){ switch(irq) { case 24: printk("A\n"); break; case 25: printk("B\n"); break; } *((volatile unsigned int*)S3C44B0X_I_ISPC)=(0x1<<irq);}#ifdef CONFIG_DEVFS_FSstatic devfs_handle_t devfs_s3c44b0_dir,devfs_s3c44b0raw;#endifstatic int __init s3c44b0_KEY_init(void){ int ret; ret = register_chrdev(KEYMajor,DEVICE_NAME,&s3c44b0_fops); if(ret<0) { printk(DEVICE_NAME "can't get major number\n"); return ret; } KEYMajor = ret;#ifdef CONFIG_DEVFS_FS devfs_s3c44b0_dir=devfs_mk_dir(NULL,"key",NULL); devfs_s3c44b0raw=devfs_register(devfs_s3c44b0_dir,"0",DEVFS_FL_DEFAULT,KEYMajor,\ KEYMinor,S_IFCHR|S_IRUSR|S_IWUSR,&s3c44b0_fops,NULL);#endif if(request_irq(24,s3c44b0x_KEY_isr,SA_INTERRUPT,DEVICE_NAME,NULL)<0) DPRINTK("Failed to register IRQ 24\n"); if(request_irq(25,s3c44b0x_KEY_isr,SA_INTERRUPT,DEVICE_NAME,NULL)<0) DPRINTK("Failed to register IRQ 25\n"); printk(DEVICE_NAME "initialized IRQ 24 25\n"); return 0;}static void __exit s3c44b0_KEY_exit(void){ free_irq(24,NULL); free_irq(25,NULL);#ifdef CONFIG_DEVFS_FS devfs_unregister(devfs_s3c44b0raw); devfs_unregister(devfs_s3c44b0_dir);#endif unregister_chrdev(KEYMajor, DEVICE_NAME); }module_init(s3c44b0_KEY_init);module_exit(s3c44b0_KEY_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("ZCY");MODULE_DESCRIPTION("SEG7 driver fo EB44b0");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -