All of lore.kernel.org
 help / color / mirror / Atom feed
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,
	david.e.box@linux.intel.com, u.kleine-koenig@pengutronix.de,
	laurent.pinchart+renesas@ideasonboard.com,
	boris.brezillon@free-electrons.com, maxime.coquelin@st.com,
	andrew@lunn.ch, sjg@chromium.org, markus.mayer@linaro.org,
	ch.naveen@samsung.com, 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, christian.ruppert@abilis.com,
	alan@linux.intel.com, linux-kernel@vger.kernel.org,
	linux-i2c@vger.kernel.org
Subject: [PATCH V4 1/2] i2c-designware: Add i2c bus locking support
Date: Thu, 15 Jan 2015 01:12:16 -0800	[thread overview]
Message-ID: <1421313137-1613-2-git-send-email-david.e.box@linux.intel.com> (raw)
In-Reply-To: <1421313137-1613-1-git-send-email-david.e.box@linux.intel.com>
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 | 26 ++++++++++++++++++++++++++
 drivers/i2c/busses/i2c-designware-core.h |  6 ++++++
 2 files changed, 32 insertions(+)

diff --git a/drivers/i2c/busses/i2c-designware-core.c b/drivers/i2c/busses/i2c-designware-core.c
index 3c20e4b..3d3ac4d 100644
--- a/drivers/i2c/busses/i2c-designware-core.c
+++ b/drivers/i2c/busses/i2c-designware-core.c
@@ -289,6 +289,15 @@ int i2c_dw_init(struct dw_i2c_dev *dev)
 	u32 hcnt, lcnt;
 	u32 reg;
 	u32 sda_falling_time, scl_falling_time;
+	int ret;
+
+	if (dev->acquire_lock) {
+		ret = dev->acquire_lock(dev);
+		if (ret) {
+			dev_err(dev->dev, "couldn't acquire bus ownership\n");
+			return ret;
+		}
+	}
 
 	input_clock_khz = dev->get_clk_rate_khz(dev);
 
@@ -302,6 +311,8 @@ int i2c_dw_init(struct dw_i2c_dev *dev)
 	} else if (reg != DW_IC_COMP_TYPE_VALUE) {
 		dev_err(dev->dev, "Unknown Synopsys component type: "
 			"0x%08x\n", reg);
+		if (dev->release_lock)
+			dev->release_lock(dev);
 		return -ENODEV;
 	}
 
@@ -368,6 +379,9 @@ int i2c_dw_init(struct dw_i2c_dev *dev)
 
 	/* configure the i2c master */
 	dw_writel(dev, dev->master_cfg , DW_IC_CON);
+
+	if (dev->release_lock)
+		dev->release_lock(dev);
 	return 0;
 }
 EXPORT_SYMBOL_GPL(i2c_dw_init);
@@ -631,6 +645,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_nolock;
+		}
+	}
+
 	ret = i2c_dw_wait_bus_not_busy(dev);
 	if (ret < 0)
 		goto done;
@@ -676,6 +698,10 @@ i2c_dw_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
 	ret = -EIO;
 
 done:
+	if (dev->release_lock)
+		dev->release_lock(dev);
+
+done_nolock:
 	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
-- 
1.9.1

  parent reply	other threads:[~2015-01-15  9:12 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         ` [PATCH V3 1/2] i2c-designware: Add i2c bus locking support David E. Box
2014-12-03 16:01           ` 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
     [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
2015-01-15  9:12         ` David E. Box [this message]
     [not found]           ` <1421313137-1613-2-git-send-email-david.e.box-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2015-01-22 14:22             ` [PATCH V4 1/2] i2c-designware: Add i2c bus locking support Mika Westerberg
2015-01-22 14:22               ` Mika Westerberg

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=1421313137-1613-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=ch.naveen@samsung.com \
    --cc=christian.ruppert@abilis.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.coquelin@st.com \
    --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.