Skip to content

Commit 13b1030

Browse files
LeChuck42broonie
authored andcommitted
spi: dw: fix multiple slaves with different baudrates
Add current master clock to dws struct and compare it against the requestedtransfer speed. Update clock divider only if necessary. Signed-off-by: Matthias Seidel <[email protected]> Signed-off-by: Mark Brown <[email protected]>
1 parent 29b4817 commit 13b1030

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

drivers/spi/spi-dw.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,6 @@ static int dw_spi_transfer_one(struct spi_master *master,
283283
struct chip_data *chip = spi_get_ctldata(spi);
284284
u8 imask = 0;
285285
u16 txlevel = 0;
286-
u16 clk_div;
287286
u32 cr0;
288287
int ret;
289288

@@ -298,13 +297,13 @@ static int dw_spi_transfer_one(struct spi_master *master,
298297
spi_enable_chip(dws, 0);
299298

300299
/* Handle per transfer options for bpw and speed */
301-
if (transfer->speed_hz != chip->speed_hz) {
302-
/* clk_div doesn't support odd number */
303-
clk_div = (dws->max_freq / transfer->speed_hz + 1) & 0xfffe;
304-
305-
chip->speed_hz = transfer->speed_hz;
306-
chip->clk_div = clk_div;
307-
300+
if (transfer->speed_hz != dws->current_freq) {
301+
if (transfer->speed_hz != chip->speed_hz) {
302+
/* clk_div doesn't support odd number */
303+
chip->clk_div = (dws->max_freq / transfer->speed_hz + 1) & 0xfffe;
304+
chip->speed_hz = transfer->speed_hz;
305+
}
306+
dws->current_freq = transfer->speed_hz;
308307
spi_set_clk(dws, chip->clk_div);
309308
}
310309
if (transfer->bits_per_word == 8) {

drivers/spi/spi-dw.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ struct dw_spi {
123123
u8 n_bytes; /* current is a 1/2 bytes op */
124124
u32 dma_width;
125125
irqreturn_t (*transfer_handler)(struct dw_spi *dws);
126+
u32 current_freq; /* frequency in hz */
126127

127128
/* DMA info */
128129
int dma_inited;

0 commit comments

Comments
 (0)