aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi-rspi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/spi/spi-rspi.c')
-rw-r--r--drivers/spi/spi-rspi.c48
1 files changed, 22 insertions, 26 deletions
diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c
index 556870dcdf79..3be8fbe80b08 100644
--- a/drivers/spi/spi-rspi.c
+++ b/drivers/spi/spi-rspi.c
@@ -271,7 +271,8 @@ static int rspi_set_config_register(struct rspi_data *rspi, int access_size)
271 /* Sets parity, interrupt mask */ 271 /* Sets parity, interrupt mask */
272 rspi_write8(rspi, 0x00, RSPI_SPCR2); 272 rspi_write8(rspi, 0x00, RSPI_SPCR2);
273 273
274 /* Sets SPCMD */ 274 /* Resets sequencer */
275 rspi_write8(rspi, 0, RSPI_SPSCR);
275 rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size); 276 rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size);
276 rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); 277 rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0);
277 278
@@ -315,7 +316,8 @@ static int rspi_rz_set_config_register(struct rspi_data *rspi, int access_size)
315 rspi_write8(rspi, 0x00, RSPI_SSLND); 316 rspi_write8(rspi, 0x00, RSPI_SSLND);
316 rspi_write8(rspi, 0x00, RSPI_SPND); 317 rspi_write8(rspi, 0x00, RSPI_SPND);
317 318
318 /* Sets SPCMD */ 319 /* Resets sequencer */
320 rspi_write8(rspi, 0, RSPI_SPSCR);
319 rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size); 321 rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size);
320 rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); 322 rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0);
321 323
@@ -366,7 +368,8 @@ static int qspi_set_config_register(struct rspi_data *rspi, int access_size)
366 /* Sets buffer to allow normal operation */ 368 /* Sets buffer to allow normal operation */
367 rspi_write8(rspi, 0x00, QSPI_SPBFCR); 369 rspi_write8(rspi, 0x00, QSPI_SPBFCR);
368 370
369 /* Sets SPCMD */ 371 /* Resets sequencer */
372 rspi_write8(rspi, 0, RSPI_SPSCR);
370 rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); 373 rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0);
371 374
372 /* Sets RSPI mode */ 375 /* Sets RSPI mode */
@@ -868,28 +871,6 @@ static int qspi_transfer_one(struct spi_controller *ctlr,
868 } 871 }
869} 872}
870 873
871static int rspi_setup(struct spi_device *spi)
872{
873 struct rspi_data *rspi = spi_controller_get_devdata(spi->controller);
874
875 rspi->max_speed_hz = spi->max_speed_hz;
876
877 rspi->spcmd = SPCMD_SSLKP;
878 if (spi->mode & SPI_CPOL)
879 rspi->spcmd |= SPCMD_CPOL;
880 if (spi->mode & SPI_CPHA)
881 rspi->spcmd |= SPCMD_CPHA;
882
883 /* CMOS output mode and MOSI signal from previous transfer */
884 rspi->sppcr = 0;
885 if (spi->mode & SPI_LOOP)
886 rspi->sppcr |= SPPCR_SPLP;
887
888 set_config_register(rspi, 8);
889
890 return 0;
891}
892
893static u16 qspi_transfer_mode(const struct spi_transfer *xfer) 874static u16 qspi_transfer_mode(const struct spi_transfer *xfer)
894{ 875{
895 if (xfer->tx_buf) 876 if (xfer->tx_buf)
@@ -959,8 +940,24 @@ static int rspi_prepare_message(struct spi_controller *ctlr,
959 struct spi_message *msg) 940 struct spi_message *msg)
960{ 941{
961 struct rspi_data *rspi = spi_controller_get_devdata(ctlr); 942 struct rspi_data *rspi = spi_controller_get_devdata(ctlr);
943 struct spi_device *spi = msg->spi;
962 int ret; 944 int ret;
963 945
946 rspi->max_speed_hz = spi->max_speed_hz;
947
948 rspi->spcmd = SPCMD_SSLKP;
949 if (spi->mode & SPI_CPOL)
950 rspi->spcmd |= SPCMD_CPOL;
951 if (spi->mode & SPI_CPHA)
952 rspi->spcmd |= SPCMD_CPHA;
953
954 /* CMOS output mode and MOSI signal from previous transfer */
955 rspi->sppcr = 0;
956 if (spi->mode & SPI_LOOP)
957 rspi->sppcr |= SPPCR_SPLP;
958
959 set_config_register(rspi, 8);
960
964 if (msg->spi->mode & 961 if (msg->spi->mode &
965 (SPI_TX_DUAL | SPI_TX_QUAD | SPI_RX_DUAL | SPI_RX_QUAD)) { 962 (SPI_TX_DUAL | SPI_TX_QUAD | SPI_RX_DUAL | SPI_RX_QUAD)) {
966 /* Setup sequencer for messages with multiple transfer modes */ 963 /* Setup sequencer for messages with multiple transfer modes */
@@ -1267,7 +1264,6 @@ static int rspi_probe(struct platform_device *pdev)
1267 init_waitqueue_head(&rspi->wait); 1264 init_waitqueue_head(&rspi->wait);
1268 1265
1269 ctlr->bus_num = pdev->id; 1266 ctlr->bus_num = pdev->id;
1270 ctlr->setup = rspi_setup;
1271 ctlr->auto_runtime_pm = true; 1267 ctlr->auto_runtime_pm = true;
1272 ctlr->transfer_one = ops->transfer_one; 1268 ctlr->transfer_one = ops->transfer_one;
1273 ctlr->prepare_message = rspi_prepare_message; 1269 ctlr->prepare_message = rspi_prepare_message;