Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 94434535 authored by Jouni Hogander's avatar Jouni Hogander Committed by Kevin Hilman
Browse files

OMAP: Add new function to check wether there is irq pending



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: default avatarJouni Hogander <jouni.hogander@nokia.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
Signed-off-by: default avatarKevin Hilman <khilman@deeprootsystems.com>
parent 8bd22949
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -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

@@ -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;
+3 −16
Original line number Diff line number Diff line
@@ -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;
@@ -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 */
@@ -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();
+1 −0
Original line number Diff line number Diff line
@@ -467,6 +467,7 @@

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

#include <mach/hardware.h>