提交 2601a464 编写于 作者: D David Brownell 提交者: Linus Torvalds

[PATCH] rtc framework handles periodic irqs

The RTC framework has an irq_set_freq() method that should be used to manage
the periodic IRQ frequency, but the current ioctl logic doesn't know how to do
that.  This patch teaches it how.

This means that drivers implementing irq_set_freq() will automatically support
RTC_IRQP_{READ,SET} ioctls; that logic doesn't need duplication within the
driver.

[akpm@osdl.org: export rtc_irq_set_freq]
Signed-off-by: NDavid Brownell <dbrownell@users.sourceforge.net>
Acked-by: NAlessandro Zummo <a.zummo@towertech.it>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 7531d8fa
...@@ -265,3 +265,4 @@ int rtc_irq_set_freq(struct class_device *class_dev, struct rtc_task *task, int ...@@ -265,3 +265,4 @@ int rtc_irq_set_freq(struct class_device *class_dev, struct rtc_task *task, int
} }
return err; return err;
} }
EXPORT_SYMBOL_GPL(rtc_irq_set_freq);
...@@ -214,7 +214,7 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file, ...@@ -214,7 +214,7 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file,
struct rtc_wkalrm alarm; struct rtc_wkalrm alarm;
void __user *uarg = (void __user *) arg; 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 * for certain ioctls. doing this check here is useful
* to avoid duplicate code in each driver. * to avoid duplicate code in each driver.
*/ */
...@@ -299,6 +299,17 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file, ...@@ -299,6 +299,17 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file,
err = rtc_set_time(class_dev, &tm); err = rtc_set_time(class_dev, &tm);
break; 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 #if 0
case RTC_EPOCH_SET: case RTC_EPOCH_SET:
#ifndef rtc_epoch #ifndef rtc_epoch
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册