diff options
author | Daniel Lezcano <daniel.lezcano@linaro.org> | 2012-02-28 16:46:08 -0500 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2012-03-06 12:46:56 -0500 |
commit | 9ab492e12d588af7b05892c3744e8bdc2eace6d0 (patch) | |
tree | 7b79c2d3c840239f5b0a4e717227c8adf51c69cc | |
parent | 9f60d33e1811e0aa696a3152050d6e3e4c3195aa (diff) |
mfd : Check if the db8500 prcmu has pending irq
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>
-rw-r--r-- | drivers/mfd/db8500-prcmu.c | 20 | ||||
-rw-r--r-- | include/linux/mfd/db8500-prcmu.h | 1 | ||||
-rw-r--r-- | include/linux/mfd/dbx500-prcmu.h | 8 |
3 files changed, 29 insertions, 0 deletions
diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c index 97341aa4025c..4e27db841fab 100644 --- a/drivers/mfd/db8500-prcmu.c +++ b/drivers/mfd/db8500-prcmu.c | |||
@@ -884,6 +884,26 @@ bool db8500_prcmu_gic_pending_irq(void) | |||
884 | } | 884 | } |
885 | 885 | ||
886 | /* | 886 | /* |
887 | * This function checks if there are pending interrupt on the | ||
888 | * prcmu which has been delegated to monitor the irqs with the | ||
889 | * db8500_prcmu_copy_gic_settings function. | ||
890 | */ | ||
891 | bool db8500_prcmu_pending_irq(void) | ||
892 | { | ||
893 | u32 it, im; | ||
894 | int i; | ||
895 | |||
896 | for (i = 0; i < PRCMU_GIC_NUMBER_REGS - 1; i++) { | ||
897 | it = readl(PRCM_ARMITVAL31TO0 + i * 4); | ||
898 | im = readl(PRCM_ARMITMSK31TO0 + i * 4); | ||
899 | if (it & im) | ||
900 | return true; /* There is a pending interrupt */ | ||
901 | } | ||
902 | |||
903 | return false; | ||
904 | } | ||
905 | |||
906 | /* | ||
887 | * This function copies the gic SPI settings to the prcmu in order to | 907 | * This function copies the gic SPI settings to the prcmu in order to |
888 | * monitor them and abort/finish the retention/off sequence or state. | 908 | * monitor them and abort/finish the retention/off sequence or state. |
889 | */ | 909 | */ |
diff --git a/include/linux/mfd/db8500-prcmu.h b/include/linux/mfd/db8500-prcmu.h index a5915852176a..926bdb3adc0f 100644 --- a/include/linux/mfd/db8500-prcmu.h +++ b/include/linux/mfd/db8500-prcmu.h | |||
@@ -584,6 +584,7 @@ int db8500_prcmu_gic_decouple(void); | |||
584 | int db8500_prcmu_gic_recouple(void); | 584 | int db8500_prcmu_gic_recouple(void); |
585 | int db8500_prcmu_copy_gic_settings(void); | 585 | int db8500_prcmu_copy_gic_settings(void); |
586 | bool db8500_prcmu_gic_pending_irq(void); | 586 | bool db8500_prcmu_gic_pending_irq(void); |
587 | bool db8500_prcmu_pending_irq(void); | ||
587 | void db8500_prcmu_enable_wakeups(u32 wakeups); | 588 | void db8500_prcmu_enable_wakeups(u32 wakeups); |
588 | int db8500_prcmu_set_epod(u16 epod_id, u8 epod_state); | 589 | int db8500_prcmu_set_epod(u16 epod_id, u8 epod_state); |
589 | int db8500_prcmu_request_clock(u8 clock, bool enable); | 590 | int db8500_prcmu_request_clock(u8 clock, bool enable); |
diff --git a/include/linux/mfd/dbx500-prcmu.h b/include/linux/mfd/dbx500-prcmu.h index f8429cad0db7..5c72c07e20e4 100644 --- a/include/linux/mfd/dbx500-prcmu.h +++ b/include/linux/mfd/dbx500-prcmu.h | |||
@@ -313,6 +313,14 @@ static inline int prcmu_copy_gic_settings(void) | |||
313 | return db8500_prcmu_copy_gic_settings(); | 313 | return db8500_prcmu_copy_gic_settings(); |
314 | } | 314 | } |
315 | 315 | ||
316 | static inline bool prcmu_pending_irq(void) | ||
317 | { | ||
318 | if (cpu_is_u5500()) | ||
319 | return -EINVAL; | ||
320 | else | ||
321 | return db8500_prcmu_pending_irq(); | ||
322 | } | ||
323 | |||
316 | static inline int prcmu_set_epod(u16 epod_id, u8 epod_state) | 324 | static inline int prcmu_set_epod(u16 epod_id, u8 epod_state) |
317 | { | 325 | { |
318 | if (cpu_is_u5500()) | 326 | if (cpu_is_u5500()) |