diff options
| author | Xunlei Pang <pang.xunlei@linaro.org> | 2015-04-01 23:34:31 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2015-04-03 02:18:27 -0400 |
| commit | 482494a8d395877c4776a3d76f89342d7ad7c4c6 (patch) | |
| tree | b508bd4362911f1c7e4e1dd1b78dfc1f6bd96843 /drivers/rtc | |
| parent | 0307b0d77a0830b0fd4a22b5db4a9fa723a5fa5f (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.c | 22 |
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 | */ |
| 176 | static int rtc_update_alarm(struct device *dev, struct rtc_time *alrm) | 176 | static 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 | ||
| 201 | static void mxc_rtc_irq_enable(struct device *dev, unsigned int bit, | 190 | static 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); |
