Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@xxxxxxxxx> --- arch/arm/mach-omap2/pm-debug.c | 107 ++++++---------------------------------- 1 files changed, 16 insertions(+), 91 deletions(-) diff --git a/arch/arm/mach-omap2/pm-debug.c b/arch/arm/mach-omap2/pm-debug.c index 380a2a0..a375312 100644 --- a/arch/arm/mach-omap2/pm-debug.c +++ b/arch/arm/mach-omap2/pm-debug.c @@ -318,94 +318,20 @@ int pm_dbg_regset_save(int reg_set) return 0; } -static int _pm_dbg_state_switch(struct powerdomain *pwrdm, int flag) +void pm_dbg_update_time(struct powerdomain *pwrdm, int prev) { s64 t; struct timespec now; - int prev; - int state; - if (pwrdm == NULL) - return -EINVAL; - - state = pwrdm_read_pwrst(pwrdm); - - switch (flag) { - case PM_DBG_STATE_NOW: - prev = pwrdm->state; - break; - case PM_DBG_STATE_PREV: - prev = pwrdm_read_prev_pwrst(pwrdm); - if (pwrdm->state != prev) - pwrdm->state_counter[prev]++; - break; - default: - return -EINVAL; - } - - if (pm_dbg_init_done) { - /* Update timer for previous state */ - getnstimeofday(&now); - t = timespec_to_ns(&now); - - pwrdm->state_timer[prev] += t - pwrdm->timer; - - pwrdm->timer = t; - - if (state != prev) - pwrdm->state_counter[state]++; - } - - pwrdm->state = state; - - return 0; -} - -int pm_dbg_pwrdm_state_switch(struct powerdomain *pwrdm) -{ - return _pm_dbg_state_switch(pwrdm, PM_DBG_STATE_NOW); -} - -int pm_dbg_clkdm_state_switch(struct clockdomain *clkdm) -{ - if (clkdm != NULL && clkdm->pwrdm.ptr != NULL) { - pwrdm_wait_transition(clkdm->pwrdm.ptr); - return pm_dbg_pwrdm_state_switch(clkdm->pwrdm.ptr); - } - - return -EINVAL; -} - -int pm_dbg_clk_state_switch(struct clk *clk) -{ - if (clk != NULL && clk->clkdm.ptr != NULL) - return pm_dbg_clkdm_state_switch(clk->clkdm.ptr); - return -EINVAL; -} + if (!pm_dbg_init_done) + return; -static int pm_dbg_pre_suspend_cb(struct powerdomain *pwrdm) -{ - pwrdm_clear_all_prev_pwrst(pwrdm); - _pm_dbg_state_switch(pwrdm, PM_DBG_STATE_NOW); - return 0; -} - -static int pm_dbg_post_suspend_cb(struct powerdomain *pwrdm) -{ - _pm_dbg_state_switch(pwrdm, PM_DBG_STATE_PREV); - return 0; -} + getnstimeofday(&now); + t = timespec_to_ns(&now); -int pm_dbg_pre_suspend(void) -{ - pwrdm_for_each(pm_dbg_pre_suspend_cb); - return 0; -} + pwrdm->state_timer[prev] += t - pwrdm->timer; -int pm_dbg_post_suspend(void) -{ - pwrdm_for_each(pm_dbg_post_suspend_cb); - return 0; + pwrdm->timer = t; } enum { @@ -489,25 +415,23 @@ int pm_dbg_regset_init(int reg_set) return 0; } -static int __init pwrdms_setup(struct powerdomain *pwrdm) +int __init _pwrdm_debug_setup(struct powerdomain *pwrdm, void *user) { - s64 t; - int i; + s64 t=0; struct timespec now; + int i; + +printk("pwrdm: %p\n",pwrdm); getnstimeofday(&now); t = timespec_to_ns(&now); + pwrdm->timer = t; + for (i = 0; i < 4; i++) { - pwrdm->state_counter[i] = 0; pwrdm->state_timer[i] = 0; } - pwrdm_wait_transition(pwrdm); - pwrdm->state = pwrdm_read_pwrst(pwrdm); - pwrdm->state_counter[pwrdm->state] = 1; - pwrdm->timer = t; - (void) debugfs_create_file(pwrdm->name, S_IRUGO|S_IWUSR, pm_dbg_dir, pwrdm, &debug_pwrdm_fops); @@ -535,7 +459,7 @@ static int __init pm_dbg_init(void) if (IS_ERR(pm_dbg_dir)) return PTR_ERR(pm_dbg_dir); - pwrdm_for_each(pwrdms_setup); + pwrdm_for_each(_pwrdm_debug_setup, NULL); pm_dbg_dir = debugfs_create_dir("registers", d); if (IS_ERR(pm_dbg_dir)) @@ -552,6 +476,7 @@ static int __init pm_dbg_init(void) } + pm_dbg_init_done = 1; return 0; -- 1.5.6.3 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html