aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc
diff options
context:
space:
mode:
authorXunlei Pang <pang.xunlei@linaro.org>2015-04-01 23:34:31 -0400
committerIngo Molnar <mingo@kernel.org>2015-04-03 02:18:27 -0400
commit482494a8d395877c4776a3d76f89342d7ad7c4c6 (patch)
treeb508bd4362911f1c7e4e1dd1b78dfc1f6bd96843 /drivers/rtc
parent0307b0d77a0830b0fd4a22b5db4a9fa723a5fa5f (diff)
drivers/rtc/mxc: Modify rtc_update_alarm() not to touch the alarm time
rtc_class_ops's set_alarm() shouldn't deal with the alarm date, as this is handled in the rtc core. See rtc_dev_ioctl()'s RTC_ALM_SET and RTC_WKALM_SET cases. Signed-off-by: Xunlei Pang <pang.xunlei@linaro.org> Signed-off-by: John Stultz <john.stultz@linaro.org> Acked-by: Alessandro Zummo <a.zummo@towertech.it> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/1427945681-29972-12-git-send-email-john.stultz@linaro.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/rtc')
-rw-r--r--drivers/rtc/rtc-mxc.c22
1 files changed, 4 insertions, 18 deletions
diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c
index 3c3f8d10ab43..a7b218ff078d 100644
--- a/drivers/rtc/rtc-mxc.c
+++ b/drivers/rtc/rtc-mxc.c
@@ -173,29 +173,18 @@ static void set_alarm_or_time(struct device *dev, int time_alarm, u32 time)
173 * This function updates the RTC alarm registers and then clears all the 173 * This function updates the RTC alarm registers and then clears all the
174 * interrupt status bits. 174 * interrupt status bits.
175 */ 175 */
176static int rtc_update_alarm(struct device *dev, struct rtc_time *alrm) 176static void rtc_update_alarm(struct device *dev, struct rtc_time *alrm)
177{ 177{
178 struct rtc_time alarm_tm, now_tm; 178 unsigned long time;
179 unsigned long now, time;
180 struct platform_device *pdev = to_platform_device(dev); 179 struct platform_device *pdev = to_platform_device(dev);
181 struct rtc_plat_data *pdata = platform_get_drvdata(pdev); 180 struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
182 void __iomem *ioaddr = pdata->ioaddr; 181 void __iomem *ioaddr = pdata->ioaddr;
183 182
184 now = get_alarm_or_time(dev, MXC_RTC_TIME); 183 rtc_tm_to_time(alrm, &time);
185 rtc_time_to_tm(now, &now_tm);
186 alarm_tm.tm_year = now_tm.tm_year;
187 alarm_tm.tm_mon = now_tm.tm_mon;
188 alarm_tm.tm_mday = now_tm.tm_mday;
189 alarm_tm.tm_hour = alrm->tm_hour;
190 alarm_tm.tm_min = alrm->tm_min;
191 alarm_tm.tm_sec = alrm->tm_sec;
192 rtc_tm_to_time(&alarm_tm, &time);
193 184
194 /* clear all the interrupt status bits */ 185 /* clear all the interrupt status bits */
195 writew(readw(ioaddr + RTC_RTCISR), ioaddr + RTC_RTCISR); 186 writew(readw(ioaddr + RTC_RTCISR), ioaddr + RTC_RTCISR);
196 set_alarm_or_time(dev, MXC_RTC_ALARM, time); 187 set_alarm_or_time(dev, MXC_RTC_ALARM, time);
197
198 return 0;
199} 188}
200 189
201static void mxc_rtc_irq_enable(struct device *dev, unsigned int bit, 190static void mxc_rtc_irq_enable(struct device *dev, unsigned int bit,
@@ -346,11 +335,8 @@ static int mxc_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
346{ 335{
347 struct platform_device *pdev = to_platform_device(dev); 336 struct platform_device *pdev = to_platform_device(dev);
348 struct rtc_plat_data *pdata = platform_get_drvdata(pdev); 337 struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
349 int ret;
350 338
351 ret = rtc_update_alarm(dev, &alrm->time); 339 rtc_update_alarm(dev, &alrm->time);
352 if (ret)
353 return ret;
354 340
355 memcpy(&pdata->g_rtc_alarm, &alrm->time, sizeof(struct rtc_time)); 341 memcpy(&pdata->g_rtc_alarm, &alrm->time, sizeof(struct rtc_time));
356 mxc_rtc_irq_enable(dev, RTC_ALM_BIT, alrm->enabled); 342 mxc_rtc_irq_enable(dev, RTC_ALM_BIT, alrm->enabled);