Commit bc645099 authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branch 'spi/topic/core' into spi-next

parents af211211 63ab645f
...@@ -1740,6 +1740,20 @@ EXPORT_SYMBOL_GPL(spi_busnum_to_master); ...@@ -1740,6 +1740,20 @@ EXPORT_SYMBOL_GPL(spi_busnum_to_master);
* other core methods are currently defined as inline functions. * other core methods are currently defined as inline functions.
*/ */
static int __spi_validate_bits_per_word(struct spi_master *master, u8 bits_per_word)
{
if (master->bits_per_word_mask) {
/* Only 32 bits fit in the mask */
if (bits_per_word > 32)
return -EINVAL;
if (!(master->bits_per_word_mask &
SPI_BPW_MASK(bits_per_word)))
return -EINVAL;
}
return 0;
}
/** /**
* spi_setup - setup SPI mode and clock rate * spi_setup - setup SPI mode and clock rate
* @spi: the device whose settings are being modified * @spi: the device whose settings are being modified
...@@ -1798,6 +1812,9 @@ int spi_setup(struct spi_device *spi) ...@@ -1798,6 +1812,9 @@ int spi_setup(struct spi_device *spi)
if (!spi->bits_per_word) if (!spi->bits_per_word)
spi->bits_per_word = 8; spi->bits_per_word = 8;
if (__spi_validate_bits_per_word(spi->master, spi->bits_per_word))
return -EINVAL;
if (!spi->max_speed_hz) if (!spi->max_speed_hz)
spi->max_speed_hz = spi->master->max_speed_hz; spi->max_speed_hz = spi->master->max_speed_hz;
...@@ -1860,19 +1877,15 @@ static int __spi_validate(struct spi_device *spi, struct spi_message *message) ...@@ -1860,19 +1877,15 @@ static int __spi_validate(struct spi_device *spi, struct spi_message *message)
if (!xfer->speed_hz) if (!xfer->speed_hz)
xfer->speed_hz = spi->max_speed_hz; xfer->speed_hz = spi->max_speed_hz;
if (!xfer->speed_hz)
xfer->speed_hz = master->max_speed_hz;
if (master->max_speed_hz && if (master->max_speed_hz &&
xfer->speed_hz > master->max_speed_hz) xfer->speed_hz > master->max_speed_hz)
xfer->speed_hz = master->max_speed_hz; xfer->speed_hz = master->max_speed_hz;
if (master->bits_per_word_mask) { if (__spi_validate_bits_per_word(master, xfer->bits_per_word))
/* Only 32 bits fit in the mask */ return -EINVAL;
if (xfer->bits_per_word > 32)
return -EINVAL;
if (!(master->bits_per_word_mask &
BIT(xfer->bits_per_word - 1)))
return -EINVAL;
}
/* /*
* SPI transfer length should be multiple of SPI word size * SPI transfer length should be multiple of SPI word size
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment