Skip to content

Commit 60ccb35

Browse files
avolmat-stbroonie
authored andcommitted
spi: stm32: always perform registers configuration prior to transfer
SPI registers content may have been lost upon suspend/resume sequence. So, always compute and apply the necessary configuration in stm32_spi_transfer_one_setup routine. Signed-off-by: Alain Volmat <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent db96bf9 commit 60ccb35

File tree

1 file changed

+17
-25
lines changed

1 file changed

+17
-25
lines changed

drivers/spi/spi-stm32.c

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1597,41 +1597,33 @@ static int stm32_spi_transfer_one_setup(struct stm32_spi *spi,
15971597
unsigned long flags;
15981598
unsigned int comm_type;
15991599
int nb_words, ret = 0;
1600+
int mbr;
16001601

16011602
spin_lock_irqsave(&spi->lock, flags);
16021603

16031604
spi->cur_xferlen = transfer->len;
16041605

1605-
if (spi->cur_bpw != transfer->bits_per_word) {
1606-
spi->cur_bpw = transfer->bits_per_word;
1607-
spi->cfg->set_bpw(spi);
1608-
}
1609-
1610-
if (spi->cur_speed != transfer->speed_hz) {
1611-
int mbr;
1612-
1613-
/* Update spi->cur_speed with real clock speed */
1614-
mbr = stm32_spi_prepare_mbr(spi, transfer->speed_hz,
1615-
spi->cfg->baud_rate_div_min,
1616-
spi->cfg->baud_rate_div_max);
1617-
if (mbr < 0) {
1618-
ret = mbr;
1619-
goto out;
1620-
}
1606+
spi->cur_bpw = transfer->bits_per_word;
1607+
spi->cfg->set_bpw(spi);
16211608

1622-
transfer->speed_hz = spi->cur_speed;
1623-
stm32_spi_set_mbr(spi, mbr);
1609+
/* Update spi->cur_speed with real clock speed */
1610+
mbr = stm32_spi_prepare_mbr(spi, transfer->speed_hz,
1611+
spi->cfg->baud_rate_div_min,
1612+
spi->cfg->baud_rate_div_max);
1613+
if (mbr < 0) {
1614+
ret = mbr;
1615+
goto out;
16241616
}
16251617

1626-
comm_type = stm32_spi_communication_type(spi_dev, transfer);
1627-
if (spi->cur_comm != comm_type) {
1628-
ret = spi->cfg->set_mode(spi, comm_type);
1618+
transfer->speed_hz = spi->cur_speed;
1619+
stm32_spi_set_mbr(spi, mbr);
16291620

1630-
if (ret < 0)
1631-
goto out;
1621+
comm_type = stm32_spi_communication_type(spi_dev, transfer);
1622+
ret = spi->cfg->set_mode(spi, comm_type);
1623+
if (ret < 0)
1624+
goto out;
16321625

1633-
spi->cur_comm = comm_type;
1634-
}
1626+
spi->cur_comm = comm_type;
16351627

16361628
if (spi->cfg->set_data_idleness)
16371629
spi->cfg->set_data_idleness(spi, transfer->len);

0 commit comments

Comments
 (0)