goto fail1;
        }
 
+       if (!request_mem_region(res->start, res_size, DRIVER_NAME)) {
+               ret = -EBUSY;
+               goto fail2;
+       }
+
        /* Setup i2c_imx driver structure */
        strcpy(i2c_imx->adapter.name, pdev->name);
        i2c_imx->adapter.owner          = THIS_MODULE;
        if (IS_ERR(i2c_imx->clk)) {
                ret = PTR_ERR(i2c_imx->clk);
                dev_err(&pdev->dev, "can't get I2C clock\n");
-               goto fail2;
+               goto fail3;
        }
        clk_enable(i2c_imx->clk);
 
        ret = request_irq(i2c_imx->irq, i2c_imx_isr, 0, pdev->name, i2c_imx);
        if (ret) {
                dev_err(&pdev->dev, "can't claim irq %d\n", i2c_imx->irq);
-               goto fail3;
+               goto fail4;
        }
 
        /* Init queue */
        ret = i2c_add_numbered_adapter(&i2c_imx->adapter);
        if (ret < 0) {
                dev_err(&pdev->dev, "registration failed\n");
-               goto fail4;
+               goto fail5;
        }
 
        /* Set up platform driver data */
 
        return 0;   /* Return OK */
 
-fail4:
+fail5:
        free_irq(i2c_imx->irq, i2c_imx);
-fail3:
+fail4:
        clk_disable(i2c_imx->clk);
        clk_put(i2c_imx->clk);
+fail3:
+       release_mem_region(i2c_imx->res->start, resource_size(res));
 fail2:
        kfree(i2c_imx);
 fail1:
        clk_disable(i2c_imx->clk);
        clk_put(i2c_imx->clk);
 
+       release_mem_region(i2c_imx->res->start, resource_size(i2c_imx->res));
        iounmap(i2c_imx->base);
        kfree(i2c_imx);
        return 0;