From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6065D3D0C07 for ; Tue, 28 Jul 2026 15:40:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785253224; cv=none; b=mpqM89bnWq8a0xwUC7G7T02wdMThgefgBKN0AeGotQNZPruXynGchWmh/R7llw2dryefTkea/i8x3/n1vjaBffjTbyq2n4zIOTTrP/i7THJ0Dc1XBo8uVqHSQ0lnL6fPXXDcVvRRit33aRQEoOV/A/C3RcPZCtADE4bzMB4yR58= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785253224; c=relaxed/simple; bh=UFtRcXB/b51a2Tj+ffxTymicyYtVOklrAapfeY/zrho=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Kq4qGIhFa9wB+ilqxoy7I6Dla/m5aQmWKd/bV/NJz08ifg5H6EMhHiumuFYlULE624mdv2pw7RK1wxI0x/ywSWKpkAsdaymz3Lb66KviALvdS4I9NdKkTg3Pborun7NnhybBiQ6PnTCtxFvx05nZAd0sP6DQp5kSNFbkQjfZMus= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=mechasystems.com; spf=pass smtp.mailfrom=mechasystems.com; dkim=pass (2048-bit key) header.d=mechasystems.com header.i=@mechasystems.com header.b=Nj+koez0; arc=none smtp.client-ip=209.85.214.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=mechasystems.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mechasystems.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mechasystems.com header.i=@mechasystems.com header.b="Nj+koez0" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-2cf27856f9cso43565ad.2 for ; Tue, 28 Jul 2026 08:40:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mechasystems.com; s=google; t=1785253222; x=1785858022; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=qWy7PPaU++st7KxFJbdutjtEsUds1sQiDarbupfcP9k=; b=Nj+koez0Y52qrGc1Zzc5m9v6hLQdVmPFwtze/gDhZ2dEAIasVmepHF5wkX1Qb2O2oy tqSdrB+3p9iAoMmWIcIokCjBIoc5HJ6NIVpq8uGQDrma0AEbrVrNgPQLn8biShi4ekV+ eOt2Hg/MM7lua/7rsAJJiL8qfDihHtjF80Mr+4MzXLBVyhZckjx2d6bh0mSuqYTNfplQ u6NpLlJuN+x2g9DOr+EXBmsK4l9M8ssxibnzQRlz3XvIj4vfDdCvayBIRSiMsI/HRHaq 9BclVTb99QpmaMFRoYWoFxTbrXkR33D8DLIGKFyr/6gwmjeXNp/OEs/lDRlSkcPDSdI+ VY6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785253222; x=1785858022; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=qWy7PPaU++st7KxFJbdutjtEsUds1sQiDarbupfcP9k=; b=DDYuXFBQxVJLh8R7ouxbLZeP2sn8TnKUS5NcHi4gpZmJJQsjbfrF0Gi7xsDX/Afkc5 +cwACck2vPrRCwnL2OxTq0WAvZsOi9W0+mlo1pKVb/cqbcRxxOHu+uvmq63lavj8UJm3 SklB+k+qF1yZkjmabxeHT/Ffno3Q/Vmse0l2IRDSPWn8dWV6TIiFtfw4dl7XeVmlzy18 4xLRO4/LRU4Fm/L+QIgAmNfutr1fOSw1wwSCRktcU3HNw9Sq+bqluAwGFfFO5DA65yu7 2D+6GStbF+6cz/au5xvI6rtgIrFNyWcYqQ2dDqo/sf/DqA5PZksIWqDv8Y6FZafx6ruA OG8Q== X-Forwarded-Encrypted: i=1; AHgh+RovDf/glsLM33sGgHrZfm1VCQuIomIfoiNk4DCHYKbQcOFtdyaTlP1WnuY3HcvjYi+JBidr7iWEQjfaBc8=@vger.kernel.org X-Gm-Message-State: AOJu0YzEt9HyLNslj3HkP0HOCoUV/gsIDnS4CLiUkfxtemMjhWkaoebY Hxf05QUB6VxEo2rDq8tUB2kMGHVHB8KgCXxUnCTiX8YeKWK6VTUUqXAoxACqiP7Myjw= X-Gm-Gg: AR+sD10QgnxdySLuuWnC/dxISlMaogc01SSmMsgQZuyMkAtP7zoabbRJFz5K790u1PU fQ0whq9Z/4h7hCCzG3buFngwfNKMO22Nh9N83RCPkYu+yQyw3ghG8f4RlzO/SNgVS3RS2hVULOu BRxg4gBF0YSp5aYhIqEU6+of+I0fO7djvl35X/F54KfaJdSnoV+PlW5KvFXSApni0AiptuVMIMC 3vfpiksfqUInOzA4aWRTvUSgeXLGVtLLLSaEY/rpIH2dDYke7+i/f5xy+xl0q418DGKVgI+u6FB 62EAwHvHFjYyRGXCN3MTuGcbWhuie+DJF4jSJpcNWeCSqzS27pNXItcbhQkOV8aR9N3Gg6ZhNJQ pOfpguXaQVL1VYMM0AvVJdY5GWtM1YjSxpACE3gKB5Ev2NLrLpnIR5rkEq+5pnQk+2dLEOF4x3T 4XRCZ9r+UBllZa/Q== X-Received: by 2002:a17:903:3903:b0:2cf:477f:57cc with SMTP id d9443c01a7336-2d015a3091emr32574325ad.4.1785253222232; Tue, 28 Jul 2026 08:40:22 -0700 (PDT) Received: from advait-work.lan ([103.93.196.100]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cfde7f8e73sm54584665ad.72.2026.07.28.08.40.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 08:40:21 -0700 (PDT) From: Advait Dhamorikar To: myungjoo.ham@samsung.com, cw00.choi@samsung.com, linux-kernel@vger.kernel.org Cc: alsi@bang-olufsen.dk, gregkh@linuxfoundation.org, marex@denx.de, heikki.krogerus@linux.intel.com, Advait Dhamorikar Subject: [PATCH] extcon: usbc-tusb320: always rewrite REG9 to deassert INT_N Date: Tue, 28 Jul 2026 21:07:44 +0530 Message-ID: <20260728153744.321743-1-advaitd@mechasystems.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The IRQ handler currently returns IRQ_NONE without rewriting REG9 when INTERRUPT_STATUS is clear, skipping the documented interrupt acknowledge sequence which says that rewrites to this register are needed for the INT_N to be correctly asserted for all interrupt events. On some hardware, this can leave INT_N asserted, causing repeated level-triggered interrupts until the kernel disables the IRQ as spurious. Always rewrite REG9 before returning from the IRQ handler, regardless of the observed INTERRUPT_STATUS bit, and return IRQ_HANDLED once the acknowledge sequence has been performed. Also report REG9 write failures to aid debugging. Fixes: 581c848b610d ("extcon: usbc-tusb320: Update state on probe even if no IRQ pending") Signed-off-by: Advait Dhamorikar --- drivers/extcon/extcon-usbc-tusb320.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/extcon/extcon-usbc-tusb320.c b/drivers/extcon/extcon-usbc-tusb320.c index 920b03421850..56c888004f41 100644 --- a/drivers/extcon/extcon-usbc-tusb320.c +++ b/drivers/extcon/extcon-usbc-tusb320.c @@ -375,14 +375,25 @@ static irqreturn_t tusb320_state_update_handler(struct tusb320_priv *priv, bool force_update) { unsigned int reg; + int ret; - if (regmap_read(priv->regmap, TUSB320_REG9, ®)) { - dev_err(priv->dev, "error during i2c read!\n"); + ret = regmap_read(priv->regmap, TUSB320_REG9, ®); + if (ret) { + dev_err(priv->dev, "REG9 read failed: %d\n", ret); return IRQ_NONE; } - if (!force_update && !(reg & TUSB320_REG9_INTERRUPT_STATUS)) - return IRQ_NONE; + if (!force_update && !(reg & TUSB320_REG9_INTERRUPT_STATUS)) { + dev_dbg(priv->dev, "IRQ fired but interrupt status not set\n"); + /* + * Rewrites to this register are needed for the INT_N + * to be correctly asserted for all interrupt events. + */ + ret = regmap_write(priv->regmap, TUSB320_REG9, reg); + if (ret) + dev_err(priv->dev, "REG9 write failed: %d\n", ret); + return IRQ_HANDLED; + } tusb320_extcon_irq_handler(priv, reg); @@ -393,7 +404,9 @@ static irqreturn_t tusb320_state_update_handler(struct tusb320_priv *priv, if (priv->port) tusb320_typec_irq_handler(priv, reg); - regmap_write(priv->regmap, TUSB320_REG9, reg); + ret = regmap_write(priv->regmap, TUSB320_REG9, reg); + if (ret) + dev_err(priv->dev, "REG9 write failed: %d\n", ret); return IRQ_HANDLED; } -- 2.43.0