aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm63xx/patches-4.9/001-4.12-03-spi-bcm63xx-add-support-for-probing-through-devicetr.patch
diff options
context:
space:
mode:
authorJonas Gorski <jonas.gorski@gmail.com>2018-01-13 13:18:10 +0100
committerJonas Gorski <jonas.gorski@gmail.com>2018-02-11 23:15:05 +0100
commitb0c5e8b9274188bf3bb238e013e324542ee747c4 (patch)
tree4cd32d3be6ef96eaa069d2e6cd52b625da07def1 /target/linux/brcm63xx/patches-4.9/001-4.12-03-spi-bcm63xx-add-support-for-probing-through-devicetr.patch
parenta27d59bb427466311fe7e69da3f0f53be18237aa (diff)
downloadupstream-b0c5e8b9274188bf3bb238e013e324542ee747c4.tar.gz
upstream-b0c5e8b9274188bf3bb238e013e324542ee747c4.tar.bz2
upstream-b0c5e8b9274188bf3bb238e013e324542ee747c4.zip
brcm63xx: add kernel 4.9 support
Add support for kernel 4.9 based on the more upstream comformant partition defintions. Increases compressed kernel size by ~95k compared to 4.4. Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Diffstat (limited to 'target/linux/brcm63xx/patches-4.9/001-4.12-03-spi-bcm63xx-add-support-for-probing-through-devicetr.patch')
-rw-r--r--target/linux/brcm63xx/patches-4.9/001-4.12-03-spi-bcm63xx-add-support-for-probing-through-devicetr.patch98
1 files changed, 98 insertions, 0 deletions
diff --git a/target/linux/brcm63xx/patches-4.9/001-4.12-03-spi-bcm63xx-add-support-for-probing-through-devicetr.patch b/target/linux/brcm63xx/patches-4.9/001-4.12-03-spi-bcm63xx-add-support-for-probing-through-devicetr.patch
new file mode 100644
index 0000000000..97c596ae27
--- /dev/null
+++ b/target/linux/brcm63xx/patches-4.9/001-4.12-03-spi-bcm63xx-add-support-for-probing-through-devicetr.patch
@@ -0,0 +1,98 @@
+From 3353228a04a004ec67073871f40cf58dc4e209aa Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jonas.gorski@gmail.com>
+Date: Mon, 7 Sep 2015 21:01:38 +0200
+Subject: [PATCH 4/8] spi/bcm63xx: add support for probing through devicetree
+
+Add required binding support to probe through device tree.
+
+Use the compatible instead of the resource size for identifiying the
+block type, and allow reducing the number of cs lines through OF.
+
+Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
+---
+ drivers/spi/spi-bcm63xx.c | 42 ++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 36 insertions(+), 6 deletions(-)
+
+--- a/drivers/spi/spi-bcm63xx.c
++++ b/drivers/spi/spi-bcm63xx.c
+@@ -26,6 +26,7 @@
+ #include <linux/completion.h>
+ #include <linux/err.h>
+ #include <linux/pm_runtime.h>
++#include <linux/of.h>
+
+ /* BCM 6338/6348 SPI core */
+ #define SPI_6348_RSET_SIZE 64
+@@ -484,21 +485,48 @@ static const struct platform_device_id b
+ },
+ };
+
++static const struct of_device_id bcm63xx_spi_of_match[] = {
++ { .compatible = "brcm,bcm6348-spi", .data = &bcm6348_spi_reg_offsets },
++ { .compatible = "brcm,bcm6358-spi", .data = &bcm6358_spi_reg_offsets },
++ { },
++};
++
+ static int bcm63xx_spi_probe(struct platform_device *pdev)
+ {
+ struct resource *r;
+ const unsigned long *bcm63xx_spireg;
+ struct device *dev = &pdev->dev;
+- int irq;
++ int irq, bus_num;
+ struct spi_master *master;
+ struct clk *clk;
+ struct bcm63xx_spi *bs;
+ int ret;
++ u32 num_cs = BCM63XX_SPI_MAX_CS;
+
+- if (!pdev->id_entry->driver_data)
+- return -EINVAL;
++ if (dev->of_node) {
++ const struct of_device_id *match;
+
+- bcm63xx_spireg = (const unsigned long *)pdev->id_entry->driver_data;
++ match = of_match_node(bcm63xx_spi_of_match, dev->of_node);
++ if (!match)
++ return -EINVAL;
++ bcm63xx_spireg = match->data;
++
++ of_property_read_u32(dev->of_node, "num-cs", &num_cs);
++ if (num_cs > BCM63XX_SPI_MAX_CS) {
++ dev_warn(dev, "unsupported number of cs (%i), reducing to 8\n",
++ num_cs);
++ num_cs = BCM63XX_SPI_MAX_CS;
++ }
++
++ bus_num = -1;
++ } else if (pdev->id_entry->driver_data) {
++ const struct platform_device_id *match = pdev->id_entry;
++
++ bcm63xx_spireg = (const unsigned long *)match->driver_data;
++ bus_num = BCM63XX_SPI_BUS_NUM;
++ } else {
++ return -EINVAL;
++ }
+
+ irq = platform_get_irq(pdev, 0);
+ if (irq < 0) {
+@@ -543,8 +571,9 @@ static int bcm63xx_spi_probe(struct plat
+ goto out_err;
+ }
+
+- master->bus_num = BCM63XX_SPI_BUS_NUM;
+- master->num_chipselect = BCM63XX_SPI_MAX_CS;
++ master->dev.of_node = dev->of_node;
++ master->bus_num = bus_num;
++ master->num_chipselect = num_cs;
+ master->transfer_one_message = bcm63xx_spi_transfer_one;
+ master->mode_bits = MODEBITS;
+ master->bits_per_word_mask = SPI_BPW_MASK(8);
+@@ -633,6 +662,7 @@ static struct platform_driver bcm63xx_sp
+ .driver = {
+ .name = "bcm63xx-spi",
+ .pm = &bcm63xx_spi_pm_ops,
++ .of_match_table = bcm63xx_spi_of_match,
+ },
+ .id_table = bcm63xx_spi_dev_match,
+ .probe = bcm63xx_spi_probe,