Lines Matching +full:lpc3220 +full:- +full:key
1 // SPDX-License-Identifier: GPL-2.0+
43 __raw_readl((dev)->rtc_base + (reg))
45 __raw_writel((val), (dev)->rtc_base + (reg))
72 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_set_time()
78 rtc_writel(rtc, LPC32XX_RTC_DCOUNT, 0xFFFFFFFF - secs); in lpc32xx_rtc_set_time()
81 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_set_time()
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()
96 return rtc_valid_tm(&wkalrm->time); in lpc32xx_rtc_read_alarm()
106 alarmsecs = rtc_tm_to_time64(&wkalrm->time); in lpc32xx_rtc_set_alarm()
108 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_set_alarm()
116 rtc->alarm_enabled = wkalrm->enabled; in lpc32xx_rtc_set_alarm()
117 if (wkalrm->enabled) { in lpc32xx_rtc_set_alarm()
124 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_set_alarm()
135 spin_lock_irq(&rtc->lock); 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()
147 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_alarm_irq_enable()
156 spin_lock(&rtc->lock); in lpc32xx_rtc_alarm_interrupt()
162 rtc->alarm_enabled = 0; 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()
192 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); in lpc32xx_rtc_probe()
194 return -ENOMEM; in lpc32xx_rtc_probe()
196 rtc->rtc_base = devm_platform_ioremap_resource(pdev, 0); in lpc32xx_rtc_probe()
197 if (IS_ERR(rtc->rtc_base)) in lpc32xx_rtc_probe()
198 return PTR_ERR(rtc->rtc_base); in lpc32xx_rtc_probe()
200 spin_lock_init(&rtc->lock); in lpc32xx_rtc_probe()
225 /* Write key value to RTC so it won't reload on reset */ in lpc32xx_rtc_probe()
235 rtc->rtc = devm_rtc_allocate_device(&pdev->dev); in lpc32xx_rtc_probe()
236 if (IS_ERR(rtc->rtc)) in lpc32xx_rtc_probe()
237 return PTR_ERR(rtc->rtc); in lpc32xx_rtc_probe()
239 rtc->rtc->ops = &lpc32xx_rtc_ops; in lpc32xx_rtc_probe()
240 rtc->rtc->range_max = U32_MAX; in lpc32xx_rtc_probe()
242 err = devm_rtc_register_device(rtc->rtc); in lpc32xx_rtc_probe()
250 rtc->irq = platform_get_irq(pdev, 0); in lpc32xx_rtc_probe()
251 if (rtc->irq < 0) { in lpc32xx_rtc_probe()
252 dev_warn(&pdev->dev, "Can't get interrupt resource\n"); in lpc32xx_rtc_probe()
254 if (devm_request_irq(&pdev->dev, rtc->irq, in lpc32xx_rtc_probe()
256 0, pdev->name, rtc) < 0) { in lpc32xx_rtc_probe()
257 dev_warn(&pdev->dev, "Can't request interrupt.\n"); in lpc32xx_rtc_probe()
258 rtc->irq = -1; in lpc32xx_rtc_probe()
260 device_init_wakeup(&pdev->dev, true); in lpc32xx_rtc_probe()
272 if (rtc->irq >= 0) { in lpc32xx_rtc_suspend()
274 enable_irq_wake(rtc->irq); in lpc32xx_rtc_suspend()
276 disable_irq_wake(rtc->irq); in lpc32xx_rtc_suspend()
286 if (rtc->irq >= 0 && device_may_wakeup(dev)) in lpc32xx_rtc_resume()
287 disable_irq_wake(rtc->irq); in lpc32xx_rtc_resume()
297 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_freeze()
303 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_freeze()
312 if (rtc->alarm_enabled) { in lpc32xx_rtc_thaw()
313 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_thaw()
319 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_thaw()
340 { .compatible = "nxp,lpc3220-rtc" },
349 .name = "rtc-lpc32xx",
360 MODULE_ALIAS("platform:rtc-lpc32xx");