diff options
Diffstat (limited to 'drivers/spi/pxa2xx_spi.c')
-rw-r--r-- | drivers/spi/pxa2xx_spi.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/spi/pxa2xx_spi.c b/drivers/spi/pxa2xx_spi.c index c1688c71f052..3f3c08c6ba4e 100644 --- a/drivers/spi/pxa2xx_spi.c +++ b/drivers/spi/pxa2xx_spi.c | |||
@@ -195,7 +195,7 @@ static void cs_deassert(struct driver_data *drv_data) | |||
195 | struct chip_data *chip = drv_data->cur_chip; | 195 | struct chip_data *chip = drv_data->cur_chip; |
196 | 196 | ||
197 | if (chip->cs_control) { | 197 | if (chip->cs_control) { |
198 | chip->cs_control(PXA2XX_CS_ASSERT); | 198 | chip->cs_control(PXA2XX_CS_DEASSERT); |
199 | return; | 199 | return; |
200 | } | 200 | } |
201 | 201 | ||
@@ -213,7 +213,7 @@ static int flush(struct driver_data *drv_data) | |||
213 | while (read_SSSR(reg) & SSSR_RNE) { | 213 | while (read_SSSR(reg) & SSSR_RNE) { |
214 | read_SSDR(reg); | 214 | read_SSDR(reg); |
215 | } | 215 | } |
216 | } while ((read_SSSR(reg) & SSSR_BSY) && limit--); | 216 | } while ((read_SSSR(reg) & SSSR_BSY) && --limit); |
217 | write_SSSR(SSSR_ROR, reg); | 217 | write_SSSR(SSSR_ROR, reg); |
218 | 218 | ||
219 | return limit; | 219 | return limit; |
@@ -484,7 +484,7 @@ static int wait_ssp_rx_stall(void const __iomem *ioaddr) | |||
484 | { | 484 | { |
485 | unsigned long limit = loops_per_jiffy << 1; | 485 | unsigned long limit = loops_per_jiffy << 1; |
486 | 486 | ||
487 | while ((read_SSSR(ioaddr) & SSSR_BSY) && limit--) | 487 | while ((read_SSSR(ioaddr) & SSSR_BSY) && --limit) |
488 | cpu_relax(); | 488 | cpu_relax(); |
489 | 489 | ||
490 | return limit; | 490 | return limit; |
@@ -494,7 +494,7 @@ static int wait_dma_channel_stop(int channel) | |||
494 | { | 494 | { |
495 | unsigned long limit = loops_per_jiffy << 1; | 495 | unsigned long limit = loops_per_jiffy << 1; |
496 | 496 | ||
497 | while (!(DCSR(channel) & DCSR_STOPSTATE) && limit--) | 497 | while (!(DCSR(channel) & DCSR_STOPSTATE) && --limit) |
498 | cpu_relax(); | 498 | cpu_relax(); |
499 | 499 | ||
500 | return limit; | 500 | return limit; |
@@ -1373,6 +1373,9 @@ static void cleanup(struct spi_device *spi) | |||
1373 | { | 1373 | { |
1374 | struct chip_data *chip = spi_get_ctldata(spi); | 1374 | struct chip_data *chip = spi_get_ctldata(spi); |
1375 | 1375 | ||
1376 | if (!chip) | ||
1377 | return; | ||
1378 | |||
1376 | if (gpio_is_valid(chip->gpio_cs)) | 1379 | if (gpio_is_valid(chip->gpio_cs)) |
1377 | gpio_free(chip->gpio_cs); | 1380 | gpio_free(chip->gpio_cs); |
1378 | 1381 | ||
@@ -1700,6 +1703,13 @@ static int pxa2xx_spi_resume(struct platform_device *pdev) | |||
1700 | struct ssp_device *ssp = drv_data->ssp; | 1703 | struct ssp_device *ssp = drv_data->ssp; |
1701 | int status = 0; | 1704 | int status = 0; |
1702 | 1705 | ||
1706 | if (drv_data->rx_channel != -1) | ||
1707 | DRCMR(drv_data->ssp->drcmr_rx) = | ||
1708 | DRCMR_MAPVLD | drv_data->rx_channel; | ||
1709 | if (drv_data->tx_channel != -1) | ||
1710 | DRCMR(drv_data->ssp->drcmr_tx) = | ||
1711 | DRCMR_MAPVLD | drv_data->tx_channel; | ||
1712 | |||
1703 | /* Enable the SSP clock */ | 1713 | /* Enable the SSP clock */ |
1704 | clk_enable(ssp->clk); | 1714 | clk_enable(ssp->clk); |
1705 | 1715 | ||