|
@@ -44,7 +44,7 @@
|
|
|
|
|
|
static inline u32
|
|
|
bitbang_txrx_be_cpha0(struct spi_device *spi,
|
|
|
- unsigned nsecs, unsigned cpol,
|
|
|
+ unsigned nsecs, unsigned cpol, unsigned flags,
|
|
|
u32 word, u8 bits)
|
|
|
{
|
|
|
/* if (cpol == 0) this is SPI_MODE_0; else this is SPI_MODE_2 */
|
|
@@ -53,7 +53,8 @@ bitbang_txrx_be_cpha0(struct spi_device *spi,
|
|
|
for (word <<= (32 - bits); likely(bits); bits--) {
|
|
|
|
|
|
/* setup MSB (to slave) on trailing edge */
|
|
|
- setmosi(spi, word & (1 << 31));
|
|
|
+ if ((flags & SPI_MASTER_NO_TX) == 0)
|
|
|
+ setmosi(spi, word & (1 << 31));
|
|
|
spidelay(nsecs); /* T(setup) */
|
|
|
|
|
|
setsck(spi, !cpol);
|
|
@@ -61,7 +62,8 @@ bitbang_txrx_be_cpha0(struct spi_device *spi,
|
|
|
|
|
|
/* sample MSB (from slave) on leading edge */
|
|
|
word <<= 1;
|
|
|
- word |= getmiso(spi);
|
|
|
+ if ((flags & SPI_MASTER_NO_RX) == 0)
|
|
|
+ word |= getmiso(spi);
|
|
|
setsck(spi, cpol);
|
|
|
}
|
|
|
return word;
|
|
@@ -69,7 +71,7 @@ bitbang_txrx_be_cpha0(struct spi_device *spi,
|
|
|
|
|
|
static inline u32
|
|
|
bitbang_txrx_be_cpha1(struct spi_device *spi,
|
|
|
- unsigned nsecs, unsigned cpol,
|
|
|
+ unsigned nsecs, unsigned cpol, unsigned flags,
|
|
|
u32 word, u8 bits)
|
|
|
{
|
|
|
/* if (cpol == 0) this is SPI_MODE_1; else this is SPI_MODE_3 */
|
|
@@ -79,7 +81,8 @@ bitbang_txrx_be_cpha1(struct spi_device *spi,
|
|
|
|
|
|
/* setup MSB (to slave) on leading edge */
|
|
|
setsck(spi, !cpol);
|
|
|
- setmosi(spi, word & (1 << 31));
|
|
|
+ if ((flags & SPI_MASTER_NO_TX) == 0)
|
|
|
+ setmosi(spi, word & (1 << 31));
|
|
|
spidelay(nsecs); /* T(setup) */
|
|
|
|
|
|
setsck(spi, cpol);
|
|
@@ -87,7 +90,8 @@ bitbang_txrx_be_cpha1(struct spi_device *spi,
|
|
|
|
|
|
/* sample MSB (from slave) on trailing edge */
|
|
|
word <<= 1;
|
|
|
- word |= getmiso(spi);
|
|
|
+ if ((flags & SPI_MASTER_NO_RX) == 0)
|
|
|
+ word |= getmiso(spi);
|
|
|
}
|
|
|
return word;
|
|
|
}
|