diff mbox series

[9/9] mfd: sec-irq: Do not enforce (incorrect) interrupt trigger type

Message ID 20201210212903.216728-9-krzk@kernel.org (mailing list archive)
State New, archived
Headers show
Series [1/9] ARM: dts: exynos: correct PMIC interrupt trigger level on Artik 5 | expand

Commit Message

Krzysztof Kozlowski Dec. 10, 2020, 9:29 p.m. UTC
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 Samsung PMIC drivers are used only on Devicetree boards.

Additionally, the PMIC datasheets describe the interrupt line as active
low with a requirement of acknowledge from the CPU therefore the edge
falling is not correct.

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>

---

This patch should wait till DTS changes are merged, as it relies on
proper Devicetree.
---
 drivers/mfd/sec-irq.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Comments

Marek Szyprowski Dec. 18, 2020, 1:25 p.m. UTC | #1
On 10.12.2020 22:29, Krzysztof Kozlowski wrote:
> 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 Samsung PMIC drivers are used only on Devicetree boards.
>
> Additionally, the PMIC datasheets describe the interrupt line as active
> low with a requirement of acknowledge from the CPU therefore the edge
> falling is not correct.
>
> Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>

Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>

It looks that this together with DTS change fixes RTC alarm failure that 
I've observed from time to time on TM2e board!

