i2c: tegra: enable/disable clock unconditionally during xfer
Laxman Dewangan [Tue, 17 Jul 2012 14:28:16 +0000 (19:28 +0530)]
Do the clock control for enable/disable during each transfer
regardless of whether clock is always on or not.

If clock is always on then in probe the reference count of the
clock incremented and doing again enable will just increment
reference and disable will decrement the reference count
and so there is no harm on calling enable/disable always
during transfer.

Change-Id: Ibf67413fb84f826f04e890fe3dd2a20cd0469922
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: http://git-master/r/116473
Tested-by: Bandi Krishna Chaitanya <bandik@nvidia.com>

drivers/i2c/busses/i2c-tegra.c

index 9990a79..735780f 100644 (file)
@@ -466,8 +466,7 @@ static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev)
        u32 val;
        int err = 0;
 
-       if (!i2c_dev->is_clkon_always)
-               tegra_i2c_clock_enable(i2c_dev);
+       tegra_i2c_clock_enable(i2c_dev);
 
        /* Interrupt generated before sending stop signal so
        * wait for some time so that stop signal can be send proerly */
@@ -506,8 +505,7 @@ static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev)
        if (tegra_i2c_flush_fifos(i2c_dev))
                err = -ETIMEDOUT;
 
-       if (!i2c_dev->is_clkon_always)
-               tegra_i2c_clock_disable(i2c_dev);
+       tegra_i2c_clock_disable(i2c_dev);
 
        if (i2c_dev->irq_disabled) {
                i2c_dev->irq_disabled = 0;
@@ -797,8 +795,7 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
        i2c_dev->msgs = msgs;
        i2c_dev->msgs_num = num;
 
-       if (!i2c_dev->is_clkon_always)
-               tegra_i2c_clock_enable(i2c_dev);
+       tegra_i2c_clock_enable(i2c_dev);
 
        for (i = 0; i < num; i++) {
                enum msg_end_type end_type = MSG_END_STOP;
@@ -813,8 +810,7 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
                        break;
        }
 
-       if (!i2c_dev->is_clkon_always)
-               tegra_i2c_clock_disable(i2c_dev);
+       tegra_i2c_clock_disable(i2c_dev);
 
        rt_mutex_unlock(&i2c_dev->dev_lock);