📄 da.c
字号:
#include <linux/module.h>#include <linux/kernel.h>#include <linux/ioport.h>#include <linux/sched.h>#include <linux/signal.h>#include <linux/errno.h>#include <linux/random.h>#include <linux/miscdevice.h>#include <linux/fs.h>#include <linux/interrupt.h>#include <linux/delay.h> #include <linux/wait.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/system.h>#include <asm/uaccess.h> /* get_user, copy_to_user */#include <asm/segment.h>//#include <asm/MC68VZ328.h>#include <asm/arch/s3c44b0x.h>#define DA_DEBUG#define my_get(a) (*(volatile unsigned char*) (a))#define my_put(v, a) (*(volatile unsigned char*) (a) = (v))#define DA_BASE 0x04400000int da_major = 70; /* Select 0 for Dynamic adressing */void da_convert(unsigned char dav){ my_put(dav, DA_BASE); //udelay(20);}static int da_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg){ switch(cmd) { // begin convert case 0: { unsigned char val; val = *(unsigned char *)arg; //printk("\nval = :%x\n",val); da_convert(val); return 1; } default: return -EINVAL; } return 1;}/* Open-Function des Devices */static int da_open(struct inode *inode, struct file *file){ #ifdef DA_DEBUG outl(inl(S3C44B0X_BANKCON2)&(~(0x7fff)), S3C44B0X_BANKCON2); outl(inl(S3C44B0X_BANKCON2)|(0x1480), S3C44B0X_BANKCON2); printk("\ndac0832 is open!\n");#endif return 0;}/* Close-Function des Devices */static void da_close(struct inode *inode, struct file *file){#ifdef DA_DEBUG outl(inl(S3C44B0X_BANKCON2)&(~(0x7fff)), S3C44B0X_BANKCON2); outl(inl(S3C44B0X_BANKCON2)|(0x14bc), S3C44B0X_BANKCON2); printk("\ndac0832 is closed!\n");#endif}struct file_operations da_fops ={ ioctl: da_ioctl, open: da_open, release: da_close,}; int insert_da(void){ int rc; outl(inl(S3C44B0X_PCONB)|((0x01)<<7), S3C44B0X_PCONB); rc = register_chrdev(da_major, "da", &da_fops); if(rc < 0) {#ifdef DA_DEBUG printk("Panic! Could not register DA-Driver\n");#endif return rc; }; return 0;}int da_init(void){ int rc; rc = insert_da(); if(rc) {#ifdef DA_DEBUG printk("Panic! DA-driver could not be loaded!\n");#endif } else {#ifdef DA_DEBUG printk("DA-driver init OK\n");#endif } return rc;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -