diff options
-rw-r--r-- | drivers/spi/spi-pl022.c | 15 |
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 | ||
1381 | err_config_dma: | 1381 | err_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 | ||
1385 | static void do_interrupt_dma_transfer(struct pl022 *pl022) | 1386 | static 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); |