From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D7F1AC4167B for ; Mon, 4 Dec 2023 20:36:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=zCRlUl8QgKojOjTzLmQMqwRgQa3ZcIWr42CBoFJR6+0=; b=hLQDN2tKWmJjkx Q61SVK6wULdzhO8/SC8cuQknxC2oLzFhzb19xacNWHEdUu4eYSr8nw7K7lKsviFztpxaFYOENIGE6 NPeDgKsQWtw0v00pb/CG6rG5j/xa5aiqPKnBOClL08+3C9XXTuW85khi42HzXSbHM9n4teB1YZWqS OSXi7t/cOm8Erv8/bPet2u5aQZKGMHWFN/29ehVMrC/1QcWBdsI3s4+xJAX0BR2o6ZcmBpOVaK2XO n4peM5gmUr7xuITeq7NnxaOjwA7w9owwYaxcqtFoav/vZicXp+yICI0uNb1QJg/9AoAglpqi4cF51 ZOQPZ7+iTrOpRXh0Eesg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rAFfT-005ZTQ-12; Mon, 04 Dec 2023 20:35:51 +0000 Received: from mail-oo1-xc31.google.com ([2607:f8b0:4864:20::c31]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rAFfL-005ZN5-2p for linux-arm-kernel@lists.infradead.org; Mon, 04 Dec 2023 20:35:47 +0000 Received: by mail-oo1-xc31.google.com with SMTP id 006d021491bc7-58e238b654fso610630eaf.2 for ; Mon, 04 Dec 2023 12:35:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hefring-com.20230601.gappssmtp.com; s=20230601; t=1701722138; x=1702326938; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FWagGRv/i1MW5G1zwpH94jc78fOBc/tv6/pgOnwcx6k=; b=dKxliD1EPD046Ci63lxSl4EU4Mrup545Z1iL1bOZXSXSLj0wfA/CI2yh063ocpULWX fegoEGSCWC4243/MegShxMPeJ0X5xrKTGykv62vhJyGXZf3gzPI8v3bspXV3tJTOrlNN PeXe25BdQlD3Jbw2qIMJm5OME9XuIiFxanE4MJgnVHE0eXjDnbvZp5Xpbn3G69v7t6yz Kw6RH57f7bWXshHt4G14G3D+BKNlSmcEWSWNRecY8O8P2SL3+4wrehi4jTac3hxy13nI LulBa9zdpDEVV0CNI8k4JHL554tUX6ZbtfrjfRYK/qdebOuZ2c2++PxBHMU45KVyOP8H DlTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701722138; x=1702326938; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FWagGRv/i1MW5G1zwpH94jc78fOBc/tv6/pgOnwcx6k=; b=Hp/MUK/lGxEyPQ8a2Ql+a4Z2Tox+xVlRrZiRduReoxXvgHyQI3cp1VUinMjlxQfdU6 bL2M5/LegvO5eU8QI760EFw5TejT9B3zVwNqU6aHe1HXY1H3ma1VPpPUtxoTlSK7z1LU RcZo1Y/VqJ/MryRH1IKFdKB5pKlsa13UczBTxljcn7tB3VgiA+ahQ0TRBy/Bl+D+Q2T1 qlgehgMXd5EyIsOqNiNd3ytt7QhtfdiFygLZR+xwNuj/m98zZSQxmuD+j9whAfG+dem8 Q3uUQEN9Au6CweT8MJ5wrfEjkc1HrRZyvZhw25PP90TLf5EaktNefUv5WIICpSB//pLd WBhw== X-Gm-Message-State: AOJu0YyCc7rVq/1fLCVLarAn+X6OxdIFX0pSE2E8oxcgI/l4Aa3GM5Gr H/GSDnaiMp6XjFNM4QIZvKn0uw== X-Google-Smtp-Source: AGHT+IGpvpasx/jsnz18GATaaZSXxidSk27F4tka23is5+bIfanisW7osRFJz0pud48XSUhXK+w7lw== X-Received: by 2002:a05:6358:640b:b0:16d:f932:b5f with SMTP id f11-20020a056358640b00b0016df9320b5fmr1254764rwh.30.1701722138274; Mon, 04 Dec 2023 12:35:38 -0800 (PST) Received: from localhost.localdomain ([50.212.55.89]) by smtp.gmail.com with ESMTPSA id jo23-20020a056214501700b0067ac930d17asm1123469qvb.141.2023.12.04.12.35.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Dec 2023 12:35:37 -0800 (PST) From: Ben Wolsieffer To: linux-kernel@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org Cc: Thomas Gleixner , Maxime Coquelin , Alexandre Torgue , Linus Walleij , Ben Wolsieffer Subject: [PATCH 2/2] pinctrl: stm32: fix GPIO level interrupts Date: Mon, 4 Dec 2023 15:33:57 -0500 Message-ID: <20231204203357.2897008-3-ben.wolsieffer@hefring.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20231204203357.2897008-1-ben.wolsieffer@hefring.com> References: <20231204203357.2897008-1-ben.wolsieffer@hefring.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231204_123544_104868_1426AA75 X-CRM114-Status: GOOD ( 14.86 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The STM32 doesn't support GPIO level interrupts in hardware, so the driver tries to emulate them using edge interrupts, by retriggering the interrupt if necessary based on the pin state after the handler finishes. Currently, this functionality does not work because the irqchip uses handle_edge_irq(), which doesn't run the irq_eoi() or irq_unmask() callbacks after handling the interrupt. This patch fixes this by using handle_level_irq() for level interrupts, which causes irq_unmask() to be called to retrigger the interrupt. Signed-off-by: Ben Wolsieffer --- drivers/pinctrl/stm32/pinctrl-stm32.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c b/drivers/pinctrl/stm32/pinctrl-stm32.c index 603f900e88c1..fb9532601cbb 100644 --- a/drivers/pinctrl/stm32/pinctrl-stm32.c +++ b/drivers/pinctrl/stm32/pinctrl-stm32.c @@ -348,12 +348,15 @@ static int stm32_gpio_set_type(struct irq_data *d, unsigned int type) case IRQ_TYPE_EDGE_RISING: case IRQ_TYPE_EDGE_FALLING: case IRQ_TYPE_EDGE_BOTH: + irq_set_handler_locked(d, handle_edge_irq); parent_type = type; break; case IRQ_TYPE_LEVEL_HIGH: + irq_set_handler_locked(d, handle_level_irq); parent_type = IRQ_TYPE_EDGE_RISING; break; case IRQ_TYPE_LEVEL_LOW: + irq_set_handler_locked(d, handle_level_irq); parent_type = IRQ_TYPE_EDGE_FALLING; break; default: -- 2.42.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel