linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: "Rafael J . Wysocki" <rjw@rjwysocki.net>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jarkko Nikula <jarkko.nikula@linux.intel.com>,
	linux-i2c@vger.kernel.org, linux-acpi@vger.kernel.org,
	linux-kernel@vger.kernel.org, Lee Jones <lee.jones@linaro.org>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Kevin Fenzi <kevin@scrye.com>, Arnd Bergmann <arnd@arndb.de>,
	Wolfram Sang <wsa@the-dreams.de>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Subject: [PATCH v2 13/16] mfd: intel-lpss: Add support for passing device properties
Date: Mon, 30 Nov 2015 17:11:41 +0200	[thread overview]
Message-ID: <1448896304-87928-14-git-send-email-andriy.shevchenko@linux.intel.com> (raw)
In-Reply-To: <1448896304-87928-1-git-send-email-andriy.shevchenko@linux.intel.com>

From: Mika Westerberg <mika.westerberg@linux.intel.com>

If the boot firmware does not support ACPI we need a way to pass device
configuration information to the drivers. The unified device properties API
already supports passing platform data via properties so let's take
advantage of that and allow probe drivers to pass set of properties to the
host controller driver.

In order to do that we need to be able to modify the MFD cell corresponding
the host controller, so make the core driver to take copy of the cell
instead of using it directly. Then we can assign info->pset to the
resulting copy of a cell and let the MFD core to assign that to the
resulting device.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/mfd/intel-lpss.c | 16 ++++++++++++----
 drivers/mfd/intel-lpss.h |  2 ++
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/drivers/mfd/intel-lpss.c b/drivers/mfd/intel-lpss.c
index 6255513..1743788 100644
--- a/drivers/mfd/intel-lpss.c
+++ b/drivers/mfd/intel-lpss.c
@@ -24,6 +24,7 @@
 #include <linux/mfd/core.h>
 #include <linux/pm_qos.h>
 #include <linux/pm_runtime.h>
+#include <linux/property.h>
 #include <linux/seq_file.h>
 #include <linux/io-64-nonatomic-lo-hi.h>
 
