diff options
Diffstat (limited to 'drivers/cpuidle')
| -rw-r--r-- | drivers/cpuidle/driver.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/cpuidle/driver.c b/drivers/cpuidle/driver.c index 424bc8105387..87db3877fead 100644 --- a/drivers/cpuidle/driver.c +++ b/drivers/cpuidle/driver.c | |||
| @@ -18,9 +18,10 @@ static struct cpuidle_driver *cpuidle_curr_driver; | |||
| 18 | DEFINE_SPINLOCK(cpuidle_driver_lock); | 18 | DEFINE_SPINLOCK(cpuidle_driver_lock); |
| 19 | int cpuidle_driver_refcount; | 19 | int cpuidle_driver_refcount; |
| 20 | 20 | ||
| 21 | static void __cpuidle_register_driver(struct cpuidle_driver *drv) | 21 | static void set_power_states(struct cpuidle_driver *drv) |
| 22 | { | 22 | { |
| 23 | int i; | 23 | int i; |
| 24 | |||
| 24 | /* | 25 | /* |
| 25 | * cpuidle driver should set the drv->power_specified bit | 26 | * cpuidle driver should set the drv->power_specified bit |
| 26 | * before registering if the driver provides | 27 | * before registering if the driver provides |
| @@ -35,10 +36,8 @@ static void __cpuidle_register_driver(struct cpuidle_driver *drv) | |||
| 35 | * an power value of -1. So we use -2, -3, etc, for other | 36 | * an power value of -1. So we use -2, -3, etc, for other |
| 36 | * c-states. | 37 | * c-states. |
| 37 | */ | 38 | */ |
| 38 | if (!drv->power_specified) { | 39 | for (i = CPUIDLE_DRIVER_STATE_START; i < drv->state_count; i++) |
| 39 | for (i = CPUIDLE_DRIVER_STATE_START; i < drv->state_count; i++) | 40 | drv->states[i].power_usage = -1 - i; |
| 40 | drv->states[i].power_usage = -1 - i; | ||
| 41 | } | ||
| 42 | } | 41 | } |
| 43 | 42 | ||
| 44 | /** | 43 | /** |
| @@ -58,8 +57,12 @@ int cpuidle_register_driver(struct cpuidle_driver *drv) | |||
| 58 | spin_unlock(&cpuidle_driver_lock); | 57 | spin_unlock(&cpuidle_driver_lock); |
| 59 | return -EBUSY; | 58 | return -EBUSY; |
| 60 | } | 59 | } |
| 61 | __cpuidle_register_driver(drv); | 60 | |
| 61 | if (!drv->power_specified) | ||
| 62 | set_power_states(drv); | ||
| 63 | |||
| 62 | cpuidle_curr_driver = drv; | 64 | cpuidle_curr_driver = drv; |
| 65 | |||
| 63 | spin_unlock(&cpuidle_driver_lock); | 66 | spin_unlock(&cpuidle_driver_lock); |
| 64 | 67 | ||
| 65 | return 0; | 68 | return 0; |
