rtc-sa1100.c (c95baf12f5077419db01313ab61c2aac007d40cd) rtc-sa1100.c (f2997775b111c6d660c32a18d5d44d37cb7361b1)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Real Time Clock interface for StrongARM SA1x00 and XScale PXA2xx
4 *
5 * Copyright (c) 2000 Nils Faerber
6 *
7 * Based on rtc.c by Paul Gortmaker
8 *

--- 168 unchanged lines hidden (view full) ---

177 .read_alarm = sa1100_rtc_read_alarm,
178 .set_alarm = sa1100_rtc_set_alarm,
179 .proc = sa1100_rtc_proc,
180 .alarm_irq_enable = sa1100_rtc_alarm_irq_enable,
181};
182
183int sa1100_rtc_init(struct platform_device *pdev, struct sa1100_rtc *info)
184{
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Real Time Clock interface for StrongARM SA1x00 and XScale PXA2xx
4 *
5 * Copyright (c) 2000 Nils Faerber
6 *
7 * Based on rtc.c by Paul Gortmaker
8 *

--- 168 unchanged lines hidden (view full) ---

177 .read_alarm = sa1100_rtc_read_alarm,
178 .set_alarm = sa1100_rtc_set_alarm,
179 .proc = sa1100_rtc_proc,
180 .alarm_irq_enable = sa1100_rtc_alarm_irq_enable,
181};
182
183int sa1100_rtc_init(struct platform_device *pdev, struct sa1100_rtc *info)
184{
185 struct rtc_device *rtc;
186 int ret;
187
188 spin_lock_init(&info->lock);
189
190 info->clk = devm_clk_get(&pdev->dev, NULL);
191 if (IS_ERR(info->clk)) {
192 dev_err(&pdev->dev, "failed to find rtc clock source\n");
193 return PTR_ERR(info->clk);

--- 12 unchanged lines hidden (view full) ---

206 if (readl_relaxed(info->rttr) == 0) {
207 writel_relaxed(RTC_DEF_DIVIDER + (RTC_DEF_TRIM << 16), info->rttr);
208 dev_warn(&pdev->dev, "warning: "
209 "initializing default clock divider/trim value\n");
210 /* The current RTC value probably doesn't make sense either */
211 writel_relaxed(0, info->rcnr);
212 }
213
185 int ret;
186
187 spin_lock_init(&info->lock);
188
189 info->clk = devm_clk_get(&pdev->dev, NULL);
190 if (IS_ERR(info->clk)) {
191 dev_err(&pdev->dev, "failed to find rtc clock source\n");
192 return PTR_ERR(info->clk);

--- 12 unchanged lines hidden (view full) ---

205 if (readl_relaxed(info->rttr) == 0) {
206 writel_relaxed(RTC_DEF_DIVIDER + (RTC_DEF_TRIM << 16), info->rttr);
207 dev_warn(&pdev->dev, "warning: "
208 "initializing default clock divider/trim value\n");
209 /* The current RTC value probably doesn't make sense either */
210 writel_relaxed(0, info->rcnr);
211 }
212
214 rtc = devm_rtc_device_register(&pdev->dev, pdev->name, &sa1100_rtc_ops,
215 THIS_MODULE);
216 if (IS_ERR(rtc)) {
213 info->rtc->ops = &sa1100_rtc_ops;
214 info->rtc->max_user_freq = RTC_FREQ;
215
216 ret = rtc_register_device(info->rtc);
217 if (ret) {
217 clk_disable_unprepare(info->clk);
218 clk_disable_unprepare(info->clk);
218 return PTR_ERR(rtc);
219 return ret;
219 }
220 }
220 info->rtc = rtc;
221
221
222 rtc->max_user_freq = RTC_FREQ;
223
224 /* Fix for a nasty initialization problem the in SA11xx RTSR register.
225 * See also the comments in sa1100_rtc_interrupt().
226 *
227 * Sometimes bit 1 of the RTSR (RTSR_HZ) will wake up 1, which means an
228 * interrupt pending, even though interrupts were never enabled.
229 * In this case, this bit it must be reset before enabling
230 * interruptions to avoid a nonexistent interrupt to occur.
231 *

--- 30 unchanged lines hidden (view full) ---

262 return -ENODEV;
263
264 info = devm_kzalloc(&pdev->dev, sizeof(struct sa1100_rtc), GFP_KERNEL);
265 if (!info)
266 return -ENOMEM;
267 info->irq_1hz = irq_1hz;
268 info->irq_alarm = irq_alarm;
269
222 /* Fix for a nasty initialization problem the in SA11xx RTSR register.
223 * See also the comments in sa1100_rtc_interrupt().
224 *
225 * Sometimes bit 1 of the RTSR (RTSR_HZ) will wake up 1, which means an
226 * interrupt pending, even though interrupts were never enabled.
227 * In this case, this bit it must be reset before enabling
228 * interruptions to avoid a nonexistent interrupt to occur.
229 *

--- 30 unchanged lines hidden (view full) ---

260 return -ENODEV;
261
262 info = devm_kzalloc(&pdev->dev, sizeof(struct sa1100_rtc), GFP_KERNEL);
263 if (!info)
264 return -ENOMEM;
265 info->irq_1hz = irq_1hz;
266 info->irq_alarm = irq_alarm;
267
268 info->rtc = devm_rtc_allocate_device(&pdev->dev);
269 if (IS_ERR(info->rtc))
270 return PTR_ERR(info->rtc);
271
270 ret = devm_request_irq(&pdev->dev, irq_1hz, sa1100_rtc_interrupt, 0,
271 "rtc 1Hz", &pdev->dev);
272 if (ret) {
273 dev_err(&pdev->dev, "IRQ %d already in use.\n", irq_1hz);
274 return ret;
275 }
276 ret = devm_request_irq(&pdev->dev, irq_alarm, sa1100_rtc_interrupt, 0,
277 "rtc Alrm", &pdev->dev);

--- 88 unchanged lines hidden ---
272 ret = devm_request_irq(&pdev->dev, irq_1hz, sa1100_rtc_interrupt, 0,
273 "rtc 1Hz", &pdev->dev);
274 if (ret) {
275 dev_err(&pdev->dev, "IRQ %d already in use.\n", irq_1hz);
276 return ret;
277 }
278 ret = devm_request_irq(&pdev->dev, irq_alarm, sa1100_rtc_interrupt, 0,
279 "rtc Alrm", &pdev->dev);

--- 88 unchanged lines hidden ---