mirror of https://gitee.com/openkylin/linux.git
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: Jouni Hogander <jouni.hogander@nokia.com> Signed-off-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
This commit is contained in:
parent
8bd2294922
commit
94434535bd
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -467,6 +467,7 @@
|
|||
|
||||
#ifndef __ASSEMBLY__
|
||||
extern void omap_init_irq(void);
|
||||
extern int omap_irq_pending(void);
|
||||
#endif
|
||||
|
||||
#include <mach/hardware.h>
|
||||
|
|
Loading…
Reference in New Issue