diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/i2c/busses/i2c-tegra.c | 33 |
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 | */ |
| 178 | struct tegra_i2c_dev { | 177 | struct 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 |
| 1054 | static 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 | |||
| 1065 | static 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 | |||
| 1081 | static const struct dev_pm_ops tegra_i2c_pm = { | 1049 | static 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 |
