drm/nouveau/therm/fan: do not use the pwm mode when the vbios tells us to use toggle
authorMartin Peres <martin.peres@free.fr>
Sun, 17 Aug 2014 15:33:07 +0000 (17:33 +0200)
committerBen Skeggs <bskeggs@redhat.com>
Mon, 15 Sep 2014 12:22:14 +0000 (22:22 +1000)
Signed-off-by: Martin Peres <martin.peres@free.fr>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/core/subdev/therm/fanpwm.c

index 9a5c07340263305f1310d1e6a3520808c2606049..c629d7f2a6a44025224e4123c5273b4705a2cf68 100644 (file)
@@ -25,6 +25,8 @@
 
 #include <core/option.h>
 #include <subdev/gpio.h>
+#include <subdev/bios.h>
+#include <subdev/bios/fan.h>
 
 #include "priv.h"
 
@@ -86,11 +88,15 @@ nouveau_fanpwm_create(struct nouveau_therm *therm, struct dcb_gpio_func *func)
 {
        struct nouveau_device *device = nv_device(therm);
        struct nouveau_therm_priv *tpriv = (void *)therm;
+       struct nouveau_bios *bios = nouveau_bios(therm);
        struct nouveau_fanpwm_priv *priv;
+       struct nvbios_therm_fan fan;
        u32 divs, duty;
 
+       nvbios_fan_parse(bios, &fan);
+
        if (!nouveau_boolopt(device->cfgopt, "NvFanPWM", func->param) ||
-           !therm->pwm_ctrl ||
+           !therm->pwm_ctrl || fan.type == NVBIOS_THERM_FAN_TOGGLE ||
             therm->pwm_get(therm, func->line, &divs, &duty) == -ENODEV)
                return -ENODEV;