diff options
Diffstat (limited to 'kernel/pm_qos_params.c')
-rw-r--r-- | kernel/pm_qos_params.c | 65 |
1 files changed, 61 insertions, 4 deletions
diff --git a/kernel/pm_qos_params.c b/kernel/pm_qos_params.c index 6824ca7..b61f2fd 100644 --- a/kernel/pm_qos_params.c +++ b/kernel/pm_qos_params.c @@ -74,7 +74,7 @@ static DEFINE_SPINLOCK(pm_qos_lock); static struct pm_qos_object null_pm_qos; static BLOCKING_NOTIFIER_HEAD(cpu_dma_lat_notifier); static struct pm_qos_object cpu_dma_pm_qos = { - .requests = PLIST_HEAD_INIT(cpu_dma_pm_qos.requests, pm_qos_lock), + .requests = PLIST_HEAD_INIT(cpu_dma_pm_qos.requests), .notifiers = &cpu_dma_lat_notifier, .name = "cpu_dma_latency", .target_value = PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE, @@ -84,7 +84,7 @@ static struct pm_qos_object cpu_dma_pm_qos = { static BLOCKING_NOTIFIER_HEAD(network_lat_notifier); static struct pm_qos_object network_lat_pm_qos = { - .requests = PLIST_HEAD_INIT(network_lat_pm_qos.requests, pm_qos_lock), + .requests = PLIST_HEAD_INIT(network_lat_pm_qos.requests), .notifiers = &network_lat_notifier, .name = "network_latency", .target_value = PM_QOS_NETWORK_LAT_DEFAULT_VALUE, @@ -95,7 +95,7 @@ static struct pm_qos_object network_lat_pm_qos = { static BLOCKING_NOTIFIER_HEAD(network_throughput_notifier); static struct pm_qos_object network_throughput_pm_qos = { - .requests = PLIST_HEAD_INIT(network_throughput_pm_qos.requests, pm_qos_lock), + .requests = PLIST_HEAD_INIT(network_throughput_pm_qos.requests), .notifiers = &network_throughput_notifier, .name = "network_throughput", .target_value = PM_QOS_NETWORK_THROUGHPUT_DEFAULT_VALUE, @@ -103,12 +103,55 @@ static struct pm_qos_object network_throughput_pm_qos = { .type = PM_QOS_MAX, }; +static BLOCKING_NOTIFIER_HEAD(bus_dma_throughput_notifier); +static struct pm_qos_object bus_dma_throughput_pm_qos = { + .requests = PLIST_HEAD_INIT(bus_dma_throughput_pm_qos.requests), + .notifiers = &bus_dma_throughput_notifier, + .name = "bus_dma_throughput", + .target_value = PM_QOS_BUS_DMA_THROUGHPUT_DEFAULT_VALUE, + .default_value = PM_QOS_BUS_DMA_THROUGHPUT_DEFAULT_VALUE, + .type = PM_QOS_MAX, +}; + +static BLOCKING_NOTIFIER_HEAD(display_frequency_notifier); +static struct pm_qos_object display_frequency_pm_qos = { + .requests = PLIST_HEAD_INIT(display_frequency_pm_qos.requests), + .notifiers = &display_frequency_notifier, + .name = "display_frequency", + .target_value = PM_QOS_DISPLAY_FREQUENCY_DEFAULT_VALUE, + .default_value = PM_QOS_DISPLAY_FREQUENCY_DEFAULT_VALUE, + .type = PM_QOS_MAX, +}; + +static BLOCKING_NOTIFIER_HEAD(bus_qos_notifier); +static struct pm_qos_object bus_qos_pm_qos = { + .requests = PLIST_HEAD_INIT(bus_qos_pm_qos.requests), + .notifiers = &bus_qos_notifier, + .name = "bus_qos", + .target_value = 0, + .default_value = 0, + .type = PM_QOS_MAX, +}; + +static BLOCKING_NOTIFIER_HEAD(dvfs_res_lat_notifier); +static struct pm_qos_object dvfs_res_lat_pm_qos = { + .requests = PLIST_HEAD_INIT(dvfs_res_lat_pm_qos.requests), + .notifiers = &dvfs_res_lat_notifier, + .name = "dvfs_response_latency", + .target_value = PM_QOS_DVFS_RESPONSE_LAT_DEFAULT_VALUE, + .default_value = PM_QOS_DVFS_RESPONSE_LAT_DEFAULT_VALUE, + .type = PM_QOS_MIN +}; static struct pm_qos_object *pm_qos_array[] = { &null_pm_qos, &cpu_dma_pm_qos, &network_lat_pm_qos, - &network_throughput_pm_qos + &network_throughput_pm_qos, + &bus_dma_throughput_pm_qos, + &display_frequency_pm_qos, + &bus_qos_pm_qos, + &dvfs_res_lat_pm_qos, }; static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf, @@ -474,6 +517,20 @@ static int __init pm_qos_power_init(void) if (ret < 0) printk(KERN_ERR "pm_qos_param: network_throughput setup failed\n"); + ret = register_pm_qos_misc(&bus_dma_throughput_pm_qos); + if (ret < 0) + printk(KERN_ERR + "pm_qos_param: bus_dma_throughput setup failed\n"); + + ret = register_pm_qos_misc(&display_frequency_pm_qos); + if (ret < 0) + printk(KERN_ERR + "pm_qos_param: display_frequency setup failed\n"); + + ret = register_pm_qos_misc(&dvfs_res_lat_pm_qos); + if (ret < 0) + printk(KERN_ERR + "pm_qos_param: dvfs_response_frequency setup failed\n"); return ret; } |