All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] pinctrl: mediatek: Fix trigger type setting follow for unexpected interrupt
@ 2021-01-25  3:19 Hailong Fan
  2021-01-25 13:09   ` Linus Walleij
  0 siblings, 1 reply; 4+ messages in thread
From: Hailong Fan @ 2021-01-25  3:19 UTC (permalink / raw)
  To: Sean Wang, Linus Walleij, Matthias Brugger
  Cc: linux-mediatek, linux-gpio, linux-arm-kernel, linux-kernel,
	youlin.pei, Nicolas Boichat, srv_heupstream, chentsung,
	gtk_pangao, hanks.chen, yong.wu, Hailong Fan

When flipping the polarity will be generated interrupt under certain
circumstances, but GPIO external signal has not changed.
Then, mask the interrupt before polarity setting, and clear the
unexpected interrupt after trigger type setting completed.

Signed-off-by: Hailong Fan <hailong.fan@mediatek.com>
Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
---
 drivers/pinctrl/mediatek/mtk-eint.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/pinctrl/mediatek/mtk-eint.c b/drivers/pinctrl/mediatek/mtk-eint.c
index 22736f60c16c..0042f32c7e7e 100644
--- a/drivers/pinctrl/mediatek/mtk-eint.c
+++ b/drivers/pinctrl/mediatek/mtk-eint.c
@@ -157,6 +157,7 @@ static void mtk_eint_ack(struct irq_data *d)
 static int mtk_eint_set_type(struct irq_data *d, unsigned int type)
 {
 	struct mtk_eint *eint = irq_data_get_irq_chip_data(d);
+	bool unmasked;
 	u32 mask = BIT(d->hwirq & 0x1f);
 	void __iomem *reg;
 
@@ -173,6 +174,13 @@ static int mtk_eint_set_type(struct irq_data *d, unsigned int type)
 	else
 		eint->dual_edge[d->hwirq] = 0;
 
+	if (!mtk_eint_get_mask(eint, d->hwirq)) {
+		mtk_eint_mask(d);
+		unmasked = true;
+	} else {
+		unmasked = false;
+	}
+
 	if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_EDGE_FALLING)) {
 		reg = mtk_eint_get_offset(eint, d->hwirq, eint->regs->pol_clr);
 		writel(mask, reg);
@@ -189,8 +197,9 @@ static int mtk_eint_set_type(struct irq_data *d, unsigned int type)
 		writel(mask, reg);
 	}
 
-	if (eint->dual_edge[d->hwirq])
-		mtk_eint_flip_edge(eint, d->hwirq);
+	mtk_eint_ack(d);
+	if (unmasked)
+		mtk_eint_unmask(d);
 
 	return 0;
 }
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] pinctrl: mediatek: Fix trigger type setting follow for unexpected interrupt
  2021-01-25  3:19 [PATCH v2] pinctrl: mediatek: Fix trigger type setting follow for unexpected interrupt Hailong Fan
  2021-01-25 13:09   ` Linus Walleij
@ 2021-01-25 13:09   ` Linus Walleij
  0 siblings, 0 replies; 4+ messages in thread
From: Linus Walleij @ 2021-01-25 13:09 UTC (permalink / raw)
  To: Hailong Fan
  Cc: Sean Wang, Matthias Brugger,
	moderated list:ARM/Mediatek SoC support,
	open list:GPIO SUBSYSTEM, Linux ARM, linux-kernel, youlin.pei,
	Nicolas Boichat, srv_heupstream, chentsung, gtk_pangao,
	Hanks Chen, yong.wu

On Mon, Jan 25, 2021 at 4:19 AM Hailong Fan <hailong.fan@mediatek.com> wrote:

> When flipping the polarity will be generated interrupt under certain
> circumstances, but GPIO external signal has not changed.
> Then, mask the interrupt before polarity setting, and clear the
> unexpected interrupt after trigger type setting completed.
>
> Signed-off-by: Hailong Fan <hailong.fan@mediatek.com>
> Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>

Patch applied for fixes.

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] pinctrl: mediatek: Fix trigger type setting follow for unexpected interrupt
@ 2021-01-25 13:09   ` Linus Walleij
  0 siblings, 0 replies; 4+ messages in thread
From: Linus Walleij @ 2021-01-25 13:09 UTC (permalink / raw)
  To: Hailong Fan
  Cc: youlin.pei, Nicolas Boichat, srv_heupstream, chentsung,
	Sean Wang, linux-kernel, open list:GPIO SUBSYSTEM,
	moderated list:ARM/Mediatek SoC support, yong.wu,
	Matthias Brugger, Hanks Chen, Linux ARM, gtk_pangao

On Mon, Jan 25, 2021 at 4:19 AM Hailong Fan <hailong.fan@mediatek.com> wrote:

> When flipping the polarity will be generated interrupt under certain
> circumstances, but GPIO external signal has not changed.
> Then, mask the interrupt before polarity setting, and clear the
> unexpected interrupt after trigger type setting completed.
>
> Signed-off-by: Hailong Fan <hailong.fan@mediatek.com>
> Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>

Patch applied for fixes.

Yours,
Linus Walleij

_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] pinctrl: mediatek: Fix trigger type setting follow for unexpected interrupt
@ 2021-01-25 13:09   ` Linus Walleij
  0 siblings, 0 replies; 4+ messages in thread
From: Linus Walleij @ 2021-01-25 13:09 UTC (permalink / raw)
  To: Hailong Fan
  Cc: youlin.pei, Nicolas Boichat, srv_heupstream, chentsung,
	Sean Wang, linux-kernel, open list:GPIO SUBSYSTEM,
	moderated list:ARM/Mediatek SoC support, yong.wu,
	Matthias Brugger, Hanks Chen, Linux ARM, gtk_pangao

On Mon, Jan 25, 2021 at 4:19 AM Hailong Fan <hailong.fan@mediatek.com> wrote:

> When flipping the polarity will be generated interrupt under certain
> circumstances, but GPIO external signal has not changed.
> Then, mask the interrupt before polarity setting, and clear the
> unexpected interrupt after trigger type setting completed.
>
> Signed-off-by: Hailong Fan <hailong.fan@mediatek.com>
> Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>

Patch applied for fixes.

Yours,
Linus Walleij

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-01-26  5:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-25  3:19 [PATCH v2] pinctrl: mediatek: Fix trigger type setting follow for unexpected interrupt Hailong Fan
2021-01-25 13:09 ` Linus Walleij
2021-01-25 13:09   ` Linus Walleij
2021-01-25 13:09   ` Linus Walleij

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.