| From 6bfa2199bcc5217241730a03328426cf0c71a73d Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 26 May 2021 13:20:34 -0400 |
| Subject: rtc: max77686: Do not enforce (incorrect) interrupt trigger type |
| |
| From: Krzysztof Kozlowski <krzk@kernel.org> |
| |
| [ Upstream commit 742b0d7e15c333303daad4856de0764f4bc83601 ] |
| |
| Interrupt line can be configured on different hardware in different way, |
| even inverted. Therefore driver should not enforce specific trigger |
| type - edge falling - but instead rely on Devicetree to configure it. |
| |
| The Maxim 77686 datasheet describes the interrupt line as active low |
| with a requirement of acknowledge from the CPU therefore the edge |
| falling is not correct. |
| |
| The interrupt line is shared between PMIC and RTC driver, so using level |
| sensitive interrupt is here especially important to avoid races. With |
| an edge configuration in case if first PMIC signals interrupt followed |
| shortly after by the RTC, the interrupt might not be yet cleared/acked |
| thus the second one would not be noticed. |
| |
| Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org> |
| Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> |
| Link: https://lore.kernel.org/r/20210526172036.183223-6-krzysztof.kozlowski@canonical.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/rtc/rtc-max77686.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/rtc/rtc-max77686.c b/drivers/rtc/rtc-max77686.c |
| index 182fdd00e290..ecd61573dd31 100644 |
| --- a/drivers/rtc/rtc-max77686.c |
| +++ b/drivers/rtc/rtc-max77686.c |
| @@ -718,8 +718,8 @@ static int max77686_init_rtc_regmap(struct max77686_rtc_info *info) |
| |
| add_rtc_irq: |
| ret = regmap_add_irq_chip(info->rtc_regmap, info->rtc_irq, |
| - IRQF_TRIGGER_FALLING | IRQF_ONESHOT | |
| - IRQF_SHARED, 0, info->drv_data->rtc_irq_chip, |
| + IRQF_ONESHOT | IRQF_SHARED, |
| + 0, info->drv_data->rtc_irq_chip, |
| &info->rtc_irq_data); |
| if (ret < 0) { |
| dev_err(info->dev, "Failed to add RTC irq chip: %d\n", ret); |
| -- |
| 2.30.2 |
| |