diff options
author | Alex Gonzalez <alex.gonzalez@digi.com> | 2012-02-21 12:54:42 +0100 |
---|---|---|
committer | Alex Gonzalez <alex.gonzalez@digi.com> | 2012-02-21 12:54:42 +0100 |
commit | b18c30dd60daee65abed837402e92a8e549e7af2 (patch) | |
tree | 6f6ee99fbdb9f2c79a2e66e9bd3dd6ff76684ffb | |
parent | 813a95ac0757995ae76d873ce14e41fc60a61965 (diff) |
mc13892: Generalize the previous patch.
The masking/unmasking of events in suspend/resume is not specific to
any platform.
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
-rw-r--r-- | arch/arm/mach-mx5/mx51_ccwmx51js_pmic_mc13892.c | 43 | ||||
-rw-r--r-- | drivers/mxc/pmic/core/pmic_external.c | 46 | ||||
-rw-r--r-- | drivers/mxc/pmic/mc13892/pmic_adc.c | 7 | ||||
-rw-r--r-- | include/linux/pmic_external.h | 2 |
4 files changed, 50 insertions, 48 deletions
diff --git a/arch/arm/mach-mx5/mx51_ccwmx51js_pmic_mc13892.c b/arch/arm/mach-mx5/mx51_ccwmx51js_pmic_mc13892.c index fbf097528041..9050e3586cae 100644 --- a/arch/arm/mach-mx5/mx51_ccwmx51js_pmic_mc13892.c +++ b/arch/arm/mach-mx5/mx51_ccwmx51js_pmic_mc13892.c @@ -26,8 +26,6 @@ #include <mach/irqs.h> #include "mx51_pins.h" -static unsigned int irqmasks[2]; - /* * Convenience conversion. * Here atm, maybe there is somewhere better for this. @@ -337,47 +335,6 @@ static void power_on_evt_handler(void) } #endif -int ccxmx51_pm_mc13892_mask_irqs( void ) -{ - int ev; - - // Store current masks - pmic_get_enabled_events(irqmasks); - - // Mask all events except power button and RTC - for( ev=0 ; ev < EVENT_NB ; ev++ ){ - if( ev == EVENT_PWRONI || ev == EVENT_TODAI ) - continue; - if( !pmic_is_event_masked(irqmasks,ev) ) - pmic_event_mask(ev); - } - return 0; -} - -int ccxmx51_pm_mc13892_unmask_irqs( void ) -{ - int ev; - unsigned int current_irqmasks[2]; - - // Fetch current event mask - pmic_get_enabled_events(current_irqmasks); - - // For all events - for( ev=0 ; ev < EVENT_NB ; ev++ ){ - if( pmic_is_event_masked(irqmasks,ev) ){ - if( !pmic_is_event_masked(current_irqmasks,ev) ){ - pmic_event_mask(ev); - } - } - else{ - if( pmic_is_event_masked(current_irqmasks,ev) ){ - pmic_event_unmask(ev); - } - } - } - return 0; -} - static int mc13892_regulator_init(struct mc13892 *mc13892) { unsigned int value, register_mask; diff --git a/drivers/mxc/pmic/core/pmic_external.c b/drivers/mxc/pmic/core/pmic_external.c index b5047d63e7b5..47697d3b9398 100644 --- a/drivers/mxc/pmic/core/pmic_external.c +++ b/drivers/mxc/pmic/core/pmic_external.c @@ -232,6 +232,9 @@ PMIC_STATUS pmic_write_reg(int reg, unsigned int reg_value, } #ifndef CONFIG_MXC_PMIC_MC34704 + +static unsigned int irqmasks[2]; + unsigned int pmic_get_active_events(unsigned int *active_events) { unsigned int count = 0; @@ -352,6 +355,49 @@ int pmic_event_mask(type_event event) return ret; } EXPORT_SYMBOL(pmic_event_mask); + +int mc13892_suspend_mask_irqs( void ) +{ + int ev; + + // Store current masks + pmic_get_enabled_events(irqmasks); + + // Mask all events except power button and RTC + for( ev=0 ; ev < EVENT_NB ; ev++ ){ + if( ev == EVENT_PWRONI || ev == EVENT_TODAI ) + continue; + if( !pmic_is_event_masked(irqmasks,ev) ) + pmic_event_mask(ev); + } + return 0; +} +EXPORT_SYMBOL(mc13892_suspend_mask_irqs); + +int mc13892_resume_unmask_irqs( void ) +{ + int ev; + unsigned int current_irqmasks[2]; + + // Fetch current event mask + pmic_get_enabled_events(current_irqmasks); + + // For all events + for( ev=0 ; ev < EVENT_NB ; ev++ ){ + if( pmic_is_event_masked(irqmasks,ev) ){ + if( !pmic_is_event_masked(current_irqmasks,ev) ){ + pmic_event_mask(ev); + } + } + else{ + if( pmic_is_event_masked(current_irqmasks,ev) ){ + pmic_event_unmask(ev); + } + } + } + return 0; +} +EXPORT_SYMBOL(mc13892_resume_unmask_irqs); #endif EXPORT_SYMBOL(pmic_read_reg); diff --git a/drivers/mxc/pmic/mc13892/pmic_adc.c b/drivers/mxc/pmic/mc13892/pmic_adc.c index 998334361c2a..6a81e00c6ca6 100644 --- a/drivers/mxc/pmic/mc13892/pmic_adc.c +++ b/drivers/mxc/pmic/mc13892/pmic_adc.c @@ -43,9 +43,6 @@ static int mc13892_adc_major; static struct class *mc13892_adc_class; -extern int ccxmx51_pm_mc13892_mask_irqs( void ); -extern int ccxmx51_pm_mc13892_unmask_irqs( void ); - /* * Maximun allowed variation in the three X/Y co-ordinates acquired from * touch-screen @@ -257,7 +254,7 @@ static int pmic_adc_suspend(struct platform_device *pdev, pm_message_t state) CHECK_ERROR(pmic_write_reg(REG_ADC3, DEF_ADC_3, PMIC_ALL_BITS)); CHECK_ERROR(pmic_write_reg(REG_ADC4, 0, PMIC_ALL_BITS)); - ccxmx51_pm_mc13892_mask_irqs(); + mc13892_suspend_mask_irqs(); return 0; }; @@ -274,7 +271,7 @@ static int pmic_adc_resume(struct platform_device *pdev) adc_1_reg = ADC_WAIT_TSI_1 | (ADC_BIS * adc_ts); CHECK_ERROR(pmic_write_reg(REG_ADC1, adc_1_reg, PMIC_ALL_BITS)); - ccxmx51_pm_mc13892_unmask_irqs(); + mc13892_resume_unmask_irqs(); while (swait > 0) { swait--; diff --git a/include/linux/pmic_external.h b/include/linux/pmic_external.h index 336c6fbaf254..5c7026acff8d 100644 --- a/include/linux/pmic_external.h +++ b/include/linux/pmic_external.h @@ -507,6 +507,8 @@ void pmic_event_callback(type_event event); void pmic_event_list_init(void); void pmic_get_enabled_events(unsigned int *enabled_events); int pmic_is_event_masked( unsigned int * event_mask , type_event event ); +int mc13892_suspend_mask_irqs( void ); +int mc13892_resume_unmask_irqs( void ); unsigned int pmic_get_active_events(unsigned int *active_events); int pmic_event_mask(type_event event); int pmic_event_unmask(type_event event); |