From 288191ddf65270fcd2dafd861c845f050a4b9e47 Mon Sep 17 00:00:00 2001 From: Bo Yan Date: Thu, 25 Aug 2011 17:02:35 -0700 Subject: rtc: tps6591x: Clear interrupt when probing device Make sure alarm interrupt is cleared during device probing. bug 867362 Original-Change-Id: Iad33c0e0715de2ec68291a57c2a55d1ad1198565 Reviewed-on: http://git-master/r/49302 Reviewed-by: Bo Yan Tested-by: Bo Yan Reviewed-by: Yu-Huan Hsu Rebase-Id: R5574970052e9a1c1334003e0f03e1d62c7ee5109 --- drivers/rtc/rtc-tps6591x.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'drivers/rtc') diff --git a/drivers/rtc/rtc-tps6591x.c b/drivers/rtc/rtc-tps6591x.c index e650173f5de7..878c2046aac7 100644 --- a/drivers/rtc/rtc-tps6591x.c +++ b/drivers/rtc/rtc-tps6591x.c @@ -461,13 +461,6 @@ static int __devinit tps6591x_rtc_probe(struct platform_device *pdev) return -EBUSY; } - reg = ENABLE_ALARM_INT; - tps6591x_write_regs(&pdev->dev, RTC_INT, 1, ®); - if (err) { - dev_err(&pdev->dev, "unable to program Interrupt Mask reg\n"); - return -EBUSY; - } - tps6591x_rtc_read_time(&pdev->dev, &tm); if ((tm.tm_year < RTC_YEAR_OFFSET || tm.tm_year > (RTC_YEAR_OFFSET + 99))){ if (pdata->time.tm_year < 2000 || pdata->time.tm_year > 2100) { @@ -479,6 +472,20 @@ static int __devinit tps6591x_rtc_probe(struct platform_device *pdev) tps6591x_rtc_set_time(&pdev->dev, &pdata->time); } + reg = ALARM_INT_STATUS; + err = tps6591x_write_regs(&pdev->dev, RTC_STATUS, 1, ®); + if (err) { + dev_err(&pdev->dev, "unable to program RTC_STATUS reg\n"); + return -EBUSY; + } + + reg = ENABLE_ALARM_INT; + tps6591x_write_regs(&pdev->dev, RTC_INT, 1, ®); + if (err) { + dev_err(&pdev->dev, "unable to program Interrupt Mask reg\n"); + return -EBUSY; + } + if (pdata && (pdata->irq >= 0)) { rtc->irq = pdata->irq; err = request_threaded_irq(pdata->irq, NULL, tps6591x_rtc_irq, -- cgit v1.2.3