static struct thermal_governor *def_governor;
 
+static bool thermal_pm_suspended;
+
 /*
  * Governor section: set of functions to handle thermal governors
  *
        mutex_lock(&tz->lock);
 
        tz->state &= ~TZ_STATE_FLAG_INIT;
+       /*
+        * If system suspend or resume is in progress at this point, the
+        * new thermal zone needs to be marked as suspended because
+        * thermal_pm_notify() has run already.
+        */
+       if (thermal_pm_suspended)
+               tz->state |= TZ_STATE_FLAG_SUSPENDED;
+
        __thermal_zone_device_update(tz, THERMAL_EVENT_UNSPECIFIED);
 
        mutex_unlock(&tz->lock);
        list_for_each_entry(cdev, &thermal_cdev_list, node)
                thermal_zone_cdev_bind(tz, cdev);
 
-       mutex_unlock(&thermal_list_lock);
-
        thermal_zone_init_complete(tz);
 
+       mutex_unlock(&thermal_list_lock);
+
        thermal_notify_tz_create(tz);
 
        thermal_debug_tz_add(tz);
        case PM_SUSPEND_PREPARE:
                mutex_lock(&thermal_list_lock);
 
+               thermal_pm_suspended = true;
+
                list_for_each_entry(tz, &thermal_tz_list, node)
                        thermal_zone_pm_prepare(tz);
 
        case PM_POST_SUSPEND:
                mutex_lock(&thermal_list_lock);
 
+               thermal_pm_suspended = false;
+
                list_for_each_entry(tz, &thermal_tz_list, node)
                        thermal_zone_pm_complete(tz);