Lines Matching defs:rtc
15 #include <linux/rtc.h>
16 #include <linux/mfd/mt6397/rtc.h>
19 static int mtk_rtc_write_trigger(struct mt6397_rtc *rtc)
24 ret = regmap_write(rtc->regmap, rtc->addr_base + rtc->data->wrtgr, 1);
28 ret = regmap_read_poll_timeout(rtc->regmap,
29 rtc->addr_base + RTC_BBPU, data,
34 dev_err(rtc->rtc_dev->dev.parent,
42 struct mt6397_rtc *rtc = data;
46 ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_IRQ_STA, &irqsta);
48 rtc_update_irq(rtc->rtc_dev, 1, RTC_IRQF | RTC_AF);
50 mutex_lock(&rtc->lock);
51 if (regmap_write(rtc->regmap, rtc->addr_base + RTC_IRQ_EN,
53 mtk_rtc_write_trigger(rtc);
54 mutex_unlock(&rtc->lock);
62 static int __mtk_rtc_read_time(struct mt6397_rtc *rtc,
68 mutex_lock(&rtc->lock);
69 ret = regmap_bulk_read(rtc->regmap, rtc->addr_base + RTC_TC_SEC,
81 ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_TC_SEC, sec);
83 mutex_unlock(&rtc->lock);
90 struct mt6397_rtc *rtc = dev_get_drvdata(dev);
94 ret = __mtk_rtc_read_time(rtc, tm, &sec);
121 struct mt6397_rtc *rtc = dev_get_drvdata(dev);
135 mutex_lock(&rtc->lock);
136 ret = regmap_bulk_write(rtc->regmap, rtc->addr_base + RTC_TC_SEC,
142 ret = mtk_rtc_write_trigger(rtc);
145 mutex_unlock(&rtc->lock);
152 struct mt6397_rtc *rtc = dev_get_drvdata(dev);
157 mutex_lock(&rtc->lock);
158 ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_IRQ_EN, &irqen);
161 ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_PDN2, &pdn2);
165 ret = regmap_bulk_read(rtc->regmap, rtc->addr_base + RTC_AL_SEC,
172 mutex_unlock(&rtc->lock);
186 mutex_unlock(&rtc->lock);
193 struct mt6397_rtc *rtc = dev_get_drvdata(dev);
200 mutex_lock(&rtc->lock);
201 ret = regmap_bulk_read(rtc->regmap, rtc->addr_base + RTC_AL_SEC,
220 ret = regmap_bulk_write(rtc->regmap,
221 rtc->addr_base + RTC_AL_SEC,
225 ret = regmap_write(rtc->regmap, rtc->addr_base + RTC_AL_MASK,
229 ret = regmap_update_bits(rtc->regmap,
230 rtc->addr_base + RTC_IRQ_EN,
236 ret = regmap_update_bits(rtc->regmap,
237 rtc->addr_base + RTC_IRQ_EN,
247 ret = mtk_rtc_write_trigger(rtc);
249 mutex_unlock(&rtc->lock);
264 struct mt6397_rtc *rtc;
267 rtc = devm_kzalloc(&pdev->dev, sizeof(struct mt6397_rtc), GFP_KERNEL);
268 if (!rtc)
274 rtc->addr_base = res->start;
276 rtc->data = of_device_get_match_data(&pdev->dev);
278 rtc->irq = platform_get_irq(pdev, 0);
279 if (rtc->irq < 0)
280 return rtc->irq;
282 rtc->regmap = mt6397_chip->regmap;
283 mutex_init(&rtc->lock);
285 platform_set_drvdata(pdev, rtc);
287 rtc->rtc_dev = devm_rtc_allocate_device(&pdev->dev);
288 if (IS_ERR(rtc->rtc_dev))
289 return PTR_ERR(rtc->rtc_dev);
291 ret = devm_request_threaded_irq(&pdev->dev, rtc->irq, NULL,
294 "mt6397-rtc", rtc);
298 rtc->irq, ret);
304 rtc->rtc_dev->ops = &mtk_rtc_ops;
306 return rtc_register_device(rtc->rtc_dev);
312 struct mt6397_rtc *rtc = dev_get_drvdata(dev);
315 enable_irq_wake(rtc->irq);
322 struct mt6397_rtc *rtc = dev_get_drvdata(dev);
325 disable_irq_wake(rtc->irq);
343 { .compatible = "mediatek,mt6323-rtc", .data = &mt6397_rtc_data },
344 { .compatible = "mediatek,mt6358-rtc", .data = &mt6358_rtc_data },
345 { .compatible = "mediatek,mt6397-rtc", .data = &mt6397_rtc_data },
352 .name = "mt6397-rtc",