rtc-lpc32xx.c (ba4a84f5ab6ef91394d745812131a443514f4a99) rtc-lpc32xx.c (f04dd349a343c9399b8e8fe17359fe94cd63d539)
1/*
2 * Copyright (C) 2010 NXP Semiconductors
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *

--- 52 unchanged lines hidden (view full) ---

61};
62
63static int lpc32xx_rtc_read_time(struct device *dev, struct rtc_time *time)
64{
65 unsigned long elapsed_sec;
66 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev);
67
68 elapsed_sec = rtc_readl(rtc, LPC32XX_RTC_UCOUNT);
1/*
2 * Copyright (C) 2010 NXP Semiconductors
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *

--- 52 unchanged lines hidden (view full) ---

61};
62
63static int lpc32xx_rtc_read_time(struct device *dev, struct rtc_time *time)
64{
65 unsigned long elapsed_sec;
66 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev);
67
68 elapsed_sec = rtc_readl(rtc, LPC32XX_RTC_UCOUNT);
69 rtc_time_to_tm(elapsed_sec, time);
69 rtc_time64_to_tm(elapsed_sec, time);
70
71 return 0;
72}
73
74static int lpc32xx_rtc_set_mmss(struct device *dev, unsigned long secs)
75{
76 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev);
77 u32 tmp;

--- 12 unchanged lines hidden (view full) ---

90 return 0;
91}
92
93static int lpc32xx_rtc_read_alarm(struct device *dev,
94 struct rtc_wkalrm *wkalrm)
95{
96 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev);
97
70
71 return 0;
72}
73
74static int lpc32xx_rtc_set_mmss(struct device *dev, unsigned long secs)
75{
76 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev);
77 u32 tmp;

--- 12 unchanged lines hidden (view full) ---

90 return 0;
91}
92
93static int lpc32xx_rtc_read_alarm(struct device *dev,
94 struct rtc_wkalrm *wkalrm)
95{
96 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev);
97
98 rtc_time_to_tm(rtc_readl(rtc, LPC32XX_RTC_MATCH0), &wkalrm->time);
98 rtc_time64_to_tm(rtc_readl(rtc, LPC32XX_RTC_MATCH0), &wkalrm->time);
99 wkalrm->enabled = rtc->alarm_enabled;
100 wkalrm->pending = !!(rtc_readl(rtc, LPC32XX_RTC_INTSTAT) &
101 LPC32XX_RTC_INTSTAT_MATCH0);
102
103 return rtc_valid_tm(&wkalrm->time);
104}
105
106static int lpc32xx_rtc_set_alarm(struct device *dev,
107 struct rtc_wkalrm *wkalrm)
108{
109 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev);
110 unsigned long alarmsecs;
111 u32 tmp;
99 wkalrm->enabled = rtc->alarm_enabled;
100 wkalrm->pending = !!(rtc_readl(rtc, LPC32XX_RTC_INTSTAT) &
101 LPC32XX_RTC_INTSTAT_MATCH0);
102
103 return rtc_valid_tm(&wkalrm->time);
104}
105
106static int lpc32xx_rtc_set_alarm(struct device *dev,
107 struct rtc_wkalrm *wkalrm)
108{
109 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev);
110 unsigned long alarmsecs;
111 u32 tmp;
112 int ret;
113
112
114 ret = rtc_tm_to_time(&wkalrm->time, &alarmsecs);
115 if (ret < 0) {
116 dev_warn(dev, "Failed to convert time: %d\n", ret);
117 return ret;
118 }
113 alarmsecs = rtc_tm_to_time64(&wkalrm->time);
119
120 spin_lock_irq(&rtc->lock);
121
122 /* Disable alarm during update */
123 tmp = rtc_readl(rtc, LPC32XX_RTC_CTRL);
124 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp & ~LPC32XX_RTC_CTRL_MATCH0);
125
126 rtc_writel(rtc, LPC32XX_RTC_MATCH0, alarmsecs);

--- 259 unchanged lines hidden ---
114
115 spin_lock_irq(&rtc->lock);
116
117 /* Disable alarm during update */
118 tmp = rtc_readl(rtc, LPC32XX_RTC_CTRL);
119 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp & ~LPC32XX_RTC_CTRL_MATCH0);
120
121 rtc_writel(rtc, LPC32XX_RTC_MATCH0, alarmsecs);

--- 259 unchanged lines hidden ---