Received: by 2002:a25:ca44:0:0:0:0:0 with SMTP id a65csp976105ybg; Wed, 29 Jul 2020 02:35:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxHrUG10YfyqW3VeoLMXyT6Sh5jw8Q2PmfelnGWWJO5P9rhmMN5bGijlJA84BPQXmT1zMiQ X-Received: by 2002:a17:906:4f0f:: with SMTP id t15mr22846604eju.337.1596015342684; Wed, 29 Jul 2020 02:35:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596015342; cv=none; d=google.com; s=arc-20160816; b=CeqT0iM1KH083P7uiGMIEALyCF2LBo2KyyR6uEJCZg6sDSbGFiphWfsWBue65wCsjh DopMZSzL+palJpW0pHjBII6vY1shsXYYMCfI9ETj0RbPrLV9m4NMuzm8DN19R9HBIjKv TO+wzLAKCAbH0SgwDEMmxEHzwXnt9J6md9gSAwP0Til6yj+DJRQJirg776xvqenNCbLB zuopAdCU7VkAazt91TtKbtgMdzSaW0/RuSmLr5ZFdlQibfJ6Epl5JCQ9o09M7nrgpDmt PHmUtI/vjyxLa7MqDtyOlTE/ut3bZs6dRSvkrjN5FFJaEFvUyBzm+PK4n6LjquzqksAg zVYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=/VC/uuXlxbfidiPavUNDWLqmh29pPpdY7lZrRMtmTSc=; b=ktLDODvmzxmHUUxQXyQwo69ZkNXW7RSsWKh67tPZf0mHo+k1v+vE2WP484IiUi6+QH Lb0LPhu9k5sJT+M3t7SJkl5bMpnJ0phcM2bSg1TLvgX56DzRCXdafXBAAPH9x/pFNDDi Tyz5aEZiSkzcIKls3NyCaoOhUlytwQC6/aNpU1Pajme0v3V4Fp8unfjrNvlEAdNTXd9Z EvfJF3lpQpjmwYrlsDNKmVAIuJMWNF4GKEb8/QtgePb6u8yGQY6vLKLfR6ZCwfb+rS2L wu7Ehz8AcUNKcOIas9wS+ym5p77Ce9YI93+TVLUphBW7C8Qt4Mcu7RLz0dIBMUyLKWO8 DPLg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="Fnaj/oNA"; 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 v25si743022ejb.238.2020.07.29.02.35.20; Wed, 29 Jul 2020 02:35:42 -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="Fnaj/oNA"; 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 S1727917AbgG2JfD (ORCPT + 99 others); Wed, 29 Jul 2020 05:35:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42636 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726336AbgG2JfC (ORCPT ); Wed, 29 Jul 2020 05:35:02 -0400 Received: from mail-pl1-x643.google.com (mail-pl1-x643.google.com [IPv6:2607:f8b0:4864:20::643]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A6519C061794; Wed, 29 Jul 2020 02:35:02 -0700 (PDT) Received: by mail-pl1-x643.google.com with SMTP id u10so2065843plr.7; Wed, 29 Jul 2020 02:35:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=/VC/uuXlxbfidiPavUNDWLqmh29pPpdY7lZrRMtmTSc=; b=Fnaj/oNACCtyQMFYLfrPnYYFEhKCzFNvxIB+REhxwQtfO6HNXrjwHVqcjBE4C5qOY5 D4cojmVmzOBAOffao2GprTw330iIZXLBP0QE0bB/ncaXGv2wO6V7Q+ZVUjOXbujTnOyH bvSff2vbnQ6/eZZrlrHwohIPCjfsx2U0M+OhMN6A028p9rbp3YGpDGJcKBwCg12tAvvh z/JlB4L9gJpvs+Ok4X3m7tVKWKbNWmFiPXCsXxZjCrTFoiRXOo4T2RnDPZP0CbWIp9pg orntmTtxxaRQde7TOqshbXt6yleDAxbpthaaEZPTcY5bsuqPzbumF7gaZbrKfAm41Fqb tdgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=/VC/uuXlxbfidiPavUNDWLqmh29pPpdY7lZrRMtmTSc=; b=ZB/Ns2VxY7rDFIa1kGuCxglL1m1bwPHSokAThMmeDJWdYuZ/qgvPU0DAnfVct/Hi7u 9rE7koYkTBhgxePEHKSr/KKSt+H45OTocar2bAfMVLSk5h6UHsy+/h+2ON3HcRqRZdk5 DYdIPPEjpMgmmscqji9l5cSshfBWD2mpsltwJbkso9E3m1D6ePeVdIf8uvYz6xsjzrn/ CP4LtUyrlA70/aHYdZLIH/Xge9ffQ4QahZ3fbeuIBFibHYi0JGti06DiXWRwsvq40hUw X7L12iENuaE+lVpugSM5wEv2ZvfEzw6gDav8QmdY24xa7zL4mkNo9x3ORSsUbdrtf0e3 ggAQ== X-Gm-Message-State: AOAM533/Y4s+rHi+CKlGnoblaUxV2m7UgktWd+MzoYXwbEXbZwgj5wcx H/GgbrFwpuRRnlK2ycNUyD4= X-Received: by 2002:a17:90a:1b42:: with SMTP id q60mr8823265pjq.78.1596015302196; Wed, 29 Jul 2020 02:35:02 -0700 (PDT) Received: from ubt.spreadtrum.com ([117.18.48.82]) by smtp.gmail.com with ESMTPSA id b21sm1677814pfp.172.2020.07.29.02.34.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Jul 2020 02:35:01 -0700 (PDT) From: Chunyan Zhang To: Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Orson Zhai , Baolin Wang , Chunyan Zhang , Chunyan Zhang , Taiping Lai Subject: [PATCH] gpio: sprd: Clear interrupt when setting the type as edge Date: Wed, 29 Jul 2020 17:34:50 +0800 Message-Id: <20200729093450.28585-1-zhang.lyra@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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); 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