diff options
Diffstat (limited to 'drivers/rtc')
| -rw-r--r-- | drivers/rtc/interface.c | 3 | ||||
| -rw-r--r-- | drivers/rtc/rtc-cmos.c | 3 | ||||
| -rw-r--r-- | drivers/rtc/rtc-s3c.c | 3 | ||||
| -rw-r--r-- | drivers/rtc/rtc-sh.c | 3 | ||||
| -rw-r--r-- | drivers/rtc/rtc-vr41xx.c | 3 | 
5 files changed, 12 insertions, 3 deletions
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c index 43276f29d63..50482d1321e 100644 --- a/drivers/rtc/interface.c +++ b/drivers/rtc/interface.c @@ -504,9 +504,6 @@ int rtc_irq_set_freq(struct rtc_device *rtc, struct rtc_task *task, int freq)  	if (rtc->ops->irq_set_freq == NULL)  		return -ENXIO; -	if (!is_power_of_2(freq)) -		return -EINVAL; -  	spin_lock_irqsave(&rtc->irq_task_lock, flags);  	if (rtc->irq_task != NULL && task == NULL)  		err = -EBUSY; diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c index cf98a5d8358..b6d35f50e40 100644 --- a/drivers/rtc/rtc-cmos.c +++ b/drivers/rtc/rtc-cmos.c @@ -35,6 +35,7 @@  #include <linux/spinlock.h>  #include <linux/platform_device.h>  #include <linux/mod_devicetable.h> +#include <linux/log2.h>  /* this is for "generic access to PC-style RTC" using CMOS_READ/CMOS_WRITE */  #include <asm-generic/rtc.h> @@ -384,6 +385,8 @@ static int cmos_irq_set_freq(struct device *dev, int freq)  	if (!is_valid_irq(cmos->irq))  		return -ENXIO; +	if (!is_power_of_2(freq)) +		return -EINVAL;  	/* 0 = no irqs; 1 = 2^15 Hz ... 15 = 2^0 Hz */  	f = ffs(freq);  	if (f-- > 16) diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c index 7a568beba3f..e0d7b999150 100644 --- a/drivers/rtc/rtc-s3c.c +++ b/drivers/rtc/rtc-s3c.c @@ -94,6 +94,9 @@ static int s3c_rtc_setfreq(struct device *dev, int freq)  {  	unsigned int tmp; +	if (!is_power_of_2(freq)) +		return -EINVAL; +  	spin_lock_irq(&s3c_rtc_pie_lock);  	tmp = readb(s3c_rtc_base + S3C2410_TICNT) & S3C2410_TICNT_ENABLE; diff --git a/drivers/rtc/rtc-sh.c b/drivers/rtc/rtc-sh.c index 5ed66acf8ca..1c3fc6b428e 100644 --- a/drivers/rtc/rtc-sh.c +++ b/drivers/rtc/rtc-sh.c @@ -24,6 +24,7 @@  #include <linux/interrupt.h>  #include <linux/spinlock.h>  #include <linux/io.h> +#include <linux/log2.h>  #include <asm/rtc.h>  #define DRV_NAME	"sh-rtc" @@ -551,6 +552,8 @@ static int sh_rtc_irq_set_state(struct device *dev, int enabled)  static int sh_rtc_irq_set_freq(struct device *dev, int freq)  { +	if (!is_power_of_2(freq)) +		return -EINVAL;  	return sh_rtc_ioctl(dev, RTC_IRQP_SET, freq);  } diff --git a/drivers/rtc/rtc-vr41xx.c b/drivers/rtc/rtc-vr41xx.c index 57b7aac092a..f11297aff85 100644 --- a/drivers/rtc/rtc-vr41xx.c +++ b/drivers/rtc/rtc-vr41xx.c @@ -27,6 +27,7 @@  #include <linux/rtc.h>  #include <linux/spinlock.h>  #include <linux/types.h> +#include <linux/log2.h>  #include <asm/div64.h>  #include <asm/io.h> @@ -210,6 +211,8 @@ static int vr41xx_rtc_irq_set_freq(struct device *dev, int freq)  {  	unsigned long count; +	if (!is_power_of_2(freq)) +		return -EINVAL;  	count = RTC_FREQUENCY;  	do_div(count, freq);  |