Lines Matching refs:rtc
61 struct rtc_device *rtc; member
68 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_read_time() local
70 elapsed_sec = rtc_readl(rtc, LPC32XX_RTC_UCOUNT); in lpc32xx_rtc_read_time()
78 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_set_mmss() local
81 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_set_mmss()
84 tmp = rtc_readl(rtc, LPC32XX_RTC_CTRL); in lpc32xx_rtc_set_mmss()
85 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp | LPC32XX_RTC_CTRL_CNTR_DIS); in lpc32xx_rtc_set_mmss()
86 rtc_writel(rtc, LPC32XX_RTC_UCOUNT, secs); in lpc32xx_rtc_set_mmss()
87 rtc_writel(rtc, LPC32XX_RTC_DCOUNT, 0xFFFFFFFF - secs); in lpc32xx_rtc_set_mmss()
88 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp &= ~LPC32XX_RTC_CTRL_CNTR_DIS); in lpc32xx_rtc_set_mmss()
90 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_set_mmss()
98 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_read_alarm() local
100 rtc_time_to_tm(rtc_readl(rtc, LPC32XX_RTC_MATCH0), &wkalrm->time); in lpc32xx_rtc_read_alarm()
101 wkalrm->enabled = rtc->alarm_enabled; in lpc32xx_rtc_read_alarm()
102 wkalrm->pending = !!(rtc_readl(rtc, LPC32XX_RTC_INTSTAT) & in lpc32xx_rtc_read_alarm()
111 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_set_alarm() local
122 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_set_alarm()
125 tmp = rtc_readl(rtc, LPC32XX_RTC_CTRL); in lpc32xx_rtc_set_alarm()
126 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp & ~LPC32XX_RTC_CTRL_MATCH0); in lpc32xx_rtc_set_alarm()
128 rtc_writel(rtc, LPC32XX_RTC_MATCH0, alarmsecs); in lpc32xx_rtc_set_alarm()
130 rtc->alarm_enabled = wkalrm->enabled; in lpc32xx_rtc_set_alarm()
132 rtc_writel(rtc, LPC32XX_RTC_INTSTAT, in lpc32xx_rtc_set_alarm()
134 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp | in lpc32xx_rtc_set_alarm()
138 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_set_alarm()
146 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_alarm_irq_enable() local
149 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_alarm_irq_enable()
150 tmp = rtc_readl(rtc, LPC32XX_RTC_CTRL); in lpc32xx_rtc_alarm_irq_enable()
153 rtc->alarm_enabled = 1; in lpc32xx_rtc_alarm_irq_enable()
156 rtc->alarm_enabled = 0; in lpc32xx_rtc_alarm_irq_enable()
160 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp); in lpc32xx_rtc_alarm_irq_enable()
161 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_alarm_irq_enable()
168 struct lpc32xx_rtc *rtc = dev; in lpc32xx_rtc_alarm_interrupt() local
170 spin_lock(&rtc->lock); in lpc32xx_rtc_alarm_interrupt()
173 rtc_writel(rtc, LPC32XX_RTC_CTRL, in lpc32xx_rtc_alarm_interrupt()
174 rtc_readl(rtc, LPC32XX_RTC_CTRL) & in lpc32xx_rtc_alarm_interrupt()
176 rtc->alarm_enabled = 0; in lpc32xx_rtc_alarm_interrupt()
182 rtc_writel(rtc, LPC32XX_RTC_MATCH0, 0xFFFFFFFF); in lpc32xx_rtc_alarm_interrupt()
183 rtc_writel(rtc, LPC32XX_RTC_INTSTAT, LPC32XX_RTC_INTSTAT_MATCH0); in lpc32xx_rtc_alarm_interrupt()
185 spin_unlock(&rtc->lock); in lpc32xx_rtc_alarm_interrupt()
187 rtc_update_irq(rtc->rtc, 1, RTC_IRQF | RTC_AF); in lpc32xx_rtc_alarm_interrupt()
203 struct lpc32xx_rtc *rtc; in lpc32xx_rtc_probe() local
213 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); in lpc32xx_rtc_probe()
214 if (unlikely(!rtc)) in lpc32xx_rtc_probe()
217 rtc->irq = rtcirq; in lpc32xx_rtc_probe()
220 rtc->rtc_base = devm_ioremap_resource(&pdev->dev, res); in lpc32xx_rtc_probe()
221 if (IS_ERR(rtc->rtc_base)) in lpc32xx_rtc_probe()
222 return PTR_ERR(rtc->rtc_base); in lpc32xx_rtc_probe()
224 spin_lock_init(&rtc->lock); in lpc32xx_rtc_probe()
231 tmp = rtc_readl(rtc, LPC32XX_RTC_CTRL); in lpc32xx_rtc_probe()
232 if (rtc_readl(rtc, LPC32XX_RTC_KEY) != LPC32XX_RTC_KEY_ONSW_LOADVAL) { in lpc32xx_rtc_probe()
240 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp); in lpc32xx_rtc_probe()
243 rtc_writel(rtc, LPC32XX_RTC_MATCH0, 0xFFFFFFFF); in lpc32xx_rtc_probe()
244 rtc_writel(rtc, LPC32XX_RTC_INTSTAT, in lpc32xx_rtc_probe()
250 rtc_writel(rtc, LPC32XX_RTC_KEY, in lpc32xx_rtc_probe()
253 rtc_writel(rtc, LPC32XX_RTC_CTRL, in lpc32xx_rtc_probe()
257 platform_set_drvdata(pdev, rtc); in lpc32xx_rtc_probe()
259 rtc->rtc = devm_rtc_device_register(&pdev->dev, RTC_NAME, in lpc32xx_rtc_probe()
261 if (IS_ERR(rtc->rtc)) { in lpc32xx_rtc_probe()
263 return PTR_ERR(rtc->rtc); in lpc32xx_rtc_probe()
270 if (rtc->irq >= 0) { in lpc32xx_rtc_probe()
271 if (devm_request_irq(&pdev->dev, rtc->irq, in lpc32xx_rtc_probe()
273 0, pdev->name, rtc) < 0) { in lpc32xx_rtc_probe()
275 rtc->irq = -1; in lpc32xx_rtc_probe()
286 struct lpc32xx_rtc *rtc = platform_get_drvdata(pdev); in lpc32xx_rtc_remove() local
288 if (rtc->irq >= 0) in lpc32xx_rtc_remove()
298 struct lpc32xx_rtc *rtc = platform_get_drvdata(pdev); in lpc32xx_rtc_suspend() local
300 if (rtc->irq >= 0) { in lpc32xx_rtc_suspend()
302 enable_irq_wake(rtc->irq); in lpc32xx_rtc_suspend()
304 disable_irq_wake(rtc->irq); in lpc32xx_rtc_suspend()
313 struct lpc32xx_rtc *rtc = platform_get_drvdata(pdev); in lpc32xx_rtc_resume() local
315 if (rtc->irq >= 0 && device_may_wakeup(&pdev->dev)) in lpc32xx_rtc_resume()
316 disable_irq_wake(rtc->irq); in lpc32xx_rtc_resume()
325 struct lpc32xx_rtc *rtc = platform_get_drvdata(pdev); in lpc32xx_rtc_freeze() local
327 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_freeze()
329 rtc_writel(rtc, LPC32XX_RTC_CTRL, in lpc32xx_rtc_freeze()
330 rtc_readl(rtc, LPC32XX_RTC_CTRL) & in lpc32xx_rtc_freeze()
333 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_freeze()
341 struct lpc32xx_rtc *rtc = platform_get_drvdata(pdev); in lpc32xx_rtc_thaw() local
343 if (rtc->alarm_enabled) { in lpc32xx_rtc_thaw()
344 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_thaw()
346 rtc_writel(rtc, LPC32XX_RTC_CTRL, in lpc32xx_rtc_thaw()
347 rtc_readl(rtc, LPC32XX_RTC_CTRL) | in lpc32xx_rtc_thaw()
350 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_thaw()