Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1c6a334e9c028c2b72c5350650cb14e6d5fdc232
Commit:     1c6a334e9c028c2b72c5350650cb14e6d5fdc232
Parent:     bab812a329cc244ca63c2675b0e05016518855ce
Author:     Henrique de Moraes Holschuh <[EMAIL PROTECTED]>
AuthorDate: Fri Nov 24 11:47:12 2006 -0200
Committer:  Len Brown <[EMAIL PROTECTED]>
CommitDate: Thu Dec 7 01:38:40 2006 -0500

    ACPI: ibm-acpi: fix and extend fan enable
    
    This patch fix fan enable to attempt to do the right thing and not slow
    down the fan if it is forced to the maximum speed.  It also extends fan
    enable to work on older thinkpads.
    
    ABI changes:
        1.  Support enable/disable for all level-based write access modes
    
    Signed-off-by: Henrique de Moraes Holschuh <[EMAIL PROTECTED]>
---
 drivers/acpi/ibm_acpi.c |   34 ++++++++++++++++++++++++++++++++--
 1 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/drivers/acpi/ibm_acpi.c b/drivers/acpi/ibm_acpi.c
index b6ad2ed..ecb5ece 100644
--- a/drivers/acpi/ibm_acpi.c
+++ b/drivers/acpi/ibm_acpi.c
@@ -1820,7 +1820,8 @@ static int fan_init(void)
        if (sfan_handle) {
                /* 570, 770x-JL */
                fan_control_access_mode = IBMACPI_FAN_WR_ACPI_SFAN;
-               fan_control_commands |= IBMACPI_FAN_CMD_LEVEL;
+               fan_control_commands |=
+                   IBMACPI_FAN_CMD_LEVEL | IBMACPI_FAN_CMD_ENABLE;
        } else {
                if (!gfan_handle) {
                        /* gfan without sfan means no fan control */
@@ -1980,10 +1981,34 @@ static int fan_set_level(int level)
 
 static int fan_set_enable(void)
 {
+       u8 s;
+       int rc;
+
        switch (fan_control_access_mode) {
        case IBMACPI_FAN_WR_ACPI_FANS:
        case IBMACPI_FAN_WR_TPEC:
-               if (!acpi_ec_write(fan_status_offset, 0x80))
+               if ((rc = fan_get_status(&s)) < 0)
+                       return rc;
+
+               /* Don't go out of emergency fan mode */
+               if (s != 7)
+                       s = IBMACPI_FAN_EC_AUTO;
+
+               if (!acpi_ec_write(fan_status_offset, s))
+                       return -EIO;
+               break;
+
+       case IBMACPI_FAN_WR_ACPI_SFAN:
+               if ((rc = fan_get_status(&s)) < 0)
+                       return rc;
+
+               s &= 0x07;
+
+               /* Set fan to at least level 4 */
+               if (s < 4)
+                       s = 4;
+
+               if (!acpi_evalf(sfan_handle, NULL, NULL, "vd", s))
                        return -EIO;
                break;
 
@@ -2002,6 +2027,11 @@ static int fan_set_disable(void)
                        return -EIO;
                break;
 
+       case IBMACPI_FAN_WR_ACPI_SFAN:
+               if (!acpi_evalf(sfan_handle, NULL, NULL, "vd", 0x00))
+                       return -EIO;
+               break;
+
        default:
                return -ENXIO;
        }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to