summaryrefslogtreecommitdiffstats
path: root/0013-mfd-intel-lpss-Add-support-for-passing-device-proper.patch
diff options
context:
space:
mode:
Diffstat (limited to '0013-mfd-intel-lpss-Add-support-for-passing-device-proper.patch')
-rw-r--r--0013-mfd-intel-lpss-Add-support-for-passing-device-proper.patch112
1 files changed, 112 insertions, 0 deletions
diff --git a/0013-mfd-intel-lpss-Add-support-for-passing-device-proper.patch b/0013-mfd-intel-lpss-Add-support-for-passing-device-proper.patch
new file mode 100644
index 000000000..5160053b9
--- /dev/null
+++ b/0013-mfd-intel-lpss-Add-support-for-passing-device-proper.patch
@@ -0,0 +1,112 @@
+From e15ad2154b6166804fc04487e0398c9aef9e7c97 Mon Sep 17 00:00:00 2001
+From: Mika Westerberg <mika.westerberg@linux.intel.com>
+Date: Mon, 30 Nov 2015 17:11:41 +0200
+Subject: [PATCH 13/16] mfd: intel-lpss: Add support for passing device
+ properties
+
+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>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@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.5.0
+