diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/spi/spi-gpio.c | 24 | 
1 files changed, 15 insertions, 9 deletions
| diff --git a/drivers/spi/spi-gpio.c b/drivers/spi/spi-gpio.c index f0492c99d145..4b600d4f8548 100644 --- a/drivers/spi/spi-gpio.c +++ b/drivers/spi/spi-gpio.c @@ -48,7 +48,7 @@ struct spi_gpio {  	struct spi_bitbang		bitbang;  	struct spi_gpio_platform_data	pdata;  	struct platform_device		*pdev; -	int				cs_gpios[0]; +	unsigned long			cs_gpios[0];  };  /*----------------------------------------------------------------------*/ @@ -220,7 +220,7 @@ static u32 spi_gpio_spec_txrx_word_mode3(struct spi_device *spi,  static void spi_gpio_chipselect(struct spi_device *spi, int is_active)  {  	struct spi_gpio *spi_gpio = spi_to_spi_gpio(spi); -	unsigned int cs = spi_gpio->cs_gpios[spi->chip_select]; +	unsigned long cs = spi_gpio->cs_gpios[spi->chip_select];  	/* set initial clock polarity */  	if (is_active) @@ -234,7 +234,7 @@ static void spi_gpio_chipselect(struct spi_device *spi, int is_active)  static int spi_gpio_setup(struct spi_device *spi)  { -	unsigned int		cs; +	unsigned long		cs;  	int			status = 0;  	struct spi_gpio		*spi_gpio = spi_to_spi_gpio(spi);  	struct device_node	*np = spi->master->dev.of_node; @@ -249,7 +249,7 @@ static int spi_gpio_setup(struct spi_device *spi)  		/*  		 * ... otherwise, take it from spi->controller_data  		 */ -		cs = (unsigned int)(uintptr_t) spi->controller_data; +		cs = (uintptr_t) spi->controller_data;  	}  	if (!spi->controller_state) { @@ -277,7 +277,7 @@ static int spi_gpio_setup(struct spi_device *spi)  static void spi_gpio_cleanup(struct spi_device *spi)  {  	struct spi_gpio *spi_gpio = spi_to_spi_gpio(spi); -	unsigned int cs = spi_gpio->cs_gpios[spi->chip_select]; +	unsigned long cs = spi_gpio->cs_gpios[spi->chip_select];  	if (cs != SPI_GPIO_NO_CHIPSELECT)  		gpio_free(cs); @@ -437,7 +437,7 @@ static int spi_gpio_probe(struct platform_device *pdev)  		return status;  	master = spi_alloc_master(&pdev->dev, sizeof(*spi_gpio) + -					(sizeof(int) * num_devices)); +					(sizeof(unsigned long) * num_devices));  	if (!master) {  		status = -ENOMEM;  		goto gpio_free; @@ -470,9 +470,15 @@ static int spi_gpio_probe(struct platform_device *pdev)  		if (!SPI_N_CHIPSEL)  			spi_gpio->cs_gpios[0] = SPI_GPIO_NO_CHIPSELECT;  		else -			for (i = 0; i < SPI_N_CHIPSEL; i++) -				spi_gpio->cs_gpios[i] = -					of_get_named_gpio(np, "cs-gpios", i); +			for (i = 0; i < SPI_N_CHIPSEL; i++) { +				status = of_get_named_gpio(np, "cs-gpios", i); +				if (status < 0) { +					dev_err(&pdev->dev, +						"invalid cs-gpios property\n"); +					goto gpio_free; +				} +				spi_gpio->cs_gpios[i] = status; +			}  	}  #endif | 
