On Tue, Jul 5, 2011 at 3:57 PM, Tero Kristo <t-kristo@xxxxxx> wrote: > Introduce a chained interrupt handler mechanism for the PRCM > interrupt, so that individual PRCM event can cleanly be handled by > handlers in separate drivers. We do this by introducing PRCM event > names, which are then matched to the particular PRCM interrupt bit > depending on the specific OMAP SoC being used. > > arch/arm/mach-omap2/prcm.c implements the chained interrupt mechanism > itself, with individual PRCM events for OMAP3 and OMAP4 being > described in arch/arm/mach-omap2/prcm3xxx.c and > arch/arm/mach-omap2/prcm4xxx.c respectively. At initialization time, > the set of PRCM events is filtered against the SoC on which we are > running, keeping only the ones that are actually useful. All the logic > is written to be generic with regard to OMAP3/OMAP4, even though OMAP3 > has single PRCM event registers and OMAP4 has two PRCM event > registers. > > Patch tested on OMAP3 beagleboard. > > Signed-off-by: Tero Kristo <t-kristo@xxxxxx> > Cc: Thomas Petazzoni <thomas.petazzoni@xxxxxxxxxxxxxxxxxx> > Cc: Avinash.H.M <avinashhm@xxxxxx> > Cc: Kevin Hilman <khilman@xxxxxx> > Cc: Cousson, Benoit <b-cousson@xxxxxx> > Cc: Tony Lindgren <tony@xxxxxxxxxxx> > Cc: Govindraj.R <govindraj.raja@xxxxxx> > Cc: Felipe Balbi <balbi@xxxxxx> > --- > arch/arm/mach-omap2/Makefile | 4 + > arch/arm/mach-omap2/pm34xx.c | 108 ++++++++-------------- > arch/arm/mach-omap2/prcm.c | 158 ++++++++++++++++++++++++++++++++ > arch/arm/mach-omap2/prcm3xxx.c | 112 ++++++++++++++++++++++ > arch/arm/mach-omap2/prcm4xxx.c | 137 +++++++++++++++++++++++++++ > arch/arm/plat-omap/include/plat/prcm.h | 46 +++++++++ > 6 files changed, 495 insertions(+), 70 deletions(-) > create mode 100644 arch/arm/mach-omap2/prcm3xxx.c > create mode 100644 arch/arm/mach-omap2/prcm4xxx.c > [..] > + if (irq_setup->base_irq < 0) { > + pr_err("PRCM: failed to allocate irq descs\n"); > + irq_set_chained_handler(irq_setup->irq, NULL); > + return irq_setup->base_irq; > + } > + > + for (i = 0; i <= max_irq / 32; i++) { > + gc = irq_alloc_generic_chip("PRCM", 1, > + irq_setup->base_irq + i * 32, NULL, handle_level_irq); > + > + ct = gc->chip_types; > + ct->chip.irq_ack = irq_gc_ack; With patch [1] already part of 3.0-rc7 Mainline. irq_gc_ack needs to be changed as below. ct->chip.irq_ack = irq_gc_ack_set_bit; I dropped tmp patches from v5 and picked rest of v5 applied on wip-runtime patches and tested same. Most of the things worked fine on 3430SDP System wide suspend (with console_suspend) retention and off-mode. I have hosted a branch with the same if some else is interested in testing. [rc7 + wip_uart runtime patches + irq_chaining patches] git://gitorious.org/runtime_3-0/runtime_3-0.git Branch: wip_irqchn feel free to add, Acked-by: Govindraj.R <govindraj.raja@xxxxxx> Tested-by: Govindraj.R <govindraj.raja@xxxxxx> -- Thanks, Govindraj.R [1]: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=659fb32d1b67476f4ade25e9ea0e2642a5b9c4b5;hp=d30e1521b2afb5e6f21ca8bc1a4b6ec2afc93597 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html