From nobody Mon Jun 8 12:11:53 2026 Received: from mail-lf1-f47.google.com (mail-lf1-f47.google.com [209.85.167.47]) (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 81A3C329396 for ; Fri, 29 May 2026 09:56:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780048615; cv=none; b=gDA6ApapaIleq2Xt1SaxADiDDv61dv5lPeKh2VUhsr6EKNOYiIN7hoJfG+4Lz+USHY8C3jT4Qxbd7BP+4X44u3KTRoLSBNTzivCeGIK/XDjlE1kaxuEmF2zdhoGGiYyZn+GS6iaVSK1THDcKNumWm6yAN4MQ9Aab5XO65wvbASk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780048615; c=relaxed/simple; bh=lV4KFFGp0ypFwMw75cgGF7N44SHe2ZGna2tzsRK8m/c=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=JTUv2HiJ+8zIgonlsCEW4GYPPD/KqHH74DUnPvPIzo2sxnnxpTIuFTGHgaUvH/DNqU94Jsuw3rTT9AG6fhVDIQuIyPJRZwAsdYfEVZ5Uiu0eVtXvKI0mWAPDljsEzkATRmWRu5ddH13bF6nZaTnHJ6HjyS81I3xgbd39mw3z1Do= 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=CvpigIhO; arc=none smtp.client-ip=209.85.167.47 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="CvpigIhO" Received: by mail-lf1-f47.google.com with SMTP id 2adb3069b0e04-5a4002b1183so1087277e87.3 for ; Fri, 29 May 2026 02:56:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780048613; x=1780653413; 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; bh=nLbV5NS/+AUn3jPB1rVufRXT2KFY5tOEq+biHp14VAU=; b=CvpigIhOFnv0NnKDQBUvFcL41zpR6zaC68nVP6n0ybWVVxsXgnwEFntUjy9yHsCmTX 1WGz4dkworxwCT43fmLwiuEYvxtXM/mjZAHgYI20IzJ18NjobkWOOiXTvXZZwVsnrfj4 JNqsdqSdipSjOMcHPD09uTnHcbJTgg08AmLC/I66B0NlaqNW0H4hsktXIx/H1R7Vc+Od CGs3V3NRFNxg0y4fo3lX6v53/PUnN7kBEKaTry53/vqlEK7kz0242EdcmFahzXjqHRKF BlQ3THSYmBVNeHW164gsHGsQaYSyTPd+UKY0z/8CfZv48xnPSYF4xJL3zmsX/E8+X49l jhsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780048613; x=1780653413; 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; bh=nLbV5NS/+AUn3jPB1rVufRXT2KFY5tOEq+biHp14VAU=; b=RgmMmu4uhM8ZNG6T0nan6h0Gy9+WC5XplCwf7u4qPuANVSsVOWX8e836PLIE2FyFK4 tDbzJaBwof+Lj3nfKUFz7aIf/OgMZl/4302UNPV6UvH6G55ik6UQQ/dRyLrO51A/GMMK tGj30tMVTonKd3gdsnRP1hK3e8k0UL282tlPrFxs8pejEEMEwhYzFaZvKsXbEqPKBWqG RyHDj3odsIzllX8YjOld4rmXaMHqWwQ8hWk3eBk+EAQNdC1MF1owcWJJ5A39Ncvs2Gx8 WdFRKeb3bT3l5jEzX6ZF/lK27PyameTkZ0XNT8vXUVbZbniSSDWSJ2RLqZ4WirxibWNo PvDA== X-Forwarded-Encrypted: i=1; AFNElJ9cVWuZCxcV3V3CxQP3DK/D4eFyMwdUCwL3c6NsrgPYbilGVquhbT7JQkOb7k4PBNyByhuhWbzzXTzuX7o=@vger.kernel.org X-Gm-Message-State: AOJu0Ywah9RhH6U5/xdVOs2iZtoBpjdVOHGeBKLwBAk5fbJ8C7Bzvb5B Vvhl3WTaO0ei7cXjilGA7VCquj+MthGA06HwfJ3OHH842QQo/CngOwVZ X-Gm-Gg: Acq92OEnPNHacKj7+mhRBp4gunPmzFkoLdaXnL4sxbCZDRLIAHFSV8kWvQkSB+vxfxW nXzAFMVprvYihlAehKgB4McrpTHngdgYJ9Ph/GYFdo/Rl/hIr8LhPEjqlxaTI8BOo4pJwoJ+jez xBD1O/ObbaFr6SfcKj8gTUTHo2fSMyO2BYnD/4Pkh8z+envuba0DYDumyIsrtylhjP3SoOOxfLY xANDPvuHLNAK/+MOliBIetCF/+G939di32HcBpsE4HRmMinVG+DwVlra3UcSxP9mwqPFad6AVQF fCi5UJHqV0YfWxCQihiKqyfLsTk6iJXTiImzKKMx51hnnVavFEHDfZlcAHQSlQ/2WLdOIUioVe8 7028FjTsvclDHtGldLBre5w/Fwn8IyGhUkT6R+YzZPNx8ryRthEjLAmPk2XCrmQKiuLUiF8YXaG mKx8C6fiioH6q01+Me88tmXRxCt/eerdYHd8L6bEfu5bLZx5gCoaolATLf7WcVG6vqTw== X-Received: by 2002:a05:6512:3988:b0:5a8:7396:63e3 with SMTP id 2adb3069b0e04-5aa59523751mr278652e87.5.1780048612472; Fri, 29 May 2026 02:56:52 -0700 (PDT) Received: from localhost.localdomain ([94.158.61.193]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5aa5b07214asm178613e87.21.2026.05.29.02.56.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 May 2026 02:56:52 -0700 (PDT) From: Stepan Ionichev To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, hcazarim@yahoo.com, linux-iio@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3] iio: adc: qcom-spmi-iadc: balance enable_irq_wake() on driver unbind Date: Fri, 29 May 2026 14:56:48 +0500 Message-Id: <20260529095649.2452-1-sozdayvek@gmail.com> X-Mailer: git-send-email 2.33.0.windows.2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" iadc_probe() calls enable_irq_wake() after a successful devm_request_irq(), but the driver has no remove callback or matching disable_irq_wake(), so the wake reference count on the IRQ is leaked on module unload or driver unbind. Check the IRQ request error first, then register a devm action that calls disable_irq_wake() so the wake reference is released in the same scope as the enable. While here, drop the inverted "if (!ret) ... else return ret" in favour of the standard "if (ret) return ret;" pattern. Fixes: ce0694841ea6 ("iio: iadc: Qualcomm SPMI PMIC current ADC driver") Signed-off-by: Stepan Ionichev --- v3: - Add Fixes tag (Jonathan) v2: https://lore.kernel.org/all/20260523134613.4930-1-sozdayvek@gmail.com/ v1: https://lore.kernel.org/all/20260520190924.12774-1-sozdayvek@gmail.com/ drivers/iio/adc/qcom-spmi-iadc.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/iio/adc/qcom-spmi-iadc.c b/drivers/iio/adc/qcom-spmi-i= adc.c index b64a8a407168..88f6be2108e7 100644 --- a/drivers/iio/adc/qcom-spmi-iadc.c +++ b/drivers/iio/adc/qcom-spmi-iadc.c @@ -481,6 +481,11 @@ static const struct iio_chan_spec iadc_channels[] =3D { }, }; =20 +static void iadc_disable_irq_wake(void *data) +{ + disable_irq_wake((long)data); +} + static int iadc_probe(struct platform_device *pdev) { struct device_node *node =3D pdev->dev.of_node; @@ -538,9 +543,16 @@ static int iadc_probe(struct platform_device *pdev) if (!iadc->poll_eoc) { ret =3D devm_request_irq(dev, irq_eoc, iadc_isr, 0, "spmi-iadc", iadc); - if (!ret) - enable_irq_wake(irq_eoc); - else + if (ret) + return ret; + + ret =3D enable_irq_wake(irq_eoc); + if (ret) + return ret; + + ret =3D devm_add_action_or_reset(dev, iadc_disable_irq_wake, + (void *)(long)irq_eoc); + if (ret) return ret; } else { ret =3D devm_device_init_wakeup(iadc->dev); --=20 2.43.0