mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 09:12:39 +00:00
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)
|