@@ -83,7 +83,7 @@ struct xilinx_spi {
83
83
void __iomem * regs ; /* virt. address of the control registers */
84
84
85
85
int irq ;
86
-
86
+ bool force_irq ; /* force irq to setup master inhibit */
87
87
u8 * rx_ptr ; /* pointer in the Tx buffer */
88
88
const u8 * tx_ptr ; /* pointer in the Rx buffer */
89
89
u8 bytes_per_word ;
@@ -248,7 +248,8 @@ static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t)
248
248
xspi -> rx_ptr = t -> rx_buf ;
249
249
remaining_words = t -> len / xspi -> bytes_per_word ;
250
250
251
- if (xspi -> irq >= 0 && remaining_words > xspi -> buffer_size ) {
251
+ if (xspi -> irq >= 0 &&
252
+ (xspi -> force_irq || remaining_words > xspi -> buffer_size )) {
252
253
u32 isr ;
253
254
use_irq = true;
254
255
/* Inhibit irq to avoid spurious irqs on tx_empty*/
@@ -393,13 +394,15 @@ static int xilinx_spi_probe(struct platform_device *pdev)
393
394
struct resource * res ;
394
395
int ret , num_cs = 0 , bits_per_word ;
395
396
struct spi_master * master ;
397
+ bool force_irq = false;
396
398
u32 tmp ;
397
399
u8 i ;
398
400
399
401
pdata = dev_get_platdata (& pdev -> dev );
400
402
if (pdata ) {
401
403
num_cs = pdata -> num_chipselect ;
402
404
bits_per_word = pdata -> bits_per_word ;
405
+ force_irq = pdata -> force_irq ;
403
406
} else {
404
407
of_property_read_u32 (pdev -> dev .of_node , "xlnx,num-ss-bits" ,
405
408
& num_cs );
@@ -477,6 +480,8 @@ static int xilinx_spi_probe(struct platform_device *pdev)
477
480
dev_name (& pdev -> dev ), xspi );
478
481
if (ret )
479
482
return ret ;
483
+
484
+ xspi -> force_irq = force_irq ;
480
485
}
481
486
482
487
/* SPI controller initializations */
0 commit comments