On Mon, Apr 26, 2010 at 3:01 AM, <[email protected]> wrote: > From: Thomas Koeller <[email protected]> > > Computation of the clock prescaler value returned bogus results if > the requested SPI clock was impossible to set. It now sets either > the maximum or minimum clock frequency, as appropriate. > > Signed-off-by: Thomas Koeller <[email protected]> > --- > drivers/spi/davinci_spi.c | 12 +++++++++--- > 1 files changed, 9 insertions(+), 3 deletions(-) > > diff --git a/drivers/spi/davinci_spi.c b/drivers/spi/davinci_spi.c > index 956f617..02e1a76 100644 > --- a/drivers/spi/davinci_spi.c > +++ b/drivers/spi/davinci_spi.c > @@ -153,7 +153,7 @@ static int davinci_spi_setup_transfer(struct spi_device > *spi, > struct davinci_spi *davinci_spi; > struct davinci_spi_platform_data *pdata; > u8 bits_per_word = 0; > - u32 hz = 0, prescale; > + u32 hz = 0, prescale = 0, clkspeed; > > davinci_spi = spi_master_get_devdata(spi->master); > pdata = davinci_spi->pdata; > @@ -190,10 +190,16 @@ static int davinci_spi_setup_transfer(struct spi_device > *spi, > set_fmt_bits(davinci_spi->base, bits_per_word & 0x1f, > spi->chip_select); > > - prescale = ((clk_get_rate(davinci_spi->clk) / hz) - 1) & 0xff; > + clkspeed = clk_get_rate(davinci_spi->clk); > + if (hz > clkspeed / 2) > + prescale = 1 << 8; > + if (hz < clkspeed / 256) > + prescale = 255 << 8; > + if (!prescale) > + prescale = ((clkspeed / hz - 1) << 8) & 0x0000ff00;
Is be appropriate to WARN_ON() or WARN_ONCE() when the clamp condition occurs? Particularly the condition where the minimum clock speed is higher that the requested clock. I'd also consider an if / else if / else structure for readability and clarity. g. ------------------------------------------------------------------------------ _______________________________________________ spi-devel-general mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/spi-devel-general
