Commit d5f78f50 authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branch 'spi/for-5.14' into spi-linus

parents e22ce8eb ea4ab99c
...@@ -444,7 +444,7 @@ static int mcfqspi_remove(struct platform_device *pdev) ...@@ -444,7 +444,7 @@ static int mcfqspi_remove(struct platform_device *pdev)
mcfqspi_wr_qmr(mcfqspi, MCFQSPI_QMR_MSTR); mcfqspi_wr_qmr(mcfqspi, MCFQSPI_QMR_MSTR);
mcfqspi_cs_teardown(mcfqspi); mcfqspi_cs_teardown(mcfqspi);
clk_disable(mcfqspi->clk); clk_disable_unprepare(mcfqspi->clk);
return 0; return 0;
} }
......
...@@ -213,12 +213,6 @@ static void davinci_spi_chipselect(struct spi_device *spi, int value) ...@@ -213,12 +213,6 @@ static void davinci_spi_chipselect(struct spi_device *spi, int value)
* line for the controller * line for the controller
*/ */
if (spi->cs_gpiod) { if (spi->cs_gpiod) {
/*
* FIXME: is this code ever executed? This host does not
* set SPI_MASTER_GPIO_SS so this chipselect callback should
* not get called from the SPI core when we are using
* GPIOs for chip select.
*/
if (value == BITBANG_CS_ACTIVE) if (value == BITBANG_CS_ACTIVE)
gpiod_set_value(spi->cs_gpiod, 1); gpiod_set_value(spi->cs_gpiod, 1);
else else
...@@ -945,7 +939,7 @@ static int davinci_spi_probe(struct platform_device *pdev) ...@@ -945,7 +939,7 @@ static int davinci_spi_probe(struct platform_device *pdev)
master->bus_num = pdev->id; master->bus_num = pdev->id;
master->num_chipselect = pdata->num_chipselect; master->num_chipselect = pdata->num_chipselect;
master->bits_per_word_mask = SPI_BPW_RANGE_MASK(2, 16); master->bits_per_word_mask = SPI_BPW_RANGE_MASK(2, 16);
master->flags = SPI_MASTER_MUST_RX; master->flags = SPI_MASTER_MUST_RX | SPI_MASTER_GPIO_SS;
master->setup = davinci_spi_setup; master->setup = davinci_spi_setup;
master->cleanup = davinci_spi_cleanup; master->cleanup = davinci_spi_cleanup;
master->can_dma = davinci_spi_can_dma; master->can_dma = davinci_spi_can_dma;
......
...@@ -328,8 +328,16 @@ orion_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t) ...@@ -328,8 +328,16 @@ orion_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)
static void orion_spi_set_cs(struct spi_device *spi, bool enable) static void orion_spi_set_cs(struct spi_device *spi, bool enable)
{ {
struct orion_spi *orion_spi; struct orion_spi *orion_spi;
void __iomem *ctrl_reg;
u32 val;
orion_spi = spi_master_get_devdata(spi->master); orion_spi = spi_master_get_devdata(spi->master);
ctrl_reg = spi_reg(orion_spi, ORION_SPI_IF_CTRL_REG);
val = readl(ctrl_reg);
/* Clear existing chip-select and assertion state */
val &= ~(ORION_SPI_CS_MASK | 0x1);
/* /*
* If this line is using a GPIO to control chip select, this internal * If this line is using a GPIO to control chip select, this internal
...@@ -338,9 +346,7 @@ static void orion_spi_set_cs(struct spi_device *spi, bool enable) ...@@ -338,9 +346,7 @@ static void orion_spi_set_cs(struct spi_device *spi, bool enable)
* as it is handled by a GPIO, but that doesn't matter. What we need * as it is handled by a GPIO, but that doesn't matter. What we need
* is to deassert the old chip select and assert some other chip select. * is to deassert the old chip select and assert some other chip select.
*/ */
orion_spi_clrbits(orion_spi, ORION_SPI_IF_CTRL_REG, ORION_SPI_CS_MASK); val |= ORION_SPI_CS(spi->chip_select);
orion_spi_setbits(orion_spi, ORION_SPI_IF_CTRL_REG,
ORION_SPI_CS(spi->chip_select));
/* /*
* Chip select logic is inverted from spi_set_cs(). For lines using a * Chip select logic is inverted from spi_set_cs(). For lines using a
...@@ -350,9 +356,13 @@ static void orion_spi_set_cs(struct spi_device *spi, bool enable) ...@@ -350,9 +356,13 @@ static void orion_spi_set_cs(struct spi_device *spi, bool enable)
* doesn't matter. * doesn't matter.
*/ */
if (!enable) if (!enable)
orion_spi_setbits(orion_spi, ORION_SPI_IF_CTRL_REG, 0x1); val |= 0x1;
else
orion_spi_clrbits(orion_spi, ORION_SPI_IF_CTRL_REG, 0x1); /*
* To avoid toggling unwanted chip selects update the register
* with a single write.
*/
writel(val, ctrl_reg);
} }
static inline int orion_spi_wait_till_ready(struct orion_spi *orion_spi) static inline int orion_spi_wait_till_ready(struct orion_spi *orion_spi)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment