gemini: switch to 4.14
[oweals/openwrt.git] / target / linux / ramips / patches-4.14 / 0043-spi-add-mt7621-support.patch
index bc5418bab2ea814dada0ef48e59047120a4fa046..c615601e55e03ce015b2637f0fb4c9692351d1f7 100644 (file)
@@ -38,7 +38,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  obj-$(CONFIG_SPI_OC_TINY)             += spi-oc-tiny.o
 --- /dev/null
 +++ b/drivers/spi/spi-mt7621.c
-@@ -0,0 +1,483 @@
+@@ -0,0 +1,488 @@
 +/*
 + * spi-mt7621.c -- MediaTek MT7621 SPI controller driver
 + *
@@ -106,7 +106,6 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +      unsigned int            sys_freq;
 +      unsigned int            speed;
 +      struct clk              *clk;
-+      spinlock_t              lock;
 +
 +      struct mt7621_spi_ops   *ops;
 +};
@@ -243,10 +242,12 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +              if (t->speed_hz < speed)
 +                      speed = t->speed_hz;
 +
-+              if (WARN_ON(len + t->len > 36)) {
-+                      status = -EIO;
-+                      goto msg_done;
-+              }
++              /*
++               * m25p80 might attempt to write more data than we can handle.
++               * truncate the message to what we can fit into the registers
++               */
++              if (len + t->len > 36)
++                      t->len = 36 - len;
 +
 +              for (i = 0; i < t->len; i++, len++)
 +                      data[len / 4] |= buf[i] << (8 * (len & 3));
@@ -426,12 +427,16 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +};
 +MODULE_DEVICE_TABLE(of, mt7621_spi_match);
 +
++static size_t mt7621_max_transfer_size(struct spi_device *spi)
++{
++      return 32;
++}
++
 +static int mt7621_spi_probe(struct platform_device *pdev)
 +{
 +      const struct of_device_id *match;
 +      struct spi_master *master;
 +      struct mt7621_spi *rs;
-+      unsigned long flags;
 +      void __iomem *base;
 +      struct resource *r;
 +      int status = 0;
@@ -472,6 +477,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +      master->bits_per_word_mask = SPI_BPW_MASK(8);
 +      master->dev.of_node = pdev->dev.of_node;
 +      master->num_chipselect = 2;
++      master->max_transfer_size = mt7621_max_transfer_size;
 +
 +      dev_set_drvdata(&pdev->dev, master);
 +
@@ -482,7 +488,6 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +      rs->sys_freq = clk_get_rate(rs->clk);
 +      rs->ops = ops;
 +      dev_info(&pdev->dev, "sys_freq: %u\n", rs->sys_freq);
-+      spin_lock_irqsave(&rs->lock, flags);
 +
 +      device_reset(&pdev->dev);
 +