spi_mpc83xx: fix clockrate calculation for low speed
Commit a61f5345
(spi_mpc83xx clockrate fixes) broke clockrate calculation
for low speeds. SPMODE_DIV16 should be set if the divider is higher than
64, not only if the divider gets clipped to 1024.
Furthermore, the clipping check was off by a factor 16 as well.
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
d7a3e4959c
commit
53604dbe13
1 changed files with 5 additions and 8 deletions
|
@ -267,16 +267,13 @@ int mpc83xx_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)
|
|||
cs->hw_mode |= SPMODE_LEN(bits_per_word);
|
||||
|
||||
if ((mpc83xx_spi->spibrg / hz) > 64) {
|
||||
cs->hw_mode |= SPMODE_DIV16;
|
||||
pm = mpc83xx_spi->spibrg / (hz * 64);
|
||||
if (pm > 16) {
|
||||
cs->hw_mode |= SPMODE_DIV16;
|
||||
pm /= 16;
|
||||
if (pm > 16) {
|
||||
dev_err(&spi->dev, "Requested speed is too "
|
||||
"low: %d Hz. Will use %d Hz instead.\n",
|
||||
hz, mpc83xx_spi->spibrg / 1024);
|
||||
pm = 16;
|
||||
}
|
||||
dev_err(&spi->dev, "Requested speed is too "
|
||||
"low: %d Hz. Will use %d Hz instead.\n",
|
||||
hz, mpc83xx_spi->spibrg / 1024);
|
||||
pm = 16;
|
||||
}
|
||||
} else
|
||||
pm = mpc83xx_spi->spibrg / (hz * 4);
|
||||
|
|
Loading…
Reference in a new issue