From nobody Sun May 24 22:35:55 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.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 14B9833B6C4 for ; Wed, 20 May 2026 19:09:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779304180; cv=none; b=erTkQDejLGlQJBfD4i/v6GPjASOlqDbmXG+B16uSbtBlo9DHeplo3GWY+VW1Kdirh8keDerQixSt45kpzG8KwsI7PSBfn06A/dTVAp0FHlUCGdKbC0i5TSsvYjhHJexyWj7nE4w0HmUW1L8Q4Lu2NjDu8PKggN4Ob/V09BR/5c8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779304180; c=relaxed/simple; bh=WI5d2sIhzon5iSv9LESgJJisHe0kjNQeDryiAHg2gpI=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=BnrFY2SpNlZ+J8jQfHafqWltOXyhnYwEEtuv/FmeZqLEyXhBvUgE2XLXX81Y6yjilFlJjAeEe6CgOUDIKxyVbq0qrPHYASx3dz+Ooj0V9v30OIsglvj2LXio65R2eclxMGlvb92aEmaSiduZAUSL1ydtPy/zET4C5dNx9LGMSdc= 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=mzL08Eln; arc=none smtp.client-ip=209.85.128.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="mzL08Eln" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-48fde653997so4959765e9.2 for ; Wed, 20 May 2026 12:09:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779304176; x=1779908976; 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=FttOyObDZY6c8IeXvp79f4b56sRCEoRuLMX9sSkdMYA=; b=mzL08ElnMuBgBBS57pyjj//LiUbQ7I8dnYeZN12AmEajVPVMNkw/n4RALMRjwIY16P PFqeWMVgpK8jptbSIdiZbixFG9C5KeBHfWtiocx5fSXQ1mMSTz2kacWvQj76dldfZ/xL PhkgOqwXVbTtA5x2pJXV2jkm2L/FzTgJvN2VPxjoadRmMNjGe8AorO0J3tGAwrsNk1CG DZj0JI9cBQXj7APFRLkZRVvNRZFft9n9JC4UBKJUgWUUUJSvQmEW05H8orIF8Ui/oDMu Q5zOPcaAty+fCiQJ92scviYEdi4Sqw/tgMMsACzD02X9KvsjDFukNzQQpyA6J+ujCSot FfUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779304176; x=1779908976; 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=FttOyObDZY6c8IeXvp79f4b56sRCEoRuLMX9sSkdMYA=; b=AY6DCXPdust6nvX9fldQbS88NeETPm2JHu20HWd4EvErDe7KkFxgSC8E8+atsW9ldu 1bntidt0COfEc8Ju7H+Pqvyn//fjhEVjdeoi5n9BhW7whOnMCp41gF8F3idPTvj0z2nJ rXZEvMw6hFhmYM69+9oKt4LPTET251r1VKqSNKpYmUlFF5ezjsoAxDbsMmfn1aCdPUBz dyflX3fcDFENuujslcVCO/51DwZAPmqiWM4tFIfYU36CdvZxdJCgV2dzT0le99l5w0tR 4uBhIDmOPNaiyPPSU4q8zhWvmpBSek9reiiUBXMCa3izkXuNwBBfT9emYAqRQxZnEd5w QAow== X-Forwarded-Encrypted: i=1; AFNElJ8S0HAJLuG0wDdEwSb5dJHzS5r11hCn7QQBl1xLZk7/rGuOL74xwA/AKmxFzCDrYQwnNe2FoXWj8gYGjjc=@vger.kernel.org X-Gm-Message-State: AOJu0Yz9QzdfD+q6nSWw/PpNwGskwGTQygwWLzD67cIFgtYbMK37Kojg FnCvmwFQl7I7mEgKjXvSEfTHvRTXBq0zGn2kyMcHUBvutCBbcvi3p3f0 X-Gm-Gg: Acq92OGmoTCmdViINp+UI2W4VHJIZ8IBPqCA9Yp7Dr7rR09NZWp71v9PHcnQygDLlT2 1jDM9iIUlDNIw0DjXTCc+MPpzBAk7Fw2zSxjjJTjX6KmYhyxGey0ND9GnXZRU+qJsPj4DaiYXoa ilc92XimqfkrTMKmVPKMMwbEAaXZ+Rr54/j2EYV+iIg0ZWdDXfU3vFAbC1PHfXhYC5ijK5HZAy1 rHRl23qlLfg6ZX6zyUDFY/naFUGk+PNSSZI7bhee3oV/+G4XCDVgzBgL8Nm0n6j2C68TiclzP4L x1JVGcc15Ef0BJ2otvAnk/c2iEsAkzEYE+YLmJ5mU5VoDAaDyCMHmpP3r07ZNsppYypYOX7xQNU EzxgDOqlXip8GwmthRpnUvjxYslIAiRDB21xSeGxmMWfHvG9esSV86RzRfsryV1tZ57TrtOkuuk h+Hxw4sK2FPh3vhbbc8m9syRkg7xhb1hDda+8ogNNjNIsF X-Received: by 2002:a05:600c:c177:b0:48a:56d4:7274 with SMTP id 5b1f17b1804b1-48fe66423ecmr187206125e9.3.1779304176451; Wed, 20 May 2026 12:09:36 -0700 (PDT) Received: from localhost.localdomain ([82.215.118.79]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49033d8e25bsm11344115e9.11.2026.05.20.12.09.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 12:09:36 -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, sozdayvek@gmail.com Subject: [PATCH] iio: adc: qcom-spmi-iadc: balance enable_irq_wake() on driver unbind Date: Thu, 21 May 2026 00:09:24 +0500 Message-Id: <20260520190924.12774-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. Signed-off-by: Stepan Ionichev --- 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 b64a8a407..0ec3a0c4b 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((unsigned 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 *)(unsigned long)irq_eoc); + if (ret) return ret; } else { ret =3D devm_device_init_wakeup(iadc->dev); --=20 2.43.0