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", |