Lines Matching refs:rtc

75 static int mtk_rtc_write_trigger(struct mt6397_rtc *rtc)  in mtk_rtc_write_trigger()  argument
81 ret = regmap_write(rtc->regmap, rtc->addr_base + RTC_WRTGR, 1); in mtk_rtc_write_trigger()
86 ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_BBPU, in mtk_rtc_write_trigger()
104 struct mt6397_rtc *rtc = data; in mtk_rtc_irq_handler_thread() local
108 ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_IRQ_STA, &irqsta); in mtk_rtc_irq_handler_thread()
110 rtc_update_irq(rtc->rtc_dev, 1, RTC_IRQF | RTC_AF); in mtk_rtc_irq_handler_thread()
112 mutex_lock(&rtc->lock); in mtk_rtc_irq_handler_thread()
113 if (regmap_write(rtc->regmap, rtc->addr_base + RTC_IRQ_EN, in mtk_rtc_irq_handler_thread()
115 mtk_rtc_write_trigger(rtc); in mtk_rtc_irq_handler_thread()
116 mutex_unlock(&rtc->lock); in mtk_rtc_irq_handler_thread()
124 static int __mtk_rtc_read_time(struct mt6397_rtc *rtc, in __mtk_rtc_read_time() argument
130 mutex_lock(&rtc->lock); in __mtk_rtc_read_time()
131 ret = regmap_bulk_read(rtc->regmap, rtc->addr_base + RTC_TC_SEC, in __mtk_rtc_read_time()
143 ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_TC_SEC, sec); in __mtk_rtc_read_time()
145 mutex_unlock(&rtc->lock); in __mtk_rtc_read_time()
152 struct mt6397_rtc *rtc = dev_get_drvdata(dev); in mtk_rtc_read_time() local
156 ret = __mtk_rtc_read_time(rtc, tm, &sec); in mtk_rtc_read_time()
183 struct mt6397_rtc *rtc = dev_get_drvdata(dev); in mtk_rtc_set_time() local
197 mutex_lock(&rtc->lock); in mtk_rtc_set_time()
198 ret = regmap_bulk_write(rtc->regmap, rtc->addr_base + RTC_TC_SEC, in mtk_rtc_set_time()
204 ret = mtk_rtc_write_trigger(rtc); in mtk_rtc_set_time()
207 mutex_unlock(&rtc->lock); in mtk_rtc_set_time()
214 struct mt6397_rtc *rtc = dev_get_drvdata(dev); in mtk_rtc_read_alarm() local
219 mutex_lock(&rtc->lock); in mtk_rtc_read_alarm()
220 ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_IRQ_EN, &irqen); in mtk_rtc_read_alarm()
223 ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_PDN2, &pdn2); in mtk_rtc_read_alarm()
227 ret = regmap_bulk_read(rtc->regmap, rtc->addr_base + RTC_AL_SEC, in mtk_rtc_read_alarm()
234 mutex_unlock(&rtc->lock); in mtk_rtc_read_alarm()
248 mutex_unlock(&rtc->lock); in mtk_rtc_read_alarm()
255 struct mt6397_rtc *rtc = dev_get_drvdata(dev); in mtk_rtc_set_alarm() local
269 mutex_lock(&rtc->lock); in mtk_rtc_set_alarm()
271 ret = regmap_bulk_write(rtc->regmap, in mtk_rtc_set_alarm()
272 rtc->addr_base + RTC_AL_SEC, in mtk_rtc_set_alarm()
276 ret = regmap_write(rtc->regmap, rtc->addr_base + RTC_AL_MASK, in mtk_rtc_set_alarm()
280 ret = regmap_update_bits(rtc->regmap, in mtk_rtc_set_alarm()
281 rtc->addr_base + RTC_IRQ_EN, in mtk_rtc_set_alarm()
287 ret = regmap_update_bits(rtc->regmap, in mtk_rtc_set_alarm()
288 rtc->addr_base + RTC_IRQ_EN, in mtk_rtc_set_alarm()
298 ret = mtk_rtc_write_trigger(rtc); in mtk_rtc_set_alarm()
300 mutex_unlock(&rtc->lock); in mtk_rtc_set_alarm()
315 struct mt6397_rtc *rtc; in mtk_rtc_probe() local
318 rtc = devm_kzalloc(&pdev->dev, sizeof(struct mt6397_rtc), GFP_KERNEL); in mtk_rtc_probe()
319 if (!rtc) in mtk_rtc_probe()
323 rtc->addr_base = res->start; in mtk_rtc_probe()
326 rtc->irq = irq_create_mapping(mt6397_chip->irq_domain, res->start); in mtk_rtc_probe()
327 if (rtc->irq <= 0) in mtk_rtc_probe()
330 rtc->regmap = mt6397_chip->regmap; in mtk_rtc_probe()
331 rtc->dev = &pdev->dev; in mtk_rtc_probe()
332 mutex_init(&rtc->lock); in mtk_rtc_probe()
334 platform_set_drvdata(pdev, rtc); in mtk_rtc_probe()
336 ret = request_threaded_irq(rtc->irq, NULL, in mtk_rtc_probe()
339 "mt6397-rtc", rtc); in mtk_rtc_probe()
342 rtc->irq, ret); in mtk_rtc_probe()
348 rtc->rtc_dev = rtc_device_register("mt6397-rtc", &pdev->dev, in mtk_rtc_probe()
350 if (IS_ERR(rtc->rtc_dev)) { in mtk_rtc_probe()
352 ret = PTR_ERR(rtc->rtc_dev); in mtk_rtc_probe()
359 free_irq(rtc->irq, rtc->rtc_dev); in mtk_rtc_probe()
361 irq_dispose_mapping(rtc->irq); in mtk_rtc_probe()
367 struct mt6397_rtc *rtc = platform_get_drvdata(pdev); in mtk_rtc_remove() local
369 rtc_device_unregister(rtc->rtc_dev); in mtk_rtc_remove()
370 free_irq(rtc->irq, rtc->rtc_dev); in mtk_rtc_remove()
371 irq_dispose_mapping(rtc->irq); in mtk_rtc_remove()
379 struct mt6397_rtc *rtc = dev_get_drvdata(dev); in mt6397_rtc_suspend() local
382 enable_irq_wake(rtc->irq); in mt6397_rtc_suspend()
389 struct mt6397_rtc *rtc = dev_get_drvdata(dev); in mt6397_rtc_resume() local
392 disable_irq_wake(rtc->irq); in mt6397_rtc_resume()