|
@@ -949,15 +949,6 @@ static int __devinit ace_setup(struct ace_device *ace)
|
|
|
if (!ace->baseaddr)
|
|
|
goto err_ioremap;
|
|
|
|
|
|
- if (ace->irq != NO_IRQ) {
|
|
|
- rc = request_irq(ace->irq, ace_interrupt, 0, "systemace", ace);
|
|
|
- if (rc) {
|
|
|
- /* Failure - fall back to polled mode */
|
|
|
- dev_err(ace->dev, "request_irq failed\n");
|
|
|
- ace->irq = NO_IRQ;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/*
|
|
|
* Initialize the state machine tasklet and stall timer
|
|
|
*/
|
|
@@ -1015,6 +1006,16 @@ static int __devinit ace_setup(struct ace_device *ace)
|
|
|
val |= ACE_CTRL_DATABUFRDYIRQ | ACE_CTRL_ERRORIRQ;
|
|
|
ace_out(ace, ACE_CTRL, val);
|
|
|
|
|
|
+ /* Now we can hook up the irq handler */
|
|
|
+ if (ace->irq != NO_IRQ) {
|
|
|
+ rc = request_irq(ace->irq, ace_interrupt, 0, "systemace", ace);
|
|
|
+ if (rc) {
|
|
|
+ /* Failure - fall back to polled mode */
|
|
|
+ dev_err(ace->dev, "request_irq failed\n");
|
|
|
+ ace->irq = NO_IRQ;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/* Print the identification */
|
|
|
dev_info(ace->dev, "Xilinx SystemACE revision %i.%i.%i\n",
|
|
|
(version >> 12) & 0xf, (version >> 8) & 0x0f, version & 0xff);
|
|
@@ -1035,8 +1036,6 @@ static int __devinit ace_setup(struct ace_device *ace)
|
|
|
blk_cleanup_queue(ace->queue);
|
|
|
err_blk_initq:
|
|
|
iounmap(ace->baseaddr);
|
|
|
- if (ace->irq != NO_IRQ)
|
|
|
- free_irq(ace->irq, ace);
|
|
|
err_ioremap:
|
|
|
dev_info(ace->dev, "xsysace: error initializing device at 0x%lx\n",
|
|
|
ace->physaddr);
|