Skip to content

Commit

Permalink
mfd : Check if the db8500 prcmu has pending irq
Browse files Browse the repository at this point in the history
This patch allows to check if there are some pending irqs
on the prcmu.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
  • Loading branch information
Daniel Lezcano authored and Samuel Ortiz committed Mar 6, 2012
1 parent 9f60d33 commit 9ab492e
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 0 deletions.
20 changes: 20 additions & 0 deletions drivers/mfd/db8500-prcmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -883,6 +883,26 @@ bool db8500_prcmu_gic_pending_irq(void)
return false;
}

/*
* This function checks if there are pending interrupt on the
* prcmu which has been delegated to monitor the irqs with the
* db8500_prcmu_copy_gic_settings function.
*/
bool db8500_prcmu_pending_irq(void)
{
u32 it, im;
int i;

for (i = 0; i < PRCMU_GIC_NUMBER_REGS - 1; i++) {
it = readl(PRCM_ARMITVAL31TO0 + i * 4);
im = readl(PRCM_ARMITMSK31TO0 + i * 4);
if (it & im)
return true; /* There is a pending interrupt */
}

return false;
}

/*
* This function copies the gic SPI settings to the prcmu in order to
* monitor them and abort/finish the retention/off sequence or state.
Expand Down
1 change: 1 addition & 0 deletions include/linux/mfd/db8500-prcmu.h
Original file line number Diff line number Diff line change
Expand Up @@ -584,6 +584,7 @@ int db8500_prcmu_gic_decouple(void);
int db8500_prcmu_gic_recouple(void);
int db8500_prcmu_copy_gic_settings(void);
bool db8500_prcmu_gic_pending_irq(void);
bool db8500_prcmu_pending_irq(void);
void db8500_prcmu_enable_wakeups(u32 wakeups);
int db8500_prcmu_set_epod(u16 epod_id, u8 epod_state);
int db8500_prcmu_request_clock(u8 clock, bool enable);
Expand Down
8 changes: 8 additions & 0 deletions include/linux/mfd/dbx500-prcmu.h
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,14 @@ static inline int prcmu_copy_gic_settings(void)
return db8500_prcmu_copy_gic_settings();
}

static inline bool prcmu_pending_irq(void)
{
if (cpu_is_u5500())
return -EINVAL;
else
return db8500_prcmu_pending_irq();
}

static inline int prcmu_set_epod(u16 epod_id, u8 epod_state)
{
if (cpu_is_u5500())
Expand Down

0 comments on commit 9ab492e

Please sign in to comment.