Skip to content

Commit

Permalink
OMAP: Add new function to check wether there is irq pending
Browse files Browse the repository at this point in the history
Add common omap2/3 function to check wether there is irq pending.
Switch to use it in omap2 pm code instead of its own.

Signed-off-by: Jouni Hogander <jouni.hogander@nokia.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
  • Loading branch information
Jouni Hogander authored and Kevin Hilman committed May 28, 2009
1 parent 8bd2294 commit 9443453
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 17 deletions.
17 changes: 16 additions & 1 deletion arch/arm/mach-omap2/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
#define INTC_MIR_CLEAR0 0x0088
#define INTC_MIR_SET0 0x008c
#define INTC_PENDING_IRQ0 0x0098

/* Number of IRQ state bits in each MIR register */
#define IRQ_BITS_PER_REG 32

Expand Down Expand Up @@ -156,6 +155,22 @@ static void __init omap_irq_bank_init_one(struct omap_irq_bank *bank)
intc_bank_write_reg(1 << 0, bank, INTC_SYSCONFIG);
}

int omap_irq_pending(void)
{
int i;

for (i = 0; i < ARRAY_SIZE(irq_banks); i++) {
struct omap_irq_bank *bank = irq_banks + i;
int irq;

for (irq = 0; irq < bank->nr_irqs; irq += 32)
if (intc_bank_read_reg(bank, INTC_PENDING_IRQ0 +
((irq >> 5) << 5)))
return 1;
}
return 0;
}

void __init omap_init_irq(void)
{
unsigned long nr_of_irqs = 0;
Expand Down
19 changes: 3 additions & 16 deletions arch/arm/mach-omap2/pm24xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,19 +76,6 @@ static int omap2_fclks_active(void)
return 0;
}

static int omap2_irq_pending(void)
{
u32 pending_reg = 0x480fe098;
int i;

for (i = 0; i < 4; i++) {
if (omap_readl(pending_reg))
return 1;
pending_reg += 0x20;
}
return 0;
}

static void omap2_enter_full_retention(void)
{
u32 l;
Expand Down Expand Up @@ -127,7 +114,7 @@ static void omap2_enter_full_retention(void)

/* One last check for pending IRQs to avoid extra latency due
* to sleeping unnecessarily. */
if (omap2_irq_pending())
if (omap_irq_pending())
goto no_sleep;

/* Jump to SRAM suspend code */
Expand Down Expand Up @@ -262,13 +249,13 @@ static void omap2_pm_idle(void)
local_fiq_disable();

if (!omap2_can_sleep()) {
if (omap2_irq_pending())
if (omap_irq_pending())
goto out;
omap2_enter_mpu_retention();
goto out;
}

if (omap2_irq_pending())
if (omap_irq_pending())
goto out;

omap2_enter_full_retention();
Expand Down
1 change: 1 addition & 0 deletions arch/arm/plat-omap/include/mach/irqs.h
Original file line number Diff line number Diff line change
Expand Up @@ -467,6 +467,7 @@

#ifndef __ASSEMBLY__
extern void omap_init_irq(void);
extern int omap_irq_pending(void);
#endif

#include <mach/hardware.h>
Expand Down

0 comments on commit 9443453

Please sign in to comment.