3434#include "pm.h"
3535#include "control.h"
3636#include "common.h"
37+ #include "soc.h"
3738
3839/* Mach specific information to be recorded in the C-state driver_data */
3940struct omap3_idle_statedata {
@@ -315,6 +316,69 @@ static struct cpuidle_driver omap3_idle_driver = {
315316 .safe_state_index = 0 ,
316317};
317318
319+ /*
320+ * Numbers based on measurements made in October 2009 for PM optimized kernel
321+ * with CPU freq enabled on device Nokia N900. Assumes OPP2 (main idle OPP,
322+ * and worst case latencies).
323+ */
324+ static struct cpuidle_driver omap3430_idle_driver = {
325+ .name = "omap3430_idle" ,
326+ .owner = THIS_MODULE ,
327+ .states = {
328+ {
329+ .enter = omap3_enter_idle_bm ,
330+ .exit_latency = 110 + 162 ,
331+ .target_residency = 5 ,
332+ .name = "C1" ,
333+ .desc = "MPU ON + CORE ON" ,
334+ },
335+ {
336+ .enter = omap3_enter_idle_bm ,
337+ .exit_latency = 106 + 180 ,
338+ .target_residency = 309 ,
339+ .name = "C2" ,
340+ .desc = "MPU ON + CORE ON" ,
341+ },
342+ {
343+ .enter = omap3_enter_idle_bm ,
344+ .exit_latency = 107 + 410 ,
345+ .target_residency = 46057 ,
346+ .name = "C3" ,
347+ .desc = "MPU RET + CORE ON" ,
348+ },
349+ {
350+ .enter = omap3_enter_idle_bm ,
351+ .exit_latency = 121 + 3374 ,
352+ .target_residency = 46057 ,
353+ .name = "C4" ,
354+ .desc = "MPU OFF + CORE ON" ,
355+ },
356+ {
357+ .enter = omap3_enter_idle_bm ,
358+ .exit_latency = 855 + 1146 ,
359+ .target_residency = 46057 ,
360+ .name = "C5" ,
361+ .desc = "MPU RET + CORE RET" ,
362+ },
363+ {
364+ .enter = omap3_enter_idle_bm ,
365+ .exit_latency = 7580 + 4134 ,
366+ .target_residency = 484329 ,
367+ .name = "C6" ,
368+ .desc = "MPU OFF + CORE RET" ,
369+ },
370+ {
371+ .enter = omap3_enter_idle_bm ,
372+ .exit_latency = 7505 + 15274 ,
373+ .target_residency = 484329 ,
374+ .name = "C7" ,
375+ .desc = "MPU OFF + CORE OFF" ,
376+ },
377+ },
378+ .state_count = ARRAY_SIZE (omap3_idle_data ),
379+ .safe_state_index = 0 ,
380+ };
381+
318382/* Public functions */
319383
320384/**
@@ -333,5 +397,8 @@ int __init omap3_idle_init(void)
333397 if (!mpu_pd || !core_pd || !per_pd || !cam_pd )
334398 return - ENODEV ;
335399
336- return cpuidle_register (& omap3_idle_driver , NULL );
400+ if (cpu_is_omap3430 ())
401+ return cpuidle_register (& omap3430_idle_driver , NULL );
402+ else
403+ return cpuidle_register (& omap3_idle_driver , NULL );
337404}
0 commit comments