summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorTroy Kisky <troy.kisky@boundarydevices.com>2013-02-12 19:53:36 -0700
committerEric Nelson <eric.nelson@boundarydevices.com>2013-09-03 14:09:31 -0700
commit3f0ca77a9d45be62e12d93b1babc6eaa50598930 (patch)
tree06e353d3c7068bd3c9b601c358a77f1dc57b42f2 /drivers
parent63b106e30a42e5ee89c4c7d0644e853f013276db (diff)
ipu_common: delay request_irq, check for handler not NULL
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mxc/ipu3/ipu_common.c38
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) {