From: Haojian Zhuang <haojian.zhuang-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: haojian.zhuang-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org,
eric.y.miao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org,
linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: Haojian Zhuang <haojian.zhuang-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Subject: [PATCH 1/3] i2c: append hardware lock with bus lock
Date: Thu, 28 Apr 2011 12:02:36 +0800 [thread overview]
Message-ID: <1303963358-4652-1-git-send-email-haojian.zhuang@gmail.com> (raw)
In-Reply-To: <2011042801>
Both AP and CP are contained in Marvell PXA910 silicon. These two ARM
cores are sharing one pair of I2C pins.
In order to keep I2C transaction operated with atomic, hardware lock
(RIPC) is required. Because of this, bus lock in AP side can't afford
this requirement. Now hardware lock is appended.
Signed-off-by: Haojian Zhuang <haojian.zhuang-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>
Cc: Ben Dooks <ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>
---
drivers/i2c/i2c-core.c | 22 ++++++++++++++++++----
include/linux/i2c.h | 3 +++
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 045ba6e..412c7a5 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -448,8 +448,11 @@ void i2c_lock_adapter(struct i2c_adapter *adapter)
if (parent)
i2c_lock_adapter(parent);
- else
+ else {
rt_mutex_lock(&adapter->bus_lock);
+ if (adapter->hardware_lock)
+ adapter->hardware_lock();
+ }
}
EXPORT_SYMBOL_GPL(i2c_lock_adapter);
@@ -460,11 +463,19 @@ EXPORT_SYMBOL_GPL(i2c_lock_adapter);
static int i2c_trylock_adapter(struct i2c_adapter *adapter)
{
struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
+ int ret = 0;
if (parent)
return i2c_trylock_adapter(parent);
- else
- return rt_mutex_trylock(&adapter->bus_lock);
+ else {
+ ret = rt_mutex_trylock(&adapter->bus_lock);
+ if (ret && adapter->hardware_trylock) {
+ ret = adapter->hardware_trylock();
+ if (!ret)
+ i2c_unlock_adapter(adapter);
+ }
+ return ret;
+ }
}
/**
@@ -477,8 +488,11 @@ void i2c_unlock_adapter(struct i2c_adapter *adapter)
if (parent)
i2c_unlock_adapter(parent);
- else
+ else {
+ if (adapter->hardware_unlock)
+ adapter->hardware_unlock();
rt_mutex_unlock(&adapter->bus_lock);
+ }
}
EXPORT_SYMBOL_GPL(i2c_unlock_adapter);
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index 06a8d9c..b283b4e 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -361,6 +361,9 @@ struct i2c_adapter {
/* data fields that are valid for all devices */
struct rt_mutex bus_lock;
+ void (*hardware_lock)(void);
+ void (*hardware_unlock)(void);
+ int (*hardware_trylock)(void);
int timeout; /* in jiffies */
int retries;
--
1.7.1
next parent reply other threads:[~2011-04-28 4:02 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <2011042801>
2011-04-28 4:02 ` Haojian Zhuang [this message]
[not found] ` <1303963358-4652-1-git-send-email-haojian.zhuang-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-04-28 8:22 ` [PATCH 1/3] i2c: append hardware lock with bus lock Jean Delvare
[not found] ` <20110428102212.2d8d607c-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2011-04-28 8:36 ` Eric Miao
[not found] ` <BANLkTin6jguQue_0Y74jGPnmhCcvWLBjHg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-04-28 14:16 ` Jean Delvare
[not found] ` <20110428161625.5eaacb85-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2011-04-28 14:37 ` Russell King - ARM Linux
2011-04-28 14:48 ` Haojian Zhuang
2011-04-28 14:19 ` Haojian Zhuang
2011-04-28 4:02 ` [PATCH 2/3] i2c: pxa: support hardware lock Haojian Zhuang
2011-04-28 4:02 ` [PATCH 3/3] ARM: mmp: add hardware lock support in PXA910 Haojian Zhuang
2011-04-28 15:15 ` [PATCH 1/3] i2c: append hardware lock with bus lock Haojian Zhuang
[not found] ` <1304003746-12127-1-git-send-email-haojian.zhuang-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-05-02 9:27 ` Ben Dooks
[not found] ` <20110502092734.GV15795-SMNkleLxa3Z6Wcw2j4pizdi2O/JbrIOy@public.gmane.org>
2011-05-02 9:46 ` Jean Delvare
[not found] ` <20110502114616.7813da79-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2011-05-10 23:08 ` Ben Dooks
2011-04-28 15:15 ` [PATCH 2/3] i2c: pxa: support hardware lock Haojian Zhuang
2011-04-28 15:15 ` [PATCH 3/3] ARM: mmp: add hardware lock support in PXA910 Haojian Zhuang
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=1303963358-4652-1-git-send-email-haojian.zhuang@gmail.com \
--to=haojian.zhuang-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org \
--cc=eric.y.miao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=haojian.zhuang-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).