spi: pxa2xx: Move SSP idle waiting to cs_deassert()
Move SSP idle waiting before CS deassert from error and end of message handling function giveback() to cs_deassert(). This ensures idle waiting is done also if there is CS change between transfers. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
7928b2cbe5
commit
104e51af79
|
@ -415,10 +415,17 @@ static void cs_deassert(struct driver_data *drv_data)
|
|||
{
|
||||
struct chip_data *chip =
|
||||
spi_get_ctldata(drv_data->master->cur_msg->spi);
|
||||
unsigned long timeout;
|
||||
|
||||
if (drv_data->ssp_type == CE4100_SSP)
|
||||
return;
|
||||
|
||||
/* Wait until SSP becomes idle before deasserting the CS */
|
||||
timeout = jiffies + msecs_to_jiffies(10);
|
||||
while (pxa2xx_spi_read(drv_data, SSSR) & SSSR_BSY &&
|
||||
!time_after(jiffies, timeout))
|
||||
cpu_relax();
|
||||
|
||||
if (chip->cs_control) {
|
||||
chip->cs_control(PXA2XX_CS_DEASSERT);
|
||||
return;
|
||||
|
@ -563,7 +570,6 @@ static void giveback(struct driver_data *drv_data)
|
|||
{
|
||||
struct spi_transfer* last_transfer;
|
||||
struct spi_message *msg;
|
||||
unsigned long timeout;
|
||||
|
||||
msg = drv_data->master->cur_msg;
|
||||
drv_data->cur_transfer = NULL;
|
||||
|
@ -575,12 +581,6 @@ static void giveback(struct driver_data *drv_data)
|
|||
if (last_transfer->delay_usecs)
|
||||
udelay(last_transfer->delay_usecs);
|
||||
|
||||
/* Wait until SSP becomes idle before deasserting the CS */
|
||||
timeout = jiffies + msecs_to_jiffies(10);
|
||||
while (pxa2xx_spi_read(drv_data, SSSR) & SSSR_BSY &&
|
||||
!time_after(jiffies, timeout))
|
||||
cpu_relax();
|
||||
|
||||
/* Drop chip select UNLESS cs_change is true or we are returning
|
||||
* a message with an error, or next message is for another chip
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue