|
23 | 23 | #define SYS_FREQ_DEFAULT (62500000) |
24 | 24 |
|
25 | 25 | #define PCI1XXXX_SPI_MAX_CLOCK_HZ (30000000) |
| 26 | +#define PCI1XXXX_SPI_CLK_25MHZ (25000000) |
26 | 27 | #define PCI1XXXX_SPI_CLK_20MHZ (20000000) |
27 | 28 | #define PCI1XXXX_SPI_CLK_15MHZ (15000000) |
28 | 29 | #define PCI1XXXX_SPI_CLK_12MHZ (12000000) |
@@ -318,12 +319,14 @@ static void pci1xxxx_spi_set_cs(struct spi_device *spi, bool enable) |
318 | 319 | writel(regval, par->reg_base + SPI_MST_CTL_REG_OFFSET(p->hw_inst)); |
319 | 320 | } |
320 | 321 |
|
321 | | -static u8 pci1xxxx_get_clock_div(u32 hz) |
| 322 | +static u8 pci1xxxx_get_clock_div(struct pci1xxxx_spi *par, u32 hz) |
322 | 323 | { |
323 | 324 | u8 val = 0; |
324 | 325 |
|
325 | 326 | if (hz >= PCI1XXXX_SPI_MAX_CLOCK_HZ) |
326 | 327 | val = 2; |
| 328 | + else if (par->dev_rev >= 0xC0 && hz >= PCI1XXXX_SPI_CLK_25MHZ) |
| 329 | + val = 1; |
327 | 330 | else if ((hz < PCI1XXXX_SPI_MAX_CLOCK_HZ) && (hz >= PCI1XXXX_SPI_CLK_20MHZ)) |
328 | 331 | val = 3; |
329 | 332 | else if ((hz < PCI1XXXX_SPI_CLK_20MHZ) && (hz >= PCI1XXXX_SPI_CLK_15MHZ)) |
@@ -423,7 +426,7 @@ static int pci1xxxx_spi_transfer_with_io(struct spi_controller *spi_ctlr, |
423 | 426 |
|
424 | 427 | p->spi_xfer_in_progress = true; |
425 | 428 | p->bytes_recvd = 0; |
426 | | - clkdiv = pci1xxxx_get_clock_div(xfer->speed_hz); |
| 429 | + clkdiv = pci1xxxx_get_clock_div(par, xfer->speed_hz); |
427 | 430 | tx_buf = xfer->tx_buf; |
428 | 431 | rx_buf = xfer->rx_buf; |
429 | 432 | transfer_len = xfer->len; |
@@ -492,7 +495,7 @@ static int pci1xxxx_spi_transfer_with_dma(struct spi_controller *spi_ctlr, |
492 | 495 | } |
493 | 496 | p->xfer = xfer; |
494 | 497 | p->mode = spi->mode; |
495 | | - p->clkdiv = pci1xxxx_get_clock_div(xfer->speed_hz); |
| 498 | + p->clkdiv = pci1xxxx_get_clock_div(par, xfer->speed_hz); |
496 | 499 | p->bytes_recvd = 0; |
497 | 500 | p->rx_buf = xfer->rx_buf; |
498 | 501 | regval = readl(par->reg_base + SPI_MST_EVENT_REG_OFFSET(p->hw_inst)); |
|
0 commit comments