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 <alain.volmat@st.com> Link: https://lore.kernel.org/r/1597043558-29668-6-git-send-email-alain.volmat@st.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
db96bf976a
commit
60ccb3515f
|
@ -1597,41 +1597,33 @@ static int stm32_spi_transfer_one_setup(struct stm32_spi *spi,
|
|||
unsigned long flags;
|
||||
unsigned int comm_type;
|
||||
int nb_words, ret = 0;
|
||||
int mbr;
|
||||
|
||||
spin_lock_irqsave(&spi->lock, flags);
|
||||
|
||||
spi->cur_xferlen = transfer->len;
|
||||
|
||||
if (spi->cur_bpw != transfer->bits_per_word) {
|
||||
spi->cur_bpw = transfer->bits_per_word;
|
||||
spi->cfg->set_bpw(spi);
|
||||
spi->cur_bpw = transfer->bits_per_word;
|
||||
spi->cfg->set_bpw(spi);
|
||||
|
||||
/* Update spi->cur_speed with real clock speed */
|
||||
mbr = stm32_spi_prepare_mbr(spi, transfer->speed_hz,
|
||||
spi->cfg->baud_rate_div_min,
|
||||
spi->cfg->baud_rate_div_max);
|
||||
if (mbr < 0) {
|
||||
ret = mbr;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (spi->cur_speed != transfer->speed_hz) {
|
||||
int mbr;
|
||||
|
||||
/* Update spi->cur_speed with real clock speed */
|
||||
mbr = stm32_spi_prepare_mbr(spi, transfer->speed_hz,
|
||||
spi->cfg->baud_rate_div_min,
|
||||
spi->cfg->baud_rate_div_max);
|
||||
if (mbr < 0) {
|
||||
ret = mbr;
|
||||
goto out;
|
||||
}
|
||||
|
||||
transfer->speed_hz = spi->cur_speed;
|
||||
stm32_spi_set_mbr(spi, mbr);
|
||||
}
|
||||
transfer->speed_hz = spi->cur_speed;
|
||||
stm32_spi_set_mbr(spi, mbr);
|
||||
|
||||
comm_type = stm32_spi_communication_type(spi_dev, transfer);
|
||||
if (spi->cur_comm != comm_type) {
|
||||
ret = spi->cfg->set_mode(spi, comm_type);
|
||||
ret = spi->cfg->set_mode(spi, comm_type);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
spi->cur_comm = comm_type;
|
||||
}
|
||||
spi->cur_comm = comm_type;
|
||||
|
||||
if (spi->cfg->set_data_idleness)
|
||||
spi->cfg->set_data_idleness(spi, transfer->len);
|
||||
|
|
Loading…
Reference in New Issue