linux-sh.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] i2c: sh_mobile: Don't start transfers when suspending
@ 2013-02-14 16:18 Bastian Hecht
       [not found] ` <1360862257-10807-1-git-send-email-hechtb+renesas-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  2013-02-16  3:54 ` Magnus Damm
  0 siblings, 2 replies; 9+ messages in thread
From: Bastian Hecht @ 2013-02-14 16:18 UTC (permalink / raw)
  To: linux-sh, linux-i2c; +Cc: Magnus Damm, Bastian Hecht

Currently we provoke i2c timeouts by allowing transfers when
suspending. This patch adds awareness to suspending and fixes these
issues.
The patch follows the style used in i2c-tegra.c - thanks.

Signed-off-by: Bastian Hecht <hechtb+renesas@gmail.com>
---
 drivers/i2c/busses/i2c-sh_mobile.c |   28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/drivers/i2c/busses/i2c-sh_mobile.c b/drivers/i2c/busses/i2c-sh_mobile.c
index b6e7a83..da28164 100644
--- a/drivers/i2c/busses/i2c-sh_mobile.c
+++ b/drivers/i2c/busses/i2c-sh_mobile.c
@@ -132,6 +132,7 @@ struct sh_mobile_i2c_data {
 	struct i2c_msg *msg;
 	int pos;
 	int sr;
+	bool is_suspended;
 };
 
 #define IIC_FLAG_HAS_ICIC67	(1 << 0)
@@ -511,6 +512,9 @@ static int sh_mobile_i2c_xfer(struct i2c_adapter *adapter,
 	u_int8_t val;
 	int i, k, retry_count;
 
+	if (pd->is_suspended)
+		return -EBUSY;
+
 	activate_ch(pd);
 
 	/* Process all messages */
@@ -753,9 +757,33 @@ static int sh_mobile_i2c_runtime_nop(struct device *dev)
 	return 0;
 }
 
+static int sh_mobile_i2c_suspend(struct device *dev)
+{
+	struct sh_mobile_i2c_data *pd = dev_get_drvdata(dev);
+
+	i2c_lock_adapter(&pd->adap);
+	pd->is_suspended = true;
+	i2c_unlock_adapter(&pd->adap);
+
+	return 0;
+}
+
+static int sh_mobile_i2c_resume(struct device *dev)
+{
+	struct sh_mobile_i2c_data *pd = dev_get_drvdata(dev);
+
+	i2c_lock_adapter(&pd->adap);
+	pd->is_suspended = false;
+	i2c_unlock_adapter(&pd->adap);
+
+	return 0;
+}
+
 static const struct dev_pm_ops sh_mobile_i2c_dev_pm_ops = {
 	.runtime_suspend = sh_mobile_i2c_runtime_nop,
 	.runtime_resume = sh_mobile_i2c_runtime_nop,
+	.suspend = sh_mobile_i2c_suspend,
+	.resume = sh_mobile_i2c_resume,
 };
 
 static const struct of_device_id sh_mobile_i2c_dt_ids[] = {
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2014-06-24  8:14 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-14 16:18 [PATCH] i2c: sh_mobile: Don't start transfers when suspending Bastian Hecht
     [not found] ` <1360862257-10807-1-git-send-email-hechtb+renesas-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-02-16  2:26   ` Simon Horman
2013-02-16  3:54 ` Magnus Damm
2013-02-18 16:03   ` Bastian Hecht
     [not found]     ` <CABYn4szejurs2gBVOx_+geOxw13r9KvoShfRiM7OOF5wVvDPLA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-02-21  9:14       ` Wolfram Sang
2013-02-21 14:54         ` Bastian Hecht
     [not found]           ` <CABYn4swuDgTvvyigjnabcg46rcze-DnGhv2Rh7WEFdwkXcHR4Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-02-21 14:59             ` Wolfram Sang
2014-05-21 11:00           ` Wolfram Sang
2014-06-24  8:14             ` Bastian Hecht

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).