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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1F7F4C001DB for ; Sun, 13 Aug 2023 16:23:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233898AbjHMQXh (ORCPT ); Sun, 13 Aug 2023 12:23:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49108 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233438AbjHMQXS (ORCPT ); Sun, 13 Aug 2023 12:23:18 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7516126A0; Sun, 13 Aug 2023 09:14:16 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 8B6C363C3D; Sun, 13 Aug 2023 16:13:29 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 384E2C433C9; Sun, 13 Aug 2023 16:13:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1691943209; bh=dvfJl2EgSoUXBF+HB9XJRDXWhuGdo/8LLSolCqFWHME=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PHrfdaNYbzwLsPt/eECOzZH9+TAjJ2kLgbk5Pz+ss5Yd7OfEi1LKLK08t6V2C7FQ7 msTUAwGV2vXj1WpK7nESe8B9MEvVTGpGrf31oooe2VF72/ceS/v9gyuwMXZPi48cII J/cMgDBhaM/UBmGKUnZk1gNzDAG8ZDHoKwfBr5EmmcAhIS+3YsEH0iSrIHZIDFKORi /30l17uDDco8T61A2caI0lxVOxUepyqHM54hpILyc3oNozhJX6ju3zc/3UrpDKt56f raW3Ht5DZg0HXDUNAL8lD3WjQltFUa2d6eDxa7CZ99t3DMFFfszgoOFQDbfY32E0g4 Di/PtPGZgWpvQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Dmytro Maluka , Mark Brown , Sasha Levin , support.opensource@diasemi.com, lgirdwood@gmail.com, perex@perex.cz, tiwai@suse.com, alsa-devel@alsa-project.org Subject: [PATCH AUTOSEL 4.19 03/13] ASoC: da7219: Check for failure reading AAD IRQ events Date: Sun, 13 Aug 2023 12:13:07 -0400 Message-Id: <20230813161317.1087606-3-sashal@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230813161317.1087606-1-sashal@kernel.org> References: <20230813161317.1087606-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 4.19.291 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dmytro Maluka [ Upstream commit f0691dc16206f21b13c464434366e2cd632b8ed7 ] When handling an AAD interrupt, if IRQ events read failed (for example, due to i2c "Transfer while suspended" failure, i.e. when attempting to read it while DA7219 is suspended, which may happen due to a spurious AAD interrupt), the events array contains garbage uninitialized values. So instead of trying to interprete those values and doing any actions based on them (potentially resulting in misbehavior, e.g. reporting bogus events), refuse to handle the interrupt. Signed-off-by: Dmytro Maluka Link: https://lore.kernel.org/r/20230717193737.161784-3-dmy@semihalf.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/codecs/da7219-aad.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/sound/soc/codecs/da7219-aad.c b/sound/soc/codecs/da7219-aad.c index 29e24a0f923d5..7e18e007a639f 100644 --- a/sound/soc/codecs/da7219-aad.c +++ b/sound/soc/codecs/da7219-aad.c @@ -351,11 +351,15 @@ static irqreturn_t da7219_aad_irq_thread(int irq, void *data) struct da7219_priv *da7219 = snd_soc_component_get_drvdata(component); u8 events[DA7219_AAD_IRQ_REG_MAX]; u8 statusa; - int i, report = 0, mask = 0; + int i, ret, report = 0, mask = 0; /* Read current IRQ events */ - regmap_bulk_read(da7219->regmap, DA7219_ACCDET_IRQ_EVENT_A, - events, DA7219_AAD_IRQ_REG_MAX); + ret = regmap_bulk_read(da7219->regmap, DA7219_ACCDET_IRQ_EVENT_A, + events, DA7219_AAD_IRQ_REG_MAX); + if (ret) { + dev_warn_ratelimited(component->dev, "Failed to read IRQ events: %d\n", ret); + return IRQ_NONE; + } if (!events[DA7219_AAD_IRQ_REG_A] && !events[DA7219_AAD_IRQ_REG_B]) return IRQ_NONE; -- 2.40.1