|
@@ -927,6 +927,7 @@ static void omap2_mcspi_work(struct omap2_mcspi *mcspi, struct spi_message *m)
|
|
|
|
|
|
struct spi_device *spi;
|
|
|
struct spi_transfer *t = NULL;
|
|
|
+ struct spi_master *master;
|
|
|
int cs_active = 0;
|
|
|
struct omap2_mcspi_cs *cs;
|
|
|
struct omap2_mcspi_device_config *cd;
|
|
@@ -935,6 +936,7 @@ static void omap2_mcspi_work(struct omap2_mcspi *mcspi, struct spi_message *m)
|
|
|
u32 chconf;
|
|
|
|
|
|
spi = m->spi;
|
|
|
+ master = spi->master;
|
|
|
cs = spi->controller_state;
|
|
|
cd = spi->controller_data;
|
|
|
|
|
@@ -952,6 +954,14 @@ static void omap2_mcspi_work(struct omap2_mcspi *mcspi, struct spi_message *m)
|
|
|
if (!t->speed_hz && !t->bits_per_word)
|
|
|
par_override = 0;
|
|
|
}
|
|
|
+ if (cd && cd->cs_per_word) {
|
|
|
+ chconf = mcspi->ctx.modulctrl;
|
|
|
+ chconf &= ~OMAP2_MCSPI_MODULCTRL_SINGLE;
|
|
|
+ mcspi_write_reg(master, OMAP2_MCSPI_MODULCTRL, chconf);
|
|
|
+ mcspi->ctx.modulctrl =
|
|
|
+ mcspi_read_cs_reg(spi, OMAP2_MCSPI_MODULCTRL);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
if (!cs_active) {
|
|
|
omap2_mcspi_force_cs(spi, 1);
|
|
@@ -1013,6 +1023,14 @@ static void omap2_mcspi_work(struct omap2_mcspi *mcspi, struct spi_message *m)
|
|
|
if (cs_active)
|
|
|
omap2_mcspi_force_cs(spi, 0);
|
|
|
|
|
|
+ if (cd && cd->cs_per_word) {
|
|
|
+ chconf = mcspi->ctx.modulctrl;
|
|
|
+ chconf |= OMAP2_MCSPI_MODULCTRL_SINGLE;
|
|
|
+ mcspi_write_reg(master, OMAP2_MCSPI_MODULCTRL, chconf);
|
|
|
+ mcspi->ctx.modulctrl =
|
|
|
+ mcspi_read_cs_reg(spi, OMAP2_MCSPI_MODULCTRL);
|
|
|
+ }
|
|
|
+
|
|
|
omap2_mcspi_set_enable(spi, 0);
|
|
|
|
|
|
m->status = status;
|