|
|
(One intermediate revision by the same user not shown) |
Line 1: |
Line 1: |
− | --- drivers/acpi/ibm_acpi.c.orig 2006-08-22 19:04:43.000000000 +0900 | + | {{CodeHeader| |
− | +++ drivers/acpi/ibm_acpi.c 2006-08-22 19:10:28.000000000 +0900
| + | |filename=ibm-acpi-0.11-2.6.17-fan.patch |
− | @@ -1466,6 +1466,7 @@
| + | |context=[[Patch for controlling fan speed]] |
− | {
| + | |author=[[User:dimeco|dimeco]] |
− | int len = 0;
| + | |license=GPL v2 or higher, or GFDL v1.2 or higher |
− | 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) {
| |