aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/spi/spi-pl022.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c
index 5559b2299198..5b7209f9f100 100644
--- a/drivers/spi/spi-pl022.c
+++ b/drivers/spi/spi-pl022.c
@@ -1244,9 +1244,9 @@ static irqreturn_t pl022_interrupt_handler(int irq, void *dev_id)
1244 1244
1245 if ((pl022->tx == pl022->tx_end) && (flag == 0)) { 1245 if ((pl022->tx == pl022->tx_end) && (flag == 0)) {
1246 flag = 1; 1246 flag = 1;
1247 /* Disable Transmit interrupt */ 1247 /* Disable Transmit interrupt, enable receive interrupt */
1248 writew(readw(SSP_IMSC(pl022->virtbase)) & 1248 writew((readw(SSP_IMSC(pl022->virtbase)) &
1249 (~SSP_IMSC_MASK_TXIM), 1249 ~SSP_IMSC_MASK_TXIM) | SSP_IMSC_MASK_RXIM,
1250 SSP_IMSC(pl022->virtbase)); 1250 SSP_IMSC(pl022->virtbase));
1251 } 1251 }
1252 1252
@@ -1379,12 +1379,17 @@ static void pump_transfers(unsigned long data)
1379 } 1379 }
1380 1380
1381err_config_dma: 1381err_config_dma:
1382 writew(ENABLE_ALL_INTERRUPTS, SSP_IMSC(pl022->virtbase)); 1382 /* enable all interrupts except RX */
1383 writew(ENABLE_ALL_INTERRUPTS & ~SSP_IMSC_MASK_RXIM, SSP_IMSC(pl022->virtbase));
1383} 1384}
1384 1385
1385static void do_interrupt_dma_transfer(struct pl022 *pl022) 1386static void do_interrupt_dma_transfer(struct pl022 *pl022)
1386{ 1387{
1387 u32 irqflags = ENABLE_ALL_INTERRUPTS; 1388 /*
1389 * Default is to enable all interrupts except RX -
1390 * this will be enabled once TX is complete
1391 */
1392 u32 irqflags = ENABLE_ALL_INTERRUPTS & ~SSP_IMSC_MASK_RXIM;
1388 1393
1389 /* Enable target chip */ 1394 /* Enable target chip */
1390 pl022->cur_chip->cs_control(SSP_CHIP_SELECT); 1395 pl022->cur_chip->cs_control(SSP_CHIP_SELECT);