aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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");