Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a61f5345 authored by Chen Gong's avatar Chen Gong Committed by Linus Torvalds
Browse files

spi: spi_mpc83xx clockrate fixes



This updates the SPI clock rate calculations for the spi_mpc83xx driver.
Some boundary conditions were wrong, and in several cases divide-by-16
wasn't always needed

Signed-off-by: default avatarChen Gong <g.chen@freescale.com>
Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 708d8cef
Loading
Loading
Loading
Loading
+16 −13
Original line number Diff line number Diff line
@@ -266,21 +266,24 @@ 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) {
		pm = mpc83xx_spi->spibrg / (hz * 64) - 1;
		if (pm > 0x0f) {
	if ((mpc83xx_spi->spibrg / hz) > 64) {
		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 = 0x0f;
				pm = 16;
			}
		cs->hw_mode |= SPMODE_PM(pm) | SPMODE_DIV16;
	} else {
		}
	} else
		pm = mpc83xx_spi->spibrg / (hz * 4);
	if (pm)
		pm--;

	cs->hw_mode |= SPMODE_PM(pm);
	}
	regval =  mpc83xx_spi_read_reg(&mpc83xx_spi->base->mode);
	if (cs->hw_mode != regval) {
		unsigned long flags;