diff options
author | Heiner Kallweit <hkallweit1@gmail.com> | 2016-09-13 17:15:57 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-09-14 13:24:47 -0400 |
commit | 35f5d71e38f2c0a9e7fdfbe0e9527efc712cfbcf (patch) | |
tree | da4a98aac981d315099804da6584e0baaeccbd88 | |
parent | d198ebfb75adec5156b07b96dc21b6b9e5144018 (diff) |
spi: fsl-espi: improve and simplify interrupt handler
Simplify the interrupt handler a little. In addition don't call
fsl_espi_cpu_irq() if no event bit is set.
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | drivers/spi/spi-fsl-espi.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c index 060624f45ce0..032bf3af8388 100644 --- a/drivers/spi/spi-fsl-espi.c +++ b/drivers/spi/spi-fsl-espi.c | |||
@@ -443,17 +443,11 @@ static void fsl_espi_cpu_irq(struct mpc8xxx_spi *mspi, u32 events) | |||
443 | ®_base->event)) & SPIE_NF), 1000, 0); | 443 | ®_base->event)) & SPIE_NF), 1000, 0); |
444 | if (!ret) { | 444 | if (!ret) { |
445 | dev_err(mspi->dev, "tired waiting for SPIE_NF\n"); | 445 | dev_err(mspi->dev, "tired waiting for SPIE_NF\n"); |
446 | |||
447 | /* Clear the SPIE bits */ | ||
448 | mpc8xxx_spi_write_reg(®_base->event, events); | ||
449 | complete(&mspi->done); | 446 | complete(&mspi->done); |
450 | return; | 447 | return; |
451 | } | 448 | } |
452 | } | 449 | } |
453 | 450 | ||
454 | /* Clear the events */ | ||
455 | mpc8xxx_spi_write_reg(®_base->event, events); | ||
456 | |||
457 | mspi->count -= 1; | 451 | mspi->count -= 1; |
458 | if (mspi->count) { | 452 | if (mspi->count) { |
459 | u32 word = mspi->get_tx(mspi); | 453 | u32 word = mspi->get_tx(mspi); |
@@ -468,19 +462,21 @@ static irqreturn_t fsl_espi_irq(s32 irq, void *context_data) | |||
468 | { | 462 | { |
469 | struct mpc8xxx_spi *mspi = context_data; | 463 | struct mpc8xxx_spi *mspi = context_data; |
470 | struct fsl_espi_reg *reg_base = mspi->reg_base; | 464 | struct fsl_espi_reg *reg_base = mspi->reg_base; |
471 | irqreturn_t ret = IRQ_NONE; | ||
472 | u32 events; | 465 | u32 events; |
473 | 466 | ||
474 | /* Get interrupt events(tx/rx) */ | 467 | /* Get interrupt events(tx/rx) */ |
475 | events = mpc8xxx_spi_read_reg(®_base->event); | 468 | events = mpc8xxx_spi_read_reg(®_base->event); |
476 | if (events) | 469 | if (!events) |
477 | ret = IRQ_HANDLED; | 470 | return IRQ_NONE; |
478 | 471 | ||
479 | dev_vdbg(mspi->dev, "%s: events %x\n", __func__, events); | 472 | dev_vdbg(mspi->dev, "%s: events %x\n", __func__, events); |
480 | 473 | ||
481 | fsl_espi_cpu_irq(mspi, events); | 474 | fsl_espi_cpu_irq(mspi, events); |
482 | 475 | ||
483 | return ret; | 476 | /* Clear the events */ |
477 | mpc8xxx_spi_write_reg(®_base->event, events); | ||
478 | |||
479 | return IRQ_HANDLED; | ||
484 | } | 480 | } |
485 | 481 | ||
486 | #ifdef CONFIG_PM | 482 | #ifdef CONFIG_PM |