irq_flags = acpi_dev_get_irq_type(info.triggering,
                                                          info.polarity);
 
-                       /* Set type if specified and different than the current one */
-                       if (irq_flags != IRQ_TYPE_NONE &&
-                           irq_flags != irq_get_trigger_type(irq))
-                               irq_set_irq_type(irq, irq_flags);
+                       /*
+                        * If the IRQ is not already in use then set type
+                        * if specified and different than the current one.
+                        */
+                       if (can_request_irq(irq, irq_flags)) {
+                               if (irq_flags != IRQ_TYPE_NONE &&
+                                   irq_flags != irq_get_trigger_type(irq))
+                                       irq_set_irq_type(irq, irq_flags);
+                       } else {
+                               dev_dbg(&adev->dev, "IRQ %d already in use\n", irq);
+                       }
 
                        return irq;
                }