@@ -622,7 +622,9 @@ static void rx_request(struct lantiq_ssc_spi *spi)
622
622
static irqreturn_t lantiq_ssc_xmit_interrupt (int irq , void * data )
623
623
{
624
624
struct lantiq_ssc_spi * spi = data ;
625
+ unsigned long flags ;
625
626
627
+ spin_lock_irqsave (& spi -> lock , flags );
626
628
if (spi -> tx ) {
627
629
if (spi -> rx && spi -> rx_todo )
628
630
rx_fifo_read_full_duplex (spi );
@@ -644,10 +646,12 @@ static irqreturn_t lantiq_ssc_xmit_interrupt(int irq, void *data)
644
646
}
645
647
}
646
648
649
+ spin_unlock_irqrestore (& spi -> lock , flags );
647
650
return IRQ_HANDLED ;
648
651
649
652
completed :
650
653
queue_work (spi -> wq , & spi -> work );
654
+ spin_unlock_irqrestore (& spi -> lock , flags );
651
655
652
656
return IRQ_HANDLED ;
653
657
}
@@ -656,10 +660,12 @@ static irqreturn_t lantiq_ssc_err_interrupt(int irq, void *data)
656
660
{
657
661
struct lantiq_ssc_spi * spi = data ;
658
662
u32 stat = lantiq_ssc_readl (spi , LTQ_SPI_STAT );
663
+ unsigned long flags ;
659
664
660
665
if (!(stat & LTQ_SPI_STAT_ERRORS ))
661
666
return IRQ_NONE ;
662
667
668
+ spin_lock_irqsave (& spi -> lock , flags );
663
669
if (stat & LTQ_SPI_STAT_RUE )
664
670
dev_err (spi -> dev , "receive underflow error\n" );
665
671
if (stat & LTQ_SPI_STAT_TUE )
@@ -680,6 +686,7 @@ static irqreturn_t lantiq_ssc_err_interrupt(int irq, void *data)
680
686
if (spi -> master -> cur_msg )
681
687
spi -> master -> cur_msg -> status = - EIO ;
682
688
queue_work (spi -> wq , & spi -> work );
689
+ spin_unlock_irqrestore (& spi -> lock , flags );
683
690
684
691
return IRQ_HANDLED ;
685
692
}
0 commit comments