From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 1C782371046 for ; Tue, 14 Jul 2026 01:53:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783993997; cv=none; b=u+hOdzPWX5fVdgOAQS/2VvkYQ5At4HKlxqTBDKWPgVSm8ztUug/zhzwAs8HN2fPBGK6hWSmP19wpc/ZYm9SU3eht+LSVOyi4DICSNXGt7KHQ4rK98RFhwoMyfnWSg1LovsF6tnV3ny5CjxKgrhZTASZaFy3zO+93gwxI7z6cJxo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783993997; c=relaxed/simple; bh=YwCKNi9HORlnSHohukkixXXpVHplsu608EdMkdhjrro=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jrnvv7Dds2GEcWyH6NEFtitFeaivGPzih9uO3zSq8l4Nlns7KJ0o9RHfFnE0epf8THltnZOd4nNHdqCB2eGTMbzImhv+DB3SYgy88WC1JykCO/WtDXF1bfuxcNo64SQrKGPZ71NkIWC60e6XR7Y7Rn+iLZiuluOiN08YhAkB570= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fz0/okfz; arc=none smtp.client-ip=209.85.216.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fz0/okfz" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-38e07ebd263so361977a91.1 for ; Mon, 13 Jul 2026 18:53:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783993994; x=1784598794; darn=vger.kernel.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:content-type; bh=rMD2T0mMQ4/FSeALpiC8nsd8FBsQVCO1o6ymyIsfh3U=; b=fz0/okfzVBW2Ke8HPgqLoHHVgxWyuvqAdfzCZNA7W3wmlMm5YeO7HenFkregrAHIZM VC9whkZUGB/PVIniwOpz+lEIfiFka0LZSM6eLsOnDaNXNGhWNOOFo6t//RU9P9uczSDc 6Us8Fwfzuwjb5YWW/PQ+VKCwWSpnkABZ5noZXG3fBs1bsgdpffBl3WFKHSOOpn+lGv8q tdz77qhGG8eXX7Z4yeOD5GPrGzO7cbdsDPK2U68r8rUn/wLxhPMpnoqbc2o5l22ITxZ/ 3wKbVqB6TroUTYF8GdNbjOWIc8My8/bE5CwHnxdNn0mMXiIiqhM7D/PVR1FZKjZSvY9m ffUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783993994; x=1784598794; h=content-transfer-encoding:mime-version:references:in-reply-to :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=rMD2T0mMQ4/FSeALpiC8nsd8FBsQVCO1o6ymyIsfh3U=; b=HEUPVg4rKeJhX+j3FlLkRO14tc9jPiR7cfShy48y+FJJ5tG0n87DQHC2p0BRgYD8FW eq/Wcbv1MU8Cbhx+1TZzd13QEK1suIZ+5JLnbvPs+w7UUpwpmBcCqJ1wCe3uEbZp/gAi 6fmN7fTYOjkSk0VzbmuJXXhvAO9tPhN6INM388awVIPG1GvRlB+by1nxKDBw2Yyesxfz 1eE7pmcPzT3lDm980YSm9gMtsJ3SkDCaQXub0HAVkVJXpaEahv9XT4DWf50mJblptuyG yO1YMKUs699FNIYDRG6StVQvCgBRpzjLnlE40h5s7VxJuqRdUukDRycd9omHJYmLWlHS FQTA== X-Forwarded-Encrypted: i=1; AHgh+Ro0BB57tZLt8t/cpgjb7levzl2oBfMiCbKzfbqMDIviX9ww7g6f4uKAplPmJ4keu+UEKy14GeeqjyEbKbQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxCakR8mMOZGoV8JorPAaYKXpuaRaeOx2pKOeLigNufgHCwVPU0 tqRIevTF3pazoXLiA7dacaWdchZ5rQVH8TP/MotlIUVT3O40+okXpRAq X-Gm-Gg: AfdE7cm1RSDX+XwdjASI6eZPUFsKrHoHzO4NokqbVaTt8D/Sq81kVr/UIel70TY2iKE MpT1N3puRiPc2LzhIrn5WxWynedGgs77+agYxmko9zUd0Euhaxsj72Sx5CKrORsPpP2gvSHaXfx yVS7XfibLkDqSrlo/0qmtR90RX23Ql7XmESpVmzPMkIwkOZ7Muwpq9Xe1lMDgfUtYRbXzD7pOAk vUycnOJe6cJqUUY79P8k5r23uJLDkZa4Oyr3viAKqJlJqtFxP3JY1fVb3jVSnDZUBCwb+e3pdKJ nrzF/sHj7fG1O0x0KbfE9u3XpQ/kcNFtfbHcF+EEfg9D7sNwey1cW+dRKpTDRVOdU4AyjPq052k 67OE6vjEz4jfnFyNjnoRHSXmJBZqqxg/kUNYs7ijn/LZjFLaclpDo9LJ3JtEQHvPszCnP53h5fl woTF3NF3c8+YI2Ue/0XtKyr0z8OVAy6NNvQeOLFKOBxCaZcg13/tyOaKiHKgidhraZbxUjkd0cQ ScQ X-Received: by 2002:a05:6a21:694:b0:3c0:9c19:b27b with SMTP id adf61e73a8af0-3c110cf96d5mr11954673637.73.1783993994263; Mon, 13 Jul 2026 18:53:14 -0700 (PDT) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:e15f:5d5f:580b:f2e9]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-13b93ae3b45sm22503093c88.15.2026.07.13.18.53.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 18:53:13 -0700 (PDT) From: Dmitry Torokhov To: linux-input@vger.kernel.org Cc: Krzysztof Kozlowski , linux-kernel@vger.kernel.org Subject: [PATCH 2/3] Input: samsung-keypad - keep interrupt disabled while closed Date: Mon, 13 Jul 2026 18:53:06 -0700 Message-ID: <20260714015309.2140694-2-dmitry.torokhov@gmail.com> X-Mailer: git-send-email 2.55.0.795.g602f6c329a-goog In-Reply-To: <20260714015309.2140694-1-dmitry.torokhov@gmail.com> References: <20260714015309.2140694-1-dmitry.torokhov@gmail.com> 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 driver requests the interrupt during probe, which by default enables it. If the bootloader left the keypad interrupts enabled, or if a spurious interrupt fires early before the driver is fully initialized and clocks are enabled, the interrupt handler will attempt to read registers and may cause a synchronous external abort. Fix this by requesting the interrupt with IRQF_NO_AUTOEN, keeping it disabled during probe. Enable the interrupt in samsung_keypad_start() when the device is opened and ready, and disable it in samsung_keypad_stop() when the device is closed. Remove the redundant re-enabling of the interrupt at the end of samsung_keypad_stop(). Additionally, manually clear the pending interrupt status during system resume when the device is closed to avoid immediate resume. Fixes: 0fffed27f92d ("Input: samsung-keypad - Add samsung keypad driver") Assisted-by: Antigravity:gemini-3.1-pro Signed-off-by: Dmitry Torokhov --- drivers/input/keyboard/samsung-keypad.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/input/keyboard/samsung-keypad.c b/drivers/input/keyboard/samsung-keypad.c index a578f429d100..88e733c1eabe 100644 --- a/drivers/input/keyboard/samsung-keypad.c +++ b/drivers/input/keyboard/samsung-keypad.c @@ -183,6 +183,8 @@ static void samsung_keypad_start(struct samsung_keypad *keypad) writel(0, keypad->base + SAMSUNG_KEYIFCOL); pm_runtime_put(&keypad->pdev->dev); + + enable_irq(keypad->irq); } static void samsung_keypad_stop(struct samsung_keypad *keypad) @@ -206,12 +208,6 @@ static void samsung_keypad_stop(struct samsung_keypad *keypad) clk_disable(keypad->clk); - /* - * Now that chip should not generate interrupts we can safely - * re-enable the handler. - */ - enable_irq(keypad->irq); - pm_runtime_put(&keypad->pdev->dev); } @@ -412,7 +408,8 @@ static int samsung_keypad_probe(struct platform_device *pdev) } error = devm_request_threaded_irq(&pdev->dev, keypad->irq, NULL, - samsung_keypad_irq, IRQF_ONESHOT, + samsung_keypad_irq, + IRQF_ONESHOT | IRQF_NO_AUTOEN, dev_name(&pdev->dev), keypad); if (error) { dev_err(&pdev->dev, "failed to register keypad interrupt\n"); @@ -499,6 +496,9 @@ static void samsung_keypad_toggle_wakeup(struct samsung_keypad *keypad, val &= ~SAMSUNG_KEYIFCON_WAKEUPEN; writel(val, keypad->base + SAMSUNG_KEYIFCON); disable_irq_wake(keypad->irq); + + if (keypad->stopped) + writel(~0x0, keypad->base + SAMSUNG_KEYIFSTSCLR); } clk_disable(keypad->clk); -- 2.55.0.795.g602f6c329a-goog