Linux下CPLD驱动程序
static unsigned cpld_drv_poll(struct file *file, poll_table *wait)
{
unsigned int mask = 0;
poll_wait(file, eint1_waitq, wait); //不会立即休眠
if (ev_eint1)
mask |= POLLIN | POLLRDNORM; //若产生中断,mask赋值,表示有数据可读
return mask;
}
static int cpld_drv_fasync (int fd, struct file *filp, int on)
{
//printk(driver: cpld_drv_fasyncn);
return fasync_helper (fd, filp, on, eint1_async);
}
int cpld_drv_close(struct inode *inode, struct file *file)
{
free_irq(IRQ_EINT1, 1); //释放中断
return 0;
}
static struct file_operations cpld_drv_fops = {
.owner = THIS_MODULE,
.write = cpld_drv_write,
.read = cpld_drv_read,
.open = cpld_drv_open,
.release = cpld_drv_close,
.poll = cpld_drv_poll,
.fasync = cpld_drv_fasync,
};
评论