Lines Matching refs:rtc

51 	struct rtc_device *rtc;  member
58 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_read_time() local
60 elapsed_sec = rtc_readl(rtc, LPC32XX_RTC_UCOUNT); in lpc32xx_rtc_read_time()
68 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_set_time() local
72 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_set_time()
75 tmp = rtc_readl(rtc, LPC32XX_RTC_CTRL); in lpc32xx_rtc_set_time()
76 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp | LPC32XX_RTC_CTRL_CNTR_DIS); in lpc32xx_rtc_set_time()
77 rtc_writel(rtc, LPC32XX_RTC_UCOUNT, secs); in lpc32xx_rtc_set_time()
78 rtc_writel(rtc, LPC32XX_RTC_DCOUNT, 0xFFFFFFFF - secs); in lpc32xx_rtc_set_time()
79 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp &= ~LPC32XX_RTC_CTRL_CNTR_DIS); in lpc32xx_rtc_set_time()
81 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_set_time()
89 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_read_alarm() local
91 rtc_time64_to_tm(rtc_readl(rtc, LPC32XX_RTC_MATCH0), &wkalrm->time); in lpc32xx_rtc_read_alarm()
92 wkalrm->enabled = rtc->alarm_enabled; in lpc32xx_rtc_read_alarm()
93 wkalrm->pending = !!(rtc_readl(rtc, LPC32XX_RTC_INTSTAT) & in lpc32xx_rtc_read_alarm()
102 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_set_alarm() local
108 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_set_alarm()
111 tmp = rtc_readl(rtc, LPC32XX_RTC_CTRL); in lpc32xx_rtc_set_alarm()
112 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp & ~LPC32XX_RTC_CTRL_MATCH0); in lpc32xx_rtc_set_alarm()
114 rtc_writel(rtc, LPC32XX_RTC_MATCH0, alarmsecs); in lpc32xx_rtc_set_alarm()
116 rtc->alarm_enabled = wkalrm->enabled; in lpc32xx_rtc_set_alarm()
118 rtc_writel(rtc, LPC32XX_RTC_INTSTAT, in lpc32xx_rtc_set_alarm()
120 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp | in lpc32xx_rtc_set_alarm()
124 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_set_alarm()
132 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_alarm_irq_enable() local
135 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_alarm_irq_enable()
136 tmp = rtc_readl(rtc, LPC32XX_RTC_CTRL); in lpc32xx_rtc_alarm_irq_enable()
139 rtc->alarm_enabled = 1; in lpc32xx_rtc_alarm_irq_enable()
142 rtc->alarm_enabled = 0; in lpc32xx_rtc_alarm_irq_enable()
146 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp); in lpc32xx_rtc_alarm_irq_enable()
147 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_alarm_irq_enable()
154 struct lpc32xx_rtc *rtc = dev; in lpc32xx_rtc_alarm_interrupt() local
156 spin_lock(&rtc->lock); in lpc32xx_rtc_alarm_interrupt()
159 rtc_writel(rtc, LPC32XX_RTC_CTRL, in lpc32xx_rtc_alarm_interrupt()
160 rtc_readl(rtc, LPC32XX_RTC_CTRL) & in lpc32xx_rtc_alarm_interrupt()
162 rtc->alarm_enabled = 0; in lpc32xx_rtc_alarm_interrupt()
168 rtc_writel(rtc, LPC32XX_RTC_MATCH0, 0xFFFFFFFF); in lpc32xx_rtc_alarm_interrupt()
169 rtc_writel(rtc, LPC32XX_RTC_INTSTAT, LPC32XX_RTC_INTSTAT_MATCH0); in lpc32xx_rtc_alarm_interrupt()
171 spin_unlock(&rtc->lock); in lpc32xx_rtc_alarm_interrupt()
173 rtc_update_irq(rtc->rtc, 1, RTC_IRQF | RTC_AF); in lpc32xx_rtc_alarm_interrupt()
189 struct lpc32xx_rtc *rtc; in lpc32xx_rtc_probe() local
193 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); in lpc32xx_rtc_probe()
194 if (unlikely(!rtc)) in lpc32xx_rtc_probe()
198 rtc->rtc_base = devm_ioremap_resource(&pdev->dev, res); in lpc32xx_rtc_probe()
199 if (IS_ERR(rtc->rtc_base)) in lpc32xx_rtc_probe()
200 return PTR_ERR(rtc->rtc_base); in lpc32xx_rtc_probe()
202 spin_lock_init(&rtc->lock); in lpc32xx_rtc_probe()
209 tmp = rtc_readl(rtc, LPC32XX_RTC_CTRL); in lpc32xx_rtc_probe()
210 if (rtc_readl(rtc, LPC32XX_RTC_KEY) != LPC32XX_RTC_KEY_ONSW_LOADVAL) { in lpc32xx_rtc_probe()
218 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp); in lpc32xx_rtc_probe()
221 rtc_writel(rtc, LPC32XX_RTC_MATCH0, 0xFFFFFFFF); in lpc32xx_rtc_probe()
222 rtc_writel(rtc, LPC32XX_RTC_INTSTAT, in lpc32xx_rtc_probe()
228 rtc_writel(rtc, LPC32XX_RTC_KEY, in lpc32xx_rtc_probe()
231 rtc_writel(rtc, LPC32XX_RTC_CTRL, in lpc32xx_rtc_probe()
235 platform_set_drvdata(pdev, rtc); in lpc32xx_rtc_probe()
237 rtc->rtc = devm_rtc_allocate_device(&pdev->dev); in lpc32xx_rtc_probe()
238 if (IS_ERR(rtc->rtc)) in lpc32xx_rtc_probe()
239 return PTR_ERR(rtc->rtc); in lpc32xx_rtc_probe()
241 rtc->rtc->ops = &lpc32xx_rtc_ops; in lpc32xx_rtc_probe()
242 rtc->rtc->range_max = U32_MAX; in lpc32xx_rtc_probe()
244 err = rtc_register_device(rtc->rtc); in lpc32xx_rtc_probe()
252 rtc->irq = platform_get_irq(pdev, 0); in lpc32xx_rtc_probe()
253 if (rtc->irq < 0) { in lpc32xx_rtc_probe()
256 if (devm_request_irq(&pdev->dev, rtc->irq, in lpc32xx_rtc_probe()
258 0, pdev->name, rtc) < 0) { in lpc32xx_rtc_probe()
260 rtc->irq = -1; in lpc32xx_rtc_probe()
271 struct lpc32xx_rtc *rtc = platform_get_drvdata(pdev); in lpc32xx_rtc_remove() local
273 if (rtc->irq >= 0) in lpc32xx_rtc_remove()
282 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_suspend() local
284 if (rtc->irq >= 0) { in lpc32xx_rtc_suspend()
286 enable_irq_wake(rtc->irq); in lpc32xx_rtc_suspend()
288 disable_irq_wake(rtc->irq); in lpc32xx_rtc_suspend()
296 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_resume() local
298 if (rtc->irq >= 0 && device_may_wakeup(dev)) in lpc32xx_rtc_resume()
299 disable_irq_wake(rtc->irq); in lpc32xx_rtc_resume()
307 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_freeze() local
309 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_freeze()
311 rtc_writel(rtc, LPC32XX_RTC_CTRL, in lpc32xx_rtc_freeze()
312 rtc_readl(rtc, LPC32XX_RTC_CTRL) & in lpc32xx_rtc_freeze()
315 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_freeze()
322 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_thaw() local
324 if (rtc->alarm_enabled) { in lpc32xx_rtc_thaw()
325 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_thaw()
327 rtc_writel(rtc, LPC32XX_RTC_CTRL, in lpc32xx_rtc_thaw()
328 rtc_readl(rtc, LPC32XX_RTC_CTRL) | in lpc32xx_rtc_thaw()
331 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_thaw()