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");