diff options
-rw-r--r-- | arch/arm/plat-omap/include/plat/mcspi.h | 2 | ||||
-rw-r--r-- | drivers/spi/omap2_mcspi.c | 10 |
2 files changed, 10 insertions, 2 deletions
diff --git a/arch/arm/plat-omap/include/plat/mcspi.h b/arch/arm/plat-omap/include/plat/mcspi.h index 3d51b18..091caa1 100644 --- a/arch/arm/plat-omap/include/plat/mcspi.h +++ b/arch/arm/plat-omap/include/plat/mcspi.h @@ -21,6 +21,8 @@ struct omap2_mcspi_device_config { /* Do we want one channel enabled at the same time? */ unsigned single_channel:1; + /* Swap data lines */ + unsigned swap_datalines; }; #endif diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c index 969cdd2..d54389c 100644 --- a/drivers/spi/omap2_mcspi.c +++ b/drivers/spi/omap2_mcspi.c @@ -650,6 +650,7 @@ static int omap2_mcspi_setup_transfer(struct spi_device *spi, struct spi_transfer *t) { struct omap2_mcspi_cs *cs = spi->controller_state; + struct omap2_mcspi_device_config *cd = spi->controller_data; struct omap2_mcspi *mcspi; struct spi_master *spi_cntrl; u32 l = 0, div = 0; @@ -675,8 +676,13 @@ static int omap2_mcspi_setup_transfer(struct spi_device *spi, /* standard 4-wire master mode: SCK, MOSI/out, MISO/in, nCS * REVISIT: this controller could support SPI_3WIRE mode. */ - l &= ~(OMAP2_MCSPI_CHCONF_IS|OMAP2_MCSPI_CHCONF_DPE1); - l |= OMAP2_MCSPI_CHCONF_DPE0; + if (cd->swap_datalines) { + l &= ~OMAP2_MCSPI_CHCONF_DPE0; + l |= OMAP2_MCSPI_CHCONF_IS | OMAP2_MCSPI_CHCONF_DPE1; + } else { + l &= ~(OMAP2_MCSPI_CHCONF_IS | OMAP2_MCSPI_CHCONF_DPE1); + l |= OMAP2_MCSPI_CHCONF_DPE0; + } /* wordlength */ l &= ~OMAP2_MCSPI_CHCONF_WL_MASK; |