#include <linux/err.h>
 #include <linux/io.h>
 #include <linux/irq.h>
+#include <linux/of_irq.h>
 
 #include "soc.h"
 #include "common.h"
        return prm_register(&omap3xxx_prm_ll_data);
 }
 
+static struct of_device_id omap3_prm_dt_match_table[] = {
+       { .compatible = "ti,omap3-prm" },
+       { }
+};
+
 static int omap3xxx_prm_late_init(void)
 {
        int ret;
        if (!(prm_features & PRM_HAS_IO_WAKEUP))
                return 0;
 
+       if (of_have_populated_dt()) {
+               struct device_node *np;
+               int irq_num;
+
+               np = of_find_matching_node(NULL, omap3_prm_dt_match_table);
+               if (np) {
+                       irq_num = of_irq_get(np, 0);
+                       if (irq_num >= 0)
+                               omap3_prcm_irq_setup.irq = irq_num;
+               }
+       }
+
        omap3xxx_prm_enable_io_wakeup();
        ret = omap_prcm_register_chain_handler(&omap3_prcm_irq_setup);
        if (!ret)