ARM Linux S3C2440之ADC驱动实现(2)
![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 1029342
- 性别
- 男
|
![](http://images.eccn.com/silabs/silicon_chip_980x60_202203.jpg)
ARM Linux S3C2440之ADC驱动实现(2)
- static irqreturn_t adc_done_handler(int irq, void *dev_id)
- {
- adc_dev.data = ADCDAT0 & 0x3ff;
- adc_dev.flag = 1;
- wake_up_interruptible(&adc_dev.wait); //唤醒等待事件
return IRQ_HANDLED; - }
static
struct file_operations dev_fops = { - .owner = THIS_MODULE,
- .open = adc_open,
- .read = adc_read,
- };
static
struct miscdevice misc = { - .minor = MISC_DYNAMIC_MINOR,
- .name = DEVICE_NAME,
- .fops = &dev_fops,
- };
static
int __init dev_init(void) - {
int ret;
- ADC_REG_BASE = ioremap(S3C2410_PA_ADC,0x14); //物理地址映射
- adc_clk = clk_get(NULL,"adc");
if (!adc_clk) {
return -ENOENT; - }
- clk_enable(adc_clk); //开启adc 时钟,系统开机时默认是关闭的
- ret = request_irq(IRQ_ADC,adc_done_handler,IRQF_SHARED,DEVICE_NAME,&adc_dev); //分配中断线
if (ret) { - iounmap(ADC_REG_BASE);
return ret; - }
- ret = misc_register(&misc); //注册设备
return ret; - }
static
void __exit dev_exit(void) - {
- misc_deregister(&misc);
- }
- module_init(dev_init);
- module_exit(dev_exit);
- MODULE_LICENSE("GPL");
- MODULE_AUTHOR("itspy");
- MODULE_DESCRIPTION("adc driver test");
|
|
|
|
|
|