From 5f3e43dbce2517bb1c5d268816e9fdda68cc5478 Mon Sep 17 00:00:00 2001 From: Peter Ujfalusi Date: Fri, 26 May 2006 16:27:32 -0700 Subject: [PATCH] [PATCH] ARM: OMAP: omap2_mcspi: fix for channel configuration and CS Fix for channel reconfiguration case: once the EPOL, POL or PHA has been configured to 1, further configuration on the channel can't change it to 0. The first CS enable is not needed. The CS will be enabled right before the transfer anyway, if it's not active. Signed-off-by: Peter Ujfalusi Signed-off-by: Tony Lindgren --- drivers/spi/omap2_mcspi.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c index c98da7e8bc8..ceb86a80542 100644 --- a/drivers/spi/omap2_mcspi.c +++ b/drivers/spi/omap2_mcspi.c @@ -307,12 +307,18 @@ static int omap2_mcspi_setup_transfer(struct spi_device *spi, l |= (word_len - 1) << 7; if (!(spi->mode & SPI_CS_HIGH)) l |= OMAP2_MCSPI_CHCONF_EPOL; + else + l &= ~OMAP2_MCSPI_CHCONF_EPOL; l &= ~OMAP2_MCSPI_CHCONF_CLKD_MASK; l |= div << 2; if (spi->mode & SPI_CPOL) l |= OMAP2_MCSPI_CHCONF_POL; + else + l &= ~OMAP2_MCSPI_CHCONF_POL; if (spi->mode & SPI_CPHA) l |= OMAP2_MCSPI_CHCONF_PHA; + else + l &= ~OMAP2_MCSPI_CHCONF_PHA; mcspi_write_cs_reg(spi, OMAP2_MCSPI_CHCONF0, l); return 0; @@ -349,7 +355,7 @@ static void omap2_mcspi_work(unsigned long arg) struct spi_message *m; struct spi_device *spi; struct spi_transfer *t = NULL; - int cs_active; + int cs_active = 0; struct omap2_mcspi_device_config *conf; struct omap2_mcspi_cs *cs; int par_override = 0; @@ -365,9 +371,6 @@ static void omap2_mcspi_work(unsigned long arg) conf = (struct omap2_mcspi_device_config *) spi->controller_data; cs = (struct omap2_mcspi_cs *) spi->controller_state; - omap2_mcspi_force_cs(spi, 1); - cs_active = 1; - list_for_each_entry(t, &m->transfers, transfer_list) { if (t->tx_buf == NULL && t->rx_buf == NULL && t->len) { status = -EINVAL; -- 2.41.0