@@ -401,6 +401,7 @@ fsl_edma2_irq_init(struct platform_device *pdev,
401
401
402
402
/* The last IRQ is for eDMA err */
403
403
if (i == count - 1 ) {
404
+ fsl_edma -> errirq = irq ;
404
405
ret = devm_request_irq (& pdev -> dev , irq ,
405
406
fsl_edma_err_handler ,
406
407
0 , "eDMA2-ERR" , fsl_edma );
@@ -420,10 +421,13 @@ static void fsl_edma_irq_exit(
420
421
struct platform_device * pdev , struct fsl_edma_engine * fsl_edma )
421
422
{
422
423
if (fsl_edma -> txirq == fsl_edma -> errirq ) {
423
- devm_free_irq (& pdev -> dev , fsl_edma -> txirq , fsl_edma );
424
+ if (fsl_edma -> txirq >= 0 )
425
+ devm_free_irq (& pdev -> dev , fsl_edma -> txirq , fsl_edma );
424
426
} else {
425
- devm_free_irq (& pdev -> dev , fsl_edma -> txirq , fsl_edma );
426
- devm_free_irq (& pdev -> dev , fsl_edma -> errirq , fsl_edma );
427
+ if (fsl_edma -> txirq >= 0 )
428
+ devm_free_irq (& pdev -> dev , fsl_edma -> txirq , fsl_edma );
429
+ if (fsl_edma -> errirq >= 0 )
430
+ devm_free_irq (& pdev -> dev , fsl_edma -> errirq , fsl_edma );
427
431
}
428
432
}
429
433
@@ -620,6 +624,8 @@ static int fsl_edma_probe(struct platform_device *pdev)
620
624
if (!fsl_edma )
621
625
return - ENOMEM ;
622
626
627
+ fsl_edma -> errirq = - EINVAL ;
628
+ fsl_edma -> txirq = - EINVAL ;
623
629
fsl_edma -> drvdata = drvdata ;
624
630
fsl_edma -> n_chans = chans ;
625
631
mutex_init (& fsl_edma -> fsl_edma_mutex );
0 commit comments