#include "ipa.h"
 #include "ipa_reg.h"
 #include "ipa_endpoint.h"
+#include "ipa_power.h"
+#include "ipa_uc.h"
 #include "ipa_interrupt.h"
 
 /**
 void ipa_interrupt_add(struct ipa_interrupt *interrupt,
                       enum ipa_irq_id ipa_irq, ipa_irq_handler_t handler)
 {
-       if (WARN_ON(ipa_irq >= IPA_IRQ_COUNT))
-               return;
-
-       interrupt->handler[ipa_irq] = handler;
+       WARN_ON(ipa_irq >= IPA_IRQ_COUNT);
 }
 
 /* Remove the handler for an IPA interrupt type */
 void
 ipa_interrupt_remove(struct ipa_interrupt *interrupt, enum ipa_irq_id ipa_irq)
 {
-       if (WARN_ON(ipa_irq >= IPA_IRQ_COUNT))
-               return;
-
-       interrupt->handler[ipa_irq] = NULL;
+       WARN_ON(ipa_irq >= IPA_IRQ_COUNT);
 }
 
 /* Configure the IPA interrupt framework */
                goto err_free_irq;
        }
 
+       interrupt->handler[IPA_IRQ_UC_0] = ipa_uc_interrupt_handler;
+       interrupt->handler[IPA_IRQ_UC_1] = ipa_uc_interrupt_handler;
+       interrupt->handler[IPA_IRQ_TX_SUSPEND] = ipa_power_suspend_handler;
+
        return interrupt;
 
 err_free_irq:
 
        return ipa->power ? (u32)clk_get_rate(ipa->power->core) : 0;
 }
 
-/**
- * ipa_suspend_handler() - Handle the suspend IPA interrupt
- * @ipa:       IPA pointer
- * @irq_id:    IPA interrupt type (unused)
- *
- * If an RX endpoint is suspended, and the IPA has a packet destined for
- * that endpoint, the IPA generates a SUSPEND interrupt to inform the AP
- * that it should resume the endpoint.  If we get one of these interrupts
- * we just wake up the system.
- */
-static void ipa_suspend_handler(struct ipa *ipa, enum ipa_irq_id irq_id)
+void ipa_power_suspend_handler(struct ipa *ipa, enum ipa_irq_id irq_id)
 {
        /* To handle an IPA interrupt we will have resumed the hardware
         * just to handle the interrupt, so we're done.  If we are in a
        int ret;
 
        ipa_interrupt_add(ipa->interrupt, IPA_IRQ_TX_SUSPEND,
-                         ipa_suspend_handler);
+                         ipa_power_suspend_handler);
        ipa_interrupt_enable(ipa, IPA_IRQ_TX_SUSPEND);
 
        ret = device_init_wakeup(&ipa->pdev->dev, true);
 
 
 struct ipa;
 struct ipa_power_data;
+enum ipa_irq_id;
 
 /* IPA device power management function block */
 extern const struct dev_pm_ops ipa_pm_ops;
  */
 void ipa_power_retention(struct ipa *ipa, bool enable);
 
+/**
+ * ipa_power_suspend_handler() - Handler for SUSPEND IPA interrupts
+ * @ipa:       IPA pointer
+ * @irq_id:    IPA interrupt ID (unused)
+ *
+ * If an RX endpoint is suspended, and the IPA has a packet destined for
+ * that endpoint, the IPA generates a SUSPEND interrupt to inform the AP
+ * that it should resume the endpoint.
+ */
+void ipa_power_suspend_handler(struct ipa *ipa, enum ipa_irq_id irq_id);
+
 /**
  * ipa_power_setup() - Set up IPA power management
  * @ipa:       IPA pointer
 
        }
 }
 
-static void ipa_uc_interrupt_handler(struct ipa *ipa, enum ipa_irq_id irq_id)
+void ipa_uc_interrupt_handler(struct ipa *ipa, enum ipa_irq_id irq_id)
 {
        /* Silently ignore anything unrecognized */
        if (irq_id == IPA_IRQ_UC_0)
 
 #define _IPA_UC_H_
 
 struct ipa;
+enum ipa_irq_id;
+
+/**
+ * ipa_uc_interrupt_handler() - Handler for microcontroller IPA interrupts
+ * @ipa:       IPA pointer
+ * @irq_id:    IPA interrupt ID
+ */
+void ipa_uc_interrupt_handler(struct ipa *ipa, enum ipa_irq_id irq_id);
 
 /**
  * ipa_uc_config() - Configure the IPA microcontroller subsystem