Lines Matching refs:rtc

51 static void rtc_delayed_write(u32 val, struct armada38x_rtc *rtc, int offset)  in rtc_delayed_write()  argument
53 writel(val, rtc->regs + offset); in rtc_delayed_write()
59 struct armada38x_rtc *rtc = dev_get_drvdata(dev); in armada38x_rtc_read_time() local
62 spin_lock_irqsave(&rtc->lock, flags); in armada38x_rtc_read_time()
63 time = readl(rtc->regs + RTC_TIME); in armada38x_rtc_read_time()
69 time_check = readl(rtc->regs + RTC_TIME); in armada38x_rtc_read_time()
71 time_check = readl(rtc->regs + RTC_TIME); in armada38x_rtc_read_time()
73 spin_unlock_irqrestore(&rtc->lock, flags); in armada38x_rtc_read_time()
82 struct armada38x_rtc *rtc = dev_get_drvdata(dev); in armada38x_rtc_set_time() local
96 spin_lock_irqsave(&rtc->lock, flags); in armada38x_rtc_set_time()
97 rtc_delayed_write(time, rtc, RTC_TIME); in armada38x_rtc_set_time()
98 rtc_delayed_write(0, rtc, RTC_STATUS); in armada38x_rtc_set_time()
99 rtc_delayed_write(0, rtc, RTC_STATUS); in armada38x_rtc_set_time()
100 spin_unlock_irqrestore(&rtc->lock, flags); in armada38x_rtc_set_time()
108 struct armada38x_rtc *rtc = dev_get_drvdata(dev); in armada38x_rtc_read_alarm() local
112 spin_lock_irqsave(&rtc->lock, flags); in armada38x_rtc_read_alarm()
114 time = readl(rtc->regs + RTC_ALARM1); in armada38x_rtc_read_alarm()
115 val = readl(rtc->regs + RTC_IRQ1_CONF) & RTC_IRQ1_AL_EN; in armada38x_rtc_read_alarm()
117 spin_unlock_irqrestore(&rtc->lock, flags); in armada38x_rtc_read_alarm()
127 struct armada38x_rtc *rtc = dev_get_drvdata(dev); in armada38x_rtc_set_alarm() local
137 spin_lock_irqsave(&rtc->lock, flags); in armada38x_rtc_set_alarm()
139 rtc_delayed_write(time, rtc, RTC_ALARM1); in armada38x_rtc_set_alarm()
142 rtc_delayed_write(RTC_IRQ1_AL_EN, rtc, RTC_IRQ1_CONF); in armada38x_rtc_set_alarm()
143 val = readl(rtc->regs_soc + SOC_RTC_INTERRUPT); in armada38x_rtc_set_alarm()
145 rtc->regs_soc + SOC_RTC_INTERRUPT); in armada38x_rtc_set_alarm()
148 spin_unlock_irqrestore(&rtc->lock, flags); in armada38x_rtc_set_alarm()
157 struct armada38x_rtc *rtc = dev_get_drvdata(dev); in armada38x_rtc_alarm_irq_enable() local
160 spin_lock_irqsave(&rtc->lock, flags); in armada38x_rtc_alarm_irq_enable()
163 rtc_delayed_write(RTC_IRQ1_AL_EN, rtc, RTC_IRQ1_CONF); in armada38x_rtc_alarm_irq_enable()
165 rtc_delayed_write(0, rtc, RTC_IRQ1_CONF); in armada38x_rtc_alarm_irq_enable()
167 spin_unlock_irqrestore(&rtc->lock, flags); in armada38x_rtc_alarm_irq_enable()
174 struct armada38x_rtc *rtc = data; in armada38x_rtc_alarm_irq() local
178 dev_dbg(&rtc->rtc_dev->dev, "%s:irq(%d)\n", __func__, irq); in armada38x_rtc_alarm_irq()
180 spin_lock(&rtc->lock); in armada38x_rtc_alarm_irq()
182 val = readl(rtc->regs_soc + SOC_RTC_INTERRUPT); in armada38x_rtc_alarm_irq()
184 writel(val & ~SOC_RTC_ALARM1, rtc->regs_soc + SOC_RTC_INTERRUPT); in armada38x_rtc_alarm_irq()
185 val = readl(rtc->regs + RTC_IRQ1_CONF); in armada38x_rtc_alarm_irq()
187 rtc_delayed_write(0, rtc, RTC_IRQ1_CONF); in armada38x_rtc_alarm_irq()
189 rtc_delayed_write(RTC_STATUS_ALARM1, rtc, RTC_STATUS); in armada38x_rtc_alarm_irq()
191 spin_unlock(&rtc->lock); in armada38x_rtc_alarm_irq()
200 rtc_update_irq(rtc->rtc_dev, 1, event); in armada38x_rtc_alarm_irq()
216 struct armada38x_rtc *rtc; in armada38x_rtc_probe() local
219 rtc = devm_kzalloc(&pdev->dev, sizeof(struct armada38x_rtc), in armada38x_rtc_probe()
221 if (!rtc) in armada38x_rtc_probe()
224 spin_lock_init(&rtc->lock); in armada38x_rtc_probe()
227 rtc->regs = devm_ioremap_resource(&pdev->dev, res); in armada38x_rtc_probe()
228 if (IS_ERR(rtc->regs)) in armada38x_rtc_probe()
229 return PTR_ERR(rtc->regs); in armada38x_rtc_probe()
231 rtc->regs_soc = devm_ioremap_resource(&pdev->dev, res); in armada38x_rtc_probe()
232 if (IS_ERR(rtc->regs_soc)) in armada38x_rtc_probe()
233 return PTR_ERR(rtc->regs_soc); in armada38x_rtc_probe()
235 rtc->irq = platform_get_irq(pdev, 0); in armada38x_rtc_probe()
237 if (rtc->irq < 0) { in armada38x_rtc_probe()
239 return rtc->irq; in armada38x_rtc_probe()
241 if (devm_request_irq(&pdev->dev, rtc->irq, armada38x_rtc_alarm_irq, in armada38x_rtc_probe()
242 0, pdev->name, rtc) < 0) { in armada38x_rtc_probe()
244 rtc->irq = -1; in armada38x_rtc_probe()
252 platform_set_drvdata(pdev, rtc); in armada38x_rtc_probe()
253 if (rtc->irq != -1) in armada38x_rtc_probe()
256 rtc->rtc_dev = devm_rtc_device_register(&pdev->dev, pdev->name, in armada38x_rtc_probe()
258 if (IS_ERR(rtc->rtc_dev)) { in armada38x_rtc_probe()
259 ret = PTR_ERR(rtc->rtc_dev); in armada38x_rtc_probe()
270 struct armada38x_rtc *rtc = dev_get_drvdata(dev); in armada38x_rtc_suspend() local
272 return enable_irq_wake(rtc->irq); in armada38x_rtc_suspend()
281 struct armada38x_rtc *rtc = dev_get_drvdata(dev); in armada38x_rtc_resume() local
283 return disable_irq_wake(rtc->irq); in armada38x_rtc_resume()