Lines Matching refs:rtc

67 static int mtk_rtc_write_trigger(struct mt6397_rtc *rtc)  in mtk_rtc_write_trigger()  argument
73 ret = regmap_write(rtc->regmap, rtc->addr_base + RTC_WRTGR, 1); in mtk_rtc_write_trigger()
78 ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_BBPU, in mtk_rtc_write_trigger()
96 struct mt6397_rtc *rtc = data; in mtk_rtc_irq_handler_thread() local
100 ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_IRQ_STA, &irqsta); in mtk_rtc_irq_handler_thread()
102 rtc_update_irq(rtc->rtc_dev, 1, RTC_IRQF | RTC_AF); in mtk_rtc_irq_handler_thread()
104 mutex_lock(&rtc->lock); in mtk_rtc_irq_handler_thread()
105 if (regmap_write(rtc->regmap, rtc->addr_base + RTC_IRQ_EN, in mtk_rtc_irq_handler_thread()
107 mtk_rtc_write_trigger(rtc); in mtk_rtc_irq_handler_thread()
108 mutex_unlock(&rtc->lock); in mtk_rtc_irq_handler_thread()
116 static int __mtk_rtc_read_time(struct mt6397_rtc *rtc, in __mtk_rtc_read_time() argument
122 mutex_lock(&rtc->lock); in __mtk_rtc_read_time()
123 ret = regmap_bulk_read(rtc->regmap, rtc->addr_base + RTC_TC_SEC, in __mtk_rtc_read_time()
135 ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_TC_SEC, sec); in __mtk_rtc_read_time()
137 mutex_unlock(&rtc->lock); in __mtk_rtc_read_time()
144 struct mt6397_rtc *rtc = dev_get_drvdata(dev); in mtk_rtc_read_time() local
148 ret = __mtk_rtc_read_time(rtc, tm, &sec); in mtk_rtc_read_time()
175 struct mt6397_rtc *rtc = dev_get_drvdata(dev); in mtk_rtc_set_time() local
189 mutex_lock(&rtc->lock); in mtk_rtc_set_time()
190 ret = regmap_bulk_write(rtc->regmap, rtc->addr_base + RTC_TC_SEC, in mtk_rtc_set_time()
196 ret = mtk_rtc_write_trigger(rtc); in mtk_rtc_set_time()
199 mutex_unlock(&rtc->lock); in mtk_rtc_set_time()
206 struct mt6397_rtc *rtc = dev_get_drvdata(dev); in mtk_rtc_read_alarm() local
211 mutex_lock(&rtc->lock); in mtk_rtc_read_alarm()
212 ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_IRQ_EN, &irqen); in mtk_rtc_read_alarm()
215 ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_PDN2, &pdn2); in mtk_rtc_read_alarm()
219 ret = regmap_bulk_read(rtc->regmap, rtc->addr_base + RTC_AL_SEC, in mtk_rtc_read_alarm()
226 mutex_unlock(&rtc->lock); in mtk_rtc_read_alarm()
240 mutex_unlock(&rtc->lock); in mtk_rtc_read_alarm()
247 struct mt6397_rtc *rtc = dev_get_drvdata(dev); in mtk_rtc_set_alarm() local
261 mutex_lock(&rtc->lock); in mtk_rtc_set_alarm()
263 ret = regmap_bulk_write(rtc->regmap, in mtk_rtc_set_alarm()
264 rtc->addr_base + RTC_AL_SEC, in mtk_rtc_set_alarm()
268 ret = regmap_write(rtc->regmap, rtc->addr_base + RTC_AL_MASK, in mtk_rtc_set_alarm()
272 ret = regmap_update_bits(rtc->regmap, in mtk_rtc_set_alarm()
273 rtc->addr_base + RTC_IRQ_EN, in mtk_rtc_set_alarm()
279 ret = regmap_update_bits(rtc->regmap, in mtk_rtc_set_alarm()
280 rtc->addr_base + RTC_IRQ_EN, in mtk_rtc_set_alarm()
290 ret = mtk_rtc_write_trigger(rtc); in mtk_rtc_set_alarm()
292 mutex_unlock(&rtc->lock); in mtk_rtc_set_alarm()
307 struct mt6397_rtc *rtc; in mtk_rtc_probe() local
310 rtc = devm_kzalloc(&pdev->dev, sizeof(struct mt6397_rtc), GFP_KERNEL); in mtk_rtc_probe()
311 if (!rtc) in mtk_rtc_probe()
315 rtc->addr_base = res->start; in mtk_rtc_probe()
317 rtc->irq = platform_get_irq(pdev, 0); in mtk_rtc_probe()
318 if (rtc->irq < 0) in mtk_rtc_probe()
319 return rtc->irq; in mtk_rtc_probe()
321 rtc->regmap = mt6397_chip->regmap; in mtk_rtc_probe()
322 rtc->dev = &pdev->dev; in mtk_rtc_probe()
323 mutex_init(&rtc->lock); in mtk_rtc_probe()
325 platform_set_drvdata(pdev, rtc); in mtk_rtc_probe()
327 rtc->rtc_dev = devm_rtc_allocate_device(rtc->dev); in mtk_rtc_probe()
328 if (IS_ERR(rtc->rtc_dev)) in mtk_rtc_probe()
329 return PTR_ERR(rtc->rtc_dev); in mtk_rtc_probe()
331 ret = request_threaded_irq(rtc->irq, NULL, in mtk_rtc_probe()
334 "mt6397-rtc", rtc); in mtk_rtc_probe()
337 rtc->irq, ret); in mtk_rtc_probe()
343 rtc->rtc_dev->ops = &mtk_rtc_ops; in mtk_rtc_probe()
345 ret = rtc_register_device(rtc->rtc_dev); in mtk_rtc_probe()
352 free_irq(rtc->irq, rtc); in mtk_rtc_probe()
358 struct mt6397_rtc *rtc = platform_get_drvdata(pdev); in mtk_rtc_remove() local
360 free_irq(rtc->irq, rtc); in mtk_rtc_remove()
368 struct mt6397_rtc *rtc = dev_get_drvdata(dev); in mt6397_rtc_suspend() local
371 enable_irq_wake(rtc->irq); in mt6397_rtc_suspend()
378 struct mt6397_rtc *rtc = dev_get_drvdata(dev); in mt6397_rtc_resume() local
381 disable_irq_wake(rtc->irq); in mt6397_rtc_resume()