Skip to content

Commit

Permalink
ARM: omap: Consolidate OMAP3 time keeping and irq enable
Browse files Browse the repository at this point in the history
Use core cpuidle timekeeping and irqen wrapper and remove that
handling from this code.

Signed-off-by: Robert Lee <rob.lee@linaro.org>
Reviewed-by: Kevin Hilman <khilman@ti.com>
Reviewed-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Tested-by: Jean Pihet <j-pihet@ti.com>
Acked-by: Jean Pihet <j-pihet@ti.com>
Signed-off-by: Len Brown <len.brown@intel.com>
  • Loading branch information
Robert Lee authored and Len Brown committed Mar 21, 2012
1 parent 19976c2 commit 6da45dc
Showing 1 changed file with 17 additions and 25 deletions.
42 changes: 17 additions & 25 deletions arch/arm/mach-omap2/cpuidle34xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,29 +87,14 @@ static int _cpuidle_deny_idle(struct powerdomain *pwrdm,
return 0;
}

/**
* omap3_enter_idle - Programs OMAP3 to enter the specified state
* @dev: cpuidle device
* @drv: cpuidle driver
* @index: the index of state to be entered
*
* Called from the CPUidle framework to program the device to the
* specified target state selected by the governor.
*/
static int omap3_enter_idle(struct cpuidle_device *dev,
static int __omap3_enter_idle(struct cpuidle_device *dev,
struct cpuidle_driver *drv,
int index)
{
struct omap3_idle_statedata *cx =
cpuidle_get_statedata(&dev->states_usage[index]);
struct timespec ts_preidle, ts_postidle, ts_idle;
u32 mpu_state = cx->mpu_state, core_state = cx->core_state;
int idle_time;

/* Used to keep track of the total time in idle */
getnstimeofday(&ts_preidle);

local_irq_disable();
local_fiq_disable();

pwrdm_set_next_pwrst(mpu_pd, mpu_state);
Expand Down Expand Up @@ -148,21 +133,28 @@ static int omap3_enter_idle(struct cpuidle_device *dev,
}

return_sleep_time:
getnstimeofday(&ts_postidle);
ts_idle = timespec_sub(ts_postidle, ts_preidle);

local_irq_enable();
local_fiq_enable();

idle_time = ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * \
USEC_PER_SEC;

/* Update cpuidle counters */
dev->last_residency = idle_time;

return index;
}

/**
* omap3_enter_idle - Programs OMAP3 to enter the specified state
* @dev: cpuidle device
* @drv: cpuidle driver
* @index: the index of state to be entered
*
* Called from the CPUidle framework to program the device to the
* specified target state selected by the governor.
*/
static inline int omap3_enter_idle(struct cpuidle_device *dev,
struct cpuidle_driver *drv,
int index)
{
return cpuidle_wrap_enter(dev, drv, index, __omap3_enter_idle);
}

/**
* next_valid_state - Find next valid C-state
* @dev: cpuidle device
Expand Down

0 comments on commit 6da45dc

Please sign in to comment.