mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 18:47:06 +00:00
2a2b16210b
Backport upstream solution for working around SPI controller maximum message sizes. Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
43 lines
1.6 KiB
Diff
43 lines
1.6 KiB
Diff
From 3fcc36962c32ad0af2d5904103e2b2b824b6b1aa Mon Sep 17 00:00:00 2001
|
|
From: Jonas Gorski <jonas.gorski@gmail.com>
|
|
Date: Sat, 4 Feb 2017 12:32:59 +0100
|
|
Subject: [PATCH 2/8] spi/bcm63xx: make spi subsystem aware of message size
|
|
limits
|
|
|
|
The bcm63xx LS SPI controller does not allow manual control of the CS
|
|
lines and will toggle it automatically before after sending data, so we
|
|
are limited to messages that fit in the FIFO buffer. Since the CS lines
|
|
aren't available as GPIOs either, we will need to make slave drivers
|
|
aware of this limitation and handle it accordingly.
|
|
|
|
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
|
---
|
|
drivers/spi/spi-bcm63xx.c | 9 +++++++++
|
|
1 file changed, 9 insertions(+)
|
|
|
|
--- a/drivers/spi/spi-bcm63xx.c
|
|
+++ b/drivers/spi/spi-bcm63xx.c
|
|
@@ -429,6 +429,13 @@ static irqreturn_t bcm63xx_spi_interrupt
|
|
return IRQ_HANDLED;
|
|
}
|
|
|
|
+static size_t bcm63xx_spi_max_length(struct spi_device *spi)
|
|
+{
|
|
+ struct bcm63xx_spi *bs = spi_master_get_devdata(spi->master);
|
|
+
|
|
+ return bs->fifo_size;
|
|
+}
|
|
+
|
|
static const unsigned long bcm6348_spi_reg_offsets[] = {
|
|
[SPI_CMD] = SPI_6348_CMD,
|
|
[SPI_INT_STATUS] = SPI_6348_INT_STATUS,
|
|
@@ -542,6 +549,8 @@ static int bcm63xx_spi_probe(struct plat
|
|
master->transfer_one_message = bcm63xx_spi_transfer_one;
|
|
master->mode_bits = MODEBITS;
|
|
master->bits_per_word_mask = SPI_BPW_MASK(8);
|
|
+ master->max_transfer_size = bcm63xx_spi_max_length;
|
|
+ master->max_message_size = bcm63xx_spi_max_length;
|
|
master->auto_runtime_pm = true;
|
|
bs->msg_type_shift = bs->reg_offsets[SPI_MSG_TYPE_SHIFT];
|
|
bs->msg_ctl_width = bs->reg_offsets[SPI_MSG_CTL_WIDTH];
|