Message ID | CAOMZO5B7MxLSaETUW0QyajdHMMX2nLg=t=5dVCNRePb6UzizRQ@mail.gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 12/01/2014 02:40 PM, Fabio Estevam wrote: >> >Hm... that's new. But it's not really a driver issue anymore if it is done >> >in the core. So I guess for now just use platform_get_irq() and ignore the >> >other issue. > With the suggested changes below, the removal of the driver works fine on a mx6: Would the mapping continue to exist after the driver is unloaded? Can you try multiple loads/unloads and see if interrupts still work?
On Mon, Dec 1, 2014 at 6:42 PM, Timur Tabi <timur@tabi.org> wrote: > Would the mapping continue to exist after the driver is unloaded? Can you > try multiple loads/unloads and see if interrupts still work? I tried multiple loads/unloads and audio works fine with those changes. About the ssi irq we have: - With the ssi driver loaded: root@freescale /home$ cat /proc/interrupts | grep ssi 79: 0 0 0 0 GIC 79 202c000.ssi - After removing the ssi driver: root@freescale /home$ rmmod snd-soc-fsl-ssi root@freescale /home$ cat /proc/interrupts | grep ssi root@freescale /home$ ,so it seems to behave properly.
diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c index 32a31d9..c528f16 100644 --- a/sound/soc/fsl/fsl_ssi.c +++ b/sound/soc/fsl/fsl_ssi.c @@ -1361,7 +1361,7 @@ static int fsl_ssi_probe(struct platform_device *pdev) return PTR_ERR(ssi_private->regs); } - ssi_private->irq = irq_of_parse_and_map(np, 0); + ssi_private->irq = platform_get_irq(pdev, 0); if (!ssi_private->irq) { dev_err(&pdev->dev, "no irq for node %s\n", np->full_name); return -ENXIO; @@ -1387,7 +1387,7 @@ static int fsl_ssi_probe(struct platform_device *pdev) if (ssi_private->soc->imx) { ret = fsl_ssi_imx_probe(pdev, ssi_private, iomem); if (ret) - goto error_irqmap; + return ret; } ret = snd_soc_register_component(&pdev->dev, &fsl_ssi_component, @@ -1458,10 +1458,6 @@ error_asoc_register: if (ssi_private->soc->imx) fsl_ssi_imx_clean(pdev, ssi_private); -error_irqmap: - if (ssi_private->use_dma) - irq_dispose_mapping(ssi_private->irq); - return ret; } @@ -1478,9 +1474,6 @@ static int fsl_ssi_remove(struct platform_device *pdev) if (ssi_private->soc->imx) fsl_ssi_imx_clean(pdev, ssi_private); - if (ssi_private->use_dma) - irq_dispose_mapping(ssi_private->irq); - return 0; }