diff options
Diffstat (limited to 'drivers/rtc/rtc-test.c')
-rw-r--r-- | drivers/rtc/rtc-test.c | 34 |
1 files changed, 12 insertions, 22 deletions
diff --git a/drivers/rtc/rtc-test.c b/drivers/rtc/rtc-test.c index 51725f7755b..7e96254bd36 100644 --- a/drivers/rtc/rtc-test.c +++ b/drivers/rtc/rtc-test.c | |||
@@ -50,24 +50,9 @@ static int test_rtc_proc(struct device *dev, struct seq_file *seq) | |||
50 | return 0; | 50 | return 0; |
51 | } | 51 | } |
52 | 52 | ||
53 | static int test_rtc_ioctl(struct device *dev, unsigned int cmd, | 53 | static int test_rtc_alarm_irq_enable(struct device *dev, unsigned int enable) |
54 | unsigned long arg) | ||
55 | { | 54 | { |
56 | /* We do support interrupts, they're generated | 55 | return 0; |
57 | * using the sysfs interface. | ||
58 | */ | ||
59 | switch (cmd) { | ||
60 | case RTC_PIE_ON: | ||
61 | case RTC_PIE_OFF: | ||
62 | case RTC_UIE_ON: | ||
63 | case RTC_UIE_OFF: | ||
64 | case RTC_AIE_ON: | ||
65 | case RTC_AIE_OFF: | ||
66 | return 0; | ||
67 | |||
68 | default: | ||
69 | return -ENOIOCTLCMD; | ||
70 | } | ||
71 | } | 56 | } |
72 | 57 | ||
73 | static const struct rtc_class_ops test_rtc_ops = { | 58 | static const struct rtc_class_ops test_rtc_ops = { |
@@ -76,7 +61,7 @@ static const struct rtc_class_ops test_rtc_ops = { | |||
76 | .read_alarm = test_rtc_read_alarm, | 61 | .read_alarm = test_rtc_read_alarm, |
77 | .set_alarm = test_rtc_set_alarm, | 62 | .set_alarm = test_rtc_set_alarm, |
78 | .set_mmss = test_rtc_set_mmss, | 63 | .set_mmss = test_rtc_set_mmss, |
79 | .ioctl = test_rtc_ioctl, | 64 | .alarm_irq_enable = test_rtc_alarm_irq_enable, |
80 | }; | 65 | }; |
81 | 66 | ||
82 | static ssize_t test_irq_show(struct device *dev, | 67 | static ssize_t test_irq_show(struct device *dev, |
@@ -93,11 +78,16 @@ static ssize_t test_irq_store(struct device *dev, | |||
93 | struct rtc_device *rtc = platform_get_drvdata(plat_dev); | 78 | struct rtc_device *rtc = platform_get_drvdata(plat_dev); |
94 | 79 | ||
95 | retval = count; | 80 | retval = count; |
96 | if (strncmp(buf, "tick", 4) == 0) | 81 | if (strncmp(buf, "tick", 4) == 0 && rtc->pie_enabled) |
97 | rtc_update_irq(rtc, 1, RTC_PF | RTC_IRQF); | 82 | rtc_update_irq(rtc, 1, RTC_PF | RTC_IRQF); |
98 | else if (strncmp(buf, "alarm", 5) == 0) | 83 | else if (strncmp(buf, "alarm", 5) == 0) { |
99 | rtc_update_irq(rtc, 1, RTC_AF | RTC_IRQF); | 84 | struct rtc_wkalrm alrm; |
100 | else if (strncmp(buf, "update", 6) == 0) | 85 | int err = rtc_read_alarm(rtc, &alrm); |
86 | |||
87 | if (!err && alrm.enabled) | ||
88 | rtc_update_irq(rtc, 1, RTC_AF | RTC_IRQF); | ||
89 | |||
90 | } else if (strncmp(buf, "update", 6) == 0 && rtc->uie_rtctimer.enabled) | ||
101 | rtc_update_irq(rtc, 1, RTC_UF | RTC_IRQF); | 91 | rtc_update_irq(rtc, 1, RTC_UF | RTC_IRQF); |
102 | else | 92 | else |
103 | retval = -EINVAL; | 93 | retval = -EINVAL; |