spi: spi-pxa2xx: Check status register to determine if SSSR_TINT is disabled
authorTan, Jui Nee <jui.nee.tan@intel.com>
Tue, 1 Sep 2015 02:22:51 +0000 (10:22 +0800)
committerMark Brown <broonie@kernel.org>
Wed, 2 Sep 2015 09:17:45 +0000 (10:17 +0100)
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
drivers/spi/spi-pxa2xx.c

index 7293d6d875c5c692184d1c45aea151f063bb6cd0..8e4b1a7c37cec914a61efc5dc81b9888fd48c62b 100644 (file)
@@ -643,6 +643,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;