aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);