aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc/rtc-sh.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-01-10 21:03:30 -0500
committerIngo Molnar <mingo@elte.hu>2009-01-10 21:03:30 -0500
commitf45ac22ae2b8fc5b4c32d9b8d17ea419a8701d89 (patch)
tree8e05bccd7b85fc3dd2fbd33ec3286de27e152819 /drivers/rtc/rtc-sh.c
parent79f3b3cb7a2586b319a43a7f29924c6c555e4357 (diff)
parentc59765042f53a79a7a65585042ff463b69cb248c (diff)
Merge commit 'v2.6.29-rc1' into x86/urgent
Diffstat (limited to 'drivers/rtc/rtc-sh.c')
-rw-r--r--drivers/rtc/rtc-sh.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/rtc/rtc-sh.c b/drivers/rtc/rtc-sh.c
index aaf9d6a337cc..1c3fc6b428e9 100644
--- a/drivers/rtc/rtc-sh.c
+++ b/drivers/rtc/rtc-sh.c
@@ -24,6 +24,7 @@
24#include <linux/interrupt.h> 24#include <linux/interrupt.h>
25#include <linux/spinlock.h> 25#include <linux/spinlock.h>
26#include <linux/io.h> 26#include <linux/io.h>
27#include <linux/log2.h>
27#include <asm/rtc.h> 28#include <asm/rtc.h>
28 29
29#define DRV_NAME "sh-rtc" 30#define DRV_NAME "sh-rtc"
@@ -89,7 +90,9 @@ struct sh_rtc {
89 void __iomem *regbase; 90 void __iomem *regbase;
90 unsigned long regsize; 91 unsigned long regsize;
91 struct resource *res; 92 struct resource *res;
92 unsigned int alarm_irq, periodic_irq, carry_irq; 93 int alarm_irq;
94 int periodic_irq;
95 int carry_irq;
93 struct rtc_device *rtc_dev; 96 struct rtc_device *rtc_dev;
94 spinlock_t lock; 97 spinlock_t lock;
95 unsigned long capabilities; /* See asm-sh/rtc.h for cap bits */ 98 unsigned long capabilities; /* See asm-sh/rtc.h for cap bits */
@@ -549,6 +552,8 @@ static int sh_rtc_irq_set_state(struct device *dev, int enabled)
549 552
550static int sh_rtc_irq_set_freq(struct device *dev, int freq) 553static int sh_rtc_irq_set_freq(struct device *dev, int freq)
551{ 554{
555 if (!is_power_of_2(freq))
556 return -EINVAL;
552 return sh_rtc_ioctl(dev, RTC_IRQP_SET, freq); 557 return sh_rtc_ioctl(dev, RTC_IRQP_SET, freq);
553} 558}
554 559
@@ -578,7 +583,7 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev)
578 583
579 /* get periodic/carry/alarm irqs */ 584 /* get periodic/carry/alarm irqs */
580 ret = platform_get_irq(pdev, 0); 585 ret = platform_get_irq(pdev, 0);
581 if (unlikely(ret < 0)) { 586 if (unlikely(ret <= 0)) {
582 ret = -ENOENT; 587 ret = -ENOENT;
583 dev_err(&pdev->dev, "No IRQ for period\n"); 588 dev_err(&pdev->dev, "No IRQ for period\n");
584 goto err_badres; 589 goto err_badres;
@@ -586,7 +591,7 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev)
586 rtc->periodic_irq = ret; 591 rtc->periodic_irq = ret;
587 592
588 ret = platform_get_irq(pdev, 1); 593 ret = platform_get_irq(pdev, 1);
589 if (unlikely(ret < 0)) { 594 if (unlikely(ret <= 0)) {
590 ret = -ENOENT; 595 ret = -ENOENT;
591 dev_err(&pdev->dev, "No IRQ for carry\n"); 596 dev_err(&pdev->dev, "No IRQ for carry\n");
592 goto err_badres; 597 goto err_badres;
@@ -594,7 +599,7 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev)
594 rtc->carry_irq = ret; 599 rtc->carry_irq = ret;
595 600
596 ret = platform_get_irq(pdev, 2); 601 ret = platform_get_irq(pdev, 2);
597 if (unlikely(ret < 0)) { 602 if (unlikely(ret <= 0)) {
598 ret = -ENOENT; 603 ret = -ENOENT;
599 dev_err(&pdev->dev, "No IRQ for alarm\n"); 604 dev_err(&pdev->dev, "No IRQ for alarm\n");
600 goto err_badres; 605 goto err_badres;