summaryrefslogtreecommitdiff
path: root/nvkm/subdev/therm
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2013-07-26 09:15:57 +1000
committerBen Skeggs <bskeggs@redhat.com>2013-11-08 15:05:48 +1000
commit0e31a059a418e389d445393ea0f411dddce6ac24 (patch)
tree3db0467dedf650b732b02a79969703f672e1843f /nvkm/subdev/therm
parentffb77cf65749c2a74940137a7f6dadbd1130843c (diff)
downloadnouveau-0e31a059a418e389d445393ea0f411dddce6ac24.tar.gz
therm: add hook for clk to suggest fanspeed to therm
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'nvkm/subdev/therm')
-rw-r--r--nvkm/subdev/therm/base.c13
-rw-r--r--nvkm/subdev/therm/priv.h1
2 files changed, 14 insertions, 0 deletions
diff --git a/nvkm/subdev/therm/base.c b/nvkm/subdev/therm/base.c
index d2f10ad04..1f28249df 100644
--- a/nvkm/subdev/therm/base.c
+++ b/nvkm/subdev/therm/base.c
@@ -127,6 +127,19 @@ done:
spin_unlock_irqrestore(&priv->lock, flags);
}
+int
+nouveau_therm_cstate(struct nouveau_therm *ptherm, int fan, int dir)
+{
+ struct nouveau_therm_priv *priv = (void *)ptherm;
+ if (!dir || (dir < 0 && fan < priv->cstate) ||
+ (dir > 0 && fan > priv->cstate)) {
+ nv_debug(ptherm, "default fan speed -> %d%%\n", fan);
+ priv->cstate = fan;
+ nouveau_therm_update(ptherm, -1);
+ }
+ return 0;
+}
+
static void
nouveau_therm_alarm(struct nouveau_alarm *alarm)
{
diff --git a/nvkm/subdev/therm/priv.h b/nvkm/subdev/therm/priv.h
index 508b1ec4e..96f8f9569 100644
--- a/nvkm/subdev/therm/priv.h
+++ b/nvkm/subdev/therm/priv.h
@@ -76,6 +76,7 @@ struct nouveau_therm_priv {
spinlock_t lock;
struct nouveau_therm_trip_point *last_trip;
int mode;
+ int cstate;
int suspend;
/* bios */