All points of failure in the code of i2c_fsl_probe() happen after the
allocation of i2c_fsl, so all of them have to perform necessary
cleanup setups in case of failure.

Signed-off-by: Andrey Smirnov <andrew.smir...@gmail.com>
---
 drivers/i2c/busses/i2c-imx.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
index 714e83c..4cd03e1 100644
--- a/drivers/i2c/busses/i2c-imx.c
+++ b/drivers/i2c/busses/i2c-imx.c
@@ -539,8 +539,10 @@ static int __init i2c_fsl_probe(struct device_d *pdev)

 #ifdef CONFIG_COMMON_CLK
        i2c_fsl->clk = clk_get(pdev, NULL);
-       if (IS_ERR(i2c_fsl->clk))
-               return PTR_ERR(i2c_fsl->clk);
+       if (IS_ERR(i2c_fsl->clk)) {
+               ret = PTR_ERR(i2c_fsl->clk);
+               goto fail;
+       }
 #endif
        /* Setup i2c_fsl driver structure */
        i2c_fsl->adapter.master_xfer = i2c_fsl_xfer;
@@ -548,8 +550,10 @@ static int __init i2c_fsl_probe(struct device_d *pdev)
        i2c_fsl->adapter.dev.parent = pdev;
        i2c_fsl->adapter.dev.device_node = pdev->device_node;
        i2c_fsl->base = dev_request_mem_region(pdev, 0);
-       if (IS_ERR(i2c_fsl->base))
-               return PTR_ERR(i2c_fsl->base);
+       if (IS_ERR(i2c_fsl->base)) {
+               ret = PTR_ERR(i2c_fsl->base);
+               goto fail;
+       }

        i2c_fsl->dfsrr = -1;

--
2.1.4

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to