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 <scott@xxxxxxxxxxxxxx> drivers/spi/omap2_mcspi.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c index a73127b..a622560 100644 --- a/drivers/spi/omap2_mcspi.c +++ b/drivers/spi/omap2_mcspi.c @@ -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; -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html