LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Eddie James <eajames@linux.vnet.ibm.com>
To: linux-i2c@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
wsa@the-dreams.de, robh+dt@kernel.org, benh@kernel.crashing.org,
joel@jms.id.au, mark.rutland@arm.com, gregkh@linuxfoundation.org,
rdunlap@infradead.org, andy.shevchenko@gmail.com,
peda@axentia.se, Eddie James <eajames@linux.vnet.ibm.com>
Subject: [PATCH v10 6/7] i2c: fsi: Add I2C master locking
Date: Wed, 13 Jun 2018 14:36:18 -0500 [thread overview]
Message-ID: <1528918579-27602-7-git-send-email-eajames@linux.vnet.ibm.com> (raw)
In-Reply-To: <1528918579-27602-1-git-send-email-eajames@linux.vnet.ibm.com>
Since there are many ports per master, each with it's own adapter and
chardev, we need some locking to prevent transfers from changing the
master state while other transfers are in progress.
Signed-off-by: Eddie James <eajames@linux.vnet.ibm.com>
---
drivers/i2c/busses/i2c-fsi.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/drivers/i2c/busses/i2c-fsi.c b/drivers/i2c/busses/i2c-fsi.c
index 8c0a6cb..d6cab4b 100644
--- a/drivers/i2c/busses/i2c-fsi.c
+++ b/drivers/i2c/busses/i2c-fsi.c
@@ -21,6 +21,7 @@
#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/module.h>
+#include <linux/mutex.h>
#include <linux/of.h>
#include <linux/slab.h>
@@ -148,6 +149,7 @@ struct fsi_i2c_master {
struct fsi_device *fsi;
u8 fifo_size;
struct list_head ports;
+ struct mutex lock;
};
struct fsi_i2c_port {
@@ -574,11 +576,14 @@ static int fsi_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
int i, rc;
unsigned long start_time;
struct fsi_i2c_port *port = adap->algo_data;
+ struct fsi_i2c_master *master = port->master;
struct i2c_msg *msg;
+ mutex_lock(&master->lock);
+
rc = fsi_i2c_set_port(port);
if (rc)
- return rc;
+ goto unlock;
for (i = 0; i < num; i++) {
msg = msgs + i;
@@ -586,15 +591,17 @@ static int fsi_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
rc = fsi_i2c_start(port, msg, i == num - 1);
if (rc)
- return rc;
+ goto unlock;
rc = fsi_i2c_wait(port, msg,
adap->timeout - (jiffies - start_time));
if (rc)
- return rc;
+ goto unlock;
}
- return num;
+unlock:
+ mutex_unlock(&master->lock);
+ return rc ? : num;
}
static u32 fsi_i2c_functionality(struct i2c_adapter *adap)
@@ -621,6 +628,7 @@ static int fsi_i2c_probe(struct device *dev)
if (!i2c)
return -ENOMEM;
+ mutex_init(&i2c->lock);
i2c->fsi = to_fsi_dev(dev);
INIT_LIST_HEAD(&i2c->ports);
--
1.8.3.1
next prev parent reply other threads:[~2018-06-13 19:36 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-13 19:36 [PATCH v10 0/7] i2c: Add FSI-attached I2C master algorithm Eddie James
2018-06-13 19:36 ` [PATCH v10 1/7] dt-bindings: i2c: Add FSI-attached I2C master dt binding documentation Eddie James
2018-06-26 2:39 ` Wolfram Sang
2018-06-13 19:36 ` [PATCH v10 2/7] i2c: Add FSI-attached I2C master algorithm Eddie James
2018-06-13 19:36 ` [PATCH v10 3/7] i2c: fsi: Add port structures Eddie James
2018-06-20 3:34 ` Benjamin Herrenschmidt
2018-06-20 3:59 ` Joel Stanley
2018-06-13 19:36 ` [PATCH v10 4/7] i2c: fsi: Add abort and hardware reset procedures Eddie James
2018-06-26 2:38 ` Wolfram Sang
2018-06-27 13:48 ` Eddie James
2018-07-02 18:15 ` Wolfram Sang
2018-07-05 18:50 ` Eddie James
2018-07-05 22:06 ` Wolfram Sang
2018-06-13 19:36 ` [PATCH v10 5/7] i2c: fsi: Add transfer implementation Eddie James
2018-06-26 2:38 ` Wolfram Sang
2018-06-27 13:21 ` Eddie James
2018-07-02 18:24 ` Wolfram Sang
2018-07-05 18:52 ` Eddie James
2018-07-05 21:59 ` Wolfram Sang
2018-06-13 19:36 ` Eddie James [this message]
2018-06-13 19:36 ` [PATCH v10 7/7] i2c: fsi: Add bus recovery Eddie James
2018-06-26 2:38 ` Wolfram Sang
2018-06-27 13:32 ` Eddie James
2018-07-02 18:16 ` Wolfram Sang
2018-06-14 9:05 ` [PATCH v10 0/7] i2c: Add FSI-attached I2C master algorithm Andy Shevchenko
2018-06-18 4:53 ` Joel Stanley
2018-06-26 2:39 ` Wolfram Sang
2018-06-27 13:53 ` Eddie James
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1528918579-27602-7-git-send-email-eajames@linux.vnet.ibm.com \
--to=eajames@linux.vnet.ibm.com \
--cc=andy.shevchenko@gmail.com \
--cc=benh@kernel.crashing.org \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=joel@jms.id.au \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=peda@axentia.se \
--cc=rdunlap@infradead.org \
--cc=robh+dt@kernel.org \
--cc=wsa@the-dreams.de \
--subject='Re: [PATCH v10 6/7] i2c: fsi: Add I2C master locking' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
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).