提交 da33aa03 编写于 作者: B Baolin Wang 提交者: Wolfram Sang

i2c: sprd: Prevent i2c accesses after suspend is called

Add one flag to indicate if the i2c controller has been in suspend state,
which can prevent i2c accesses after i2c controller is suspended following
system suspend.
Signed-off-by: NBaolin Wang <baolin.wang@linaro.org>
Signed-off-by: NWolfram Sang <wsa@the-dreams.de>
上级 23a27722
...@@ -86,6 +86,7 @@ struct sprd_i2c { ...@@ -86,6 +86,7 @@ struct sprd_i2c {
u32 count; u32 count;
int irq; int irq;
int err; int err;
bool is_suspended;
}; };
static void sprd_i2c_set_count(struct sprd_i2c *i2c_dev, u32 count) static void sprd_i2c_set_count(struct sprd_i2c *i2c_dev, u32 count)
...@@ -283,6 +284,9 @@ static int sprd_i2c_master_xfer(struct i2c_adapter *i2c_adap, ...@@ -283,6 +284,9 @@ static int sprd_i2c_master_xfer(struct i2c_adapter *i2c_adap,
struct sprd_i2c *i2c_dev = i2c_adap->algo_data; struct sprd_i2c *i2c_dev = i2c_adap->algo_data;
int im, ret; int im, ret;
if (i2c_dev->is_suspended)
return -EBUSY;
ret = pm_runtime_get_sync(i2c_dev->dev); ret = pm_runtime_get_sync(i2c_dev->dev);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -586,11 +590,23 @@ static int sprd_i2c_remove(struct platform_device *pdev) ...@@ -586,11 +590,23 @@ static int sprd_i2c_remove(struct platform_device *pdev)
static int __maybe_unused sprd_i2c_suspend_noirq(struct device *pdev) static int __maybe_unused sprd_i2c_suspend_noirq(struct device *pdev)
{ {
struct sprd_i2c *i2c_dev = dev_get_drvdata(pdev);
i2c_lock_adapter(&i2c_dev->adap);
i2c_dev->is_suspended = true;
i2c_unlock_adapter(&i2c_dev->adap);
return pm_runtime_force_suspend(pdev); return pm_runtime_force_suspend(pdev);
} }
static int __maybe_unused sprd_i2c_resume_noirq(struct device *pdev) static int __maybe_unused sprd_i2c_resume_noirq(struct device *pdev)
{ {
struct sprd_i2c *i2c_dev = dev_get_drvdata(pdev);
i2c_lock_adapter(&i2c_dev->adap);
i2c_dev->is_suspended = false;
i2c_unlock_adapter(&i2c_dev->adap);
return pm_runtime_force_resume(pdev); return pm_runtime_force_resume(pdev);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册