aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorHenrique de Moraes Holschuh <hmh@hmh.eng.br>2006-11-24 11:47:10 -0200
committerLen Brown <len.brown@intel.com>2006-12-07 01:38:39 -0500
commit3ef8a6096ca98d45a54999a97c7c8e14977d2e3e (patch)
treef1ebed3d60e21778a277759a0a3f5ff08938e058 /drivers
parent69ba91cbd6d79aa197adbdd10a44e71c84044b44 (diff)
ACPI: ibm-acpi: clean up fan_read
This patch cleans up fan_read so that it is much easier to read and extend. The patch fixes the userspace ABI to return "status: not supported" (like all other ibm-acpi functions) when neither fan status or fan control are possible. It also fixes the userspace ABI to return EIO if ACPI access to the EC fails, instead of returning "status: unreadable" or "speed: unreadable". Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/acpi/ibm_acpi.c40
1 files changed, 24 insertions, 16 deletions
diff --git a/drivers/acpi/ibm_acpi.c b/drivers/acpi/ibm_acpi.c
index 7d0bd61eebc..e8de5e349d2 100644
--- a/drivers/acpi/ibm_acpi.c
+++ b/drivers/acpi/ibm_acpi.c
@@ -1741,40 +1741,48 @@ static int fan_init(void)
static int fan_read(char *p)
{
int len = 0;
- int s;
u8 lo, hi, status;
- if (gfan_handle) {
+ switch (fan_status_access_mode) {
+ case IBMACPI_FAN_RD_ACPI_GFAN:
/* 570, 600e/x, 770e, 770x */
- if (!acpi_evalf(gfan_handle, &s, NULL, "d"))
+ if (unlikely(!acpi_evalf(gfan_handle, &status, NULL, "d")))
return -EIO;
- len += sprintf(p + len, "level:\t\t%d\n", s);
- } else {
+ len += sprintf(p + len, "level:\t\t%d\n", status);
+
+ break;
+
+ case IBMACPI_FAN_RD_TPEC:
/* all except 570, 600e/x, 770e, 770x */
- if (!acpi_ec_read(fan_status_offset, &status))
- len += sprintf(p + len, "status:\t\tunreadable\n");
+ if (unlikely(!acpi_ec_read(fan_status_offset, &status)))
+ return -EIO;
else
len += sprintf(p + len, "status:\t\t%s\n",
enabled(status, 7));
- if (!acpi_ec_read(fan_rpm_offset, &lo) ||
- !acpi_ec_read(fan_rpm_offset + 1, &hi))
- len += sprintf(p + len, "speed:\t\tunreadable\n");
+ if (unlikely(!acpi_ec_read(fan_rpm_offset, &lo) ||
+ !acpi_ec_read(fan_rpm_offset + 1, &hi)))
+ return -EIO;
else
len += sprintf(p + len, "speed:\t\t%d\n",
(hi << 8) + lo);
+
+ break;
+
+ case IBMACPI_FAN_NONE:
+ default:
+ len += sprintf(p + len, "status:\t\tnot supported\n");
}
- if (sfan_handle)
- /* 570, 770x-JL */
+ if (fan_control_commands & IBMACPI_FAN_CMD_LEVEL)
len += sprintf(p + len, "commands:\tlevel <level>"
" (<level> is 0-7)\n");
- if (!gfan_handle)
- /* all except 570, 600e/x, 770e, 770x */
+
+ if (fan_control_commands & IBMACPI_FAN_CMD_ENABLE)
len += sprintf(p + len, "commands:\tenable, disable\n");
- if (fans_handle)
- /* X31, X40 */
+
+ if (fan_control_commands & IBMACPI_FAN_CMD_SPEED)
len += sprintf(p + len, "commands:\tspeed <speed>"
" (<speed> is 0-65535)\n");