[02/17,V2] ARM: OMAP4: cpuidle - Declare the states with the driver declaration

Message ID 1333570371-1389-3-git-send-email-daniel.lezcano@linaro.org
State New
Headers show

Commit Message

Daniel Lezcano April 4, 2012, 8:12 p.m.
The cpuidle API allows to declare statically the states in the driver
structure. Let's use it.
We do no longer need the fill_cstate function called at runtime and
by the way adding more instructions at boot time.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Jean Pihet <j-pihet@ti.com>
Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
---
 arch/arm/mach-omap2/cpuidle44xx.c |   57 +++++++++++++++++++++---------------
 1 files changed, 33 insertions(+), 24 deletions(-)

Comments

Kevin Hilman April 9, 2012, 10:37 p.m. | #1
Daniel Lezcano <daniel.lezcano@linaro.org> writes:

> The cpuidle API allows to declare statically the states in the driver
> structure. Let's use it.
> We do no longer need the fill_cstate function called at runtime and
> by the way adding more instructions at boot time.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> Reviewed-by: Jean Pihet <j-pihet@ti.com>
> Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
> ---
>  arch/arm/mach-omap2/cpuidle44xx.c |   57 +++++++++++++++++++++---------------
>  1 files changed, 33 insertions(+), 24 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c
> index ee0bc50..6d86b59 100644
> --- a/arch/arm/mach-omap2/cpuidle44xx.c
> +++ b/arch/arm/mach-omap2/cpuidle44xx.c
> @@ -132,21 +132,39 @@ struct cpuidle_driver omap4_idle_driver = {
>  	.name				= "omap4_idle",
>  	.owner				= THIS_MODULE,
>  	.en_core_tk_irqen		= 1,
> +	.states = {
> +		{
> +			/* C1 - CPU0 ON + CPU1 ON + MPU ON */
> +			.exit_latency = 2 + 2,
> +			.target_residency = 5,
> +			.flags = CPUIDLE_FLAG_TIME_VALID,
> +			.enter = omap4_enter_idle,
> +			.name = "C1",
> +			.desc = "MPUSS ON"
> +		},
> +		{
> +                        /* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */
> +			.exit_latency = 328 + 440,
> +			.target_residency = 960,
> +			.flags = CPUIDLE_FLAG_TIME_VALID,
> +			.enter = omap4_enter_idle,
> +			.name = "C2",
> +			.desc = "MPUSS CSWR",
> +		},
> +		{
> +			/* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */
> +			.exit_latency = 460 + 518,
> +			.target_residency = 1100,
> +			.flags = CPUIDLE_FLAG_TIME_VALID,
> +			.enter = omap4_enter_idle,
> +			.name = "C3",
> +			.desc = "MPUSS OSWR",
> +		},
> +	},
> +	.state_count = OMAP4_NUM_STATES,

I think you can drop OMAP4_NUM_STATES here, and just use:

	.state_count = ARRAY_SIZE(omap4_idle_driver.states),

Then drop OMAP4_NUM_STATES all together in patch 3.

Kevin
Daniel Lezcano April 19, 2012, 1:58 p.m. | #2
On 04/10/2012 12:37 AM, Kevin Hilman wrote:
> Daniel Lezcano<daniel.lezcano@linaro.org>  writes:
>
>> The cpuidle API allows to declare statically the states in the driver
>> structure. Let's use it.
>> We do no longer need the fill_cstate function called at runtime and
>> by the way adding more instructions at boot time.
>>
>> Signed-off-by: Daniel Lezcano<daniel.lezcano@linaro.org>
>> Reviewed-by: Jean Pihet<j-pihet@ti.com>
>> Reviewed-by: Santosh Shilimkar<santosh.shilimkar@ti.com>
>> ---
>>   arch/arm/mach-omap2/cpuidle44xx.c |   57 +++++++++++++++++++++---------------
>>   1 files changed, 33 insertions(+), 24 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c
>> index ee0bc50..6d86b59 100644
>> --- a/arch/arm/mach-omap2/cpuidle44xx.c
>> +++ b/arch/arm/mach-omap2/cpuidle44xx.c
>> @@ -132,21 +132,39 @@ struct cpuidle_driver omap4_idle_driver = {
>>   	.name				= "omap4_idle",
>>   	.owner				= THIS_MODULE,
>>   	.en_core_tk_irqen		= 1,
>> +	.states = {
>> +		{
>> +			/* C1 - CPU0 ON + CPU1 ON + MPU ON */
>> +			.exit_latency = 2 + 2,
>> +			.target_residency = 5,
>> +			.flags = CPUIDLE_FLAG_TIME_VALID,
>> +			.enter = omap4_enter_idle,
>> +			.name = "C1",
>> +			.desc = "MPUSS ON"
>> +		},
>> +		{
>> +                        /* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */
>> +			.exit_latency = 328 + 440,
>> +			.target_residency = 960,
>> +			.flags = CPUIDLE_FLAG_TIME_VALID,
>> +			.enter = omap4_enter_idle,
>> +			.name = "C2",
>> +			.desc = "MPUSS CSWR",
>> +		},
>> +		{
>> +			/* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */
>> +			.exit_latency = 460 + 518,
>> +			.target_residency = 1100,
>> +			.flags = CPUIDLE_FLAG_TIME_VALID,
>> +			.enter = omap4_enter_idle,
>> +			.name = "C3",
>> +			.desc = "MPUSS OSWR",
>> +		},
>> +	},
>> +	.state_count = OMAP4_NUM_STATES,
>
> I think you can drop OMAP4_NUM_STATES here, and just use:
>
> 	.state_count = ARRAY_SIZE(omap4_idle_driver.states),
>
> Then drop OMAP4_NUM_STATES all together in patch 3.

Ok.
Daniel Lezcano April 23, 2012, 2:06 p.m. | #3
On 04/19/2012 03:58 PM, Daniel Lezcano wrote:
> On 04/10/2012 12:37 AM, Kevin Hilman wrote:
>> Daniel Lezcano<daniel.lezcano@linaro.org>  writes:
>>
>>> The cpuidle API allows to declare statically the states in the driver
>>> structure. Let's use it.
>>> We do no longer need the fill_cstate function called at runtime and
>>> by the way adding more instructions at boot time.
>>>
>>> Signed-off-by: Daniel Lezcano<daniel.lezcano@linaro.org>
>>> Reviewed-by: Jean Pihet<j-pihet@ti.com>
>>> Reviewed-by: Santosh Shilimkar<santosh.shilimkar@ti.com>
>>> ---
>>>   arch/arm/mach-omap2/cpuidle44xx.c |   57 
>>> +++++++++++++++++++++---------------
>>>   1 files changed, 33 insertions(+), 24 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-omap2/cpuidle44xx.c 
>>> b/arch/arm/mach-omap2/cpuidle44xx.c
>>> index ee0bc50..6d86b59 100644
>>> --- a/arch/arm/mach-omap2/cpuidle44xx.c
>>> +++ b/arch/arm/mach-omap2/cpuidle44xx.c
>>> @@ -132,21 +132,39 @@ struct cpuidle_driver omap4_idle_driver = {
>>>       .name                = "omap4_idle",
>>>       .owner                = THIS_MODULE,
>>>       .en_core_tk_irqen        = 1,
>>> +    .states = {
>>> +        {
>>> +            /* C1 - CPU0 ON + CPU1 ON + MPU ON */
>>> +            .exit_latency = 2 + 2,
>>> +            .target_residency = 5,
>>> +            .flags = CPUIDLE_FLAG_TIME_VALID,
>>> +            .enter = omap4_enter_idle,
>>> +            .name = "C1",
>>> +            .desc = "MPUSS ON"
>>> +        },
>>> +        {
>>> +                        /* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */
>>> +            .exit_latency = 328 + 440,
>>> +            .target_residency = 960,
>>> +            .flags = CPUIDLE_FLAG_TIME_VALID,
>>> +            .enter = omap4_enter_idle,
>>> +            .name = "C2",
>>> +            .desc = "MPUSS CSWR",
>>> +        },
>>> +        {
>>> +            /* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */
>>> +            .exit_latency = 460 + 518,
>>> +            .target_residency = 1100,
>>> +            .flags = CPUIDLE_FLAG_TIME_VALID,
>>> +            .enter = omap4_enter_idle,
>>> +            .name = "C3",
>>> +            .desc = "MPUSS OSWR",
>>> +        },
>>> +    },
>>> +    .state_count = OMAP4_NUM_STATES,
>>
>> I think you can drop OMAP4_NUM_STATES here, and just use:
>>
>>     .state_count = ARRAY_SIZE(omap4_idle_driver.states),
>>
>> Then drop OMAP4_NUM_STATES all together in patch 3.
>
> Ok.

I said 'ok' but it is not :)

omap4_idle_driver.states has a fixed length which is CPUIDLE_STATE_MAX (8).
We need to define it manually as 3 for now.
Kevin Hilman April 23, 2012, 5:08 p.m. | #4
Daniel Lezcano <daniel.lezcano@linaro.org> writes:

> On 04/19/2012 03:58 PM, Daniel Lezcano wrote:
>> On 04/10/2012 12:37 AM, Kevin Hilman wrote:
>>> Daniel Lezcano<daniel.lezcano@linaro.org>  writes:
>>>
>>>> The cpuidle API allows to declare statically the states in the driver
>>>> structure. Let's use it.
>>>> We do no longer need the fill_cstate function called at runtime and
>>>> by the way adding more instructions at boot time.
>>>>
>>>> Signed-off-by: Daniel Lezcano<daniel.lezcano@linaro.org>
>>>> Reviewed-by: Jean Pihet<j-pihet@ti.com>
>>>> Reviewed-by: Santosh Shilimkar<santosh.shilimkar@ti.com>
>>>> ---
>>>>   arch/arm/mach-omap2/cpuidle44xx.c |   57
>>>> +++++++++++++++++++++---------------
>>>>   1 files changed, 33 insertions(+), 24 deletions(-)
>>>>
>>>> diff --git a/arch/arm/mach-omap2/cpuidle44xx.c
>>>> b/arch/arm/mach-omap2/cpuidle44xx.c
>>>> index ee0bc50..6d86b59 100644
>>>> --- a/arch/arm/mach-omap2/cpuidle44xx.c
>>>> +++ b/arch/arm/mach-omap2/cpuidle44xx.c
>>>> @@ -132,21 +132,39 @@ struct cpuidle_driver omap4_idle_driver = {
>>>>       .name                = "omap4_idle",
>>>>       .owner                = THIS_MODULE,
>>>>       .en_core_tk_irqen        = 1,
>>>> +    .states = {
>>>> +        {
>>>> +            /* C1 - CPU0 ON + CPU1 ON + MPU ON */
>>>> +            .exit_latency = 2 + 2,
>>>> +            .target_residency = 5,
>>>> +            .flags = CPUIDLE_FLAG_TIME_VALID,
>>>> +            .enter = omap4_enter_idle,
>>>> +            .name = "C1",
>>>> +            .desc = "MPUSS ON"
>>>> +        },
>>>> +        {
>>>> +                        /* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */
>>>> +            .exit_latency = 328 + 440,
>>>> +            .target_residency = 960,
>>>> +            .flags = CPUIDLE_FLAG_TIME_VALID,
>>>> +            .enter = omap4_enter_idle,
>>>> +            .name = "C2",
>>>> +            .desc = "MPUSS CSWR",
>>>> +        },
>>>> +        {
>>>> +            /* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */
>>>> +            .exit_latency = 460 + 518,
>>>> +            .target_residency = 1100,
>>>> +            .flags = CPUIDLE_FLAG_TIME_VALID,
>>>> +            .enter = omap4_enter_idle,
>>>> +            .name = "C3",
>>>> +            .desc = "MPUSS OSWR",
>>>> +        },
>>>> +    },
>>>> +    .state_count = OMAP4_NUM_STATES,
>>>
>>> I think you can drop OMAP4_NUM_STATES here, and just use:
>>>
>>>     .state_count = ARRAY_SIZE(omap4_idle_driver.states),
>>>
>>> Then drop OMAP4_NUM_STATES all together in patch 3.
>>
>> Ok.
>
> I said 'ok' but it is not :)
>
> omap4_idle_driver.states has a fixed length which is CPUIDLE_STATE_MAX (8).
> We need to define it manually as 3 for now.

I don't see the connection between the two.

Why can't you use ARRAY_SIZE(), and just have an error check later in
the init to see if state_count > max.

Kevin
Daniel Lezcano April 23, 2012, 10:11 p.m. | #5
On 04/23/2012 07:08 PM, Kevin Hilman wrote:
> Daniel Lezcano<daniel.lezcano@linaro.org>  writes:
>
>> On 04/19/2012 03:58 PM, Daniel Lezcano wrote:
>>> On 04/10/2012 12:37 AM, Kevin Hilman wrote:
>>>> Daniel Lezcano<daniel.lezcano@linaro.org>   writes:
>>>>
>>>>> The cpuidle API allows to declare statically the states in the driver
>>>>> structure. Let's use it.
>>>>> We do no longer need the fill_cstate function called at runtime and
>>>>> by the way adding more instructions at boot time.
>>>>>
>>>>> Signed-off-by: Daniel Lezcano<daniel.lezcano@linaro.org>
>>>>> Reviewed-by: Jean Pihet<j-pihet@ti.com>
>>>>> Reviewed-by: Santosh Shilimkar<santosh.shilimkar@ti.com>
>>>>> ---
>>>>>    arch/arm/mach-omap2/cpuidle44xx.c |   57
>>>>> +++++++++++++++++++++---------------
>>>>>    1 files changed, 33 insertions(+), 24 deletions(-)
>>>>>
>>>>> diff --git a/arch/arm/mach-omap2/cpuidle44xx.c
>>>>> b/arch/arm/mach-omap2/cpuidle44xx.c
>>>>> index ee0bc50..6d86b59 100644
>>>>> --- a/arch/arm/mach-omap2/cpuidle44xx.c
>>>>> +++ b/arch/arm/mach-omap2/cpuidle44xx.c
>>>>> @@ -132,21 +132,39 @@ struct cpuidle_driver omap4_idle_driver = {
>>>>>        .name                = "omap4_idle",
>>>>>        .owner                = THIS_MODULE,
>>>>>        .en_core_tk_irqen        = 1,
>>>>> +    .states = {
>>>>> +        {
>>>>> +            /* C1 - CPU0 ON + CPU1 ON + MPU ON */
>>>>> +            .exit_latency = 2 + 2,
>>>>> +            .target_residency = 5,
>>>>> +            .flags = CPUIDLE_FLAG_TIME_VALID,
>>>>> +            .enter = omap4_enter_idle,
>>>>> +            .name = "C1",
>>>>> +            .desc = "MPUSS ON"
>>>>> +        },
>>>>> +        {
>>>>> +                        /* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */
>>>>> +            .exit_latency = 328 + 440,
>>>>> +            .target_residency = 960,
>>>>> +            .flags = CPUIDLE_FLAG_TIME_VALID,
>>>>> +            .enter = omap4_enter_idle,
>>>>> +            .name = "C2",
>>>>> +            .desc = "MPUSS CSWR",
>>>>> +        },
>>>>> +        {
>>>>> +            /* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */
>>>>> +            .exit_latency = 460 + 518,
>>>>> +            .target_residency = 1100,
>>>>> +            .flags = CPUIDLE_FLAG_TIME_VALID,
>>>>> +            .enter = omap4_enter_idle,
>>>>> +            .name = "C3",
>>>>> +            .desc = "MPUSS OSWR",
>>>>> +        },
>>>>> +    },
>>>>> +    .state_count = OMAP4_NUM_STATES,
>>>>
>>>> I think you can drop OMAP4_NUM_STATES here, and just use:
>>>>
>>>>      .state_count = ARRAY_SIZE(omap4_idle_driver.states),
>>>>
>>>> Then drop OMAP4_NUM_STATES all together in patch 3.
>>>
>>> Ok.
>>
>> I said 'ok' but it is not :)
>>
>> omap4_idle_driver.states has a fixed length which is CPUIDLE_STATE_MAX (8).
>> We need to define it manually as 3 for now.
>
> I don't see the connection between the two.
>
> Why can't you use ARRAY_SIZE(), and just have an error check later in
> the init to see if state_count>  max.


Maybe I misunderstood but you say:

.state_count = ARRAY_SIZE(omap4_idle_driver.states),

As in the cpuidle structure, the state array is CPUIDLE_STATE_MAX, 
ARRAY_SIZE will always return 8, not the number of the initialized states.

Anyway, I modified the patchset to use ARRAY_SIZE on the omap4_idle_data 
array, so we have:

.state_count = ARRAY_SIZE(omap4_idle_data),

   -- Daniel
Kevin Hilman April 24, 2012, 12:27 a.m. | #6
Daniel Lezcano <daniel.lezcano@linaro.org> writes:

> On 04/23/2012 07:08 PM, Kevin Hilman wrote:
>> Daniel Lezcano<daniel.lezcano@linaro.org>  writes:
>>
>>> On 04/19/2012 03:58 PM, Daniel Lezcano wrote:
>>>> On 04/10/2012 12:37 AM, Kevin Hilman wrote:
>>>>> Daniel Lezcano<daniel.lezcano@linaro.org>   writes:
>>>>>
>>>>>> The cpuidle API allows to declare statically the states in the driver
>>>>>> structure. Let's use it.
>>>>>> We do no longer need the fill_cstate function called at runtime and
>>>>>> by the way adding more instructions at boot time.
>>>>>>
>>>>>> Signed-off-by: Daniel Lezcano<daniel.lezcano@linaro.org>
>>>>>> Reviewed-by: Jean Pihet<j-pihet@ti.com>
>>>>>> Reviewed-by: Santosh Shilimkar<santosh.shilimkar@ti.com>
>>>>>> ---
>>>>>>    arch/arm/mach-omap2/cpuidle44xx.c |   57
>>>>>> +++++++++++++++++++++---------------
>>>>>>    1 files changed, 33 insertions(+), 24 deletions(-)
>>>>>>
>>>>>> diff --git a/arch/arm/mach-omap2/cpuidle44xx.c
>>>>>> b/arch/arm/mach-omap2/cpuidle44xx.c
>>>>>> index ee0bc50..6d86b59 100644
>>>>>> --- a/arch/arm/mach-omap2/cpuidle44xx.c
>>>>>> +++ b/arch/arm/mach-omap2/cpuidle44xx.c
>>>>>> @@ -132,21 +132,39 @@ struct cpuidle_driver omap4_idle_driver = {
>>>>>>        .name                = "omap4_idle",
>>>>>>        .owner                = THIS_MODULE,
>>>>>>        .en_core_tk_irqen        = 1,
>>>>>> +    .states = {
>>>>>> +        {
>>>>>> +            /* C1 - CPU0 ON + CPU1 ON + MPU ON */
>>>>>> +            .exit_latency = 2 + 2,
>>>>>> +            .target_residency = 5,
>>>>>> +            .flags = CPUIDLE_FLAG_TIME_VALID,
>>>>>> +            .enter = omap4_enter_idle,
>>>>>> +            .name = "C1",
>>>>>> +            .desc = "MPUSS ON"
>>>>>> +        },
>>>>>> +        {
>>>>>> +                        /* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */
>>>>>> +            .exit_latency = 328 + 440,
>>>>>> +            .target_residency = 960,
>>>>>> +            .flags = CPUIDLE_FLAG_TIME_VALID,
>>>>>> +            .enter = omap4_enter_idle,
>>>>>> +            .name = "C2",
>>>>>> +            .desc = "MPUSS CSWR",
>>>>>> +        },
>>>>>> +        {
>>>>>> +            /* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */
>>>>>> +            .exit_latency = 460 + 518,
>>>>>> +            .target_residency = 1100,
>>>>>> +            .flags = CPUIDLE_FLAG_TIME_VALID,
>>>>>> +            .enter = omap4_enter_idle,
>>>>>> +            .name = "C3",
>>>>>> +            .desc = "MPUSS OSWR",
>>>>>> +        },
>>>>>> +    },
>>>>>> +    .state_count = OMAP4_NUM_STATES,
>>>>>
>>>>> I think you can drop OMAP4_NUM_STATES here, and just use:
>>>>>
>>>>>      .state_count = ARRAY_SIZE(omap4_idle_driver.states),
>>>>>
>>>>> Then drop OMAP4_NUM_STATES all together in patch 3.
>>>>
>>>> Ok.
>>>
>>> I said 'ok' but it is not :)
>>>
>>> omap4_idle_driver.states has a fixed length which is CPUIDLE_STATE_MAX (8).
>>> We need to define it manually as 3 for now.
>>
>> I don't see the connection between the two.
>>
>> Why can't you use ARRAY_SIZE(), and just have an error check later in
>> the init to see if state_count>  max.
>
>
> Maybe I misunderstood but you say:
>
> .state_count = ARRAY_SIZE(omap4_idle_driver.states),
>
> As in the cpuidle structure, the state array is CPUIDLE_STATE_MAX,
> ARRAY_SIZE will always return 8, not the number of the initialized
> states.

Oh, I see now.

> Anyway, I modified the patchset to use ARRAY_SIZE on the
> omap4_idle_data array, so we have:
>
> .state_count = ARRAY_SIZE(omap4_idle_data),

Great, that should work.

Thanks,

Kevin

Patch

diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c
index ee0bc50..6d86b59 100644
--- a/arch/arm/mach-omap2/cpuidle44xx.c
+++ b/arch/arm/mach-omap2/cpuidle44xx.c
@@ -132,21 +132,39 @@  struct cpuidle_driver omap4_idle_driver = {
 	.name				= "omap4_idle",
 	.owner				= THIS_MODULE,
 	.en_core_tk_irqen		= 1,
+	.states = {
+		{
+			/* C1 - CPU0 ON + CPU1 ON + MPU ON */
+			.exit_latency = 2 + 2,
+			.target_residency = 5,
+			.flags = CPUIDLE_FLAG_TIME_VALID,
+			.enter = omap4_enter_idle,
+			.name = "C1",
+			.desc = "MPUSS ON"
+		},
+		{
+                        /* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */
+			.exit_latency = 328 + 440,
+			.target_residency = 960,
+			.flags = CPUIDLE_FLAG_TIME_VALID,
+			.enter = omap4_enter_idle,
+			.name = "C2",
+			.desc = "MPUSS CSWR",
+		},
+		{
+			/* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */
+			.exit_latency = 460 + 518,
+			.target_residency = 1100,
+			.flags = CPUIDLE_FLAG_TIME_VALID,
+			.enter = omap4_enter_idle,
+			.name = "C3",
+			.desc = "MPUSS OSWR",
+		},
+	},
+	.state_count = OMAP4_NUM_STATES,
+	.safe_state_index = 0,
 };
 
-static inline void _fill_cstate(struct cpuidle_driver *drv,
-					int idx, const char *descr)
-{
-	struct cpuidle_state *state = &drv->states[idx];
-
-	state->exit_latency	= cpuidle_params_table[idx].exit_latency;
-	state->target_residency	= cpuidle_params_table[idx].target_residency;
-	state->flags		= CPUIDLE_FLAG_TIME_VALID;
-	state->enter		= omap4_enter_idle;
-	sprintf(state->name, "C%d", idx + 1);
-	strncpy(state->desc, descr, CPUIDLE_DESC_LEN);
-}
-
 static inline struct omap4_idle_statedata *_fill_cstate_usage(
 					struct cpuidle_device *dev,
 					int idx)
@@ -180,37 +198,28 @@  int __init omap4_idle_init(void)
 	if ((!mpu_pd) || (!cpu0_pd) || (!cpu1_pd))
 		return -ENODEV;
 
-
-	drv->safe_state_index = -1;
 	dev = &per_cpu(omap4_idle_dev, cpu_id);
 	dev->cpu = cpu_id;
 
-	/* C1 - CPU0 ON + CPU1 ON + MPU ON */
-	_fill_cstate(drv, 0, "MPUSS ON");
-	drv->safe_state_index = 0;
 	cx = _fill_cstate_usage(dev, 0);
 	cx->cpu_state = PWRDM_POWER_ON;
 	cx->mpu_state = PWRDM_POWER_ON;
 	cx->mpu_logic_state = PWRDM_POWER_RET;
 
-	/* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */
-	_fill_cstate(drv, 1, "MPUSS CSWR");
 	cx = _fill_cstate_usage(dev, 1);
 	cx->cpu_state = PWRDM_POWER_OFF;
 	cx->mpu_state = PWRDM_POWER_RET;
 	cx->mpu_logic_state = PWRDM_POWER_RET;
 
-	/* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */
-	_fill_cstate(drv, 2, "MPUSS OSWR");
 	cx = _fill_cstate_usage(dev, 2);
 	cx->cpu_state = PWRDM_POWER_OFF;
 	cx->mpu_state = PWRDM_POWER_RET;
 	cx->mpu_logic_state = PWRDM_POWER_OFF;
 
-	drv->state_count = OMAP4_NUM_STATES;
 	cpuidle_register_driver(&omap4_idle_driver);
 
-	dev->state_count = OMAP4_NUM_STATES;
+	dev->state_count = drv->state_count;
+
 	if (cpuidle_register_device(dev)) {
 		pr_err("%s: CPUidle register device failed\n", __func__);
 			return -EIO;