@@ -72,7 +73,7 @@ struct intel_lpss {
 	enum intel_lpss_dev_type type;
 	struct clk *clk;
 	struct clk_lookup *clock;
-	const struct mfd_cell *cell;
+	struct mfd_cell *cell;
 	struct device *dev;
 	void __iomem *priv;
 	int devid;
@@ -217,6 +218,7 @@ static void intel_lpss_ltr_hide(struct intel_lpss *lpss)
 
 static int intel_lpss_assign_devs(struct intel_lpss *lpss)
 {
+	const struct mfd_cell *cell;
 	unsigned int type;
 
 	type = lpss->caps & LPSS_PRIV_CAPS_TYPE_MASK;
@@ -224,18 +226,22 @@ static int intel_lpss_assign_devs(struct intel_lpss *lpss)
 
 	switch (type) {
 	case LPSS_DEV_I2C:
-		lpss->cell = &intel_lpss_i2c_cell;
+		cell = &intel_lpss_i2c_cell;
 		break;
 	case LPSS_DEV_UART:
-		lpss->cell = &intel_lpss_uart_cell;
+		cell = &intel_lpss_uart_cell;
 		break;
 	case LPSS_DEV_SPI:
-		lpss->cell = &intel_lpss_spi_cell;
+		cell = &intel_lpss_spi_cell;
 		break;
 	default:
 		return -ENODEV;
 	}
 
+	lpss->cell = devm_kmemdup(lpss->dev, cell, sizeof(*cell), GFP_KERNEL);
+	if (!lpss->cell)
+		return -ENOMEM;
+
 	lpss->type = type;
 
 	return 0;
@@ -401,6 +407,8 @@ int intel_lpss_probe(struct device *dev,
 	if (ret)
 		return ret;
 
+	lpss->cell->pset = info->pset;
+
 	intel_lpss_init_dev(lpss);
 
 	lpss->devid = ida_simple_get(&intel_lpss_devid_ida, 0, 0, GFP_KERNEL);
diff --git a/drivers/mfd/intel-lpss.h b/drivers/mfd/intel-lpss.h
index 2c7f8d7..0dcea9e 100644
--- a/drivers/mfd/intel-lpss.h
+++ b/drivers/mfd/intel-lpss.h
@@ -16,12 +16,14 @@
 
 struct device;
 struct resource;
+struct property_set;
 
 struct intel_lpss_platform_info {
 	struct resource *mem;
 	int irq;
 	unsigned long clk_rate;
 	const char *clk_con_id;
+	struct property_set *pset;
 };
 
 int intel_lpss_probe(struct device *dev,
-- 
2.6.2

  parent reply	other threads:[~2015-11-30 15:11 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-30 15:11 [PATCH v2 00/16] intel-lpss: support non-ACPI platforms Andy Shevchenko
2015-11-30 15:11 ` [PATCH v2 01/16] device property: always check for fwnode type Andy Shevchenko
2015-11-30 15:11 ` [PATCH v2 02/16] device property: rename helper functions Andy Shevchenko
2015-11-30 15:11 ` [PATCH v2 03/16] device property: refactor built-in properties support Andy Shevchenko
2015-11-30 15:11 ` [PATCH v2 04/16] device property: keep single value inplace Andy Shevchenko
2015-11-30 15:11 ` [PATCH v2 05/16] device property: helper macros for property entry creation Andy Shevchenko
2015-11-30 15:11 ` [PATCH v2 06/16] device property: improve readability of macros Andy Shevchenko
2015-11-30 15:11 ` [PATCH v2 07/16] device property: return -EINVAL when property isn't found in ACPI Andy Shevchenko
2015-11-30 15:11 ` [PATCH v2 08/16] device property: Fallback to secondary fwnode if primary misses the property Andy Shevchenko
2015-11-30 15:11 ` [PATCH v2 09/16] device property: Take a copy of the property set Andy Shevchenko
2015-11-30 15:11 ` [PATCH v2 10/16] driver core: platform: Add support for built-in device properties Andy Shevchenko
2015-11-30 15:11 ` [PATCH v2 11/16] driver core: Do not overwrite secondary fwnode with NULL if it is set Andy Shevchenko
2015-11-30 15:11 ` [PATCH v2 12/16] mfd: core: propagate device properties to sub devices drivers Andy Shevchenko
2015-11-30 15:11 ` Andy Shevchenko [this message]
2015-11-30 15:11 ` [PATCH v2 14/16] mfd: intel-lpss: Pass SDA hold time to I2C host controller driver Andy Shevchenko
2016-02-08 10:09   ` Wolfram Sang
2016-02-08 10:29     ` Mika Westerberg
2016-02-08 10:45       ` Andy Shevchenko
2016-02-10 16:53   ` Lee Jones
2015-11-30 15:11 ` [PATCH v2 15/16] mfd: intel-lpss: Pass HSUART configuration via properties Andy Shevchenko
2015-11-30 15:11 ` [PATCH v2 16/16] i2c: designware: Convert to use unified device property API Andy Shevchenko
2015-11-30 19:58   ` Wolfram Sang
2015-12-01  9:08     ` Mika Westerberg
2015-12-01 10:33     ` Andy Shevchenko
2015-12-02  1:28       ` Rafael J. Wysocki
2015-12-02  9:23         ` Andy Shevchenko
2015-12-02  9:33           ` Mika Westerberg
2015-12-02  9:53             ` Wolfram Sang
2015-12-07  1:44 ` [PATCH v2 00/16] intel-lpss: support non-ACPI platforms Rafael J. Wysocki
2016-01-05 17:57   ` Laura Abbott
2016-01-05 23:59     ` Rafael J. Wysocki
2016-01-06 16:19       ` Laura Abbott
2016-01-07  8:43         ` Mika Westerberg
2016-01-08  0:03         ` Rafael J. Wysocki
2016-01-08 17:08           ` Laura Abbott
2016-01-08 19:22             ` Hans de Goede
2016-01-11 16:33               ` Laura Abbott
2016-01-11 16:47                 ` Benjamin Tissoires

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=1448896304-87928-14-git-send-email-andriy.shevchenko@linux.intel.com \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=arnd@arndb.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=jarkko.nikula@linux.intel.com \
    --cc=kevin@scrye.com \
    --cc=lee.jones@linaro.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mika.westerberg@linux.intel.com \
    --cc=rjw@rjwysocki.net \
    --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 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).