diff options
Diffstat (limited to 'drivers/rtc/rtc-dev.c')
| -rw-r--r-- | drivers/rtc/rtc-dev.c | 20 | 
1 files changed, 13 insertions, 7 deletions
diff --git a/drivers/rtc/rtc-dev.c b/drivers/rtc/rtc-dev.c index 35dcc06eb3e..52e2743b04e 100644 --- a/drivers/rtc/rtc-dev.c +++ b/drivers/rtc/rtc-dev.c @@ -403,11 +403,14 @@ static long rtc_dev_ioctl(struct file *file,  #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL  	case RTC_UIE_OFF: +		mutex_unlock(&rtc->ops_lock);  		clear_uie(rtc); -		break; +		return 0;  	case RTC_UIE_ON: +		mutex_unlock(&rtc->ops_lock);  		err = set_uie(rtc); +		return err;  #endif  	default:  		err = -ENOTTY; @@ -419,6 +422,12 @@ done:  	return err;  } +static int rtc_dev_fasync(int fd, struct file *file, int on) +{ +	struct rtc_device *rtc = file->private_data; +	return fasync_helper(fd, file, on, &rtc->async_queue); +} +  static int rtc_dev_release(struct inode *inode, struct file *file)  {  	struct rtc_device *rtc = file->private_data; @@ -431,16 +440,13 @@ static int rtc_dev_release(struct inode *inode, struct file *file)  	if (rtc->ops->release)  		rtc->ops->release(rtc->dev.parent); +	if (file->f_flags & FASYNC) +		rtc_dev_fasync(-1, file, 0); +  	clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags);  	return 0;  } -static int rtc_dev_fasync(int fd, struct file *file, int on) -{ -	struct rtc_device *rtc = file->private_data; -	return fasync_helper(fd, file, on, &rtc->async_queue); -} -  static const struct file_operations rtc_dev_fops = {  	.owner		= THIS_MODULE,  	.llseek		= no_llseek,  | 
