All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] i2c: rk3x: support master_xfer_atomic
@ 2020-06-23 12:06 John Keeping
  2020-07-03 10:08   ` Heiko Stuebner
  2020-07-04  6:46   ` Wolfram Sang
  0 siblings, 2 replies; 6+ messages in thread
From: John Keeping @ 2020-06-23 12:06 UTC (permalink / raw)
  To: Heiko Stuebner
  Cc: John Keeping, linux-arm-kernel, linux-rockchip, linux-i2c, linux-kernel

Enable i2c transactions in irq disabled contexts like poweroff where the
PMIC is connected via i2c.

Signed-off-by: John Keeping <john@metanate.com>
---
 drivers/i2c/busses/i2c-rk3x.c | 39 +++++++++++++++++++++++++++++++----
 1 file changed, 35 insertions(+), 4 deletions(-)

diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c
index 15324bfbc6cb..8e3cc85d1921 100644
--- a/drivers/i2c/busses/i2c-rk3x.c
+++ b/drivers/i2c/busses/i2c-rk3x.c
@@ -10,6 +10,7 @@
 #include <linux/module.h>
 #include <linux/i2c.h>
 #include <linux/interrupt.h>
+#include <linux/iopoll.h>
 #include <linux/errno.h>
 #include <linux/err.h>
 #include <linux/platform_device.h>
@@ -1040,8 +1041,21 @@ static int rk3x_i2c_setup(struct rk3x_i2c *i2c, struct i2c_msg *msgs, int num)
 	return ret;
 }
 
