mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	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];
 |