summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBhuvanchandra DV <bhuvanchandra.dv@toradex.com>2014-08-12 19:30:56 +0530
committerStefan Agner <stefan.agner@toradex.com>2014-08-12 17:47:47 +0200
commit7e646cee063eb4825fdadd02a9ace797a11daa65 (patch)
tree34ddfcf1ed9144b95b44b0cfa9112089ca9fc7f7
parent1d876acfd2cd445fe46e5bc4c531da2c6bef0c91 (diff)
i2c: imx: don't disable clock between transfers
Don't disable I2C clock between each transfers. Instead, disable the module internally between the transfers. This also fixes SMBus multi-block transfers. Signed-off-by: Stefan Agner <stefan.agner@toradex.com> [Removed uncommented clk_enable/disable calls]
-rw-r--r--drivers/i2c/busses/i2c-imx.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
index bd5269165aa0..2bbc5b59670d 100644
--- a/drivers/i2c/busses/i2c-imx.c
+++ b/drivers/i2c/busses/i2c-imx.c
@@ -220,7 +220,6 @@ static int i2c_imx_start(struct imx_i2c_struct *i2c_imx)
dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__);
- clk_enable(i2c_imx->clk);
writeb(i2c_imx->ifdr, i2c_imx->base + IMX_I2C_IFDR);
/* Enable I2C controller */
#ifdef CONFIG_ARCH_MVF
@@ -274,8 +273,7 @@ static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx)
}
/* Disable I2C controller */
- writeb(0, i2c_imx->base + IMX_I2C_I2CR);
- clk_disable(i2c_imx->clk);
+ writeb(0x80, i2c_imx->base + IMX_I2C_I2CR);
}
static void __init i2c_imx_set_clk(struct imx_i2c_struct *i2c_imx,
@@ -586,6 +584,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
dev_err(&pdev->dev, "can't get I2C clock\n");
goto fail3;
}
+ clk_enable(i2c_imx->clk);
/* Request IRQ */
ret = request_irq(i2c_imx->irq, i2c_imx_isr, 0, pdev->name, i2c_imx);
@@ -607,7 +606,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
i2c_imx_set_clk(i2c_imx, IMX_I2C_BIT_RATE);
/* Set up chip registers to defaults */
- writeb(0, i2c_imx->base + IMX_I2C_I2CR);
+ writeb(0x80, i2c_imx->base + IMX_I2C_I2CR);
writeb(0, i2c_imx->base + IMX_I2C_I2SR);
/* Add I2C adapter */