diff options
Diffstat (limited to 'drivers/spi/spi.c')
| -rw-r--r-- | drivers/spi/spi.c | 11 | 
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 51d7c004fbab..720ab34784c1 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -1108,6 +1108,7 @@ static int spi_transfer_wait(struct spi_controller *ctlr,  {  	struct spi_statistics *statm = &ctlr->statistics;  	struct spi_statistics *stats = &msg->spi->statistics; +	u32 speed_hz = xfer->speed_hz;  	unsigned long long ms;  	if (spi_controller_is_slave(ctlr)) { @@ -1116,8 +1117,11 @@ static int spi_transfer_wait(struct spi_controller *ctlr,  			return -EINTR;  		}  	} else { +		if (!speed_hz) +			speed_hz = 100000; +  		ms = 8LL * 1000LL * xfer->len; -		do_div(ms, xfer->speed_hz); +		do_div(ms, speed_hz);  		ms += ms + 200; /* some tolerance */  		if (ms > UINT_MAX) @@ -3378,8 +3382,9 @@ int spi_setup(struct spi_device *spi)  	if (status)  		return status; -	if (!spi->max_speed_hz || -	    spi->max_speed_hz > spi->controller->max_speed_hz) +	if (spi->controller->max_speed_hz && +	    (!spi->max_speed_hz || +	     spi->max_speed_hz > spi->controller->max_speed_hz))  		spi->max_speed_hz = spi->controller->max_speed_hz;  	mutex_lock(&spi->controller->io_mutex);  | 
