summaryrefslogtreecommitdiff
path: root/drivers/i2c
diff options
context:
space:
mode:
authorJuha Tukkinen <jtukkinen@nvidia.com>2013-10-31 02:32:49 -0700
committerJuha Tukkinen <jtukkinen@nvidia.com>2013-10-31 02:38:53 -0700
commite3abba167565027a70fc2c7bdf690e2f4555ccf2 (patch)
treec4f42f3036b93ad818b92b5ed026969493f9e54d /drivers/i2c
parentaf196c1cda0718be9e073d71c7c1c797191fdf80 (diff)
Revert "i2c: tegra: handle Tegra pm notifier events"
This reverts commit 9b5639a6da0b5dc842fbaa6bd213b0d801cd2a70. Change-Id: Ibfa871d9bc8d98d5663f69d1f75d4b0bac2b8d4a Reviewed-on: http://git-master/r/310026 Tested-by: Arto Merilainen <amerilainen@nvidia.com> Reviewed-by: Juha Tukkinen <jtukkinen@nvidia.com>
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/busses/i2c-tegra.c61
1 files changed, 12 insertions, 49 deletions
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
index 848fcf603e58..855bde2fac21 100644
--- a/drivers/i2c/busses/i2c-tegra.c
+++ b/drivers/i2c/busses/i2c-tegra.c
@@ -39,7 +39,6 @@
#include <linux/clk/tegra.h>
#include <linux/spinlock.h>
#include <linux/clk/tegra.h>
-#include <linux/tegra-pm.h>
#include <asm/unaligned.h>
@@ -231,7 +230,6 @@ struct tegra_i2c_dev {
const struct i2c_algorithm *bit_algo;
bool bit_banging_xfer_after_shutdown;
bool is_shutdown;
- struct notifier_block pm_nb;
};
static void dvc_writel(struct tegra_i2c_dev *i2c_dev, u32 val, unsigned long reg)
@@ -1265,22 +1263,6 @@ static const struct i2c_algorithm tegra_i2c_algo = {
.functionality = tegra_i2c_func,
};
-static int __tegra_i2c_suspend_noirq(struct tegra_i2c_dev *i2c_dev);
-static int __tegra_i2c_resume_noirq(struct tegra_i2c_dev *i2c_dev);
-
-static int tegra_i2c_pm_notifier(struct notifier_block *nb,
- unsigned long event, void *data)
-{
- struct tegra_i2c_dev *i2c_dev = container_of(nb, struct tegra_i2c_dev, pm_nb);
-
- if (event == TEGRA_PM_SUSPEND)
- __tegra_i2c_suspend_noirq(i2c_dev);
- else if (event == TEGRA_PM_RESUME)
- __tegra_i2c_resume_noirq(i2c_dev);
-
- return NOTIFY_OK;
-}
-
static struct tegra_i2c_platform_data *parse_i2c_tegra_dt(
struct platform_device *pdev)
{
@@ -1578,10 +1560,6 @@ static int tegra_i2c_probe(struct platform_device *pdev)
return ret;
}
- i2c_dev->pm_nb.notifier_call = tegra_i2c_pm_notifier;
-
- tegra_register_pm_notifier(&i2c_dev->pm_nb);
-
of_i2c_register_devices(&i2c_dev->adapter);
pm_runtime_enable(&i2c_dev->adapter.dev);
tegra_i2c_gpio_init(i2c_dev);
@@ -1592,8 +1570,6 @@ static int tegra_i2c_probe(struct platform_device *pdev)
static int tegra_i2c_remove(struct platform_device *pdev)
{
struct tegra_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
-
- tegra_unregister_pm_notifier(&i2c_dev->pm_nb);
i2c_del_adapter(&i2c_dev->adapter);
pm_runtime_disable(&i2c_dev->adapter.dev);
@@ -1612,15 +1588,6 @@ static void tegra_i2c_shutdown(struct platform_device *pdev)
}
#ifdef CONFIG_PM_SLEEP
-static int __tegra_i2c_suspend_noirq(struct tegra_i2c_dev *i2c_dev)
-{
- i2c_dev->is_suspended = true;
- if (i2c_dev->is_clkon_always)
- tegra_i2c_clock_disable(i2c_dev);
-
- return 0;
-}
-
static int tegra_i2c_suspend_noirq(struct device *dev)
{
struct platform_device *pdev = to_platform_device(dev);
@@ -1628,39 +1595,35 @@ static int tegra_i2c_suspend_noirq(struct device *dev)
i2c_lock_adapter(&i2c_dev->adapter);
- __tegra_i2c_suspend_noirq(i2c_dev);
+ i2c_dev->is_suspended = true;
+ if (i2c_dev->is_clkon_always)
+ tegra_i2c_clock_disable(i2c_dev);
i2c_unlock_adapter(&i2c_dev->adapter);
return 0;
}
-
-static int __tegra_i2c_resume_noirq(struct tegra_i2c_dev *i2c_dev)
+static int tegra_i2c_resume_noirq(struct device *dev)
{
+ struct platform_device *pdev = to_platform_device(dev);
+ struct tegra_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
int ret;
+ i2c_lock_adapter(&i2c_dev->adapter);
+
if (i2c_dev->is_clkon_always)
tegra_i2c_clock_enable(i2c_dev);
ret = tegra_i2c_init(i2c_dev);
- if (ret)
+
+ if (ret) {
+ i2c_unlock_adapter(&i2c_dev->adapter);
return ret;
+ }
i2c_dev->is_suspended = false;
- return 0;
-}
-
-static int tegra_i2c_resume_noirq(struct device *dev)
-{
- struct platform_device *pdev = to_platform_device(dev);
- struct tegra_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
-
- i2c_lock_adapter(&i2c_dev->adapter);
-
- __tegra_i2c_resume_noirq(i2c_dev);
-
i2c_unlock_adapter(&i2c_dev->adapter);
return 0;