]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
hwmon/f71882fg: Only allow negative auto point temps if fan_neg_temp is enabled
authorHans de Goede <hdegoede@redhat.com>
Wed, 9 Mar 2011 19:57:09 +0000 (20:57 +0100)
committerGuenter Roeck <guenter.roeck@ericsson.com>
Tue, 15 Mar 2011 05:39:21 +0000 (22:39 -0700)
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
drivers/hwmon/f71882fg.c

index 6c3de065e04ba8abc33947c59f6d5270b9151bda..67ac85870592dced84591ffff40dccceea831381 100644 (file)
@@ -84,6 +84,9 @@
 
 #define F71882FG_REG_FAN_HYST(nr)      (0x98 + (nr))
 
+#define F71882FG_REG_FAN_FAULT_T       0x9F
+#define F71882FG_FAN_NEG_TEMP_EN       0x20
+
 #define F71882FG_REG_POINT_PWM(pwm, point)     (0xAA + (point) + (16 * (pwm)))
 #define F71882FG_REG_POINT_TEMP(pwm, point)    (0xA6 + (point) + (16 * (pwm)))
 #define F71882FG_REG_POINT_MAPPING(nr)         (0xAF + 16 * (nr))
@@ -127,6 +130,7 @@ struct f71882fg_data {
        struct mutex update_lock;
        int temp_start;                 /* temp numbering start (0 or 1) */
        char valid;                     /* !=0 if following fields are valid */
+       char auto_point_temp_signed;
        unsigned long last_updated;     /* In jiffies */
        unsigned long last_limits;      /* In jiffies */
 
@@ -1853,7 +1857,7 @@ static ssize_t store_pwm_auto_point_temp(struct device *dev,
 
        val /= 1000;
 
-       if (data->type == f71889fg)
+       if (data->auto_point_temp_signed)
                val = SENSORS_LIMIT(val, -128, 127);
        else
                val = SENSORS_LIMIT(val, 0, 127);
@@ -1900,7 +1904,7 @@ static int __devinit f71882fg_probe(struct platform_device *pdev)
        struct f71882fg_data *data;
        struct f71882fg_sio_data *sio_data = pdev->dev.platform_data;
        int err, i, nr_fans = (sio_data->type == f71882fg) ? 4 : 3;
-       u8 start_reg;
+       u8 start_reg, reg;
 
        data = kzalloc(sizeof(struct f71882fg_data), GFP_KERNEL);
        if (!data)
@@ -1970,6 +1974,16 @@ static int __devinit f71882fg_probe(struct platform_device *pdev)
        }
 
        if (start_reg & 0x02) {
+               switch (data->type) {
+               case f71889fg:
+                       reg = f71882fg_read8(data, F71882FG_REG_FAN_FAULT_T);
+                       if (reg & F71882FG_FAN_NEG_TEMP_EN)
+                               data->auto_point_temp_signed = 1;
+                       break;
+               default:
+                       break;
+               }
+
                data->pwm_enable =
                        f71882fg_read8(data, F71882FG_REG_PWM_ENABLE);