Lines Matching refs:rtc
61 static inline void ftm_counter_enable(struct ftm_rtc *rtc) in ftm_counter_enable() argument
66 val = rtc_readl(rtc, FTM_SC); in ftm_counter_enable()
69 rtc_writel(rtc, FTM_SC, val); in ftm_counter_enable()
72 static inline void ftm_counter_disable(struct ftm_rtc *rtc) in ftm_counter_disable() argument
77 val = rtc_readl(rtc, FTM_SC); in ftm_counter_disable()
79 rtc_writel(rtc, FTM_SC, val); in ftm_counter_disable()
82 static inline void ftm_irq_acknowledge(struct ftm_rtc *rtc) in ftm_irq_acknowledge() argument
107 while ((FTM_SC_TOF & rtc_readl(rtc, FTM_SC)) && timeout--) in ftm_irq_acknowledge()
108 rtc_writel(rtc, FTM_SC, rtc_readl(rtc, FTM_SC) & (~FTM_SC_TOF)); in ftm_irq_acknowledge()
111 static inline void ftm_irq_enable(struct ftm_rtc *rtc) in ftm_irq_enable() argument
115 val = rtc_readl(rtc, FTM_SC); in ftm_irq_enable()
117 rtc_writel(rtc, FTM_SC, val); in ftm_irq_enable()
120 static inline void ftm_irq_disable(struct ftm_rtc *rtc) in ftm_irq_disable() argument
124 val = rtc_readl(rtc, FTM_SC); in ftm_irq_disable()
126 rtc_writel(rtc, FTM_SC, val); in ftm_irq_disable()
129 static inline void ftm_reset_counter(struct ftm_rtc *rtc) in ftm_reset_counter() argument
136 rtc_writel(rtc, FTM_CNT, 0x00); in ftm_reset_counter()
139 static void ftm_clean_alarm(struct ftm_rtc *rtc) in ftm_clean_alarm() argument
141 ftm_counter_disable(rtc); in ftm_clean_alarm()
143 rtc_writel(rtc, FTM_CNTIN, 0x00); in ftm_clean_alarm()
144 rtc_writel(rtc, FTM_MOD, ~0U); in ftm_clean_alarm()
146 ftm_reset_counter(rtc); in ftm_clean_alarm()
151 struct ftm_rtc *rtc = dev; in ftm_rtc_alarm_interrupt() local
153 rtc_update_irq(rtc->rtc_dev, 1, RTC_IRQF | RTC_AF); in ftm_rtc_alarm_interrupt()
155 ftm_irq_acknowledge(rtc); in ftm_rtc_alarm_interrupt()
156 ftm_irq_disable(rtc); in ftm_rtc_alarm_interrupt()
157 ftm_clean_alarm(rtc); in ftm_rtc_alarm_interrupt()
165 struct ftm_rtc *rtc = dev_get_drvdata(dev); in ftm_rtc_alarm_irq_enable() local
168 ftm_irq_enable(rtc); in ftm_rtc_alarm_irq_enable()
170 ftm_irq_disable(rtc); in ftm_rtc_alarm_irq_enable()
209 struct ftm_rtc *rtc = dev_get_drvdata(dev); in ftm_rtc_set_alarm() local
213 ftm_clean_alarm(rtc); in ftm_rtc_set_alarm()
214 cycle = (alm_time - ktime_get_real_seconds()) * rtc->alarm_freq; in ftm_rtc_set_alarm()
220 ftm_irq_disable(rtc); in ftm_rtc_set_alarm()
228 rtc_writel(rtc, FTM_MOD, cycle - 1); in ftm_rtc_set_alarm()
230 ftm_counter_enable(rtc); in ftm_rtc_set_alarm()
231 ftm_irq_enable(rtc); in ftm_rtc_set_alarm()
248 struct ftm_rtc *rtc; in ftm_rtc_probe() local
250 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); in ftm_rtc_probe()
251 if (unlikely(!rtc)) { in ftm_rtc_probe()
256 platform_set_drvdata(pdev, rtc); in ftm_rtc_probe()
258 rtc->rtc_dev = devm_rtc_allocate_device(&pdev->dev); in ftm_rtc_probe()
259 if (IS_ERR(rtc->rtc_dev)) in ftm_rtc_probe()
260 return PTR_ERR(rtc->rtc_dev); in ftm_rtc_probe()
262 rtc->base = devm_platform_ioremap_resource(pdev, 0); in ftm_rtc_probe()
263 if (IS_ERR(rtc->base)) { in ftm_rtc_probe()
265 return PTR_ERR(rtc->base); in ftm_rtc_probe()
273 0, dev_name(&pdev->dev), rtc); in ftm_rtc_probe()
279 rtc->big_endian = in ftm_rtc_probe()
282 rtc->alarm_freq = (u32)FIXED_FREQ_CLK / (u32)MAX_FREQ_DIV; in ftm_rtc_probe()
283 rtc->rtc_dev->ops = &ftm_rtc_ops; in ftm_rtc_probe()
290 ret = devm_rtc_register_device(rtc->rtc_dev); in ftm_rtc_probe()