-static int rk3x_i2c_xfer(struct i2c_adapter *adap,
-			 struct i2c_msg *msgs, int num)
+static int rk3x_i2c_wait_xfer_poll(struct rk3x_i2c *i2c)
+{
+	ktime_t timeout = ktime_add_ms(ktime_get(), WAIT_TIMEOUT);
+
+	while (READ_ONCE(i2c->busy) &&
+	       ktime_compare(ktime_get(), timeout) < 0) {
+		udelay(5);
+		rk3x_i2c_irq(0, i2c);
+	}
+
+	return !i2c->busy;
+}
+
+static int rk3x_i2c_xfer_common(struct i2c_adapter *adap,
+				struct i2c_msg *msgs, int num, bool polling)
 {
 	struct rk3x_i2c *i2c = (struct rk3x_i2c *)adap->algo_data;
 	unsigned long timeout, flags;
@@ -1075,8 +1089,12 @@ static int rk3x_i2c_xfer(struct i2c_adapter *adap,
 
 		rk3x_i2c_start(i2c);
 
-		timeout = wait_event_timeout(i2c->wait, !i2c->busy,
-					     msecs_to_jiffies(WAIT_TIMEOUT));
+		if (!polling) {
+			timeout = wait_event_timeout(i2c->wait, !i2c->busy,
+						     msecs_to_jiffies(WAIT_TIMEOUT));
+		} else {
+			timeout = rk3x_i2c_wait_xfer_poll(i2c);
+		}
 
 		spin_lock_irqsave(&i2c->lock, flags);
 
@@ -1110,6 +1128,18 @@ static int rk3x_i2c_xfer(struct i2c_adapter *adap,
 	return ret < 0 ? ret : num;
 }
 
+static int rk3x_i2c_xfer(struct i2c_adapter *adap,
+			 struct i2c_msg *msgs, int num)
+{
+	return rk3x_i2c_xfer_common(adap, msgs, num, false);
+}
+
+static int rk3x_i2c_xfer_polling(struct i2c_adapter *adap,
+				 struct i2c_msg *msgs, int num)
+{
+	return rk3x_i2c_xfer_common(adap, msgs, num, true);
+}
+
 static __maybe_unused int rk3x_i2c_resume(struct device *dev)
 {
 	struct rk3x_i2c *i2c = dev_get_drvdata(dev);
@@ -1126,6 +1156,7 @@ static u32 rk3x_i2c_func(struct i2c_adapter *adap)
 
 static const struct i2c_algorithm rk3x_i2c_algorithm = {
 	.master_xfer		= rk3x_i2c_xfer,
+	.master_xfer_atomic	= rk3x_i2c_xfer_polling,
 	.functionality		= rk3x_i2c_func,
 };
 
-- 
2.27.0


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

* Re: [PATCH] i2c: rk3x: support master_xfer_atomic
  2020-06-23 12:06 [PATCH] i2c: rk3x: support master_xfer_atomic John Keeping
@ 2020-07-03 10:08   ` Heiko Stuebner
  2020-07-04  6:46   ` Wolfram Sang
  1 sibling, 0 replies; 6+ messages in thread
From: Heiko Stuebner @ 2020-07-03 10:08 UTC (permalink / raw)
  To: John Keeping; +Cc: linux-arm-kernel, linux-rockchip, linux-i2c, linux-kernel

Am Dienstag, 23. Juni 2020, 14:06:46 CEST schrieb John Keeping:
> Enable i2c transactions in irq disabled contexts like poweroff where the
> PMIC is connected via i2c.
> 
> Signed-off-by: John Keeping <john@metanate.com>

on a rk3288:
Tested-by: Heiko Stuebner <heiko@sntech.de>
Reviewed-by: Heiko Stuebner <heiko@sntech.de>

> ---
>  drivers/i2c/busses/i2c-rk3x.c | 39 +++++++++++++++++++++++++++++++----
>  1 file changed, 35 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c
> index 15324bfbc6cb..8e3cc85d1921 100644
> --- a/drivers/i2c/busses/i2c-rk3x.c
> +++ b/drivers/i2c/busses/i2c-rk3x.c
> @@ -10,6 +10,7 @@
>  #include <linux/module.h>
>  #include <linux/i2c.h>
>  #include <linux/interrupt.h>
> +#include <linux/iopoll.h>
>  #include <linux/errno.h>
>  #include <linux/err.h>
>  #include <linux/platform_device.h>
> @@ -1040,8 +1041,21 @@ static int rk3x_i2c_setup(struct rk3x_i2c *i2c, struct i2c_msg *msgs, int num)
>  	return ret;
>  }
>  
> -static int rk3x_i2c_xfer(struct i2c_adapter *adap,
> -			 struct i2c_msg *msgs, int num)
> +static int rk3x_i2c_wait_xfer_poll(struct rk3x_i2c *i2c)
> +{
> +	ktime_t timeout = ktime_add_ms(ktime_get(), WAIT_TIMEOUT);
> +
> +	while (READ_ONCE(i2c->busy) &&
> +	       ktime_compare(ktime_get(), timeout) < 0) {
> +		udelay(5);
> +		rk3x_i2c_irq(0, i2c);
> +	}
> +
> +	return !i2c->busy;
> +}
> +
> +static int rk3x_i2c_xfer_common(struct i2c_adapter *adap,
> +				struct i2c_msg *msgs, int num, bool polling)
>  {
>  	struct rk3x_i2c *i2c = (struct rk3x_i2c *)adap->algo_data;
>  	unsigned long timeout, flags;
> @@ -1075,8 +1089,12 @@ static int rk3x_i2c_xfer(struct i2c_adapter *adap,
>  
>  		rk3x_i2c_start(i2c);
>  
> -		timeout = wait_event_timeout(i2c->wait, !i2c->busy,
> -					     msecs_to_jiffies(WAIT_TIMEOUT));
> +		if (!polling) {
> +			timeout = wait_event_timeout(i2c->wait, !i2c->busy,
> +						     msecs_to_jiffies(WAIT_TIMEOUT));
> +		} else {
> +			timeout = rk3x_i2c_wait_xfer_poll(i2c);
> +		}
>  
>  		spin_lock_irqsave(&i2c->lock, flags);
>  
> @@ -1110,6 +1128,18 @@ static int rk3x_i2c_xfer(struct i2c_adapter *adap,
>  	return ret < 0 ? ret : num;
>  }
>  
> +static int rk3x_i2c_xfer(struct i2c_adapter *adap,
> +			 struct i2c_msg *msgs, int num)
> +{
> +	return rk3x_i2c_xfer_common(adap, msgs, num, false);
> +}
> +
> +static int rk3x_i2c_xfer_polling(struct i2c_adapter *adap,
> +				 struct i2c_msg *msgs, int num)
> +{
> +	return rk3x_i2c_xfer_common(adap, msgs, num, true);
> +}
> +
>  static __maybe_unused int rk3x_i2c_resume(struct device *dev)
>  {
>  	struct rk3x_i2c *i2c = dev_get_drvdata(dev);
> @@ -1126,6 +1156,7 @@ static u32 rk3x_i2c_func(struct i2c_adapter *adap)
>  
>  static const struct i2c_algorithm rk3x_i2c_algorithm = {
>  	.master_xfer		= rk3x_i2c_xfer,
> +	.master_xfer_atomic	= rk3x_i2c_xfer_polling,
>  	.functionality		= rk3x_i2c_func,
>  };
>  
> 





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

* Re: [PATCH] i2c: rk3x: support master_xfer_atomic
@ 2020-07-03 10:08   ` Heiko Stuebner
  0 siblings, 0 replies; 6+ messages in thread
From: Heiko Stuebner @ 2020-07-03 10:08 UTC (permalink / raw)
  To: John Keeping; +Cc: linux-rockchip, linux-i2c, linux-arm-kernel, linux-kernel

Am Dienstag, 23. Juni 2020, 14:06:46 CEST schrieb John Keeping:
> Enable i2c transactions in irq disabled contexts like poweroff where the
> PMIC is connected via i2c.
> 
> Signed-off-by: John Keeping <john@metanate.com>

on a rk3288:
Tested-by: Heiko Stuebner <heiko@sntech.de>
Reviewed-by: Heiko Stuebner <heiko@sntech.de>

> ---
>  drivers/i2c/busses/i2c-rk3x.c | 39 +++++++++++++++++++++++++++++++----
>  1 file changed, 35 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c
> index 15324bfbc6cb..8e3cc85d1921 100644
> --- a/drivers/i2c/busses/i2c-rk3x.c
> +++ b/drivers/i2c/busses/i2c-rk3x.c
> @@ -10,6 +10,7 @@
>  #include <linux/module.h>
>  #include <linux/i2c.h>
>  #include <linux/interrupt.h>
> +#include <linux/iopoll.h>
>  #include <linux/errno.h>
>  #include <linux/err.h>
>  #include <linux/platform_device.h>
> @@ -1040,8 +1041,21 @@ static int rk3x_i2c_setup(struct rk3x_i2c *i2c, struct i2c_msg *msgs, int num)
>  	return ret;
>  }
>  
> -static int rk3x_i2c_xfer(struct i2c_adapter *adap,
> -			 struct i2c_msg *msgs, int num)
> +static int rk3x_i2c_wait_xfer_poll(struct rk3x_i2c *i2c)
> +{
> +	ktime_t timeout = ktime_add_ms(ktime_get(), WAIT_TIMEOUT);
> +
> +	while (READ_ONCE(i2c->busy) &&
> +	       ktime_compare(ktime_get(), timeout) < 0) {
> +		udelay(5);
> +		rk3x_i2c_irq(0, i2c);
> +	}
> +
> +	return !i2c->busy;
> +}
> +
> +static int rk3x_i2c_xfer_common(struct i2c_adapter *adap,
> +				struct i2c_msg *msgs, int num, bool polling)
>  {
>  	struct rk3x_i2c *i2c = (struct rk3x_i2c *)adap->algo_data;
>  	unsigned long timeout, flags;
> @@ -1075,8 +1089,12 @@ static int rk3x_i2c_xfer(struct i2c_adapter *adap,
>  
>  		rk3x_i2c_start(i2c);
>  
> -		timeout = wait_event_timeout(i2c->wait, !i2c->busy,
> -					     msecs_to_jiffies(WAIT_TIMEOUT));
> +		if (!polling) {
> +			timeout = wait_event_timeout(i2c->wait, !i2c->busy,
> +						     msecs_to_jiffies(WAIT_TIMEOUT));
> +		} else {
> +			timeout = rk3x_i2c_wait_xfer_poll(i2c);
> +		}
>  
>  		spin_lock_irqsave(&i2c->lock, flags);
>  
> @@ -1110,6 +1128,18 @@ static int rk3x_i2c_xfer(struct i2c_adapter *adap,
>  	return ret < 0 ? ret : num;
>  }
>  
> +static int rk3x_i2c_xfer(struct i2c_adapter *adap,
> +			 struct i2c_msg *msgs, int num)
> +{
> +	return rk3x_i2c_xfer_common(adap, msgs, num, false);
> +}
> +
> +static int rk3x_i2c_xfer_polling(struct i2c_adapter *adap,
> +				 struct i2c_msg *msgs, int num)
> +{
> +	return rk3x_i2c_xfer_common(adap, msgs, num, true);
> +}
> +
>  static __maybe_unused int rk3x_i2c_resume(struct device *dev)
>  {
>  	struct rk3x_i2c *i2c = dev_get_drvdata(dev);
> @@ -1126,6 +1156,7 @@ static u32 rk3x_i2c_func(struct i2c_adapter *adap)
>  
>  static const struct i2c_algorithm rk3x_i2c_algorithm = {
>  	.master_xfer		= rk3x_i2c_xfer,
> +	.master_xfer_atomic	= rk3x_i2c_xfer_polling,
>  	.functionality		= rk3x_i2c_func,
>  };
>  
> 





_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH] i2c: rk3x: support master_xfer_atomic
  2020-06-23 12:06 [PATCH] i2c: rk3x: support master_xfer_atomic John Keeping
@ 2020-07-04  6:46   ` Wolfram Sang
  2020-07-04  6:46   ` Wolfram Sang
  1 sibling, 0 replies; 6+ messages in thread
From: Wolfram Sang @ 2020-07-04  6:46 UTC (permalink / raw)
  To: John Keeping
  Cc: Heiko Stuebner, linux-arm-kernel, linux-rockchip, linux-i2c,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 258 bytes --]

On Tue, Jun 23, 2020 at 01:06:46PM +0100, John Keeping wrote:
> Enable i2c transactions in irq disabled contexts like poweroff where the
> PMIC is connected via i2c.
> 
> Signed-off-by: John Keeping <john@metanate.com>

Applied to for-next, thanks!


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH] i2c: rk3x: support master_xfer_atomic
@ 2020-07-04  6:46   ` Wolfram Sang
  0 siblings, 0 replies; 6+ messages in thread
From: Wolfram Sang @ 2020-07-04  6:46 UTC (permalink / raw)
  To: John Keeping
  Cc: linux-rockchip, linux-kernel, Heiko Stuebner, linux-arm-kernel,
	linux-i2c


[-- Attachment #1.1: Type: text/plain, Size: 258 bytes --]

On Tue, Jun 23, 2020 at 01:06:46PM +0100, John Keeping wrote:
> Enable i2c transactions in irq disabled contexts like poweroff where the
> PMIC is connected via i2c.
> 
> Signed-off-by: John Keeping <john@metanate.com>

Applied to for-next, thanks!


[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

[-- Attachment #2: Type: text/plain, Size: 176 bytes --]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH] i2c: rk3x: support master_xfer_atomic
@ 2020-06-25 21:21 kernel test robot
  0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2020-06-25 21:21 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 7126 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20200623120646.2175569-1-john@metanate.com>
References: <20200623120646.2175569-1-john@metanate.com>
TO: John Keeping <john@metanate.com>
TO: Heiko Stuebner <heiko@sntech.de>
CC: John Keeping <john@metanate.com>
CC: linux-arm-kernel(a)lists.infradead.org
CC: linux-rockchip(a)lists.infradead.org
CC: linux-i2c(a)vger.kernel.org
CC: linux-kernel(a)vger.kernel.org

Hi John,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on rockchip/for-next]
[also build test WARNING on v5.8-rc2 next-20200625]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use  as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/John-Keeping/i2c-rk3x-support-master_xfer_atomic/20200623-200927
base:   https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git for-next
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: h8300-randconfig-m031-20200624 (attached as .config)
compiler: h8300-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
drivers/i2c/busses/i2c-rk3x.c:1126 rk3x_i2c_xfer_common() error: double unlocked 'i2c->lock' (orig line 1088)

# https://github.com/0day-ci/linux/commit/9cfdefd04c1b90377752bfa631593aba181b4c46
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout 9cfdefd04c1b90377752bfa631593aba181b4c46
vim +1126 drivers/i2c/busses/i2c-rk3x.c

9cfdefd04c1b90 John Keeping    2020-06-23  1056  
9cfdefd04c1b90 John Keeping    2020-06-23  1057  static int rk3x_i2c_xfer_common(struct i2c_adapter *adap,
9cfdefd04c1b90 John Keeping    2020-06-23  1058  				struct i2c_msg *msgs, int num, bool polling)
c41aa3ce938b68 Max Schwarz     2014-06-11  1059  {
c41aa3ce938b68 Max Schwarz     2014-06-11  1060  	struct rk3x_i2c *i2c = (struct rk3x_i2c *)adap->algo_data;
c41aa3ce938b68 Max Schwarz     2014-06-11  1061  	unsigned long timeout, flags;
7e086c3fc2df09 David Wu        2016-05-16  1062  	u32 val;
c41aa3ce938b68 Max Schwarz     2014-06-11  1063  	int ret = 0;
c41aa3ce938b68 Max Schwarz     2014-06-11  1064  	int i;
c41aa3ce938b68 Max Schwarz     2014-06-11  1065  
c41aa3ce938b68 Max Schwarz     2014-06-11  1066  	spin_lock_irqsave(&i2c->lock, flags);
c41aa3ce938b68 Max Schwarz     2014-06-11  1067  
c41aa3ce938b68 Max Schwarz     2014-06-11  1068  	clk_enable(i2c->clk);
7e086c3fc2df09 David Wu        2016-05-16  1069  	clk_enable(i2c->pclk);
c41aa3ce938b68 Max Schwarz     2014-06-11  1070  
c41aa3ce938b68 Max Schwarz     2014-06-11  1071  	i2c->is_last_msg = false;
c41aa3ce938b68 Max Schwarz     2014-06-11  1072  
c41aa3ce938b68 Max Schwarz     2014-06-11  1073  	/*
c41aa3ce938b68 Max Schwarz     2014-06-11  1074  	 * Process msgs. We can handle more than one message at once (see
c41aa3ce938b68 Max Schwarz     2014-06-11  1075  	 * rk3x_i2c_setup()).
c41aa3ce938b68 Max Schwarz     2014-06-11  1076  	 */
c41aa3ce938b68 Max Schwarz     2014-06-11  1077  	for (i = 0; i < num; i += ret) {
c41aa3ce938b68 Max Schwarz     2014-06-11  1078  		ret = rk3x_i2c_setup(i2c, msgs + i, num - i);
c41aa3ce938b68 Max Schwarz     2014-06-11  1079  
c41aa3ce938b68 Max Schwarz     2014-06-11  1080  		if (ret < 0) {
c41aa3ce938b68 Max Schwarz     2014-06-11  1081  			dev_err(i2c->dev, "rk3x_i2c_setup() failed\n");
c41aa3ce938b68 Max Schwarz     2014-06-11  1082  			break;
c41aa3ce938b68 Max Schwarz     2014-06-11  1083  		}
c41aa3ce938b68 Max Schwarz     2014-06-11  1084  
c41aa3ce938b68 Max Schwarz     2014-06-11  1085  		if (i + ret >= num)
c41aa3ce938b68 Max Schwarz     2014-06-11  1086  			i2c->is_last_msg = true;
c41aa3ce938b68 Max Schwarz     2014-06-11  1087  
c41aa3ce938b68 Max Schwarz     2014-06-11 @1088  		spin_unlock_irqrestore(&i2c->lock, flags);
c41aa3ce938b68 Max Schwarz     2014-06-11  1089  
c41aa3ce938b68 Max Schwarz     2014-06-11  1090  		rk3x_i2c_start(i2c);
c41aa3ce938b68 Max Schwarz     2014-06-11  1091  
9cfdefd04c1b90 John Keeping    2020-06-23  1092  		if (!polling) {
c41aa3ce938b68 Max Schwarz     2014-06-11  1093  			timeout = wait_event_timeout(i2c->wait, !i2c->busy,
c41aa3ce938b68 Max Schwarz     2014-06-11  1094  						     msecs_to_jiffies(WAIT_TIMEOUT));
9cfdefd04c1b90 John Keeping    2020-06-23  1095  		} else {
9cfdefd04c1b90 John Keeping    2020-06-23  1096  			timeout = rk3x_i2c_wait_xfer_poll(i2c);
9cfdefd04c1b90 John Keeping    2020-06-23  1097  		}
c41aa3ce938b68 Max Schwarz     2014-06-11  1098  
c41aa3ce938b68 Max Schwarz     2014-06-11  1099  		spin_lock_irqsave(&i2c->lock, flags);
c41aa3ce938b68 Max Schwarz     2014-06-11  1100  
c41aa3ce938b68 Max Schwarz     2014-06-11  1101  		if (timeout == 0) {
c41aa3ce938b68 Max Schwarz     2014-06-11  1102  			dev_err(i2c->dev, "timeout, ipd: 0x%02x, state: %d\n",
c41aa3ce938b68 Max Schwarz     2014-06-11  1103  				i2c_readl(i2c, REG_IPD), i2c->state);
c41aa3ce938b68 Max Schwarz     2014-06-11  1104  
c41aa3ce938b68 Max Schwarz     2014-06-11  1105  			/* Force a STOP condition without interrupt */
c41aa3ce938b68 Max Schwarz     2014-06-11  1106  			i2c_writel(i2c, 0, REG_IEN);
7e086c3fc2df09 David Wu        2016-05-16  1107  			val = i2c_readl(i2c, REG_CON) & REG_CON_TUNING_MASK;
7e086c3fc2df09 David Wu        2016-05-16  1108  			val |= REG_CON_EN | REG_CON_STOP;
7e086c3fc2df09 David Wu        2016-05-16  1109  			i2c_writel(i2c, val, REG_CON);
c41aa3ce938b68 Max Schwarz     2014-06-11  1110  
c41aa3ce938b68 Max Schwarz     2014-06-11  1111  			i2c->state = STATE_IDLE;
c41aa3ce938b68 Max Schwarz     2014-06-11  1112  
c41aa3ce938b68 Max Schwarz     2014-06-11  1113  			ret = -ETIMEDOUT;
c41aa3ce938b68 Max Schwarz     2014-06-11  1114  			break;
c41aa3ce938b68 Max Schwarz     2014-06-11  1115  		}
c41aa3ce938b68 Max Schwarz     2014-06-11  1116  
c41aa3ce938b68 Max Schwarz     2014-06-11  1117  		if (i2c->error) {
c41aa3ce938b68 Max Schwarz     2014-06-11  1118  			ret = i2c->error;
c41aa3ce938b68 Max Schwarz     2014-06-11  1119  			break;
c41aa3ce938b68 Max Schwarz     2014-06-11  1120  		}
c41aa3ce938b68 Max Schwarz     2014-06-11  1121  	}
c41aa3ce938b68 Max Schwarz     2014-06-11  1122  
7e086c3fc2df09 David Wu        2016-05-16  1123  	clk_disable(i2c->pclk);
c41aa3ce938b68 Max Schwarz     2014-06-11  1124  	clk_disable(i2c->clk);
7e086c3fc2df09 David Wu        2016-05-16  1125  
c41aa3ce938b68 Max Schwarz     2014-06-11 @1126  	spin_unlock_irqrestore(&i2c->lock, flags);
c41aa3ce938b68 Max Schwarz     2014-06-11  1127  
c6cbfb91b87822 Dmitry Torokhov 2015-04-20  1128  	return ret < 0 ? ret : num;
c41aa3ce938b68 Max Schwarz     2014-06-11  1129  }
c41aa3ce938b68 Max Schwarz     2014-06-11  1130  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 29729 bytes --]

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

end of thread, other threads:[~2020-07-04  6:48 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-23 12:06 [PATCH] i2c: rk3x: support master_xfer_atomic John Keeping
2020-07-03 10:08 ` Heiko Stuebner
2020-07-03 10:08   ` Heiko Stuebner
2020-07-04  6:46 ` Wolfram Sang
2020-07-04  6:46   ` Wolfram Sang
2020-06-25 21:21 kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.