diff options
Diffstat (limited to 'drivers/rtc')
| -rw-r--r-- | drivers/rtc/rtc-dev.c | 17 | ||||
| -rw-r--r-- | drivers/rtc/rtc-sa1100.c | 6 |
2 files changed, 14 insertions, 9 deletions
diff --git a/drivers/rtc/rtc-dev.c b/drivers/rtc/rtc-dev.c index b1e3e6179e56..6c9ad92747fd 100644 --- a/drivers/rtc/rtc-dev.c +++ b/drivers/rtc/rtc-dev.c | |||
| @@ -58,7 +58,7 @@ rtc_dev_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) | |||
| 58 | unsigned long data; | 58 | unsigned long data; |
| 59 | ssize_t ret; | 59 | ssize_t ret; |
| 60 | 60 | ||
| 61 | if (count < sizeof(unsigned long)) | 61 | if (count != sizeof(unsigned int) && count < sizeof(unsigned long)) |
| 62 | return -EINVAL; | 62 | return -EINVAL; |
| 63 | 63 | ||
| 64 | add_wait_queue(&rtc->irq_queue, &wait); | 64 | add_wait_queue(&rtc->irq_queue, &wait); |
| @@ -90,11 +90,16 @@ rtc_dev_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) | |||
| 90 | if (ret == 0) { | 90 | if (ret == 0) { |
| 91 | /* Check for any data updates */ | 91 | /* Check for any data updates */ |
| 92 | if (rtc->ops->read_callback) | 92 | if (rtc->ops->read_callback) |
| 93 | data = rtc->ops->read_callback(rtc->class_dev.dev, data); | 93 | data = rtc->ops->read_callback(rtc->class_dev.dev, |
| 94 | 94 | data); | |
| 95 | ret = put_user(data, (unsigned long __user *)buf); | 95 | |
| 96 | if (ret == 0) | 96 | if (sizeof(int) != sizeof(long) && |
| 97 | ret = sizeof(unsigned long); | 97 | count == sizeof(unsigned int)) |
| 98 | ret = put_user(data, (unsigned int __user *)buf) ?: | ||
| 99 | sizeof(unsigned int); | ||
| 100 | else | ||
| 101 | ret = put_user(data, (unsigned long __user *)buf) ?: | ||
| 102 | sizeof(unsigned long); | ||
| 98 | } | 103 | } |
| 99 | return ret; | 104 | return ret; |
| 100 | } | 105 | } |
diff --git a/drivers/rtc/rtc-sa1100.c b/drivers/rtc/rtc-sa1100.c index a23ec54989f6..2bc8aad47219 100644 --- a/drivers/rtc/rtc-sa1100.c +++ b/drivers/rtc/rtc-sa1100.c | |||
| @@ -178,9 +178,9 @@ static int sa1100_rtc_open(struct device *dev) | |||
| 178 | return 0; | 178 | return 0; |
| 179 | 179 | ||
| 180 | fail_pi: | 180 | fail_pi: |
| 181 | free_irq(IRQ_RTCAlrm, NULL); | 181 | free_irq(IRQ_RTCAlrm, dev); |
| 182 | fail_ai: | 182 | fail_ai: |
| 183 | free_irq(IRQ_RTC1Hz, NULL); | 183 | free_irq(IRQ_RTC1Hz, dev); |
| 184 | fail_ui: | 184 | fail_ui: |
| 185 | return ret; | 185 | return ret; |
| 186 | } | 186 | } |
| @@ -295,7 +295,7 @@ static int sa1100_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
| 295 | 295 | ||
| 296 | static int sa1100_rtc_proc(struct device *dev, struct seq_file *seq) | 296 | static int sa1100_rtc_proc(struct device *dev, struct seq_file *seq) |
| 297 | { | 297 | { |
| 298 | seq_printf(seq, "trim/divider\t: 0x%08x\n", RTTR); | 298 | seq_printf(seq, "trim/divider\t: 0x%08lx\n", RTTR); |
| 299 | seq_printf(seq, "alarm_IRQ\t: %s\n", | 299 | seq_printf(seq, "alarm_IRQ\t: %s\n", |
| 300 | (RTSR & RTSR_ALE) ? "yes" : "no" ); | 300 | (RTSR & RTSR_ALE) ? "yes" : "no" ); |
| 301 | seq_printf(seq, "update_IRQ\t: %s\n", | 301 | seq_printf(seq, "update_IRQ\t: %s\n", |
