summaryrefslogtreecommitdiff
path: root/drivers/i2c
diff options
context:
space:
mode:
authorVarun Wadekar <vwadekar@nvidia.com>2011-12-26 17:53:03 +0530
committerVarun Wadekar <vwadekar@nvidia.com>2011-12-26 17:54:47 +0530
commitc6085f690afb698aac83531baa76b7c4e4a2ac3d (patch)
tree819a34496a0cf9952bfb8cc433b9a0f4ef596fb4 /drivers/i2c
parentb943e4ab294ed55b8d87140d101f10d8d64e9953 (diff)
Revert "i2c: tegra: use PM runtime framework"
This reverts commit fc56d07f59a3cafa33c31bf90a50af04a0235cf8.
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/busses/i2c-tegra.c72
1 files changed, 25 insertions, 47 deletions
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
index 2d058369a6fd..2cbee05c3897 100644
--- a/drivers/i2c/busses/i2c-tegra.c
+++ b/drivers/i2c/busses/i2c-tegra.c
@@ -33,7 +33,6 @@
#include <linux/i2c-tegra.h>
#include <linux/of_i2c.h>
#include <linux/spinlock.h>
-#include <linux/pm_runtime.h>
#include <asm/unaligned.h>
@@ -113,6 +112,8 @@
#define SL_ADDR1(addr) (addr & 0xff)
#define SL_ADDR2(addr) ((addr >> 8) & 0xff)
+
+
struct tegra_i2c_dev;
struct tegra_i2c_bus {
@@ -395,7 +396,8 @@ static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev)
u32 val;
int err = 0;
- pm_runtime_get_sync(i2c_dev->dev);
+ if (!i2c_dev->is_clkon_always)
+ clk_enable(i2c_dev->clk);
/* Interrupt generated before sending stop signal so
* wait for some time so that stop signal can be send proerly */
@@ -433,7 +435,8 @@ static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev)
if (tegra_i2c_flush_fifos(i2c_dev))
err = -ETIMEDOUT;
- pm_runtime_put_sync(i2c_dev->dev);
+ if (!i2c_dev->is_clkon_always)
+ clk_disable(i2c_dev->clk);
if (i2c_dev->irq_disabled) {
i2c_dev->irq_disabled = 0;
@@ -690,10 +693,8 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
int ret = 0;
unsigned long flags;
- if (i2c_dev->is_suspended) {
- tegra_i2c_init(i2c_dev);
- i2c_dev->is_suspended = false;
- }
+ if (i2c_dev->is_suspended)
+ return -EBUSY;
rt_mutex_lock(&i2c_dev->dev_lock);
@@ -714,7 +715,8 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
i2c_dev->msgs = msgs;
i2c_dev->msgs_num = num;
- pm_runtime_get_sync(i2c_dev->dev);
+ if (!i2c_dev->is_clkon_always)
+ clk_enable(i2c_dev->clk);
spin_lock_irqsave(&i2c_dev->clk_lock, flags);
i2c_dev->controller_enabled = true;
@@ -731,7 +733,8 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
i2c_dev->controller_enabled = false;
spin_unlock_irqrestore(&i2c_dev->clk_lock, flags);
- pm_runtime_put_sync(i2c_dev->dev);
+ if (!i2c_dev->is_clkon_always)
+ clk_disable(i2c_dev->clk);
rt_mutex_unlock(&i2c_dev->dev_lock);
@@ -853,8 +856,8 @@ static int tegra_i2c_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, i2c_dev);
- pm_runtime_enable(i2c_dev->dev);
- pm_runtime_irq_safe(i2c_dev->dev);
+ if (i2c_dev->is_clkon_always)
+ clk_enable(i2c_dev->clk);
ret = tegra_i2c_init(i2c_dev);
if (ret) {
@@ -862,9 +865,6 @@ static int tegra_i2c_probe(struct platform_device *pdev)
goto err_free;
}
- if (i2c_dev->is_clkon_always)
- pm_runtime_forbid(i2c_dev->dev);
-
ret = request_irq(i2c_dev->irq, tegra_i2c_isr, 0, pdev->name, i2c_dev);
if (ret) {
dev_err(&pdev->dev, "Failed to request irq %i\n", i2c_dev->irq);
@@ -935,9 +935,7 @@ static int tegra_i2c_remove(struct platform_device *pdev)
i2c_del_adapter(&i2c_dev->busses[i2c_dev->bus_count].adapter);
if (i2c_dev->is_clkon_always)
- pm_runtime_allow(i2c_dev->dev);
-
- pm_runtime_disable(i2c_dev->dev);
+ clk_disable(i2c_dev->clk);
free_irq(i2c_dev->irq, i2c_dev);
clk_put(i2c_dev->clk);
@@ -958,7 +956,7 @@ static int tegra_i2c_suspend_noirq(struct device *dev)
i2c_dev->is_suspended = true;
if (i2c_dev->is_clkon_always)
- pm_runtime_allow(i2c_dev->dev);
+ clk_disable(i2c_dev->clk);
rt_mutex_unlock(&i2c_dev->dev_lock);
@@ -973,36 +971,19 @@ static int tegra_i2c_resume_noirq(struct device *dev)
rt_mutex_lock(&i2c_dev->dev_lock);
- if (i2c_dev->is_clkon_always) {
- pm_runtime_forbid(i2c_dev->dev);
- ret = tegra_i2c_init(i2c_dev);
- if (ret) {
- rt_mutex_unlock(&i2c_dev->dev_lock);
- return ret;
- }
- i2c_dev->is_suspended = false;
- }
- rt_mutex_unlock(&i2c_dev->dev_lock);
-
- return 0;
-}
-
-static int tegra_i2c_runtime_idle(struct device *dev)
-{
- struct platform_device *pdev = to_platform_device(dev);
- struct tegra_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
+ if (i2c_dev->is_clkon_always)
+ clk_enable(i2c_dev->clk);
- clk_disable(i2c_dev->clk);
+ ret = tegra_i2c_init(i2c_dev);
- return 0;
-}
+ if (ret) {
+ rt_mutex_unlock(&i2c_dev->dev_lock);
+ return ret;
+ }
-static int tegra_i2c_runtime_resume(struct device *dev)
-{
- struct platform_device *pdev = to_platform_device(dev);
- struct tegra_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
+ i2c_dev->is_suspended = false;
- clk_enable(i2c_dev->clk);
+ rt_mutex_unlock(&i2c_dev->dev_lock);
return 0;
}
@@ -1010,10 +991,7 @@ static int tegra_i2c_runtime_resume(struct device *dev)
static const struct dev_pm_ops tegra_i2c_dev_pm_ops = {
.suspend_noirq = tegra_i2c_suspend_noirq,
.resume_noirq = tegra_i2c_resume_noirq,
- .runtime_idle = tegra_i2c_runtime_idle,
- .runtime_resume = tegra_i2c_runtime_resume,
};
-
#define TEGRA_I2C_DEV_PM_OPS (&tegra_i2c_dev_pm_ops)
#else
#define TEGRA_I2C_DEV_PM_OPS NULL