aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/i2c/busses/i2c-tegra.c33
1 files changed, 0 insertions, 33 deletions
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
index 60292d243e24..5fccd1f1bca8 100644
--- a/drivers/i2c/busses/i2c-tegra.c
+++ b/drivers/i2c/busses/i2c-tegra.c
@@ -173,7 +173,6 @@ struct tegra_i2c_hw_feature {
173 * @msg_buf_remaining: size of unsent data in the message buffer 173 * @msg_buf_remaining: size of unsent data in the message buffer
174 * @msg_read: identifies read transfers 174 * @msg_read: identifies read transfers
175 * @bus_clk_rate: current i2c bus clock rate 175 * @bus_clk_rate: current i2c bus clock rate
176 * @is_suspended: prevents i2c controller accesses after suspend is called
177 */ 176 */
178struct tegra_i2c_dev { 177struct tegra_i2c_dev {
179 struct device *dev; 178 struct device *dev;
@@ -194,7 +193,6 @@ struct tegra_i2c_dev {
194 int msg_read; 193 int msg_read;
195 u32 bus_clk_rate; 194 u32 bus_clk_rate;
196 u16 clk_divisor_non_hs_mode; 195 u16 clk_divisor_non_hs_mode;
197 bool is_suspended;
198 bool is_multimaster_mode; 196 bool is_multimaster_mode;
199 spinlock_t xfer_lock; 197 spinlock_t xfer_lock;
200}; 198};
@@ -734,9 +732,6 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
734 int i; 732 int i;
735 int ret = 0; 733 int ret = 0;
736 734
737 if (i2c_dev->is_suspended)
738 return -EBUSY;
739
740 ret = pm_runtime_get_sync(i2c_dev->dev); 735 ret = pm_runtime_get_sync(i2c_dev->dev);
741 if (ret < 0) { 736 if (ret < 0) {
742 dev_err(i2c_dev->dev, "runtime resume failed %d\n", ret); 737 dev_err(i2c_dev->dev, "runtime resume failed %d\n", ret);
@@ -1051,37 +1046,9 @@ static int tegra_i2c_remove(struct platform_device *pdev)
1051} 1046}
1052 1047
1053#ifdef CONFIG_PM_SLEEP 1048#ifdef CONFIG_PM_SLEEP
1054static int tegra_i2c_suspend(struct device *dev)
1055{
1056 struct tegra_i2c_dev *i2c_dev = dev_get_drvdata(dev);
1057
1058 i2c_lock_adapter(&i2c_dev->adapter);
1059 i2c_dev->is_suspended = true;
1060 i2c_unlock_adapter(&i2c_dev->adapter);
1061
1062 return 0;
1063}
1064
1065static int tegra_i2c_resume(struct device *dev)
1066{
1067 struct tegra_i2c_dev *i2c_dev = dev_get_drvdata(dev);
1068 int ret;
1069
1070 i2c_lock_adapter(&i2c_dev->adapter);
1071
1072 ret = tegra_i2c_init(i2c_dev);
1073 if (!ret)
1074 i2c_dev->is_suspended = false;
1075
1076 i2c_unlock_adapter(&i2c_dev->adapter);
1077
1078 return ret;
1079}
1080
1081static const struct dev_pm_ops tegra_i2c_pm = { 1049static const struct dev_pm_ops tegra_i2c_pm = {
1082 SET_RUNTIME_PM_OPS(tegra_i2c_runtime_suspend, tegra_i2c_runtime_resume, 1050 SET_RUNTIME_PM_OPS(tegra_i2c_runtime_suspend, tegra_i2c_runtime_resume,
1083 NULL) 1051 NULL)
1084 SET_SYSTEM_SLEEP_PM_OPS(tegra_i2c_suspend, tegra_i2c_resume)
1085}; 1052};
1086#define TEGRA_I2C_PM (&tegra_i2c_pm) 1053#define TEGRA_I2C_PM (&tegra_i2c_pm)
1087#else 1054#else