mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 06:57:57 +00:00
7f0e1373f4
Pick accepted patches from upstream Linux tree instead of having to
maintain our slightly different downstream patches.
Import pending patch fixing I2C on MT7981 by making sure all clocks
are enabled before accessing I2C registers.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit 213b728276
)
49 lines
1.5 KiB
Diff
49 lines
1.5 KiB
Diff
From 6f3a5814c7aaea4176e0ac8b1ec6dc0a65aa2808 Mon Sep 17 00:00:00 2001
|
|
From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
|
|
Date: Sun, 22 May 2022 14:22:07 +0200
|
|
Subject: [PATCH 09/16] i2c: mediatek: Fix an error handling path in
|
|
mtk_i2c_probe()
|
|
|
|
The clsk are prepared, enabled, then disabled. So if an error occurs after
|
|
the disable step, they are still prepared.
|
|
|
|
Add an error handling path to unprepare the clks in such a case, as already
|
|
done in the .remove function.
|
|
|
|
Fixes: 8b4fc246c3ff ("i2c: mediatek: Optimize master_xfer() and avoid circular locking")
|
|
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
|
|
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
|
|
Reviewed-by: Qii Wang <qii.wang@mediatek.com>
|
|
Signed-off-by: Wolfram Sang <wsa@kernel.org>
|
|
---
|
|
drivers/i2c/busses/i2c-mt65xx.c | 9 +++++++--
|
|
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
|
|
--- a/drivers/i2c/busses/i2c-mt65xx.c
|
|
+++ b/drivers/i2c/busses/i2c-mt65xx.c
|
|
@@ -1420,17 +1420,22 @@ static int mtk_i2c_probe(struct platform
|
|
if (ret < 0) {
|
|
dev_err(&pdev->dev,
|
|
"Request I2C IRQ %d fail\n", irq);
|
|
- return ret;
|
|
+ goto err_bulk_unprepare;
|
|
}
|
|
|
|
i2c_set_adapdata(&i2c->adap, i2c);
|
|
ret = i2c_add_adapter(&i2c->adap);
|
|
if (ret)
|
|
- return ret;
|
|
+ goto err_bulk_unprepare;
|
|
|
|
platform_set_drvdata(pdev, i2c);
|
|
|
|
return 0;
|
|
+
|
|
+err_bulk_unprepare:
|
|
+ clk_bulk_unprepare(I2C_MT65XX_CLK_MAX, i2c->clocks);
|
|
+
|
|
+ return ret;
|
|
}
|
|
|
|
static int mtk_i2c_remove(struct platform_device *pdev)
|