Lines Matching refs:rtc
58 static void rtc_delayed_write(u32 val, struct armada38x_rtc *rtc, int offset) in rtc_delayed_write() argument
60 writel(val, rtc->regs + offset); in rtc_delayed_write()
66 struct armada38x_rtc *rtc = dev_get_drvdata(dev); in armada38x_rtc_read_time() local
69 mutex_lock(&rtc->mutex_time); in armada38x_rtc_read_time()
70 time = readl(rtc->regs + RTC_TIME); in armada38x_rtc_read_time()
76 time_check = readl(rtc->regs + RTC_TIME); in armada38x_rtc_read_time()
78 time_check = readl(rtc->regs + RTC_TIME); in armada38x_rtc_read_time()
80 mutex_unlock(&rtc->mutex_time); in armada38x_rtc_read_time()
89 struct armada38x_rtc *rtc = dev_get_drvdata(dev); in armada38x_rtc_set_time() local
103 mutex_lock(&rtc->mutex_time); in armada38x_rtc_set_time()
104 rtc_delayed_write(0, rtc, RTC_STATUS); in armada38x_rtc_set_time()
106 rtc_delayed_write(time, rtc, RTC_TIME); in armada38x_rtc_set_time()
107 mutex_unlock(&rtc->mutex_time); in armada38x_rtc_set_time()
115 struct armada38x_rtc *rtc = dev_get_drvdata(dev); in armada38x_rtc_read_alarm() local
119 spin_lock_irqsave(&rtc->lock, flags); in armada38x_rtc_read_alarm()
121 time = readl(rtc->regs + RTC_ALARM1); in armada38x_rtc_read_alarm()
122 val = readl(rtc->regs + RTC_IRQ1_CONF) & RTC_IRQ1_AL_EN; in armada38x_rtc_read_alarm()
124 spin_unlock_irqrestore(&rtc->lock, flags); in armada38x_rtc_read_alarm()
134 struct armada38x_rtc *rtc = dev_get_drvdata(dev); in armada38x_rtc_set_alarm() local
144 spin_lock_irqsave(&rtc->lock, flags); in armada38x_rtc_set_alarm()
146 rtc_delayed_write(time, rtc, RTC_ALARM1); in armada38x_rtc_set_alarm()
149 rtc_delayed_write(RTC_IRQ1_AL_EN, rtc, RTC_IRQ1_CONF); in armada38x_rtc_set_alarm()
150 val = readl(rtc->regs_soc + SOC_RTC_INTERRUPT); in armada38x_rtc_set_alarm()
152 rtc->regs_soc + SOC_RTC_INTERRUPT); in armada38x_rtc_set_alarm()
155 spin_unlock_irqrestore(&rtc->lock, flags); in armada38x_rtc_set_alarm()
164 struct armada38x_rtc *rtc = dev_get_drvdata(dev); in armada38x_rtc_alarm_irq_enable() local
167 spin_lock_irqsave(&rtc->lock, flags); in armada38x_rtc_alarm_irq_enable()
170 rtc_delayed_write(RTC_IRQ1_AL_EN, rtc, RTC_IRQ1_CONF); in armada38x_rtc_alarm_irq_enable()
172 rtc_delayed_write(0, rtc, RTC_IRQ1_CONF); in armada38x_rtc_alarm_irq_enable()
174 spin_unlock_irqrestore(&rtc->lock, flags); in armada38x_rtc_alarm_irq_enable()
181 struct armada38x_rtc *rtc = data; in armada38x_rtc_alarm_irq() local
185 dev_dbg(&rtc->rtc_dev->dev, "%s:irq(%d)\n", __func__, irq); in armada38x_rtc_alarm_irq()
187 spin_lock(&rtc->lock); in armada38x_rtc_alarm_irq()
189 val = readl(rtc->regs_soc + SOC_RTC_INTERRUPT); in armada38x_rtc_alarm_irq()
191 writel(val & ~SOC_RTC_ALARM1, rtc->regs_soc + SOC_RTC_INTERRUPT); in armada38x_rtc_alarm_irq()
192 val = readl(rtc->regs + RTC_IRQ1_CONF); in armada38x_rtc_alarm_irq()
194 rtc_delayed_write(0, rtc, RTC_IRQ1_CONF); in armada38x_rtc_alarm_irq()
196 rtc_delayed_write(RTC_STATUS_ALARM1, rtc, RTC_STATUS); in armada38x_rtc_alarm_irq()
198 spin_unlock(&rtc->lock); in armada38x_rtc_alarm_irq()
207 rtc_update_irq(rtc->rtc_dev, 1, event); in armada38x_rtc_alarm_irq()
223 struct armada38x_rtc *rtc; in armada38x_rtc_probe() local
226 rtc = devm_kzalloc(&pdev->dev, sizeof(struct armada38x_rtc), in armada38x_rtc_probe()
228 if (!rtc) in armada38x_rtc_probe()
231 spin_lock_init(&rtc->lock); in armada38x_rtc_probe()
232 mutex_init(&rtc->mutex_time); in armada38x_rtc_probe()
235 rtc->regs = devm_ioremap_resource(&pdev->dev, res); in armada38x_rtc_probe()
236 if (IS_ERR(rtc->regs)) in armada38x_rtc_probe()
237 return PTR_ERR(rtc->regs); in armada38x_rtc_probe()
239 rtc->regs_soc = devm_ioremap_resource(&pdev->dev, res); in armada38x_rtc_probe()
240 if (IS_ERR(rtc->regs_soc)) in armada38x_rtc_probe()
241 return PTR_ERR(rtc->regs_soc); in armada38x_rtc_probe()
243 rtc->irq = platform_get_irq(pdev, 0); in armada38x_rtc_probe()
245 if (rtc->irq < 0) { in armada38x_rtc_probe()
247 return rtc->irq; in armada38x_rtc_probe()
249 if (devm_request_irq(&pdev->dev, rtc->irq, armada38x_rtc_alarm_irq, in armada38x_rtc_probe()
250 0, pdev->name, rtc) < 0) { in armada38x_rtc_probe()
252 rtc->irq = -1; in armada38x_rtc_probe()
260 platform_set_drvdata(pdev, rtc); in armada38x_rtc_probe()
261 if (rtc->irq != -1) in armada38x_rtc_probe()
264 rtc->rtc_dev = devm_rtc_device_register(&pdev->dev, pdev->name, in armada38x_rtc_probe()
266 if (IS_ERR(rtc->rtc_dev)) { in armada38x_rtc_probe()
267 ret = PTR_ERR(rtc->rtc_dev); in armada38x_rtc_probe()
278 struct armada38x_rtc *rtc = dev_get_drvdata(dev); in armada38x_rtc_suspend() local
280 return enable_irq_wake(rtc->irq); in armada38x_rtc_suspend()
289 struct armada38x_rtc *rtc = dev_get_drvdata(dev); in armada38x_rtc_resume() local
291 return disable_irq_wake(rtc->irq); in armada38x_rtc_resume()