diff options
Diffstat (limited to 'drivers/spi/pxa2xx_spi.c')
| -rw-r--r-- | drivers/spi/pxa2xx_spi.c | 13 | 
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/spi/pxa2xx_spi.c b/drivers/spi/pxa2xx_spi.c index c76feea5fe2..885194a0741 100644 --- a/drivers/spi/pxa2xx_spi.c +++ b/drivers/spi/pxa2xx_spi.c @@ -213,7 +213,7 @@ static int flush(struct driver_data *drv_data)  		while (read_SSSR(reg) & SSSR_RNE) {  			read_SSDR(reg);  		} -	} while ((read_SSSR(reg) & SSSR_BSY) && limit--); +	} while ((read_SSSR(reg) & SSSR_BSY) && --limit);  	write_SSSR(SSSR_ROR, reg);  	return limit; @@ -484,7 +484,7 @@ static int wait_ssp_rx_stall(void const __iomem *ioaddr)  {  	unsigned long limit = loops_per_jiffy << 1; -	while ((read_SSSR(ioaddr) & SSSR_BSY) && limit--) +	while ((read_SSSR(ioaddr) & SSSR_BSY) && --limit)  		cpu_relax();  	return limit; @@ -494,7 +494,7 @@ static int wait_dma_channel_stop(int channel)  {  	unsigned long limit = loops_per_jiffy << 1; -	while (!(DCSR(channel) & DCSR_STOPSTATE) && limit--) +	while (!(DCSR(channel) & DCSR_STOPSTATE) && --limit)  		cpu_relax();  	return limit; @@ -1700,6 +1700,13 @@ static int pxa2xx_spi_resume(struct platform_device *pdev)  	struct ssp_device *ssp = drv_data->ssp;  	int status = 0; +	if (drv_data->rx_channel != -1) +		DRCMR(drv_data->ssp->drcmr_rx) = +			DRCMR_MAPVLD | drv_data->rx_channel; +	if (drv_data->tx_channel != -1) +		DRCMR(drv_data->ssp->drcmr_tx) = +			DRCMR_MAPVLD | drv_data->tx_channel; +  	/* Enable the SSP clock */  	clk_enable(ssp->clk);  |