spi->chip_select < pdata->num_chipselect &&
pdata->chip_sel[spi->chip_select] != SPI_INTERN_CS) {
spi->cs_gpio = pdata->chip_sel[spi->chip_select];
--- retval = gpio_request_one(spi->cs_gpio,
--- flags, dev_name(&spi->dev));
+++ retval = gpio_direction_output(
+++ spi->cs_gpio, !(spi->mode & SPI_CS_HIGH));
internal_cs = false;
}
---- }
---- if (retval) {
---- dev_err(&spi->dev, "GPIO %d setup failed (%d)\n",
---- spi->cs_gpio, retval);
---- return retval;
---- }
++++ if (retval) {
++++ dev_err(&spi->dev, "GPIO %d setup failed (%d)\n",
++++ spi->cs_gpio, retval);
++++ return retval;
++++ }
---- if (internal_cs)
---- set_io_bits(dspi->base + SPIPC0, 1 << spi->chip_select);
++++ if (internal_cs)
++++ set_io_bits(dspi->base + SPIPC0, 1 << spi->chip_select);
++++ }
if (spi->mode & SPI_READY)
set_io_bits(dspi->base + SPIPC0, SPIPC0_SPIENA_MASK);
else
clear_io_bits(dspi->base + SPIGCR1, SPIGCR1_LOOPBACK_MASK);
- --- return retval;
+ +++ return davinci_spi_of_setup(spi);
+ }
+
+ static void davinci_spi_cleanup(struct spi_device *spi)
+ {
--- if (spi->cs_gpio >= 0)
--- gpio_free(spi->cs_gpio);
+ +++ struct davinci_spi_config *spicfg = spi->controller_data;
+ +++
+ +++ spi->controller_data = NULL;
+ +++ if (spi->dev.of_node)
+ +++ kfree(spicfg);
}
static int davinci_spi_check_error(struct davinci_spi *dspi, int int_status)