|
|
| Line 1: |
Line 1: |
| − | --- drivers/acpi/ibm_acpi.c.orig 2006-08-22 19:04:43.000000000 +0900
| |
| − | +++ drivers/acpi/ibm_acpi.c 2006-08-22 19:10:28.000000000 +0900
| |
| − | @@ -1466,6 +1466,7 @@
| |
| − | {
| |
| − | int len = 0;
| |
| − | int s;
| |
| − | + char status_read = 0;
| |
| − | u8 lo, hi, status;
| |
| | | | |
| − | if (gfan_handle) {
| |
| − | @@ -1479,8 +1480,11 @@
| |
| − | if (!acpi_ec_read(fan_status_offset, &status))
| |
| − | len += sprintf(p + len, "status:\t\tunreadable\n");
| |
| − | else
| |
| − | + {
| |
| − | len += sprintf(p + len, "status:\t\t%s\n",
| |
| − | - enabled(status, 7));
| |
| − | + status ? "enabled" : "disabled" );
| |
| − | + status_read = 1;
| |
| − | + }
| |
| − |
| |
| − | if (!acpi_ec_read(fan_rpm_offset, &lo) ||
| |
| − | !acpi_ec_read(fan_rpm_offset + 1, &hi))
| |
| − | @@ -1488,6 +1492,16 @@
| |
| − | else
| |
| − | len += sprintf(p + len, "speed:\t\t%d\n",
| |
| − | (hi << 8) + lo);
| |
| − | +
| |
| − | + if (status_read) {
| |
| − | + if (status & 0x40)
| |
| − | + len += sprintf(p + len, "level:\t\tdisengaged\n");
| |
| − | + else if (status & 0x80)
| |
| − | + len += sprintf(p + len, "level:\t\tauto\n");
| |
| − | + else
| |
| − | + len += sprintf(p + len, "level:\t\t%d\n", status);
| |
| − | + }
| |
| − | +
| |
| − | }
| |
| − |
| |
| − | if (sfan_handle)
| |
| − | @@ -1496,7 +1510,10 @@
| |
| − | " (<level> is 0-7)\n");
| |
| − | if (!gfan_handle)
| |
| − | /* all except 570, 600e/x, 770e, 770x */
| |
| − | - len += sprintf(p + len, "commands:\tenable, disable\n");
| |
| − | + len += sprintf(p + len,
| |
| − | + "commands:\tenable, disable, level <level>\n"
| |
| − | + " \t(<level> is 0-7, auto "
| |
| − | + "or disengaged)\n");
| |
| − | if (fans_handle)
| |
| − | /* X31, X40 */
| |
| − | len += sprintf(p + len, "commands:\tspeed <speed>"
| |
| − | @@ -1517,7 +1534,8 @@
| |
| − | /* 570, 770x-JL */
| |
| − | if (!acpi_evalf(sfan_handle, NULL, NULL, "vd", level))
| |
| − | return -EIO;
| |
| − | - } else if (!gfan_handle && strlencmp(cmd, "enable") == 0) {
| |
| − | + } else if (!gfan_handle && ( (strlencmp(cmd, "enable") == 0) ||
| |
| − | + (strlencmp(cmd, "level auto") == 0) ) ) {
| |
| − | /* all except 570, 600e/x, 770e, 770x */
| |
| − | if (!acpi_ec_write(fan_status_offset, 0x80))
| |
| − | return -EIO;
| |
| − | @@ -1525,6 +1543,17 @@
| |
| − | /* all except 570, 600e/x, 770e, 770x */
| |
| − | if (!acpi_ec_write(fan_status_offset, 0x00))
| |
| − | return -EIO;
| |
| − | + } else if (!gfan_handle &&
| |
| − | + strlencmp(cmd, "level disengaged") == 0) {
| |
| − | + /* all except 570, 600e/x, 770e, 770x */
| |
| − | + if (!acpi_ec_write(fan_status_offset, 0x40))
| |
| − | + return -EIO;
| |
| − | + } else if (!gfan_handle &&
| |
| − | + sscanf(cmd, "level %d", &level) == 1 &&
| |
| − | + level >=0 && level <= 7) {
| |
| − | + /* all except 570, 600e/x, 770e, 770x */
| |
| − | + if (!acpi_ec_write(fan_status_offset, level))
| |
| − | + return -EIO;
| |
| − | } else if (fans_handle &&
| |
| − | sscanf(cmd, "speed %d", &speed) == 1 &&
| |
| − | speed >= 0 && speed <= 65535) {
| |