omap2_mcspi.c : Use transaction speed if provided
PATCH 1/1 omap2_mcspi.c : Use transaction speed if provided
omap2_mcspi_transfer() gets called in omap2_mcspi_work() when the transaction speed_hz or bits_per_word fields are non-zero.
omap2_mcspi_transfer() does not look at the speed_hz field so the override speed value is ignored.
The code should probably change to one of these options.
1. Skip the call to omap2_mcsp_transfer() if the only reason was a non-zero speed_hz and it's not going to be used.
2. Use the new speed_hz value provided
The patch below uses the speed_hz value.
The OMAP2_MCSPI_MAX_CLK_DIV comes from a previous patch submission.
Signed-off-by Scott Ellis <[email protected]>
drivers/spi/omap2_mcspi.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-)
drivers/spi/omap2_mcspi.c +6 -2
@@ -587,6 +587,7 @@ static int omap2_mcspi_setup_transfer(struct spi_device *spi,struct spi_master *spi_cntrl;u32 l =0 , div =0 ;u8 word_len = spi->bits_per_word; +u32 speed_hz = spi->max_speed_hz; mcspi =spi_master_get_devdata (spi->master); spi_cntrl = mcspi->master;
@@ -596,9 +597,12 @@ static int omap2_mcspi_setup_transfer(struct spi_device *spi, cs->word_len = word_len; -if (spi->max_speed_hz) { +if (t !=NULL && t->speed_hz) + speed_hz = t->speed_hz; + +if (speed_hz) {while (div <=OMAP2_MCSPI_MAX_CLK_DIV && - (OMAP2_MCSPI_MAX_FREQ / (1 << div)) > spi->max_speed_hz) + (OMAP2_MCSPI_MAX_FREQ / (1 << div)) > speed_hz) div++; }else { div =OMAP2_MCSPI_MAX_CLK_DIV ;