Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

spi_mpc83xx: in "QE mode", use sysclk/2

For MPC8349E input to the SPI Baud Rate Generator is SYSCLK, but it's
SYSCLK/2 for MPC8323E (SPI in QE). Fix this, and remove confusion by
renaming the mpc83xx_spi->sysclk member as mpc83xx_spi->spibrg.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
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>

authored by

Anton Vorontsov and committed by
Linus Torvalds
e24a4d1e 8dfe9c21

+13 -8
+13 -8
drivers/spi/spi_mpc83xx.c
··· 86 86 87 87 unsigned nsecs; /* (clock cycle time)/2 */ 88 88 89 - u32 sysclk; 89 + u32 spibrg; /* SPIBRG input clock */ 90 90 u32 rx_shift; /* RX data reg shift when in qe mode */ 91 91 u32 tx_shift; /* TX data reg shift when in qe mode */ 92 92 ··· 169 169 170 170 regval |= SPMODE_LEN(len); 171 171 172 - if ((mpc83xx_spi->sysclk / spi->max_speed_hz) >= 64) { 173 - u8 pm = mpc83xx_spi->sysclk / (spi->max_speed_hz * 64); 172 + if ((mpc83xx_spi->spibrg / spi->max_speed_hz) >= 64) { 173 + u8 pm = mpc83xx_spi->spibrg / (spi->max_speed_hz * 64); 174 174 if (pm > 0x0f) { 175 - printk(KERN_WARNING "MPC83xx SPI: SPICLK can't be less then a SYSCLK/1024!\n" 176 - "Requested SPICLK is %d Hz. Will use %d Hz instead.\n", 177 - spi->max_speed_hz, mpc83xx_spi->sysclk / 1024); 175 + dev_err(&spi->dev, "Requested speed is too " 176 + "low: %d Hz. Will use %d Hz instead.\n", 177 + spi->max_speed_hz, 178 + mpc83xx_spi->spibrg / 1024); 178 179 pm = 0x0f; 179 180 } 180 181 regval |= SPMODE_PM(pm) | SPMODE_DIV16; 181 182 } else { 182 - u8 pm = mpc83xx_spi->sysclk / (spi->max_speed_hz * 4); 183 + u8 pm = mpc83xx_spi->spibrg / (spi->max_speed_hz * 4); 183 184 regval |= SPMODE_PM(pm); 184 185 } 185 186 ··· 430 429 mpc83xx_spi->bitbang.chipselect = mpc83xx_spi_chipselect; 431 430 mpc83xx_spi->bitbang.setup_transfer = mpc83xx_spi_setup_transfer; 432 431 mpc83xx_spi->bitbang.txrx_bufs = mpc83xx_spi_bufs; 433 - mpc83xx_spi->sysclk = pdata->sysclk; 434 432 mpc83xx_spi->activate_cs = pdata->activate_cs; 435 433 mpc83xx_spi->deactivate_cs = pdata->deactivate_cs; 436 434 mpc83xx_spi->qe_mode = pdata->qe_mode; 437 435 mpc83xx_spi->get_rx = mpc83xx_spi_rx_buf_u8; 438 436 mpc83xx_spi->get_tx = mpc83xx_spi_tx_buf_u8; 437 + 438 + if (mpc83xx_spi->qe_mode) 439 + mpc83xx_spi->spibrg = pdata->sysclk / 2; 440 + else 441 + mpc83xx_spi->spibrg = pdata->sysclk; 439 442 440 443 mpc83xx_spi->rx_shift = 0; 441 444 mpc83xx_spi->tx_shift = 0;