diff options
author | Mark Brown | 2013-10-07 14:51:59 +0100 |
---|---|---|
committer | Mark Brown | 2013-10-07 14:51:59 +0100 |
commit | 896182ad319542e56dcf776565f92cb35c2b4abb (patch) | |
tree | 8316c3d1de4600908461a6c246c410b9c4502264 /drivers | |
parent | b242954b3cb8cb710a5c72fdd509f659748f6973 (diff) | |
parent | 269e4a4122685d0739f0e8e53b440111bf8a03f9 (diff) |
Merge remote-tracking branch 'spi/fix/pxa' into spi-linus
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/spi/spi-pxa2xx.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c index 2eb06ee0b326..c1a50674c1e3 100644 --- a/drivers/spi/spi-pxa2xx.c +++ b/drivers/spi/spi-pxa2xx.c @@ -546,8 +546,17 @@ static irqreturn_t ssp_int(int irq, void *dev_id) if (pm_runtime_suspended(&drv_data->pdev->dev)) return IRQ_NONE; - sccr1_reg = read_SSCR1(reg); + /* + * If the device is not yet in RPM suspended state and we get an + * interrupt that is meant for another device, check if status bits + * are all set to one. That means that the device is already + * powered off. + */ status = read_SSSR(reg); + if (status == ~0) + return IRQ_NONE; + + sccr1_reg = read_SSCR1(reg); /* Ignore possible writes if we don't need to write */ if (!(sccr1_reg & SSCR1_TIE)) |