Created
December 24, 2018 03:29
-
-
Save FlyGoat/3dd94d3bf55716fdc3c14f8bd9d80289 to your computer and use it in GitHub Desktop.
ls1x RTC fix
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 20d76cab4ab707325b42629ecebe34b9b5cb603a Mon Sep 17 00:00:00 2001 | |
From: Jiaxun Yang <jiaxun.yang@flygoat.com> | |
Date: Mon, 24 Dec 2018 11:26:48 +0800 | |
Subject: [PATCH] drivers/rtc/ls1x: Prevent RTC irq block whole system | |
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com> | |
--- | |
drivers/rtc/rtc-ls1x-toy.c | 5 +++++ | |
drivers/rtc/rtc-ls1x.c | 11 +++++++++++ | |
2 files changed, 16 insertions(+) | |
diff --git a/drivers/rtc/rtc-ls1x-toy.c b/drivers/rtc/rtc-ls1x-toy.c | |
index 274085ef..1bb2bb99 100644 | |
--- a/drivers/rtc/rtc-ls1x-toy.c | |
+++ b/drivers/rtc/rtc-ls1x-toy.c | |
@@ -173,6 +173,11 @@ static int ls1x_rtc_probe(struct platform_device *pdev) | |
while (readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_TTS) | |
usleep_range(1000, 3000); | |
+ /* Clear TOYMATCHs to prevent irq block whole system */ | |
+ writel(0x0, SYS_TOYMATCH0); | |
+ writel(0x0, SYS_TOYMATCH1); | |
+ writel(0x0, SYS_TOYMATCH2); | |
+ | |
rtcdev = devm_rtc_device_register(&pdev->dev, "ls1x-toy", | |
&ls1x_rtc_ops , THIS_MODULE); | |
if (IS_ERR(rtcdev)) { | |
diff --git a/drivers/rtc/rtc-ls1x.c b/drivers/rtc/rtc-ls1x.c | |
index ca0b0224..31ae8843 100644 | |
--- a/drivers/rtc/rtc-ls1x.c | |
+++ b/drivers/rtc/rtc-ls1x.c | |
@@ -189,6 +189,8 @@ static irqreturn_t ls1x_rtc0_handler(int irq, void *rtc) | |
events |= RTC_IRQF | RTC_AF; | |
rtc_update_irq(rtc, 1, events); | |
+ writel(0x0, SYS_RTCMATCH0); | |
+ | |
return IRQ_HANDLED; | |
} | |
@@ -199,6 +201,8 @@ static irqreturn_t ls1x_rtc1_handler(int irq, void *rtc) | |
events |= RTC_IRQF | RTC_AF; | |
rtc_update_irq(rtc, 1, events); | |
+ writel(0x0, SYS_RTCMATCH1); | |
+ | |
return IRQ_HANDLED; | |
} | |
@@ -209,6 +213,8 @@ static irqreturn_t ls1x_rtc2_handler(int irq, void *rtc) | |
events |= RTC_IRQF | RTC_AF; | |
rtc_update_irq(rtc, 1, events); | |
+ writel(0x0, SYS_RTCMATCH2); | |
+ | |
return IRQ_HANDLED; | |
} | |
@@ -268,6 +274,11 @@ static int ls1x_rtc_probe(struct platform_device *pdev) | |
goto err; | |
} | |
+ /* Clear RTCMATCHs to prevent irq block whole system */ | |
+ writel(0x0, SYS_RTCMATCH0); | |
+ writel(0x0, SYS_RTCMATCH1); | |
+ writel(0x0, SYS_RTCMATCH2); | |
+ | |
platform_set_drvdata(pdev, rtcdev); | |
for (i = 0; i < 4; i++) { | |
-- | |
2.19.2 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment