]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.19
authorSasha Levin <sashal@kernel.org>
Mon, 12 Jun 2023 03:51:42 +0000 (23:51 -0400)
committerSasha Levin <sashal@kernel.org>
Mon, 12 Jun 2023 03:51:42 +0000 (23:51 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.19/i2c-sprd-delete-i2c-adapter-in-.remove-s-error-path.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/i2c-sprd-delete-i2c-adapter-in-.remove-s-error-path.patch b/queue-4.19/i2c-sprd-delete-i2c-adapter-in-.remove-s-error-path.patch
new file mode 100644 (file)
index 0000000..68687d2
--- /dev/null
@@ -0,0 +1,50 @@
+From 1a6cdd2579c3bfa698cb260ea1d8f3c39e9164ab Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 9 Mar 2023 10:58:19 +0100
+Subject: i2c: sprd: Delete i2c adapter in .remove's error path
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+
+[ Upstream commit ca0aa17f2db3468fd017038d23a78e17388e2f67 ]
+
+If pm runtime resume fails the .remove callback used to exit early. This
+resulted in an error message by the driver core but the device gets
+removed anyhow. This lets the registered i2c adapter stay around with an
+unbound parent device.
+
+So only skip clk disabling if resume failed, but do delete the adapter.
+
+Fixes: 8b9ec0719834 ("i2c: Add Spreadtrum I2C controller driver")
+Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
+Signed-off-by: Wolfram Sang <wsa@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/i2c/busses/i2c-sprd.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/i2c/busses/i2c-sprd.c b/drivers/i2c/busses/i2c-sprd.c
+index bb1478e781c42..6c95b809abdc4 100644
+--- a/drivers/i2c/busses/i2c-sprd.c
++++ b/drivers/i2c/busses/i2c-sprd.c
+@@ -581,10 +581,12 @@ static int sprd_i2c_remove(struct platform_device *pdev)
+       ret = pm_runtime_get_sync(i2c_dev->dev);
+       if (ret < 0)
+-              return ret;
++              dev_err(&pdev->dev, "Failed to resume device (%pe)\n", ERR_PTR(ret));
+       i2c_del_adapter(&i2c_dev->adap);
+-      clk_disable_unprepare(i2c_dev->clk);
++
++      if (ret >= 0)
++              clk_disable_unprepare(i2c_dev->clk);
+       pm_runtime_put_noidle(i2c_dev->dev);
+       pm_runtime_disable(i2c_dev->dev);
+-- 
+2.39.2
+
index c23c4eece323cfded86686045186dc077f81a8ae..43c9184066be43e2f26f4bfa6d67434f2480542d 100644 (file)
@@ -16,3 +16,4 @@ drm-amdgpu-fix-xclk-freq-on-chip_stoney.patch
 ceph-fix-use-after-free-bug-for-inodes-when-flushing-capsnaps.patch
 bluetooth-fix-use-after-free-in-hci_remove_ltk-hci_remove_irk.patch
 pinctrl-meson-axg-add-missing-gpioa_18-gpio-group.patch
+i2c-sprd-delete-i2c-adapter-in-.remove-s-error-path.patch