Skip to content

Commit

Permalink
ARM: OMAP4+: PRM: register interrupt information from DT
Browse files Browse the repository at this point in the history
Allow the PRM interrupt information to be picked up from device tree.
the only exception is for OMAP4 which uses values pre-populated and allows
compatibility with older dtb.

Signed-off-by: Nishanth Menon <nm@ti.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
  • Loading branch information
Nishanth Menon committed Sep 8, 2014
1 parent 390ddc1 commit a8f83ae
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions arch/arm/mach-omap2/prm44xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include <linux/errno.h>
#include <linux/err.h>
#include <linux/io.h>
#include <linux/of_irq.h>


#include "soc.h"
Expand Down Expand Up @@ -699,11 +700,50 @@ int __init omap44xx_prm_init(void)
return prm_register(&omap44xx_prm_ll_data);
}

static struct of_device_id omap_prm_dt_match_table[] = {
{ .compatible = "ti,omap4-prm" },
{ .compatible = "ti,omap5-prm" },
{ .compatible = "ti,dra7-prm" },
{ }
};

static int omap44xx_prm_late_init(void)
{
struct device_node *np;
int irq_num;

if (!(prm_features & PRM_HAS_IO_WAKEUP))
return 0;

/* OMAP4+ is DT only now */
if (!of_have_populated_dt())
return 0;

np = of_find_matching_node(NULL, omap_prm_dt_match_table);

if (!np) {
/* Default loaded up with OMAP4 values */
if (!cpu_is_omap44xx())
return 0;
} else {
irq_num = of_irq_get(np, 0);
/*
* Already have OMAP4 IRQ num. For all other platforms, we need
* IRQ numbers from DT
*/
if (irq_num < 0 && !cpu_is_omap44xx()) {
if (irq_num == -EPROBE_DEFER)
return irq_num;

/* Have nothing to do */
return 0;
}

/* Once OMAP4 DT is filled as well */
if (irq_num >= 0)
omap4_prcm_irq_setup.irq = irq_num;
}

omap44xx_prm_enable_io_wakeup();

return omap_prcm_register_chain_handler(&omap4_prcm_irq_setup);
Expand Down

0 comments on commit a8f83ae

Please sign in to comment.