Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp442964pxa; Fri, 31 Jul 2020 16:59:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxrRW17vxHQkxd8CmJai/GsB6MHn7/uAPrkjktmtoReVLE55lKHi7Q/loeWw4Z/UWWg+hD4 X-Received: by 2002:a17:907:11d0:: with SMTP id va16mr6764502ejb.426.1596239989286; Fri, 31 Jul 2020 16:59:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596239989; cv=none; d=google.com; s=arc-20160816; b=OL1cq1Z8HnFAH8UaCcVnduQInjsZjJeOWXe3aTPtGy21qV3cSF+QsCOt97hN87mDso ZPeKqrTO1kolu9zaFmPswAsAA1qlVgwhzsNTaYJ3wWMgzAQsDGH9868FkDDzouv/YRQX 3HR3JSwS/SMSov0b/XXn7Kjza+g/1A5ekhsH1djSlpU529EFbAZ6cWLmNEzLSpS3V89t QCXN4O8+J5OO+kArHPZd5kqauS7wW1nQhz9J9NIThlhsS5DirgUPPTO0JE13xuoknGwF +oxX5qAGPciTXv6q2aXI0fZMRyAG6jyrm14pL2nbpiBksaXsHltehucRUZcgkfZ7zPzf ifUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=UsimTWbIrqsHqWHrugIeQHRl2pI9arEz0nqny+Jdx80=; b=XvSCeE1AboLlQIE9q2pw6fi3Iwfv+oCK0mO7wtcLC1n0H02rLIOh1GtHrsebvRvyGF jVUBZ0xG4su0IDSNo89yUBn2Wf8fGQSC41HbPyilHVmdo9Cs9I3S2IQU1bbSlOO0PRi6 +zNXEcfHYDRyDSlM23kqM3TZCBOurJ9bL3PPCJpd/MGY2v26xeLf1YmF0mkIt99Nvrl2 8u8E+GDcN5giT7FCILaTim+woyc5JQ3JIVwQvlDN0APLMQ3GUVtN78P13+c2S9sgivjK Pjgh56+Vdac3A4I6eD41Ca9N2RAjnDFXJ+kXRXz1WmF7uxDQ2O+OaseYf4qfa7LZQpYw V8ng== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=utYyUXWF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u24si2019231edi.194.2020.07.31.16.59.26; Fri, 31 Jul 2020 16:59:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=utYyUXWF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726794AbgGaX7N (ORCPT + 99 others); Fri, 31 Jul 2020 19:59:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53604 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726099AbgGaX7N (ORCPT ); Fri, 31 Jul 2020 19:59:13 -0400 Received: from mail-lj1-x244.google.com (mail-lj1-x244.google.com [IPv6:2a00:1450:4864:20::244]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D6364C06174A; Fri, 31 Jul 2020 16:59:12 -0700 (PDT) Received: by mail-lj1-x244.google.com with SMTP id v12so3768602ljc.10; Fri, 31 Jul 2020 16:59:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=UsimTWbIrqsHqWHrugIeQHRl2pI9arEz0nqny+Jdx80=; b=utYyUXWFBG19iMOaqbTjqZjscEIXbcx7v1vLol18jiKTYRhX+ajiGTEdZkIZbE1xGO ya6Dt/2zN3bJNoJPSrNavs9KiDD63R33H1D/Y29D0J4nO/RFpd+o+QptgGwz4JHjuC50 h5QZUpXltw5YzDfyd63hjnCpN/5gYLydc9ly/GEDT0UFBf+o8M6IL1ikTIU7tlO3pzux 86SGQeXcqI/vEuxrQEG9h+CbQSNlc4Vv2Fo5SasGBGzyEZ58UOzVv5zJjjGy4GwwKl7k aE6233UfVWhErWQgbSjVOg+GvRej2+8k4SCdTRczeb1rghlxzKkgUDcrG8eFQlfzWDSI J+VA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=UsimTWbIrqsHqWHrugIeQHRl2pI9arEz0nqny+Jdx80=; b=aEPX+bueXCqd6rtnSu+dmyl+J83MJA74ebTU+oML0JwlNnmKow3jkDOmESBODX2fQ5 ISa5YTi039/X+J+czVmw1y+fBpf7CygCfoySQFPApQIVWdVuVv3bTThbJfXC5YuINhyx X6BWpguOHmFZKnHghKg4N+LJ8v+cSSz+us1bxHDzJDCuhN42enDs1Yh1KgGGfo06FKPz bPDIteCGlownQ9P6ZCwv09E1zh3yz7XOBRpM+FDB1n7GS0w0P5vY8jiqnijqn9/gl6F0 K+JYYBf3e/9qpD2JoQMZHN+37SY8s3C3FdtaDJuP/xJlYrTJP9nvBZ8ZJfhuRaEijCz1 Yviw== X-Gm-Message-State: AOAM532LrYWiOwFsSNu/B3fWcceVltTNAqQ3OuUFzcSslABO72sayVEN IMf7tJGzlntt8vBEUvczr/480w23SpZrRx4bqGxoARH4 X-Received: by 2002:a2e:6e0a:: with SMTP id j10mr2736087ljc.389.1596239951119; Fri, 31 Jul 2020 16:59:11 -0700 (PDT) MIME-Version: 1.0 References: <20200729093450.28585-1-zhang.lyra@gmail.com> In-Reply-To: <20200729093450.28585-1-zhang.lyra@gmail.com> From: Baolin Wang Date: Sat, 1 Aug 2020 07:58:56 +0800 Message-ID: Subject: Re: [PATCH] gpio: sprd: Clear interrupt when setting the type as edge To: Chunyan Zhang Cc: Linus Walleij , Bartosz Golaszewski , linux-gpio@vger.kernel.org, LKML , Orson Zhai , Chunyan Zhang , Taiping Lai Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Jul 29, 2020 at 5:35 PM Chunyan Zhang wrote: > > From: Taiping Lai > > The raw interrupt status of GPIO maybe set before the interrupt is enabled, > which would trigger the interrupt event once enabled it from user side. > This is the case for edge interrupts only. Adding a clear operation when > setting interrupt type can avoid that. > > Fixes: 9a3821c2bb47 ("gpio: Add GPIO driver for Spreadtrum SC9860 platform") > Signed-off-by: Taiping Lai > Signed-off-by: Chunyan Zhang > --- > drivers/gpio/gpio-sprd.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/gpio/gpio-sprd.c b/drivers/gpio/gpio-sprd.c > index d7314d39ab65..36ea8a3bd451 100644 > --- a/drivers/gpio/gpio-sprd.c > +++ b/drivers/gpio/gpio-sprd.c > @@ -149,17 +149,20 @@ static int sprd_gpio_irq_set_type(struct irq_data *data, > sprd_gpio_update(chip, offset, SPRD_GPIO_IS, 0); > sprd_gpio_update(chip, offset, SPRD_GPIO_IBE, 0); > sprd_gpio_update(chip, offset, SPRD_GPIO_IEV, 1); > + sprd_gpio_update(chip, offset, SPRD_GPIO_IC, 1); I think you should move this abonormal interrupt clearing operation to sprd_gpio_request(), when users request a GPIO. > irq_set_handler_locked(data, handle_edge_irq); > break; > case IRQ_TYPE_EDGE_FALLING: > sprd_gpio_update(chip, offset, SPRD_GPIO_IS, 0); > sprd_gpio_update(chip, offset, SPRD_GPIO_IBE, 0); > sprd_gpio_update(chip, offset, SPRD_GPIO_IEV, 0); > + sprd_gpio_update(chip, offset, SPRD_GPIO_IC, 1); > irq_set_handler_locked(data, handle_edge_irq); > break; > case IRQ_TYPE_EDGE_BOTH: > sprd_gpio_update(chip, offset, SPRD_GPIO_IS, 0); > sprd_gpio_update(chip, offset, SPRD_GPIO_IBE, 1); > + sprd_gpio_update(chip, offset, SPRD_GPIO_IC, 1); > irq_set_handler_locked(data, handle_edge_irq); > break; > case IRQ_TYPE_LEVEL_HIGH: > -- > 2.20.1 > -- Baolin Wang