diff options
author | Tan, Jui Nee <jui.nee.tan@intel.com> | 2015-09-01 05:22:51 +0300 |
---|---|---|
committer | Sasha Levin <sasha.levin@oracle.com> | 2015-10-28 05:13:18 +0300 |
commit | f6d0801410219f5115d344105468d6cb143fccec (patch) | |
tree | dead245b0041179f0c88e738f6988c90251e4179 /drivers/spi | |
parent | 3cd1f376b0a0ec0c5f044d740705d89c740e8490 (diff) | |
download | linux-f6d0801410219f5115d344105468d6cb143fccec.tar.xz |
spi: spi-pxa2xx: Check status register to determine if SSSR_TINT is disabled
[ Upstream commit 02bc933ebb59208f42c2e6305b2c17fd306f695d ]
On Intel Baytrail, there is case when interrupt handler get called, no SPI
message is captured. The RX FIFO is indeed empty when RX timeout pending
interrupt (SSSR_TINT) happens.
Use the BIOS version where both HSUART and SPI are on the same IRQ. Both
drivers are using IRQF_SHARED when calling the request_irq function. When
running two separate and independent SPI and HSUART application that
generate data traffic on both components, user will see messages like
below on the console:
pxa2xx-spi pxa2xx-spi.0: bad message state in interrupt handler
This commit will fix this by first checking Receiver Time-out Interrupt,
if it is disabled, ignore the request and return without servicing.
Signed-off-by: Tan, Jui Nee <jui.nee.tan@intel.com>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
Diffstat (limited to 'drivers/spi')
-rw-r--r-- | drivers/spi/spi-pxa2xx.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c index d95656d05eb6..e56802d85ff9 100644 --- a/drivers/spi/spi-pxa2xx.c +++ b/drivers/spi/spi-pxa2xx.c @@ -564,6 +564,10 @@ static irqreturn_t ssp_int(int irq, void *dev_id) if (!(sccr1_reg & SSCR1_TIE)) mask &= ~SSSR_TFS; + /* Ignore RX timeout interrupt if it is disabled */ + if (!(sccr1_reg & SSCR1_TINTE)) + mask &= ~SSSR_TINT; + if (!(status & mask)) return IRQ_NONE; |