diff options
author | Bhuvanchandra DV <bhuvanchandra.dv@toradex.com> | 2014-08-12 19:30:56 +0530 |
---|---|---|
committer | Stefan Agner <stefan.agner@toradex.com> | 2014-08-12 17:47:47 +0200 |
commit | 7e646cee063eb4825fdadd02a9ace797a11daa65 (patch) | |
tree | 34ddfcf1ed9144b95b44b0cfa9112089ca9fc7f7 | |
parent | 1d876acfd2cd445fe46e5bc4c531da2c6bef0c91 (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.c | 7 |
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 */ |