Message ID | 20231130014324.2483816-1-yangyingliang@huaweicloud.com |
---|---|
State | New |
Headers | show |
Series | i2c: qcom-geni: fix missing clk_disable_unprepare() and geni_se_resources_off() | expand |
Hi Yang, On Thu, Nov 30, 2023 at 09:43:24AM +0800, Yang Yingliang wrote: > From: Yang Yingliang <yangyingliang@huawei.com> > > Add missing clk_disable_unprepare() and geni_se_resources_off() in the error > path in geni_i2c_probe(). > > Fixes: 14d02fbadb5d ("i2c: qcom-geni: add desc struct to prepare support for I2C Master Hub variant") > Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> > --- > drivers/i2c/busses/i2c-qcom-geni.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c > index 6d829ed2f868..0d2e7171e3a6 100644 > --- a/drivers/i2c/busses/i2c-qcom-geni.c > +++ b/drivers/i2c/busses/i2c-qcom-geni.c > @@ -858,6 +858,7 @@ static int geni_i2c_probe(struct platform_device *pdev) > ret = geni_se_resources_on(&gi2c->se); > if (ret) { > dev_err(dev, "Error turning on resources %d\n", ret); > + clk_disable_unprepare(gi2c->core_clk); > return ret; > } > proto = geni_se_read_proto(&gi2c->se); > @@ -877,8 +878,11 @@ static int geni_i2c_probe(struct platform_device *pdev) > /* FIFO is disabled, so we can only use GPI DMA */ > gi2c->gpi_mode = true; > ret = setup_gpi_dma(gi2c); > - if (ret) > + if (ret) { > + geni_se_resources_off(&gi2c->se); > + clk_disable_unprepare(gi2c->core_clk); > return dev_err_probe(dev, ret, "Failed to setup GPI DMA mode\n"); > + } > > dev_dbg(dev, "Using GPI DMA mode for I2C\n"); > } else { > @@ -891,6 +895,8 @@ static int geni_i2c_probe(struct platform_device *pdev) > > if (!tx_depth) { > dev_err(dev, "Invalid TX FIFO depth\n"); > + geni_se_resources_off(&gi2c->se); > + clk_disable_unprepare(gi2c->core_clk); The exit path of this probe is a complete mess... anyway, even though I think there are better ways to deal with this, I consider this patch as an improvement. Reviewed-by: Andi Shyti <andi.shyti@kernel.org> Thanks, Andi > return -EINVAL; > } > > -- > 2.25.1 >
On Thu, Nov 30, 2023 at 09:43:24AM +0800, Yang Yingliang wrote: > From: Yang Yingliang <yangyingliang@huawei.com> > > Add missing clk_disable_unprepare() and geni_se_resources_off() in the error > path in geni_i2c_probe(). > > Fixes: 14d02fbadb5d ("i2c: qcom-geni: add desc struct to prepare support for I2C Master Hub variant") > Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> Applied to for-current, thanks!
diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c index 6d829ed2f868..0d2e7171e3a6 100644 --- a/drivers/i2c/busses/i2c-qcom-geni.c +++ b/drivers/i2c/busses/i2c-qcom-geni.c @@ -858,6 +858,7 @@ static int geni_i2c_probe(struct platform_device *pdev) ret = geni_se_resources_on(&gi2c->se); if (ret) { dev_err(dev, "Error turning on resources %d\n", ret); + clk_disable_unprepare(gi2c->core_clk); return ret; } proto = geni_se_read_proto(&gi2c->se); @@ -877,8 +878,11 @@ static int geni_i2c_probe(struct platform_device *pdev) /* FIFO is disabled, so we can only use GPI DMA */ gi2c->gpi_mode = true; ret = setup_gpi_dma(gi2c); - if (ret) + if (ret) { + geni_se_resources_off(&gi2c->se); + clk_disable_unprepare(gi2c->core_clk); return dev_err_probe(dev, ret, "Failed to setup GPI DMA mode\n"); + } dev_dbg(dev, "Using GPI DMA mode for I2C\n"); } else { @@ -891,6 +895,8 @@ static int geni_i2c_probe(struct platform_device *pdev) if (!tx_depth) { dev_err(dev, "Invalid TX FIFO depth\n"); + geni_se_resources_off(&gi2c->se); + clk_disable_unprepare(gi2c->core_clk); return -EINVAL; }