Lines Matching refs:rtc
43 struct rtc_device *rtc; member
50 static inline uint32_t jz4740_rtc_reg_read(struct jz4740_rtc *rtc, size_t reg) in jz4740_rtc_reg_read() argument
52 return readl(rtc->base + reg); in jz4740_rtc_reg_read()
55 static int jz4740_rtc_wait_write_ready(struct jz4740_rtc *rtc) in jz4740_rtc_wait_write_ready() argument
61 ctrl = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_CTRL); in jz4740_rtc_wait_write_ready()
67 static inline int jz4740_rtc_reg_write(struct jz4740_rtc *rtc, size_t reg, in jz4740_rtc_reg_write() argument
71 ret = jz4740_rtc_wait_write_ready(rtc); in jz4740_rtc_reg_write()
73 writel(val, rtc->base + reg); in jz4740_rtc_reg_write()
78 static int jz4740_rtc_ctrl_set_bits(struct jz4740_rtc *rtc, uint32_t mask, in jz4740_rtc_ctrl_set_bits() argument
85 spin_lock_irqsave(&rtc->lock, flags); in jz4740_rtc_ctrl_set_bits()
87 ctrl = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_CTRL); in jz4740_rtc_ctrl_set_bits()
97 ret = jz4740_rtc_reg_write(rtc, JZ_REG_RTC_CTRL, ctrl); in jz4740_rtc_ctrl_set_bits()
99 spin_unlock_irqrestore(&rtc->lock, flags); in jz4740_rtc_ctrl_set_bits()
106 struct jz4740_rtc *rtc = dev_get_drvdata(dev); in jz4740_rtc_read_time() local
114 secs = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_SEC); in jz4740_rtc_read_time()
115 secs2 = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_SEC); in jz4740_rtc_read_time()
119 secs2 = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_SEC); in jz4740_rtc_read_time()
132 struct jz4740_rtc *rtc = dev_get_drvdata(dev); in jz4740_rtc_set_mmss() local
134 return jz4740_rtc_reg_write(rtc, JZ_REG_RTC_SEC, secs); in jz4740_rtc_set_mmss()
139 struct jz4740_rtc *rtc = dev_get_drvdata(dev); in jz4740_rtc_read_alarm() local
143 secs = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_SEC_ALARM); in jz4740_rtc_read_alarm()
145 ctrl = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_CTRL); in jz4740_rtc_read_alarm()
158 struct jz4740_rtc *rtc = dev_get_drvdata(dev); in jz4740_rtc_set_alarm() local
163 ret = jz4740_rtc_reg_write(rtc, JZ_REG_RTC_SEC_ALARM, secs); in jz4740_rtc_set_alarm()
165 ret = jz4740_rtc_ctrl_set_bits(rtc, in jz4740_rtc_set_alarm()
173 struct jz4740_rtc *rtc = dev_get_drvdata(dev); in jz4740_rtc_alarm_irq_enable() local
174 return jz4740_rtc_ctrl_set_bits(rtc, JZ_RTC_CTRL_AF_IRQ, enable); in jz4740_rtc_alarm_irq_enable()
187 struct jz4740_rtc *rtc = data; in jz4740_rtc_irq() local
191 ctrl = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_CTRL); in jz4740_rtc_irq()
199 rtc_update_irq(rtc->rtc, 1, events); in jz4740_rtc_irq()
201 jz4740_rtc_ctrl_set_bits(rtc, JZ_RTC_CTRL_1HZ | JZ_RTC_CTRL_AF, false); in jz4740_rtc_irq()
208 struct jz4740_rtc *rtc = dev_get_drvdata(dev); in jz4740_rtc_poweroff() local
209 jz4740_rtc_reg_write(rtc, JZ_REG_RTC_HIBERNATE, 1); in jz4740_rtc_poweroff()
216 struct jz4740_rtc *rtc; in jz4740_rtc_probe() local
220 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); in jz4740_rtc_probe()
221 if (!rtc) in jz4740_rtc_probe()
224 rtc->irq = platform_get_irq(pdev, 0); in jz4740_rtc_probe()
225 if (rtc->irq < 0) { in jz4740_rtc_probe()
231 rtc->base = devm_ioremap_resource(&pdev->dev, mem); in jz4740_rtc_probe()
232 if (IS_ERR(rtc->base)) in jz4740_rtc_probe()
233 return PTR_ERR(rtc->base); in jz4740_rtc_probe()
235 spin_lock_init(&rtc->lock); in jz4740_rtc_probe()
237 platform_set_drvdata(pdev, rtc); in jz4740_rtc_probe()
241 rtc->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, in jz4740_rtc_probe()
243 if (IS_ERR(rtc->rtc)) { in jz4740_rtc_probe()
244 ret = PTR_ERR(rtc->rtc); in jz4740_rtc_probe()
249 ret = devm_request_irq(&pdev->dev, rtc->irq, jz4740_rtc_irq, 0, in jz4740_rtc_probe()
250 pdev->name, rtc); in jz4740_rtc_probe()
256 scratchpad = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_SCRATCHPAD); in jz4740_rtc_probe()
258 ret = jz4740_rtc_reg_write(rtc, JZ_REG_RTC_SCRATCHPAD, 0x12345678); in jz4740_rtc_probe()
259 ret = jz4740_rtc_reg_write(rtc, JZ_REG_RTC_SEC, 0); in jz4740_rtc_probe()
272 struct jz4740_rtc *rtc = dev_get_drvdata(dev); in jz4740_rtc_suspend() local
275 enable_irq_wake(rtc->irq); in jz4740_rtc_suspend()
281 struct jz4740_rtc *rtc = dev_get_drvdata(dev); in jz4740_rtc_resume() local
284 disable_irq_wake(rtc->irq); in jz4740_rtc_resume()