| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- From 6f3a5814c7aaea4176e0ac8b1ec6dc0a65aa2808 Mon Sep 17 00:00:00 2001
- From: Christophe JAILLET <[email protected]>
- 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 <[email protected]>
- Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
- Reviewed-by: Qii Wang <[email protected]>
- Signed-off-by: Wolfram Sang <[email protected]>
- ---
- 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)
|