aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Brandt <chris.brandt@renesas.com>2016-08-05 09:36:03 -0400
committerMark Brown <broonie@kernel.org>2016-08-08 06:56:46 -0400
commitaeb8f8cb1537450e99f7d8f1a1d84d55b0fc6b26 (patch)
tree064b5eb030780ba3eed459949fcceeeb490f32b5
parent29b4817d4018df78086157ea3a55c1d9424a7cfc (diff)
spi: rspi: Increase accuracy of bit rate for RZ
When you leave the clock divider at 0, 130kHz is the lowest you can go. Also, by adjusting the clock divider you can get more accurate resolutions for clock speeds lower than 16MHz. This patch uses the clock divider as part of the bit rate setup. Signed-off-by: Chris Brandt <chris.brandt@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--drivers/spi/spi-rspi.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c
index 818843336932..a816f07e168e 100644
--- a/drivers/spi/spi-rspi.c
+++ b/drivers/spi/spi-rspi.c
@@ -295,14 +295,24 @@ static int rspi_set_config_register(struct rspi_data *rspi, int access_size)
295static int rspi_rz_set_config_register(struct rspi_data *rspi, int access_size) 295static int rspi_rz_set_config_register(struct rspi_data *rspi, int access_size)
296{ 296{
297 int spbr; 297 int spbr;
298 int div = 0;
299 unsigned long clksrc;
298 300
299 /* Sets output mode, MOSI signal, and (optionally) loopback */ 301 /* Sets output mode, MOSI signal, and (optionally) loopback */
300 rspi_write8(rspi, rspi->sppcr, RSPI_SPPCR); 302 rspi_write8(rspi, rspi->sppcr, RSPI_SPPCR);
301 303
304 clksrc = clk_get_rate(rspi->clk);
305 while (div < 3) {
306 if (rspi->max_speed_hz >= clksrc/4) /* 4=(CLK/2)/2 */
307 break;
308 div++;
309 clksrc /= 2;
310 }
311
302 /* Sets transfer bit rate */ 312 /* Sets transfer bit rate */
303 spbr = DIV_ROUND_UP(clk_get_rate(rspi->clk), 313 spbr = DIV_ROUND_UP(clksrc, 2 * rspi->max_speed_hz) - 1;
304 2 * rspi->max_speed_hz) - 1;
305 rspi_write8(rspi, clamp(spbr, 0, 255), RSPI_SPBR); 314 rspi_write8(rspi, clamp(spbr, 0, 255), RSPI_SPBR);
315 rspi->spcmd |= div << 2;
306 316
307 /* Disable dummy transmission, set byte access */ 317 /* Disable dummy transmission, set byte access */
308 rspi_write8(rspi, SPDCR_SPLBYTE, RSPI_SPDCR); 318 rspi_write8(rspi, SPDCR_SPLBYTE, RSPI_SPDCR);