spi: omap2-mcspi: Convert to use GPIO descriptors
The OMAP2 MCSPI has some kind of half-baked GPIO CS support: it includes code like this: if (gpio_is_valid(spi->cs_gpio)) { ret = gpio_request(spi->cs_gpio, dev_name(&spi->dev)); (...) But it doesn't parse the "cs-gpios" attribute in the device tree to count the number of GPIOs or pick out the GPIO numbers and put these in the SPI master's .cs_gpios property. We complete the implementation of supporting CS GPIOs from the device tree and switch it over to use the SPI core for this. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Tony Lindgren <tony@atomide.com> Link: https://lore.kernel.org/r/20200625231257.280615-1-linus.walleij@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
638d8488ae
commit
f27b1dc641
|
@ -27,7 +27,6 @@
|
||||||
#include <linux/iopoll.h>
|
#include <linux/iopoll.h>
|
||||||
|
|
||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
|
|
||||||
#include <linux/platform_data/spi-omap2-mcspi.h>
|
#include <linux/platform_data/spi-omap2-mcspi.h>
|
||||||
|
|
||||||
|
@ -1043,16 +1042,6 @@ static int omap2_mcspi_setup(struct spi_device *spi)
|
||||||
spi->controller_state = cs;
|
spi->controller_state = cs;
|
||||||
/* Link this to context save list */
|
/* Link this to context save list */
|
||||||
list_add_tail(&cs->node, &ctx->cs);
|
list_add_tail(&cs->node, &ctx->cs);
|
||||||
|
|
||||||
if (gpio_is_valid(spi->cs_gpio)) {
|
|
||||||
ret = gpio_request(spi->cs_gpio, dev_name(&spi->dev));
|
|
||||||
if (ret) {
|
|
||||||
dev_err(&spi->dev, "failed to request gpio\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
gpio_direction_output(spi->cs_gpio,
|
|
||||||
!(spi->mode & SPI_CS_HIGH));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = pm_runtime_get_sync(mcspi->dev);
|
ret = pm_runtime_get_sync(mcspi->dev);
|
||||||
|
@ -1080,9 +1069,6 @@ static void omap2_mcspi_cleanup(struct spi_device *spi)
|
||||||
|
|
||||||
kfree(cs);
|
kfree(cs);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gpio_is_valid(spi->cs_gpio))
|
|
||||||
gpio_free(spi->cs_gpio);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static irqreturn_t omap2_mcspi_irq_handler(int irq, void *data)
|
static irqreturn_t omap2_mcspi_irq_handler(int irq, void *data)
|
||||||
|
@ -1152,7 +1138,7 @@ static int omap2_mcspi_transfer_one(struct spi_master *master,
|
||||||
|
|
||||||
omap2_mcspi_set_enable(spi, 0);
|
omap2_mcspi_set_enable(spi, 0);
|
||||||
|
|
||||||
if (gpio_is_valid(spi->cs_gpio))
|
if (spi->cs_gpiod)
|
||||||
omap2_mcspi_set_cs(spi, spi->mode & SPI_CS_HIGH);
|
omap2_mcspi_set_cs(spi, spi->mode & SPI_CS_HIGH);
|
||||||
|
|
||||||
if (par_override ||
|
if (par_override ||
|
||||||
|
@ -1241,7 +1227,7 @@ out:
|
||||||
|
|
||||||
omap2_mcspi_set_enable(spi, 0);
|
omap2_mcspi_set_enable(spi, 0);
|
||||||
|
|
||||||
if (gpio_is_valid(spi->cs_gpio))
|
if (spi->cs_gpiod)
|
||||||
omap2_mcspi_set_cs(spi, !(spi->mode & SPI_CS_HIGH));
|
omap2_mcspi_set_cs(spi, !(spi->mode & SPI_CS_HIGH));
|
||||||
|
|
||||||
if (mcspi->fifo_depth > 0 && t)
|
if (mcspi->fifo_depth > 0 && t)
|
||||||
|
@ -1431,6 +1417,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
|
||||||
master->dev.of_node = node;
|
master->dev.of_node = node;
|
||||||
master->max_speed_hz = OMAP2_MCSPI_MAX_FREQ;
|
master->max_speed_hz = OMAP2_MCSPI_MAX_FREQ;
|
||||||
master->min_speed_hz = OMAP2_MCSPI_MAX_FREQ >> 15;
|
master->min_speed_hz = OMAP2_MCSPI_MAX_FREQ >> 15;
|
||||||
|
master->use_gpio_descriptors = true;
|
||||||
|
|
||||||
platform_set_drvdata(pdev, master);
|
platform_set_drvdata(pdev, master);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue