thermal: cooling: Check Energy Model type in cpufreq_cooling and devfreq_cooling
[sfrench/cifs-2.6.git] / drivers / thermal / devfreq_cooling.c
index 4310cb342a9fb1f58ac362168df270c6e33fc8d3..b04dcbbf721a35d7ba9ad07f6c7890f04aee4b58 100644 (file)
@@ -358,6 +358,7 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df,
        struct thermal_cooling_device *cdev;
        struct device *dev = df->dev.parent;
        struct devfreq_cooling_device *dfc;
+       struct em_perf_domain *em;
        char *name;
        int err, num_opps;
 
@@ -367,8 +368,9 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df,
 
        dfc->devfreq = df;
 
-       dfc->em_pd = em_pd_get(dev);
-       if (dfc->em_pd) {
+       em = em_pd_get(dev);
+       if (em && !em_is_artificial(em)) {
+               dfc->em_pd = em;
                devfreq_cooling_ops.get_requested_power =
                        devfreq_cooling_get_requested_power;
                devfreq_cooling_ops.state2power = devfreq_cooling_state2power;
@@ -379,7 +381,7 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df,
                num_opps = em_pd_nr_perf_states(dfc->em_pd);
        } else {
                /* Backward compatibility for drivers which do not use IPA */
-               dev_dbg(dev, "missing EM for cooling device\n");
+               dev_dbg(dev, "missing proper EM for cooling device\n");
 
                num_opps = dev_pm_opp_get_opp_count(dev);