summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorRichard Zhao <richard.zhao@freescale.com>2011-08-08 09:16:27 +0800
committerRichard Zhao <richard.zhao@freescale.com>2011-08-08 09:16:27 +0800
commited88139604075f6f2db39f58c3cdb64a3128fd5c (patch)
treee01d6d3faab892b48c102c5fbec2cd1140662ff9 /drivers
parentb69ae9dedec838206399d1f84bd713aa4fa8641e (diff)
ENGR00154429 rtc-snvs: request_irq too early
request_irq should be after hw init. It can avoid meaningless interrupt. Signed-off-by: Richard Zhao <richard.zhao@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/rtc/rtc-snvs.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/drivers/rtc/rtc-snvs.c b/drivers/rtc/rtc-snvs.c
index 3125ec09926c..dfd784936b28 100644
--- a/drivers/rtc/rtc-snvs.c
+++ b/drivers/rtc/rtc-snvs.c
@@ -482,19 +482,7 @@ static int snvs_rtc_probe(struct platform_device *pdev)
pdata->baseaddr = res->start;
pdata->ioaddr = ioremap(pdata->baseaddr, 0xC00);
ioaddr = pdata->ioaddr;
-
- /* Configure and enable the RTC */
pdata->irq = platform_get_irq(pdev, 0);
- if (pdata->irq >= 0) {
- if (request_irq(pdata->irq, snvs_rtc_interrupt, IRQF_SHARED,
- pdev->name, pdev) < 0) {
- dev_warn(&pdev->dev, "interrupt not available.\n");
- pdata->irq = -1;
- } else {
- disable_irq(pdata->irq);
- pdata->irq_enable = false;
- }
- }
/* initialize glitch detect */
__raw_writel(SNVS_LPPGDR_INIT, ioaddr + SNVS_LPPGDR);
@@ -513,6 +501,17 @@ static int snvs_rtc_probe(struct platform_device *pdev)
__raw_writel(0xFFFFFFFF, ioaddr + SNVS_LPSR);
udelay(100);
+ if (pdata->irq >= 0) {
+ if (request_irq(pdata->irq, snvs_rtc_interrupt, IRQF_SHARED,
+ pdev->name, pdev) < 0) {
+ dev_warn(&pdev->dev, "interrupt not available.\n");
+ pdata->irq = -1;
+ } else {
+ disable_irq(pdata->irq);
+ pdata->irq_enable = false;
+ }
+ }
+
rtc = rtc_device_register(pdev->name, &pdev->dev,
&snvs_rtc_ops, THIS_MODULE);
if (IS_ERR(rtc)) {