From: "David E. Box" <david.e.box@linux.intel.com>
To: wsa@the-dreams.de
Cc: jdelvare@suse.de, arnd@arndb.de,
maxime.ripard@free-electrons.com, dianders@chromium.org,
u.kleine-koenig@pengutronix.de,
laurent.pinchart+renesas@ideasonboard.com,
boris.brezillon@free-electrons.com, andrew@lunn.ch,
sjg@chromium.org, markus.mayer@linaro.org,
jacob.jun.pan@linux.intel.com, max.schwarz@online.de,
mika.westerberg@linux.intel.com, skuribay@pobox.com,
Romain.Baeriswyl@abilis.com, wenkai.du@intel.com,
chiau.ee.chew@intel.com, alan@linux.intel.com,
linux-kernel@vger.kernel.org, linux-i2c@vger.kernel.org
Subject: [PATCH V3 1/2] i2c-designware: Add i2c bus locking support
Date: Mon, 1 Dec 2014 16:09:32 -0800 [thread overview]
Message-ID: <1417478973-25522-2-git-send-email-david.e.box@linux.intel.com> (raw)
In-Reply-To: <1417478973-25522-1-git-send-email-david.e.box@linux.intel.com>
Adds support for acquiring and releasing a hardware bus lock in the i2c
designware core transfer function. This is needed for i2c bus controllers
that are shared with but not controlled by the kernel.
Signed-off-by: David E. Box <david.e.box@linux.intel.com>
---
drivers/i2c/busses/i2c-designware-core.c | 11 +++++++++++
drivers/i2c/busses/i2c-designware-core.h | 6 ++++++
drivers/i2c/busses/i2c-designware-platdrv.c | 18 +++++++++++++-----
3 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/drivers/i2c/busses/i2c-designware-core.c b/drivers/i2c/busses/i2c-designware-core.c
index 3c20e4b..377deeb 100644
--- a/drivers/i2c/busses/i2c-designware-core.c
+++ b/drivers/i2c/busses/i2c-designware-core.c
@@ -631,6 +631,14 @@ i2c_dw_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
dev->abort_source = 0;
dev->rx_outstanding = 0;
+ if (dev->acquire_lock) {
+ ret = dev->acquire_lock(dev);
+ if (ret) {
+ dev_err(dev->dev, "couldn't acquire bus ownership\n");
+ goto done;
+ }
+ }
+
ret = i2c_dw_wait_bus_not_busy(dev);
if (ret < 0)
goto done;
@@ -676,6 +684,9 @@ i2c_dw_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
ret = -EIO;
done:
+ if (dev->release_lock)
+ dev->release_lock(dev);
+
pm_runtime_mark_last_busy(dev->dev);
pm_runtime_put_autosuspend(dev->dev);
mutex_unlock(&dev->lock);
diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/i2c-designware-core.h
index d66b6cb..a472c91 100644
--- a/drivers/i2c/busses/i2c-designware-core.h
+++ b/drivers/i2c/busses/i2c-designware-core.h
@@ -65,6 +65,9 @@
* @ss_lcnt: standard speed LCNT value
* @fs_hcnt: fast speed HCNT value
* @fs_lcnt: fast speed LCNT value
+ * @acquire_lock: function to acquire a hardware lock on the bus
+ * @release_lock: function to release a hardware lock on the bus
+ * @pm_runtime_disabled: true if pm runtime is disabled
*
* HCNT and LCNT parameters can be used if the platform knows more accurate
* values than the one computed based only on the input clock frequency.
@@ -105,6 +108,9 @@ struct dw_i2c_dev {
u16 ss_lcnt;
u16 fs_hcnt;
u16 fs_lcnt;
+ int (*acquire_lock)(struct dw_i2c_dev *dev);
+ void (*release_lock)(struct dw_i2c_dev *dev);
+ bool pm_runtime_disabled;
};
#define ACCESS_SWAP 0x00000001
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index a743115..afdff3b 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -261,10 +261,16 @@ static int dw_i2c_probe(struct platform_device *pdev)
return r;
}
- pm_runtime_set_autosuspend_delay(&pdev->dev, 1000);
- pm_runtime_use_autosuspend(&pdev->dev);
- pm_runtime_set_active(&pdev->dev);
- pm_runtime_enable(&pdev->dev);
+ i2c_dw_eval_lock_support(dev);
+
+ if (dev->pm_runtime_disabled) {
+ pm_runtime_forbid(&pdev->dev);
+ } else {
+ pm_runtime_set_autosuspend_delay(&pdev->dev, 1000);
+ pm_runtime_use_autosuspend(&pdev->dev);
+ pm_runtime_set_active(&pdev->dev);
+ pm_runtime_enable(&pdev->dev);
+ }
return 0;
}
@@ -314,7 +320,9 @@ static int dw_i2c_resume(struct device *dev)
struct dw_i2c_dev *i_dev = platform_get_drvdata(pdev);
clk_prepare_enable(i_dev->clk);
- i2c_dw_init(i_dev);
+
+ if (!i_dev->pm_runtime_disabled)
+ i2c_dw_init(i_dev);
return 0;
}
--
1.9.1
next prev parent reply other threads:[~2014-12-02 0:09 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-12 17:36 [PATCH] i2c-designware: Intel BayTrail PMIC I2C bus support David E. Box
[not found] ` <1410543367-6565-1-git-send-email-david.e.box-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2014-09-15 6:57 ` Maxime Coquelin
2014-09-15 6:57 ` Maxime Coquelin
[not found] ` <54168DE2.8020303-qxv4g6HH51o@public.gmane.org>
2014-09-15 16:55 ` David E. Box
2014-09-15 16:55 ` David E. Box
2014-09-16 9:44 ` Mika Westerberg
2014-09-16 9:44 ` Mika Westerberg
[not found] ` <20140916094449.GZ10854-3PARRvDOhMZrdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2014-09-16 10:53 ` Jacob Pan
2014-09-16 10:53 ` Jacob Pan
2014-09-16 10:58 ` Mika Westerberg
2014-09-17 4:01 ` Li, Aubrey
2014-09-17 11:02 ` One Thousand Gnomes
2014-09-17 11:02 ` One Thousand Gnomes
2014-09-23 18:40 ` [PATCH V2] i2c-designware: Add Intel Baytrail " David E. Box
2014-09-23 18:40 ` David E. Box
2014-11-11 11:32 ` Wolfram Sang
2014-11-11 17:11 ` David E. Box
2014-11-11 17:11 ` David E. Box
[not found] ` <1411497626-7984-1-git-send-email-david.e.box-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2014-09-23 19:00 ` Maxime Ripard
2014-09-23 19:00 ` Maxime Ripard
2014-09-23 19:58 ` David E. Box
2014-09-25 9:47 ` Maxime Ripard
2014-09-25 9:47 ` Maxime Ripard
[not found] ` <20141007191420.GA25126@pathfinder>
2014-10-09 12:36 ` Maxime Ripard
2014-10-09 12:36 ` Maxime Ripard
2014-11-11 11:50 ` Mika Westerberg
2014-11-11 11:50 ` Mika Westerberg
2014-12-02 0:09 ` [PATCH V3 0/2] i2c-designware: Baytrail bus locking driver David E. Box
2014-12-02 0:09 ` David E. Box
2014-12-02 0:09 ` David E. Box [this message]
2014-12-03 16:01 ` [PATCH V3 1/2] i2c-designware: Add i2c bus locking support Mika Westerberg
[not found] ` <20141203160125.GB28857-3PARRvDOhMZrdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2014-12-04 18:49 ` David E. Box
2014-12-04 18:49 ` David E. Box
[not found] ` <1417478973-25522-2-git-send-email-david.e.box-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2014-12-04 7:59 ` Jarkko Nikula
2014-12-04 7:59 ` Jarkko Nikula
2014-12-04 18:42 ` David E. Box
2015-01-13 9:48 ` Wolfram Sang
2015-01-13 9:48 ` Wolfram Sang
2015-01-14 18:15 ` David E. Box
2015-01-14 18:15 ` David E. Box
2014-12-02 0:09 ` [PATCH V3 2/2] i2c-designware: Add Intel Baytrail PMIC I2C bus support David E. Box
2014-12-03 16:10 ` Mika Westerberg
[not found] ` <20141203161046.GC28857-3PARRvDOhMZrdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2014-12-04 19:11 ` David E. Box
2014-12-04 19:11 ` David E. Box
2015-01-15 9:12 ` [PATCH V4 1/2] i2c-designware: Add i2c bus locking support David E. Box
[not found] ` <1421313137-1613-2-git-send-email-david.e.box-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2015-01-22 14:22 ` Mika Westerberg
2015-01-22 14:22 ` Mika Westerberg
[not found] ` <1417478973-25522-1-git-send-email-david.e.box-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2014-12-06 3:51 ` [PATCH V3 0/2] i2c-designware: Baytrail bus locking driver Shinya Kuribayashi
2014-12-06 3:51 ` Shinya Kuribayashi
2015-01-15 9:12 ` [PATCH V4 0/2] i2c-designware: Add Intel Baytrail pmic i2c bus support David E. Box
2015-01-15 9:12 ` David E. Box
[not found] ` <1421313137-1613-1-git-send-email-david.e.box-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2015-01-26 11:27 ` Wolfram Sang
2015-01-26 11:27 ` Wolfram Sang
2015-01-15 9:12 ` [PATCH V4 2/2] i2c-designware: Add Intel Baytrail PMIC I2C " David E. Box
2015-01-15 9:12 ` David E. Box
[not found] ` <1421313137-1613-3-git-send-email-david.e.box-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2015-01-22 14:28 ` Mika Westerberg
2015-01-22 14:28 ` Mika Westerberg
2015-01-22 20:48 ` David E. Box
2015-01-23 9:32 ` Mika Westerberg
2015-01-23 14:18 ` Wolfram Sang
2015-01-23 14:18 ` Wolfram Sang
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=1417478973-25522-2-git-send-email-david.e.box@linux.intel.com \
--to=david.e.box@linux.intel.com \
--cc=Romain.Baeriswyl@abilis.com \
--cc=alan@linux.intel.com \
--cc=andrew@lunn.ch \
--cc=arnd@arndb.de \
--cc=boris.brezillon@free-electrons.com \
--cc=chiau.ee.chew@intel.com \
--cc=dianders@chromium.org \
--cc=jacob.jun.pan@linux.intel.com \
--cc=jdelvare@suse.de \
--cc=laurent.pinchart+renesas@ideasonboard.com \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=markus.mayer@linaro.org \
--cc=max.schwarz@online.de \
--cc=maxime.ripard@free-electrons.com \
--cc=mika.westerberg@linux.intel.com \
--cc=sjg@chromium.org \
--cc=skuribay@pobox.com \
--cc=u.kleine-koenig@pengutronix.de \
--cc=wenkai.du@intel.com \
--cc=wsa@the-dreams.de \
/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 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.