> ---
>
> This patch should wait till DTS changes are merged, as it relies on
> proper Devicetree.
> ---
>   drivers/mfd/sec-irq.c | 3 +--
>   1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/drivers/mfd/sec-irq.c b/drivers/mfd/sec-irq.c
> index a98c5d165039..760f88a865ab 100644
> --- a/drivers/mfd/sec-irq.c
> +++ b/drivers/mfd/sec-irq.c
> @@ -480,8 +480,7 @@ int sec_irq_init(struct sec_pmic_dev *sec_pmic)
>   	}
>   
>   	ret = devm_regmap_add_irq_chip(sec_pmic->dev, sec_pmic->regmap_pmic,
> -				       sec_pmic->irq,
> -				       IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
> +				       sec_pmic->irq, IRQF_ONESHOT,
>   				       sec_pmic->irq_base, sec_irq_chip,
>   				       &sec_pmic->irq_data);
>   	if (ret != 0) {

Best regards
Krzysztof Kozlowski Dec. 18, 2020, 2:22 p.m. UTC | #2
On Fri, Dec 18, 2020 at 02:25:39PM +0100, Marek Szyprowski wrote:
> On 10.12.2020 22:29, Krzysztof Kozlowski wrote:
> > 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 Samsung PMIC drivers are used only on Devicetree boards.
> >
> > Additionally, the PMIC datasheets describe the interrupt line as active
> > low with a requirement of acknowledge from the CPU therefore the edge
> > falling is not correct.
> >
> > Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
> 
> Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
> 
> It looks that this together with DTS change fixes RTC alarm failure that 
> I've observed from time to time on TM2e board!

Great! I'll add this to the commit msg.

Thanks for testing.

Best regards,
Krzysztof


> 
> > ---
> >
> > This patch should wait till DTS changes are merged, as it relies on
> > proper Devicetree.
> > ---
Marek Szyprowski Dec. 21, 2020, 7:36 a.m. UTC | #3
Hi Krzysztof,

On 18.12.2020 15:22, Krzysztof Kozlowski wrote:
> On Fri, Dec 18, 2020 at 02:25:39PM +0100, Marek Szyprowski wrote:
>> On 10.12.2020 22:29, Krzysztof Kozlowski wrote:
>>> 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 Samsung PMIC drivers are used only on Devicetree boards.
>>>
>>> Additionally, the PMIC datasheets describe the interrupt line as active
>>> low with a requirement of acknowledge from the CPU therefore the edge
>>> falling is not correct.
>>>
>>> Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
>> Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
>>
>> It looks that this together with DTS change fixes RTC alarm failure that
>> I've observed from time to time on TM2e board!
> Great! I'll add this to the commit msg.
>
> Thanks for testing.

BTW, while playing with this, maybe it would make sense to fix the 
reported interrupt type for the PMIC sub-interrupts:

# grep s2mps /proc/interrupts
120:          0      gpa0   7 Level     s2mps13
121:          0   s2mps13  10 Edge      rtc-alarm0

Best regards
Krzysztof Kozlowski Dec. 21, 2020, 7:55 a.m. UTC | #4
On Mon, Dec 21, 2020 at 08:36:02AM +0100, Marek Szyprowski wrote:
> Hi Krzysztof,
> 
> On 18.12.2020 15:22, Krzysztof Kozlowski wrote:
> > On Fri, Dec 18, 2020 at 02:25:39PM +0100, Marek Szyprowski wrote:
> >> On 10.12.2020 22:29, Krzysztof Kozlowski wrote:
> >>> 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 Samsung PMIC drivers are used only on Devicetree boards.
> >>>
> >>> Additionally, the PMIC datasheets describe the interrupt line as active
> >>> low with a requirement of acknowledge from the CPU therefore the edge
> >>> falling is not correct.
> >>>
> >>> Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
> >> Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
> >>
> >> It looks that this together with DTS change fixes RTC alarm failure that
> >> I've observed from time to time on TM2e board!
> > Great! I'll add this to the commit msg.
> >
> > Thanks for testing.
> 
> BTW, while playing with this, maybe it would make sense to fix the 
> reported interrupt type for the PMIC sub-interrupts:
> 
> # grep s2mps /proc/interrupts
> 120:          0      gpa0   7 Level     s2mps13
> 121:          0   s2mps13  10 Edge      rtc-alarm0

I also spotted this. It's a virtual interrupt and I am not sure whether
we can actually configure it when the hardware does not allow to set the
type (the regmap_irq_type requires register offsets).

Best regards,
Krzysztof
Marek Szyprowski Dec. 21, 2020, 8:25 a.m. UTC | #5
On 21.12.2020 08:55, Krzysztof Kozlowski wrote:
> On Mon, Dec 21, 2020 at 08:36:02AM +0100, Marek Szyprowski wrote:
>> On 18.12.2020 15:22, Krzysztof Kozlowski wrote:
>>> On Fri, Dec 18, 2020 at 02:25:39PM +0100, Marek Szyprowski wrote:
>>>> On 10.12.2020 22:29, Krzysztof Kozlowski wrote:
>>>>> 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 Samsung PMIC drivers are used only on Devicetree boards.
>>>>>
>>>>> Additionally, the PMIC datasheets describe the interrupt line as active
>>>>> low with a requirement of acknowledge from the CPU therefore the edge
>>>>> falling is not correct.
>>>>>
>>>>> Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
>>>> Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
>>>>
>>>> It looks that this together with DTS change fixes RTC alarm failure that
>>>> I've observed from time to time on TM2e board!
>>> Great! I'll add this to the commit msg.
>>>
>>> Thanks for testing.
>> BTW, while playing with this, maybe it would make sense to fix the
>> reported interrupt type for the PMIC sub-interrupts:
>>
>> # grep s2mps /proc/interrupts
>> 120:          0      gpa0   7 Level     s2mps13
>> 121:          0   s2mps13  10 Edge      rtc-alarm0
> I also spotted this. It's a virtual interrupt and I am not sure whether
> we can actually configure it when the hardware does not allow to set the
> type (the regmap_irq_type requires register offsets).

I know that it is virtual, but maybe the regmap code could simply copy 
the interrupt type from its parent interrupt?

Best regards
diff mbox series

Patch

diff --git a/drivers/mfd/sec-irq.c b/drivers/mfd/sec-irq.c
index a98c5d165039..760f88a865ab 100644
--- a/drivers/mfd/sec-irq.c
+++ b/drivers/mfd/sec-irq.c
@@ -480,8 +480,7 @@  int sec_irq_init(struct sec_pmic_dev *sec_pmic)
 	}
 
 	ret = devm_regmap_add_irq_chip(sec_pmic->dev, sec_pmic->regmap_pmic,
-				       sec_pmic->irq,
-				       IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+				       sec_pmic->irq, IRQF_ONESHOT,
 				       sec_pmic->irq_base, sec_irq_chip,
 				       &sec_pmic->irq_data);
 	if (ret != 0) {