|
|
@@ -35,6 +35,7 @@ struct cashd_device {
|
|
|
unsigned int in_status;
|
|
|
unsigned int status_changed;
|
|
|
int last_status;
|
|
|
+ int read_flag;
|
|
|
struct delayed_work delay_work1;
|
|
|
struct delayed_work delay_work2;
|
|
|
void __iomem *gpio_ctl_reg_base;
|
|
|
@@ -105,6 +106,7 @@ static int cashd_open(struct inode *inode, struct file *filp)
|
|
|
}
|
|
|
|
|
|
filp->private_data = dev;
|
|
|
+ dev->read_flag = 0;
|
|
|
pr_info("cashd: Device /dev/cashd%d opened\n", minor);
|
|
|
|
|
|
return 0;
|
|
|
@@ -129,7 +131,11 @@ static ssize_t cashd_read(struct file *filp, char __user *buf,
|
|
|
|
|
|
if (!buf || count == 0)
|
|
|
return -EINVAL;
|
|
|
-
|
|
|
+ if(dev->read_flag >= 1)
|
|
|
+ {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ dev->read_flag++;
|
|
|
dev->in_status = readl(dev->gpio_status_reg_base);
|
|
|
|
|
|
if(dev->in_status & 0x2)
|