Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

spi: spi-fsl-lpspi: Some calculation improvements

Merge series from Stefan Wahren <wahrenst@gmx.net>:

This series contains some improvements for spi-fsl-lpspi which are
related to the calculations within fsl_lpspi_set_bitrate.

+11 -4
+11 -4
drivers/spi/spi-fsl-lpspi.c
··· 92 92 u8 prescale; 93 93 u16 mode; 94 94 u32 speed_hz; 95 + u32 effective_speed_hz; 95 96 }; 96 97 97 98 struct fsl_lpspi_data { ··· 316 315 static int fsl_lpspi_set_bitrate(struct fsl_lpspi_data *fsl_lpspi) 317 316 { 318 317 struct lpspi_config config = fsl_lpspi->config; 319 - unsigned int perclk_rate, scldiv, div; 318 + unsigned int perclk_rate, div; 320 319 u8 prescale_max; 321 320 u8 prescale; 321 + int scldiv; 322 322 323 323 perclk_rate = clk_get_rate(fsl_lpspi->clk_per); 324 324 prescale_max = fsl_lpspi->devtype_data->prescale_max; ··· 340 338 341 339 for (prescale = 0; prescale <= prescale_max; prescale++) { 342 340 scldiv = div / (1 << prescale) - 2; 343 - if (scldiv < 256) { 341 + if (scldiv >= 0 && scldiv < 256) { 344 342 fsl_lpspi->config.prescale = prescale; 345 343 break; 346 344 } 347 345 } 348 346 349 - if (scldiv >= 256) 347 + if (scldiv < 0 || scldiv >= 256) 350 348 return -EINVAL; 351 349 352 350 writel(scldiv | (scldiv << 8) | ((scldiv >> 1) << 16), 353 351 fsl_lpspi->base + IMX7ULP_CCR); 354 352 355 - dev_dbg(fsl_lpspi->dev, "perclk=%d, speed=%d, prescale=%d, scldiv=%d\n", 353 + fsl_lpspi->config.effective_speed_hz = perclk_rate / (scldiv + 2) * 354 + (1 << prescale); 355 + 356 + dev_dbg(fsl_lpspi->dev, "perclk=%u, speed=%u, prescale=%u, scldiv=%d\n", 356 357 perclk_rate, config.speed_hz, prescale, scldiv); 357 358 358 359 return 0; ··· 753 748 ret = fsl_lpspi_setup_transfer(controller, spi, t); 754 749 if (ret < 0) 755 750 return ret; 751 + 752 + t->effective_speed_hz = fsl_lpspi->config.effective_speed_hz; 756 753 757 754 fsl_lpspi_set_cmd(fsl_lpspi); 758 755 fsl_lpspi->is_first_byte = false;