diff options
Diffstat (limited to 'drivers/spi/spi-fsl-espi.c')
| -rw-r--r-- | drivers/spi/spi-fsl-espi.c | 19 | 
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c index f20326714b9d..e60581283a24 100644 --- a/drivers/spi/spi-fsl-espi.c +++ b/drivers/spi/spi-fsl-espi.c @@ -427,8 +427,7 @@ static int fsl_espi_trans(struct spi_message *m, struct spi_transfer *trans)  	ret = fsl_espi_bufs(spi, trans); -	if (trans->delay_usecs) -		udelay(trans->delay_usecs); +	spi_transfer_delay_exec(trans);  	return ret;  } @@ -437,6 +436,7 @@ static int fsl_espi_do_one_msg(struct spi_master *master,  			       struct spi_message *m)  {  	unsigned int delay_usecs = 0, rx_nbits = 0; +	unsigned int delay_nsecs = 0, delay_nsecs1 = 0;  	struct spi_transfer *t, trans = {};  	int ret; @@ -445,8 +445,16 @@ static int fsl_espi_do_one_msg(struct spi_master *master,  		goto out;  	list_for_each_entry(t, &m->transfers, transfer_list) { -		if (t->delay_usecs > delay_usecs) -			delay_usecs = t->delay_usecs; +		if (t->delay_usecs) { +			if (t->delay_usecs > delay_usecs) { +				delay_usecs = t->delay_usecs; +				delay_nsecs = delay_usecs * 1000; +			} +		} else { +			delay_nsecs1 = spi_delay_to_ns(&t->delay, t); +			if (delay_nsecs1 > delay_nsecs) +				delay_nsecs = delay_nsecs1; +		}  		if (t->rx_nbits > rx_nbits)  			rx_nbits = t->rx_nbits;  	} @@ -457,7 +465,8 @@ static int fsl_espi_do_one_msg(struct spi_master *master,  	trans.len = m->frame_length;  	trans.speed_hz = t->speed_hz;  	trans.bits_per_word = t->bits_per_word; -	trans.delay_usecs = delay_usecs; +	trans.delay.value = delay_nsecs; +	trans.delay.unit = SPI_DELAY_UNIT_NSECS;  	trans.rx_nbits = rx_nbits;  	if (trans.len)  |