diff options
author | Troy Kisky <troy.kisky@boundarydevices.com> | 2013-02-12 19:53:36 -0700 |
---|---|---|
committer | Eric Nelson <eric.nelson@boundarydevices.com> | 2013-09-03 14:09:31 -0700 |
commit | 3f0ca77a9d45be62e12d93b1babc6eaa50598930 (patch) | |
tree | 06e353d3c7068bd3c9b601c358a77f1dc57b42f2 /drivers | |
parent | 63b106e30a42e5ee89c4c7d0644e853f013276db (diff) |
ipu_common: delay request_irq, check for handler not NULL
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mxc/ipu3/ipu_common.c | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/drivers/mxc/ipu3/ipu_common.c b/drivers/mxc/ipu3/ipu_common.c index 7e145690e38b..8636e3a4af4c 100644 --- a/drivers/mxc/ipu3/ipu_common.c +++ b/drivers/mxc/ipu3/ipu_common.c @@ -270,19 +270,6 @@ static int __devinit ipu_probe(struct platform_device *pdev) goto failed_get_res; } - ret = request_irq(ipu->irq_sync, ipu_sync_irq_handler, 0, - pdev->name, ipu); - if (ret) { - dev_err(ipu->dev, "request SYNC interrupt failed\n"); - goto failed_req_irq_sync; - } - ret = request_irq(ipu->irq_err, ipu_err_irq_handler, 0, - pdev->name, ipu); - if (ret) { - dev_err(ipu->dev, "request ERR interrupt failed\n"); - goto failed_req_irq_err; - } - ipu_base = res->start; /* base fixup */ if (g_ipu_hw_rev == 4) /* IPUv3H */ @@ -373,13 +360,29 @@ static int __devinit ipu_probe(struct platform_device *pdev) if (!plat_data->bypass_reset) clk_disable(ipu->ipu_clk); + ret = request_irq(ipu->irq_sync, ipu_sync_irq_handler, 0, + pdev->name, ipu); + if (ret) { + dev_err(ipu->dev, "request SYNC interrupt failed\n"); + goto failed_req_irq_sync; + } + ret = request_irq(ipu->irq_err, ipu_err_irq_handler, 0, + pdev->name, ipu); + if (ret) { + dev_err(ipu->dev, "request ERR interrupt failed\n"); + goto failed_req_irq_err; + } register_ipu_device(ipu, pdev->id); ipu->online = true; return ret; +failed_req_irq_err: + free_irq(ipu->irq_sync, ipu); +failed_req_irq_sync: failed_clk_setup: +failed_ioremap: iounmap(ipu->cm_reg); iounmap(ipu->ic_reg); iounmap(ipu->idmac_reg); @@ -396,11 +399,6 @@ failed_clk_setup: iounmap(ipu->dc_tmpl_reg); iounmap(ipu->disp_base[1]); iounmap(ipu->vdi_reg); -failed_ioremap: - free_irq(ipu->irq_err, ipu); -failed_req_irq_err: - free_irq(ipu->irq_sync, ipu); -failed_req_irq_sync: failed_get_res: return ret; } @@ -2425,8 +2423,8 @@ static irqreturn_t ipu_sync_irq_handler(int irq, void *desc) bit = --line; int_stat &= ~(1UL << line); line += (int_reg[i] - 1) * 32; - result |= - ipu->irq_list[line].handler(line, + if (ipu->irq_list[line].handler) + result |= ipu->irq_list[line].handler(line, ipu->irq_list[line]. dev_id); if (ipu->irq_list[line].flags & IPU_IRQF_ONESHOT) { |