@@ -401,6 +401,7 @@ fsl_edma2_irq_init(struct platform_device *pdev,
401401
402402 /* The last IRQ is for eDMA err */
403403 if (i == count - 1 ) {
404+ fsl_edma -> errirq = irq ;
404405 ret = devm_request_irq (& pdev -> dev , irq ,
405406 fsl_edma_err_handler ,
406407 0 , "eDMA2-ERR" , fsl_edma );
@@ -420,10 +421,13 @@ static void fsl_edma_irq_exit(
420421 struct platform_device * pdev , struct fsl_edma_engine * fsl_edma )
421422{
422423 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 );
424426 } 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 );
427431 }
428432}
429433
@@ -620,6 +624,8 @@ static int fsl_edma_probe(struct platform_device *pdev)
620624 if (!fsl_edma )
621625 return - ENOMEM ;
622626
627+ fsl_edma -> errirq = - EINVAL ;
628+ fsl_edma -> txirq = - EINVAL ;
623629 fsl_edma -> drvdata = drvdata ;
624630 fsl_edma -> n_chans = chans ;
625631 mutex_init (& fsl_edma -> fsl_edma_mutex );
0 commit comments