drm/nouveau/fan: restore pwm value on resume when in manual/auto mode
authorMartin Peres <martin.peres@labri.fr>
Mon, 12 Aug 2013 02:48:49 +0000 (22:48 -0400)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 4 Sep 2013 03:46:35 +0000 (13:46 +1000)
If the fan was in manual or auto mode, we should restore the fan speed
that was previously set when resuming.

The initial pwm value is saved when loading the module.

Signed-off-by: Martin Peres <martin.peres@labri.fr>
Tested-by: Martin Peres <martin.peres@labri.fr>
Tested-by: Dash Four <mr.dash.four@googlemail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/core/subdev/therm/base.c
drivers/gpu/drm/nouveau/core/subdev/therm/fan.c

index 3e9d941de5537fdabc9522d3af181f067a189fa2..2ada3d71312f9512198e6dc6a0a2be6088c78d4c 100644 (file)
@@ -267,8 +267,13 @@ _nouveau_therm_init(struct nouveau_object *object)
        if (ret)
                return ret;
 
-       if (priv->suspend >= 0)
+       if (priv->suspend >= 0) {
+               /* restore the pwm value only when on manual or auto mode */
+               if (priv->suspend > 0)
+                       nouveau_therm_fan_set(therm, true, priv->fan->percent);
+
                nouveau_therm_fan_mode(therm, priv->suspend);
+       }
        priv->sensor.program_alarms(therm);
        return 0;
 }
index c728380d3d625f4b6ff238f1363700fc324fe703..4d8450fcf0a0392dcb06cdde9681b30135229915 100644 (file)
@@ -234,6 +234,9 @@ nouveau_therm_fan_ctor(struct nouveau_therm *therm)
 
        nv_info(therm, "FAN control: %s\n", priv->fan->type);
 
+       /* read the current speed, it is useful when resuming */
+       priv->fan->percent = nouveau_therm_fan_get(therm);
+
        /* attempt to detect a tachometer connection */
        ret = gpio->find(gpio, 0, DCB_GPIO_FAN_SENSE, 0xff, &priv->fan->tach);
        if (ret)