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 --- |