Skip to content

Commit

Permalink
ACPI: ibm-acpi: clean up fan_read
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Henrique de Moraes Holschuh authored and Len Brown committed Dec 7, 2006
1 parent 69ba91c commit 3ef8a60
Showing 1 changed file with 24 additions and 16 deletions.
40 changes: 24 additions & 16 deletions drivers/acpi/ibm_acpi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");

Expand Down

0 comments on commit 3ef8a60

Please sign in to comment.