+++ /dev/null
-From stable+bounces-260533-greg=kroah.com@vger.kernel.org Thu Jun 4 21:26:20 2026
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 4 Jun 2026 11:49:19 -0400
-Subject: iio: dac: ad5686: acquire lock when doing powerdown control
-To: stable@vger.kernel.org
-Cc: Rodrigo Alencar <rodrigo.alencar@analog.com>, Stable@vger.kernel.org, Jonathan Cameron <jic23@kernel.org>, Sasha Levin <sashal@kernel.org>
-Message-ID: <20260604154919.3732423-1-sashal@kernel.org>
-
-From: Rodrigo Alencar <rodrigo.alencar@analog.com>
-
-[ Upstream commit 5237c3175cae5ab05f18878cec3301a04403859e ]
-
-Protect access of pwr_down_mode and pwr_down_mask fields with existing
-mutex lock. Each channel exposes their own attributes for controlling
-powerdown modes and powerdown state. This fixes potential race conditions
-as those the write functions perform non-atomic read-modify-write
-operations to those pwr_down_* fields. This issue exists since the ad5686
-driver was first introduced.
-
-Fixes: c2f37c8dcadc ("iio: dac: New driver for AD5686R, AD5685R, AD5684R Digital to analog converters")
-Signed-off-by: Rodrigo Alencar <rodrigo.alencar@analog.com>
-Cc: <Stable@vger.kernel.org>
-Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/iio/dac/ad5686.c | 10 +++++++++-
- 1 file changed, 9 insertions(+), 1 deletion(-)
-
---- a/drivers/iio/dac/ad5686.c
-+++ b/drivers/iio/dac/ad5686.c
-@@ -30,6 +30,8 @@ static int ad5686_get_powerdown_mode(str
- {
- struct ad5686_state *st = iio_priv(indio_dev);
-
-+ guard(mutex)(&st->lock);
-+
- return ((st->pwr_down_mode >> (chan->channel * 2)) & 0x3) - 1;
- }
-
-@@ -39,6 +41,8 @@ static int ad5686_set_powerdown_mode(str
- {
- struct ad5686_state *st = iio_priv(indio_dev);
-
-+ guard(mutex)(&st->lock);
-+
- st->pwr_down_mode &= ~(0x3 << (chan->channel * 2));
- st->pwr_down_mode |= ((mode + 1) << (chan->channel * 2));
-
-@@ -57,7 +61,9 @@ static ssize_t ad5686_read_dac_powerdown
- {
- struct ad5686_state *st = iio_priv(indio_dev);
-
-- return sprintf(buf, "%d\n", !!(st->pwr_down_mask &
-+ guard(mutex)(&st->lock);
-+
-+ return sysfs_emit(buf, "%d\n", !!(st->pwr_down_mask &
- (0x3 << (chan->channel * 2))));
- }
-
-@@ -77,6 +83,8 @@ static ssize_t ad5686_write_dac_powerdow
- if (ret)
- return ret;
-
-+ guard(mutex)(&st->lock);
-+
- if (readin)
- st->pwr_down_mask |= (0x3 << (chan->channel * 2));
- else
rdma-move-dma-block-iterator-logic-into-dedicated-files.patch
rdma-umem-fix-truncation-for-block-sizes-4g.patch
bluetooth-l2cap-use-chan-timer-to-close-channels-in-cleanup_listen.patch
-iio-dac-ad5686-acquire-lock-when-doing-powerdown-control.patch
iio-adc-npcm-fix-unbalanced-clk_disable_unprepare.patch
usb-cdns3-gadget-fix-request-skipping-after-clearing-halt.patch
iio-chemical-scd30-use-guard-mutex-to-allow-early-returns.patch
+++ /dev/null
-From stable+bounces-260514-greg=kroah.com@vger.kernel.org Thu Jun 4 20:15:22 2026
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 4 Jun 2026 10:30:29 -0400
-Subject: iio: adc: fix the return value handle for platform_get_irq()
-To: stable@vger.kernel.org
-Cc: Ruan Jinjie <ruanjinjie@huawei.com>, Jonathan Cameron <Jonathan.Cameron@huawei.com>, Sasha Levin <sashal@kernel.org>
-Message-ID: <20260604143031.3608772-1-sashal@kernel.org>
-
-From: Ruan Jinjie <ruanjinjie@huawei.com>
-
-[ Upstream commit c09ddcdd4dd32ee9768dc233ead4b3d726f26d38 ]
-
-There is no possible for platform_get_irq() to return 0
-and the return value of platform_get_irq() is more sensible
-to show the error reason.
-
-Signed-off-by: Ruan Jinjie <ruanjinjie@huawei.com>
-Link: https://lore.kernel.org/r/20230727131607.2897937-1-ruanjinjie@huawei.com
-Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
-Stable-dep-of: 0d42e2c0bd6c ("iio: adc: npcm: fix unbalanced clk_disable_unprepare()")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/iio/adc/bcm_iproc_adc.c | 4 ++--
- drivers/iio/adc/lpc32xx_adc.c | 4 ++--
- drivers/iio/adc/npcm_adc.c | 4 ++--
- drivers/iio/adc/spear_adc.c | 4 ++--
- 4 files changed, 8 insertions(+), 8 deletions(-)
-
---- a/drivers/iio/adc/bcm_iproc_adc.c
-+++ b/drivers/iio/adc/bcm_iproc_adc.c
-@@ -540,8 +540,8 @@ static int iproc_adc_probe(struct platfo
- }
-
- adc_priv->irqno = platform_get_irq(pdev, 0);
-- if (adc_priv->irqno <= 0)
-- return -ENODEV;
-+ if (adc_priv->irqno < 0)
-+ return adc_priv->irqno;
-
- ret = regmap_update_bits(adc_priv->regmap, IPROC_REGCTL2,
- IPROC_ADC_AUXIN_SCAN_ENA, 0);
---- a/drivers/iio/adc/lpc32xx_adc.c
-+++ b/drivers/iio/adc/lpc32xx_adc.c
-@@ -173,8 +173,8 @@ static int lpc32xx_adc_probe(struct plat
- }
-
- irq = platform_get_irq(pdev, 0);
-- if (irq <= 0)
-- return -ENXIO;
-+ if (irq < 0)
-+ return irq;
-
- retval = devm_request_irq(&pdev->dev, irq, lpc32xx_adc_isr, 0,
- LPC32XXAD_NAME, st);
---- a/drivers/iio/adc/npcm_adc.c
-+++ b/drivers/iio/adc/npcm_adc.c
-@@ -221,8 +221,8 @@ static int npcm_adc_probe(struct platfor
- info->adc_sample_hz = clk_get_rate(info->adc_clk) / ((div + 1) * 2);
-
- irq = platform_get_irq(pdev, 0);
-- if (irq <= 0) {
-- ret = -EINVAL;
-+ if (irq < 0) {
-+ ret = irq;
- goto err_disable_clk;
- }
-
---- a/drivers/iio/adc/spear_adc.c
-+++ b/drivers/iio/adc/spear_adc.c
-@@ -311,8 +311,8 @@ static int spear_adc_probe(struct platfo
- }
-
- irq = platform_get_irq(pdev, 0);
-- if (irq <= 0) {
-- ret = -EINVAL;
-+ if (irq < 0) {
-+ ret = irq;
- goto errout2;
- }
-
+++ /dev/null
-From stable+bounces-260515-greg=kroah.com@vger.kernel.org Thu Jun 4 20:15:24 2026
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 4 Jun 2026 10:30:30 -0400
-Subject: iio: adc: npcm: Convert to platform remove callback returning void
-To: stable@vger.kernel.org
-Cc: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>, "Jonathan Cameron" <Jonathan.Cameron@huawei.com>, "Sasha Levin" <sashal@kernel.org>
-Message-ID: <20260604143031.3608772-2-sashal@kernel.org>
-
-From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
-
-[ Upstream commit 5253a5cc7709688b9a000f7928bfaa3366d0af98 ]
-
-The .remove() callback for a platform driver returns an int which makes
-many driver authors wrongly assume it's possible to do error handling by
-returning an error code. However the value returned is ignored (apart
-from emitting a warning) and this typically results in resource leaks.
-To improve here there is a quest to make the remove callback return
-void. In the first step of this quest all drivers are converted to
-.remove_new() which already returns void. Eventually after all drivers
-are converted, .remove_new() will be renamed to .remove().
-
-Trivially convert this driver from always returning zero in the remove
-callback to the void returning variant.
-
-Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
-Link: https://lore.kernel.org/r/20230919174931.1417681-18-u.kleine-koenig@pengutronix.de
-Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
-Stable-dep-of: 0d42e2c0bd6c ("iio: adc: npcm: fix unbalanced clk_disable_unprepare()")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/iio/adc/npcm_adc.c | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
---- a/drivers/iio/adc/npcm_adc.c
-+++ b/drivers/iio/adc/npcm_adc.c
-@@ -297,7 +297,7 @@ err_disable_clk:
- return ret;
- }
-
--static int npcm_adc_remove(struct platform_device *pdev)
-+static void npcm_adc_remove(struct platform_device *pdev)
- {
- struct iio_dev *indio_dev = platform_get_drvdata(pdev);
- struct npcm_adc *info = iio_priv(indio_dev);
-@@ -310,13 +310,11 @@ static int npcm_adc_remove(struct platfo
- if (!IS_ERR(info->vref))
- regulator_disable(info->vref);
- clk_disable_unprepare(info->adc_clk);
--
-- return 0;
- }
-
- static struct platform_driver npcm_adc_driver = {
- .probe = npcm_adc_probe,
-- .remove = npcm_adc_remove,
-+ .remove_new = npcm_adc_remove,
- .driver = {
- .name = "npcm_adc",
- .of_match_table = npcm_adc_match,
+++ /dev/null
-From stable+bounces-260516-greg=kroah.com@vger.kernel.org Thu Jun 4 20:15:25 2026
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 4 Jun 2026 10:30:31 -0400
-Subject: iio: adc: npcm: fix unbalanced clk_disable_unprepare()
-To: stable@vger.kernel.org
-Cc: David Carlier <devnexen@gmail.com>, Andy Shevchenko <andriy.shevchenko@intel.com>, Stable@vger.kernel.org, Jonathan Cameron <jic23@kernel.org>, Sasha Levin <sashal@kernel.org>
-Message-ID: <20260604143031.3608772-3-sashal@kernel.org>
-
-From: David Carlier <devnexen@gmail.com>
-
-[ Upstream commit 0d42e2c0bd6ceb89e44c6e065f9bdf9b1df3ef0c ]
-
-The driver acquired the ADC clock with devm_clk_get() and read its
-rate, but never called clk_prepare_enable(). The probe error path and
-npcm_adc_remove() both called clk_disable_unprepare() unconditionally,
-causing the clk framework's enable/prepare counts to underflow on
-probe failure or module unbind.
-
-The issue went unnoticed because NPCM BMC firmware leaves the ADC
-clock enabled at boot, so the driver happened to work in practice.
-
-Switch to devm_clk_get_enabled() so the clock is properly enabled
-during probe and automatically released by the device-managed
-cleanup, and drop the now-redundant clk_disable_unprepare() from
-both the probe error path and remove().
-
-While at it, drop the duplicate error message on devm_request_irq()
-failure since the IRQ core already logs it.
-
-Fixes: 9bf85fbc9d8f ("iio: adc: add NPCM ADC driver")
-Signed-off-by: David Carlier <devnexen@gmail.com>
-Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
-Cc: <Stable@vger.kernel.org>
-Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/iio/adc/npcm_adc.c | 25 ++++++++-----------------
- 1 file changed, 8 insertions(+), 17 deletions(-)
-
---- a/drivers/iio/adc/npcm_adc.c
-+++ b/drivers/iio/adc/npcm_adc.c
-@@ -208,7 +208,7 @@ static int npcm_adc_probe(struct platfor
- if (IS_ERR(info->reset))
- return PTR_ERR(info->reset);
-
-- info->adc_clk = devm_clk_get(&pdev->dev, NULL);
-+ info->adc_clk = devm_clk_get_enabled(&pdev->dev, NULL);
- if (IS_ERR(info->adc_clk)) {
- dev_warn(&pdev->dev, "ADC clock failed: can't read clk\n");
- return PTR_ERR(info->adc_clk);
-@@ -221,17 +221,13 @@ static int npcm_adc_probe(struct platfor
- info->adc_sample_hz = clk_get_rate(info->adc_clk) / ((div + 1) * 2);
-
- irq = platform_get_irq(pdev, 0);
-- if (irq < 0) {
-- ret = irq;
-- goto err_disable_clk;
-- }
-+ if (irq < 0)
-+ return irq;
-
- ret = devm_request_irq(&pdev->dev, irq, npcm_adc_isr, 0,
- "NPCM_ADC", indio_dev);
-- if (ret < 0) {
-- dev_err(dev, "failed requesting interrupt\n");
-- goto err_disable_clk;
-- }
-+ if (ret < 0)
-+ return ret;
-
- reg_con = ioread32(info->regs + NPCM_ADCCON);
- info->vref = devm_regulator_get_optional(&pdev->dev, "vref");
-@@ -239,7 +235,7 @@ static int npcm_adc_probe(struct platfor
- ret = regulator_enable(info->vref);
- if (ret) {
- dev_err(&pdev->dev, "Can't enable ADC reference voltage\n");
-- goto err_disable_clk;
-+ return ret;
- }
-
- iowrite32(reg_con & ~NPCM_ADCCON_REFSEL,
-@@ -249,10 +245,8 @@ static int npcm_adc_probe(struct platfor
- * Any error which is not ENODEV indicates the regulator
- * has been specified and so is a failure case.
- */
-- if (PTR_ERR(info->vref) != -ENODEV) {
-- ret = PTR_ERR(info->vref);
-- goto err_disable_clk;
-- }
-+ if (PTR_ERR(info->vref) != -ENODEV)
-+ return PTR_ERR(info->vref);
-
- /* Use internal reference */
- iowrite32(reg_con | NPCM_ADCCON_REFSEL,
-@@ -291,8 +285,6 @@ err_iio_register:
- iowrite32(reg_con & ~NPCM_ADCCON_ADC_EN, info->regs + NPCM_ADCCON);
- if (!IS_ERR(info->vref))
- regulator_disable(info->vref);
--err_disable_clk:
-- clk_disable_unprepare(info->adc_clk);
-
- return ret;
- }
-@@ -309,7 +301,6 @@ static void npcm_adc_remove(struct platf
- iowrite32(regtemp & ~NPCM_ADCCON_ADC_EN, info->regs + NPCM_ADCCON);
- if (!IS_ERR(info->vref))
- regulator_disable(info->vref);
-- clk_disable_unprepare(info->adc_clk);
- }
-
- static struct platform_driver npcm_adc_driver = {
+++ /dev/null
-From stable+bounces-260524-greg=kroah.com@vger.kernel.org Thu Jun 4 20:43:03 2026
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 4 Jun 2026 11:02:04 -0400
-Subject: iio: dac: ad5686: acquire lock when doing powerdown control
-To: stable@vger.kernel.org
-Cc: Rodrigo Alencar <rodrigo.alencar@analog.com>, Stable@vger.kernel.org, Jonathan Cameron <jic23@kernel.org>, Sasha Levin <sashal@kernel.org>
-Message-ID: <20260604150204.3692750-1-sashal@kernel.org>
-
-From: Rodrigo Alencar <rodrigo.alencar@analog.com>
-
-[ Upstream commit 5237c3175cae5ab05f18878cec3301a04403859e ]
-
-Protect access of pwr_down_mode and pwr_down_mask fields with existing
-mutex lock. Each channel exposes their own attributes for controlling
-powerdown modes and powerdown state. This fixes potential race conditions
-as those the write functions perform non-atomic read-modify-write
-operations to those pwr_down_* fields. This issue exists since the ad5686
-driver was first introduced.
-
-Fixes: c2f37c8dcadc ("iio: dac: New driver for AD5686R, AD5685R, AD5684R Digital to analog converters")
-Signed-off-by: Rodrigo Alencar <rodrigo.alencar@analog.com>
-Cc: <Stable@vger.kernel.org>
-Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/iio/dac/ad5686.c | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
---- a/drivers/iio/dac/ad5686.c
-+++ b/drivers/iio/dac/ad5686.c
-@@ -30,6 +30,8 @@ static int ad5686_get_powerdown_mode(str
- {
- struct ad5686_state *st = iio_priv(indio_dev);
-
-+ guard(mutex)(&st->lock);
-+
- return ((st->pwr_down_mode >> (chan->channel * 2)) & 0x3) - 1;
- }
-
-@@ -39,6 +41,8 @@ static int ad5686_set_powerdown_mode(str
- {
- struct ad5686_state *st = iio_priv(indio_dev);
-
-+ guard(mutex)(&st->lock);
-+
- st->pwr_down_mode &= ~(0x3 << (chan->channel * 2));
- st->pwr_down_mode |= ((mode + 1) << (chan->channel * 2));
-
-@@ -57,6 +61,8 @@ static ssize_t ad5686_read_dac_powerdown
- {
- struct ad5686_state *st = iio_priv(indio_dev);
-
-+ guard(mutex)(&st->lock);
-+
- return sysfs_emit(buf, "%d\n", !!(st->pwr_down_mask &
- (0x3 << (chan->channel * 2))));
- }
-@@ -77,6 +83,8 @@ static ssize_t ad5686_write_dac_powerdow
- if (ret)
- return ret;
-
-+ guard(mutex)(&st->lock);
-+
- if (readin)
- st->pwr_down_mask |= (0x3 << (chan->channel * 2));
- else
--- a/drivers/iio/dac/ad5686.c
+++ b/drivers/iio/dac/ad5686.c
-@@ -521,7 +521,7 @@ int ad5686_probe(struct device *dev,
+@@ -513,7 +513,7 @@ int ad5686_probe(struct device *dev,
break;
case AD5686_REGMAP:
cmd = AD5686_CMD_INTERNAL_REFER_SETUP;
break;
case AD5693_REGMAP:
cmd = AD5686_CMD_CONTROL_REG;
-@@ -533,9 +533,9 @@ int ad5686_probe(struct device *dev,
+@@ -525,9 +525,9 @@ int ad5686_probe(struct device *dev,
goto error_disable_reg;
}
phy-tegra-xusb-disable-trk-clk-when-not-in-use.patch
phy-tegra-xusb-fix-per-pad-high-speed-termination-calibration.patch
bluetooth-l2cap-use-chan-timer-to-close-channels-in-cleanup_listen.patch
-iio-adc-fix-the-return-value-handle-for-platform_get_irq.patch
-iio-adc-npcm-convert-to-platform-remove-callback-returning-void.patch
-iio-adc-npcm-fix-unbalanced-clk_disable_unprepare.patch
-iio-dac-ad5686-acquire-lock-when-doing-powerdown-control.patch
iio-gyro-adis16260-fix-division-by-zero-in-write_raw.patch
iio-chemical-scd30-use-guard-mutex-to-allow-early-returns.patch
iio-chemical-scd30-fix-division-by-zero-in-write_raw.patch