|
@@ -295,14 +295,24 @@ static int rspi_set_config_register(struct rspi_data *rspi, int access_size)
|
|
static int rspi_rz_set_config_register(struct rspi_data *rspi, int access_size)
|
|
static int rspi_rz_set_config_register(struct rspi_data *rspi, int access_size)
|
|
{
|
|
{
|
|
int spbr;
|
|
int spbr;
|
|
|
|
+ int div = 0;
|
|
|
|
+ unsigned long clksrc;
|
|
|
|
|
|
/* Sets output mode, MOSI signal, and (optionally) loopback */
|
|
/* Sets output mode, MOSI signal, and (optionally) loopback */
|
|
rspi_write8(rspi, rspi->sppcr, RSPI_SPPCR);
|
|
rspi_write8(rspi, rspi->sppcr, RSPI_SPPCR);
|
|
|
|
|
|
|
|
+ clksrc = clk_get_rate(rspi->clk);
|
|
|
|
+ while (div < 3) {
|
|
|
|
+ if (rspi->max_speed_hz >= clksrc/4) /* 4=(CLK/2)/2 */
|
|
|
|
+ break;
|
|
|
|
+ div++;
|
|
|
|
+ clksrc /= 2;
|
|
|
|
+ }
|
|
|
|
+
|
|
/* Sets transfer bit rate */
|
|
/* Sets transfer bit rate */
|
|
- spbr = DIV_ROUND_UP(clk_get_rate(rspi->clk),
|
|
|
|
- 2 * rspi->max_speed_hz) - 1;
|
|
|
|
|
|
+ spbr = DIV_ROUND_UP(clksrc, 2 * rspi->max_speed_hz) - 1;
|
|
rspi_write8(rspi, clamp(spbr, 0, 255), RSPI_SPBR);
|
|
rspi_write8(rspi, clamp(spbr, 0, 255), RSPI_SPBR);
|
|
|
|
+ rspi->spcmd |= div << 2;
|
|
|
|
|
|
/* Disable dummy transmission, set byte access */
|
|
/* Disable dummy transmission, set byte access */
|
|
rspi_write8(rspi, SPDCR_SPLBYTE, RSPI_SPDCR);
|
|
rspi_write8(rspi, SPDCR_SPLBYTE, RSPI_SPDCR);
|