فهرست منبع

drm/nouveau/fan: restore pwm value on resume when in manual/auto mode

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>
Martin Peres 12 سال پیش
والد
کامیت
4cc00ad137
2فایلهای تغییر یافته به همراه9 افزوده شده و 1 حذف شده
  1. 6 1
      drivers/gpu/drm/nouveau/core/subdev/therm/base.c
  2. 3 0
      drivers/gpu/drm/nouveau/core/subdev/therm/fan.c

+ 6 - 1
drivers/gpu/drm/nouveau/core/subdev/therm/base.c

@@ -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;
 }

+ 3 - 0
drivers/gpu/drm/nouveau/core/subdev/therm/fan.c

@@ -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)