diff options
author | Chaitanya Bandi <bandik@nvidia.com> | 2012-03-22 17:17:37 +0530 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-03-23 14:04:10 -0700 |
commit | 90732620bd7e580d1aefc21dc404c3a902d665ab (patch) | |
tree | cb5764a3808f562dc2457dccb52209f43bc8151a /drivers | |
parent | 478a85c0281d6d8ede9f1619bb593ab9070c681f (diff) |
i2c: tegra: Remove synchronization between init and isr
Removed unnecessary synchronization between init and isr
because clock driver is making sure that any operations
will be completed before disabling the driver clock.
Change-Id: I545e48be73697e023fedb8c663402c15e2a472df
Signed-off-by: Chaitanya Bandi <bandik@nvidia.com>
Reviewed-on: http://git-master/r/91779
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/i2c/busses/i2c-tegra.c | 30 |
1 files changed, 0 insertions, 30 deletions
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 101ec4787396..8468804551cf 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -151,12 +151,10 @@ struct tegra_i2c_dev { struct clk *fast_clk; struct resource *iomem; struct rt_mutex dev_lock; - spinlock_t clk_lock; void __iomem *base; int cont_id; int irq; bool irq_disabled; - bool controller_enabled; int is_dvc; bool is_slave; struct completion msg_complete; @@ -479,14 +477,6 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id) u32 status; const u32 status_err = I2C_INT_NO_ACK | I2C_INT_ARBITRATION_LOST | I2C_INT_TX_FIFO_OVERFLOW; struct tegra_i2c_dev *i2c_dev = dev_id; - unsigned long flags; - - spin_lock_irqsave(&i2c_dev->clk_lock, flags); - if (!i2c_dev->controller_enabled) { - dev_warn(i2c_dev->dev, "Controller not enabled\n"); - spin_unlock_irqrestore(&i2c_dev->clk_lock, flags); - return IRQ_NONE; - } status = i2c_readl(i2c_dev, I2C_INT_STATUS); @@ -570,7 +560,6 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id) complete(&i2c_dev->msg_complete); } - spin_unlock_irqrestore(&i2c_dev->clk_lock, flags); return IRQ_HANDLED; err: @@ -605,7 +594,6 @@ err: dvc_writel(i2c_dev, DVC_STATUS_I2C_DONE_INTR, DVC_STATUS); complete(&i2c_dev->msg_complete); - spin_unlock_irqrestore(&i2c_dev->clk_lock, flags); return IRQ_HANDLED; } @@ -615,7 +603,6 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_bus *i2c_bus, struct tegra_i2c_dev *i2c_dev = i2c_bus->dev; u32 int_mask; int ret; - unsigned long flags; int arb_stat; if (msg->len == 0) @@ -676,10 +663,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_bus *i2c_bus, "i2c transfer timed out, addr 0x%04x, data 0x%02x\n", msg->addr, msg->buf[0]); - spin_lock_irqsave(&i2c_dev->clk_lock, flags); - i2c_dev->controller_enabled = false; tegra_i2c_init(i2c_dev); - spin_unlock_irqrestore(&i2c_dev->clk_lock, flags); return -ETIMEDOUT; } @@ -698,10 +682,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_bus *i2c_bus, } } - spin_lock_irqsave(&i2c_dev->clk_lock, flags); - i2c_dev->controller_enabled = false; tegra_i2c_init(i2c_dev); - spin_unlock_irqrestore(&i2c_dev->clk_lock, flags); if (i2c_dev->msg_err == I2C_ERR_NO_ACK) { if (msg->flags & I2C_M_IGNORE_NAK) @@ -722,7 +703,6 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], struct tegra_i2c_dev *i2c_dev = i2c_bus->dev; int i; int ret = 0; - unsigned long flags; rt_mutex_lock(&i2c_dev->dev_lock); @@ -751,10 +731,6 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], if (!i2c_dev->is_clkon_always) tegra_i2c_clock_enable(i2c_dev); - spin_lock_irqsave(&i2c_dev->clk_lock, flags); - i2c_dev->controller_enabled = true; - spin_unlock_irqrestore(&i2c_dev->clk_lock, flags); - for (i = 0; i < num; i++) { int stop = (i == (num - 1)) ? 1 : 0; ret = tegra_i2c_xfer_msg(i2c_bus, &msgs[i], stop); @@ -762,10 +738,6 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], break; } - spin_lock_irqsave(&i2c_dev->clk_lock, flags); - i2c_dev->controller_enabled = false; - spin_unlock_irqrestore(&i2c_dev->clk_lock, flags); - if (!i2c_dev->is_clkon_always) tegra_i2c_clock_disable(i2c_dev); @@ -886,9 +858,7 @@ static int tegra_i2c_probe(struct platform_device *pdev) i2c_dev->last_bus_clk_rate = plat->bus_clk_rate[0] ?: 100000; i2c_dev->msgs = NULL; i2c_dev->msgs_num = 0; - i2c_dev->controller_enabled = false; rt_mutex_init(&i2c_dev->dev_lock); - spin_lock_init(&i2c_dev->clk_lock); i2c_dev->slave_addr = plat->slave_addr; i2c_dev->hs_master_code = plat->hs_master_code; |