From 913ff417b44b69592d336cdb9cd34c5ca236d416 Mon Sep 17 00:00:00 2001 From: Nathan Whitehorn Date: Sun, 23 May 2010 02:32:52 +0000 Subject: [PATCH] MFC r208167: Enable smu(4) to report fan speeds on late-model Powermac G5s. --- sys/powerpc/powermac/smu.c | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/sys/powerpc/powermac/smu.c b/sys/powerpc/powermac/smu.c index 6754b3ba7d1..41ba350c885 100644 --- a/sys/powerpc/powermac/smu.c +++ b/sys/powerpc/powermac/smu.c @@ -643,14 +643,34 @@ static int smu_fan_read_rpm(device_t smu, struct smu_fan *fan) { struct smu_cmd cmd; + int rpm, error; - cmd.cmd = SMU_FAN; - cmd.len = 1; - cmd.data[0] = 1; + if (!fan->old_style) { + cmd.cmd = SMU_FAN; + cmd.len = 2; + cmd.data[0] = 0x31; + cmd.data[1] = fan->reg; - smu_run_cmd(smu, &cmd, 1); + error = smu_run_cmd(smu, &cmd, 1); + if (error) + fan->old_style = 1; - return ((cmd.data[fan->reg*2+1] << 8) | cmd.data[fan->reg*2+2]); + rpm = (cmd.data[0] << 8) | cmd.data[1]; + } + + if (fan->old_style) { + cmd.cmd = SMU_FAN; + cmd.len = 1; + cmd.data[0] = 1; + + error = smu_run_cmd(smu, &cmd, 1); + if (error) + return (error); + + rpm = (cmd.data[fan->reg*2+1] << 8) | cmd.data[fan->reg*2+2]; + } + + return (rpm); } static int @@ -666,6 +686,9 @@ smu_fanrpm_sysctl(SYSCTL_HANDLER_ARGS) fan = &sc->sc_fans[arg2]; rpm = smu_fan_read_rpm(smu, fan); + if (rpm < 0) + return (rpm); + error = sysctl_handle_int(oidp, &rpm, 0, req); if (error || !req->newptr)