diff options
| author | David Howells <dhowells@redhat.com> | 2006-12-05 14:37:56 +0000 | 
|---|---|---|
| committer | David Howells <dhowells@warthog.cambridge.redhat.com> | 2006-12-05 14:37:56 +0000 | 
| commit | 4c1ac1b49122b805adfa4efc620592f68dccf5db (patch) | |
| tree | 87557f4bc2fd4fe65b7570489c2f610c45c0adcd /drivers/rtc/rtc-dev.c | |
| parent | c4028958b6ecad064b1a6303a6a5906d4fe48d73 (diff) | |
| parent | d916faace3efc0bf19fe9a615a1ab8fa1a24cd93 (diff) | |
| download | olio-linux-3.10-4c1ac1b49122b805adfa4efc620592f68dccf5db.tar.xz olio-linux-3.10-4c1ac1b49122b805adfa4efc620592f68dccf5db.zip  | |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts:
	drivers/infiniband/core/iwcm.c
	drivers/net/chelsio/cxgb2.c
	drivers/net/wireless/bcm43xx/bcm43xx_main.c
	drivers/net/wireless/prism54/islpci_eth.c
	drivers/usb/core/hub.h
	drivers/usb/input/hid-core.c
	net/core/netpoll.c
Fix up merge failures with Linus's head and fix new compilation failures.
Signed-Off-By: David Howells <dhowells@redhat.com>
Diffstat (limited to 'drivers/rtc/rtc-dev.c')
| -rw-r--r-- | drivers/rtc/rtc-dev.c | 25 | 
1 files changed, 19 insertions, 6 deletions
diff --git a/drivers/rtc/rtc-dev.c b/drivers/rtc/rtc-dev.c index dcf5f86461f..828b329e08e 100644 --- a/drivers/rtc/rtc-dev.c +++ b/drivers/rtc/rtc-dev.c @@ -62,7 +62,9 @@ static void rtc_uie_task(struct work_struct *work)  	int err;  	err = rtc_read_time(&rtc->class_dev, &tm); -	spin_lock_irq(&rtc->irq_lock); + +	local_irq_disable(); +	spin_lock(&rtc->irq_lock);  	if (rtc->stop_uie_polling || err) {  		rtc->uie_task_active = 0;  	} else if (rtc->oldsecs != tm.tm_sec) { @@ -75,11 +77,11 @@ static void rtc_uie_task(struct work_struct *work)  	} else if (schedule_work(&rtc->uie_task) == 0) {  		rtc->uie_task_active = 0;  	} -	spin_unlock_irq(&rtc->irq_lock); +	spin_unlock(&rtc->irq_lock);  	if (num)  		rtc_update_irq(&rtc->class_dev, num, RTC_UF | RTC_IRQF); +	local_irq_enable();  } -  static void rtc_uie_timer(unsigned long data)  {  	struct rtc_device *rtc = (struct rtc_device *)data; @@ -215,7 +217,7 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file,  	struct rtc_wkalrm alarm;  	void __user *uarg = (void __user *) arg; -	/* check that the calles has appropriate permissions +	/* check that the calling task has appropriate permissions  	 * for certain ioctls. doing this check here is useful  	 * to avoid duplicate code in each driver.  	 */ @@ -239,10 +241,10 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file,  	/* avoid conflicting IRQ users */  	if (cmd == RTC_PIE_ON || cmd == RTC_PIE_OFF || cmd == RTC_IRQP_SET) { -		spin_lock(&rtc->irq_task_lock); +		spin_lock_irq(&rtc->irq_task_lock);  		if (rtc->irq_task)  			err = -EBUSY; -		spin_unlock(&rtc->irq_task_lock); +		spin_unlock_irq(&rtc->irq_task_lock);  		if (err < 0)  			return err; @@ -300,6 +302,17 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file,  		err = rtc_set_time(class_dev, &tm);  		break; + +	case RTC_IRQP_READ: +		if (ops->irq_set_freq) +			err = put_user(rtc->irq_freq, (unsigned long *) arg); +		break; + +	case RTC_IRQP_SET: +		if (ops->irq_set_freq) +			err = rtc_irq_set_freq(class_dev, rtc->irq_task, arg); +		break; +  #if 0  	case RTC_EPOCH_SET:  #ifndef rtc_epoch  |