diff options
author | Axel Lin <axel.lin@ingics.com> | 2014-03-16 22:08:12 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-03-17 11:46:25 -0400 |
commit | a6f87fad7b5132f026592729ccf65b995cdec35d (patch) | |
tree | 24bb5827e380833ab8066b0ac9ed8fa57a8cda19 /drivers/spi/spi.c | |
parent | 6ea312936d68b557766dafa9a3c4617e14ffa076 (diff) |
spi: core: Use master->max_speed_hz as transfer speed when xfer->speed_hz > master->max_speed_hz
When xfer->speed_hz is greater than master->max_speed_hz, it's generally safe
to use master->max_speed_hz as transfer speed.
Thus use master->max_speed_hz as transfer speed rather than return error when
xfer->speed_hz > master->max_speed_hz.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'drivers/spi/spi.c')
-rw-r--r-- | drivers/spi/spi.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 9d1405440223..38e1c315bb13 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c | |||
@@ -1653,12 +1653,13 @@ static int __spi_validate(struct spi_device *spi, struct spi_message *message) | |||
1653 | message->frame_length += xfer->len; | 1653 | message->frame_length += xfer->len; |
1654 | if (!xfer->bits_per_word) | 1654 | if (!xfer->bits_per_word) |
1655 | xfer->bits_per_word = spi->bits_per_word; | 1655 | xfer->bits_per_word = spi->bits_per_word; |
1656 | if (!xfer->speed_hz) { | 1656 | |
1657 | if (!xfer->speed_hz) | ||
1657 | xfer->speed_hz = spi->max_speed_hz; | 1658 | xfer->speed_hz = spi->max_speed_hz; |
1658 | if (master->max_speed_hz && | 1659 | |
1659 | xfer->speed_hz > master->max_speed_hz) | 1660 | if (master->max_speed_hz && |
1660 | xfer->speed_hz = master->max_speed_hz; | 1661 | xfer->speed_hz > master->max_speed_hz) |
1661 | } | 1662 | xfer->speed_hz = master->max_speed_hz; |
1662 | 1663 | ||
1663 | if (master->bits_per_word_mask) { | 1664 | if (master->bits_per_word_mask) { |
1664 | /* Only 32 bits fit in the mask */ | 1665 | /* Only 32 bits fit in the mask */ |
@@ -1687,9 +1688,6 @@ static int __spi_validate(struct spi_device *spi, struct spi_message *message) | |||
1687 | if (xfer->speed_hz && master->min_speed_hz && | 1688 | if (xfer->speed_hz && master->min_speed_hz && |
1688 | xfer->speed_hz < master->min_speed_hz) | 1689 | xfer->speed_hz < master->min_speed_hz) |
1689 | return -EINVAL; | 1690 | return -EINVAL; |
1690 | if (xfer->speed_hz && master->max_speed_hz && | ||
1691 | xfer->speed_hz > master->max_speed_hz) | ||
1692 | return -EINVAL; | ||
1693 | 1691 | ||
1694 | if (xfer->tx_buf && !xfer->tx_nbits) | 1692 | if (xfer->tx_buf && !xfer->tx_nbits) |
1695 | xfer->tx_nbits = SPI_NBITS_SINGLE; | 1693 | xfer->tx_nbits = SPI_NBITS_SINGLE; |