if (bs->tx_len && cs & BCM2835_SPI_CS_DONE)
                bcm2835_wr_fifo_blind(bs, BCM2835_SPI_FIFO_SIZE);
 
+       /* check if we got interrupt enabled */
+       if (!(bcm2835_rd(bs, BCM2835_SPI_CS) & BCM2835_SPI_CS_INTR))
+               return IRQ_NONE;
+
        /* Read as many bytes as possible from FIFO */
        bcm2835_rd_fifo(bs);
        /* Write as many bytes as possible to FIFO */
        bcm2835_wr(bs, BCM2835_SPI_CS,
                   BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX);
 
-       err = devm_request_irq(&pdev->dev, bs->irq, bcm2835_spi_interrupt, 0,
-                              dev_name(&pdev->dev), ctlr);
+       err = devm_request_irq(&pdev->dev, bs->irq, bcm2835_spi_interrupt,
+                              IRQF_SHARED, dev_name(&pdev->dev), ctlr);
        if (err) {
                dev_err(&pdev->dev, "could not request IRQ: %d\n", err);
                goto out_dma_release;