diff options
Diffstat (limited to 'freed-ora/current/master/0013-mfd-intel-lpss-Add-support-for-passing-device-proper.patch')
-rw-r--r-- | freed-ora/current/master/0013-mfd-intel-lpss-Add-support-for-passing-device-proper.patch | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/freed-ora/current/master/0013-mfd-intel-lpss-Add-support-for-passing-device-proper.patch b/freed-ora/current/master/0013-mfd-intel-lpss-Add-support-for-passing-device-proper.patch new file mode 100644 index 000000000..5160053b9 --- /dev/null +++ b/freed-ora/current/master/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 + |