unsigned long state)
 {
        struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata;
+       struct cpumask *cpus;
+       unsigned int frequency;
+       unsigned long max_capacity, capacity;
+       int ret;
 
        /* Request state should be less than max_level */
        if (WARN_ON(state > cpufreq_cdev->max_level))
 
        cpufreq_cdev->cpufreq_state = state;
 
-       return freq_qos_update_request(&cpufreq_cdev->qos_req,
-                               get_state_freq(cpufreq_cdev, state));
+       frequency = get_state_freq(cpufreq_cdev, state);
+
+       ret = freq_qos_update_request(&cpufreq_cdev->qos_req, frequency);
+
+       if (ret > 0) {
+               cpus = cpufreq_cdev->policy->cpus;
+               max_capacity = arch_scale_cpu_capacity(cpumask_first(cpus));
+               capacity = frequency * max_capacity;
+               capacity /= cpufreq_cdev->policy->cpuinfo.max_freq;
+               arch_set_thermal_pressure(cpus, max_capacity - capacity);
+       }
+
+       return ret;
 }
 
 /* Bind cpufreq callbacks to thermal cooling device ops */