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
219 rtc = kzalloc(sizeof(*rtc), GFP_KERNEL); in jz4740_rtc_probe()
220 if (!rtc) in jz4740_rtc_probe()
223 rtc->irq = platform_get_irq(pdev, 0); in jz4740_rtc_probe()
224 if (rtc->irq < 0) { in jz4740_rtc_probe()
230 rtc->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); in jz4740_rtc_probe()
231 if (!rtc->mem) { in jz4740_rtc_probe()
237 rtc->mem = request_mem_region(rtc->mem->start, resource_size(rtc->mem), in jz4740_rtc_probe()
239 if (!rtc->mem) { in jz4740_rtc_probe()
245 rtc->base = ioremap_nocache(rtc->mem->start, resource_size(rtc->mem)); in jz4740_rtc_probe()
246 if (!rtc->base) { in jz4740_rtc_probe()
252 spin_lock_init(&rtc->lock); in jz4740_rtc_probe()
254 platform_set_drvdata(pdev, rtc); in jz4740_rtc_probe()
258 rtc->rtc = rtc_device_register(pdev->name, &pdev->dev, &jz4740_rtc_ops, in jz4740_rtc_probe()
260 if (IS_ERR(rtc->rtc)) { in jz4740_rtc_probe()
261 ret = PTR_ERR(rtc->rtc); in jz4740_rtc_probe()
266 ret = request_irq(rtc->irq, jz4740_rtc_irq, 0, in jz4740_rtc_probe()
267 pdev->name, rtc); in jz4740_rtc_probe()
273 scratchpad = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_SCRATCHPAD); in jz4740_rtc_probe()
275 ret = jz4740_rtc_reg_write(rtc, JZ_REG_RTC_SCRATCHPAD, 0x12345678); in jz4740_rtc_probe()
276 ret = jz4740_rtc_reg_write(rtc, JZ_REG_RTC_SEC, 0); in jz4740_rtc_probe()
286 free_irq(rtc->irq, rtc); in jz4740_rtc_probe()
288 rtc_device_unregister(rtc->rtc); in jz4740_rtc_probe()
291 iounmap(rtc->base); in jz4740_rtc_probe()
293 release_mem_region(rtc->mem->start, resource_size(rtc->mem)); in jz4740_rtc_probe()
295 kfree(rtc); in jz4740_rtc_probe()
302 struct jz4740_rtc *rtc = platform_get_drvdata(pdev); in jz4740_rtc_remove() local
304 free_irq(rtc->irq, rtc); in jz4740_rtc_remove()
306 rtc_device_unregister(rtc->rtc); in jz4740_rtc_remove()
308 iounmap(rtc->base); in jz4740_rtc_remove()
309 release_mem_region(rtc->mem->start, resource_size(rtc->mem)); in jz4740_rtc_remove()
311 kfree(rtc); in jz4740_rtc_remove()
322 struct jz4740_rtc *rtc = dev_get_drvdata(dev); in jz4740_rtc_suspend() local
325 enable_irq_wake(rtc->irq); in jz4740_rtc_suspend()
331 struct jz4740_rtc *rtc = dev_get_drvdata(dev); in jz4740_rtc_resume() local
334 disable_irq_wake(rtc->irq); in jz4740_rtc_resume()