Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32df9ff2 authored by Robert Baldyga's avatar Robert Baldyga Committed by Mark Brown
Browse files

spi: imx: set spi_bus_clk for mx21 and mx27



Introduce additional output parameter in spi_imx_clkdiv_1()
function to return result frequency and set it to spi_bus_clk.

This fixes division by zero bug, which occurred in
spi_imx_calculate_timeout() function.

Signed-off-by: default avatarRobert Baldyga <r.baldyga@hackerion.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 2dd33f9c
Loading
Loading
Loading
Loading
+9 −5
Original line number Original line Diff line number Diff line
@@ -173,15 +173,16 @@ static int mxc_clkdivs[] = {0, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192,


/* MX21, MX27 */
/* MX21, MX27 */
static unsigned int spi_imx_clkdiv_1(unsigned int fin,
static unsigned int spi_imx_clkdiv_1(unsigned int fin,
		unsigned int fspi, unsigned int max)
		unsigned int fspi, unsigned int max, unsigned int *fres)
{
{
	int i;
	int i;


	for (i = 2; i < max; i++)
	for (i = 2; i < max; i++)
		if (fspi * mxc_clkdivs[i] >= fin)
		if (fspi * mxc_clkdivs[i] >= fin)
			return i;
			break;


	return max;
	*fres = fin / mxc_clkdivs[i];
	return i;
}
}


/* MX1, MX31, MX35, MX51 CSPI */
/* MX1, MX31, MX35, MX51 CSPI */
@@ -589,9 +590,12 @@ static int mx21_config(struct spi_device *spi, struct spi_imx_config *config)
	struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
	struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
	unsigned int reg = MX21_CSPICTRL_ENABLE | MX21_CSPICTRL_MASTER;
	unsigned int reg = MX21_CSPICTRL_ENABLE | MX21_CSPICTRL_MASTER;
	unsigned int max = is_imx27_cspi(spi_imx) ? 16 : 18;
	unsigned int max = is_imx27_cspi(spi_imx) ? 16 : 18;
	unsigned int clk;

	reg |= spi_imx_clkdiv_1(spi_imx->spi_clk, config->speed_hz, max, &clk)
		<< MX21_CSPICTRL_DR_SHIFT;
	spi_imx->spi_bus_clk = clk;


	reg |= spi_imx_clkdiv_1(spi_imx->spi_clk, config->speed_hz, max) <<
		MX21_CSPICTRL_DR_SHIFT;
	reg |= config->bpw - 1;
	reg |= config->bpw - 1;


	if (spi->mode & SPI_CPHA)
	if (spi->mode & SPI_CPHA)