Message ID | 1397497193-28067-1-git-send-email-geert@linux-m68k.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 83596fbeb5d28e8cb8878786133945d4dc7c0090 |
Headers | show |
On Mon, Apr 14, 2014 at 07:39:53PM +0200, Geert Uytterhoeven wrote: > From: Geert Uytterhoeven <geert+renesas@glider.be> > > The availability of SPI Dual or Quad Transfer Mode as indicated by the > "spi-tx-bus-width" and "spi-rx-bus-width" properties in the device tree is > a hardware property of the SPI master, SPI slave, and board wiring. Hence > the SPI core should not reject an SPI slave because an SPI master driver > doesn't (yet) support Dual or Quad Transfer Mode. Applied, thanks.
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 4eb9bf02996c..1534fa1dac34 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -1756,7 +1756,7 @@ EXPORT_SYMBOL_GPL(spi_busnum_to_master); */ int spi_setup(struct spi_device *spi) { - unsigned bad_bits; + unsigned bad_bits, ugly_bits; int status = 0; /* check mode to prevent that DUAL and QUAD set at the same time @@ -1776,6 +1776,15 @@ int spi_setup(struct spi_device *spi) * that aren't supported with their current master */ bad_bits = spi->mode & ~spi->master->mode_bits; + ugly_bits = bad_bits & + (SPI_TX_DUAL | SPI_TX_QUAD | SPI_RX_DUAL | SPI_RX_QUAD); + if (ugly_bits) { + dev_warn(&spi->dev, + "setup: ignoring unsupported mode bits %x\n", + ugly_bits); + spi->mode &= ~ugly_bits; + bad_bits &= ~ugly_bits; + } if (bad_bits) { dev_err(&spi->dev, "setup: unsupported mode bits %x\n", bad_bits);