mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	Tested on bcm2710 (Raspberry Pi 3B). Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From dc1e3fefce7abd7532fbc74e26df61a8ced1dcd6 Mon Sep 17 00:00:00 2001
 | |
| From: Phil Elwell <phil@raspberrypi.org>
 | |
| Date: Tue, 15 Jan 2019 12:41:15 +0000
 | |
| Subject: [PATCH] spi: spi-bcm2835: Disable forced software CS
 | |
| 
 | |
| With GPIO CS used by the DTBs, allow hardware CS to be selected by an
 | |
| overlay.
 | |
| 
 | |
| Signed-off-by: Phil Elwell <phil@raspberrypi.org>
 | |
| ---
 | |
|  drivers/spi/spi-bcm2835.c | 37 -------------------------------------
 | |
|  1 file changed, 37 deletions(-)
 | |
| 
 | |
| --- a/drivers/spi/spi-bcm2835.c
 | |
| +++ b/drivers/spi/spi-bcm2835.c
 | |
| @@ -1279,43 +1279,6 @@ static int bcm2835_spi_setup(struct spi_
 | |
|  		return -EINVAL;
 | |
|  	}
 | |
|  
 | |
| -	/*
 | |
| -	 * Translate native CS to GPIO
 | |
| -	 *
 | |
| -	 * FIXME: poking around in the gpiolib internals like this is
 | |
| -	 * not very good practice. Find a way to locate the real problem
 | |
| -	 * and fix it. Why is the GPIO descriptor in spi->cs_gpiod
 | |
| -	 * sometimes not assigned correctly? Erroneous device trees?
 | |
| -	 */
 | |
| -
 | |
| -	/* get the gpio chip for the base */
 | |
| -	chip = gpiochip_find("pinctrl-bcm2835", chip_match_name);
 | |
| -	if (!chip)
 | |
| -		return 0;
 | |
| -
 | |
| -	/*
 | |
| -	 * Retrieve the corresponding GPIO line used for CS.
 | |
| -	 * The inversion semantics will be handled by the GPIO core
 | |
| -	 * code, so we pass GPIOS_OUT_LOW for "unasserted" and
 | |
| -	 * the correct flag for inversion semantics. The SPI_CS_HIGH
 | |
| -	 * on spi->mode cannot be checked for polarity in this case
 | |
| -	 * as the flag use_gpio_descriptors enforces SPI_CS_HIGH.
 | |
| -	 */
 | |
| -	if (of_property_read_bool(spi->dev.of_node, "spi-cs-high"))
 | |
| -		lflags = GPIO_ACTIVE_HIGH;
 | |
| -	else
 | |
| -		lflags = GPIO_ACTIVE_LOW;
 | |
| -	spi->cs_gpiod = gpiochip_request_own_desc(chip, 8 - spi->chip_select,
 | |
| -						  DRV_NAME,
 | |
| -						  lflags,
 | |
| -						  GPIOD_OUT_LOW);
 | |
| -	if (IS_ERR(spi->cs_gpiod))
 | |
| -		return PTR_ERR(spi->cs_gpiod);
 | |
| -
 | |
| -	/* and set up the "mode" and level */
 | |
| -	dev_info(&spi->dev, "setting up native-CS%i to use GPIO\n",
 | |
| -		 spi->chip_select);
 | |
| -
 | |
|  	return 0;
 | |
|  }
 | |
|  
 |