hwmon: (adm1031) Fix compiler warning
authorGuenter Roeck <linux@roeck-us.net>
Sat, 24 Mar 2012 15:51:05 +0000 (08:51 -0700)
committerGuenter Roeck <guenter.roeck@ericsson.com>
Sun, 1 Apr 2012 17:24:35 +0000 (10:24 -0700)
Some configurations produce the following compile warning:

drivers/hwmon/adm1031.c: In function 'set_fan_auto_channel':
drivers/hwmon/adm1031.c:292: warning: 'reg' may be used uninitialized in this function

While this is a false positive, it can easily be fixed by overloading the return
value from get_fan_auto_nearest with both register value and error return code
(the register value is never negative). Coincidentially, that also reduces
module size by a few bytes.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Acked-by: Jean Delvare <khali@linux-fr.org>
drivers/hwmon/adm1031.c

index ff37363ea5bc39f90a7abc7afada12a9630a3910..44e1fd7f3d81f652ce70da1ba6d4da3890414c47 100644 (file)
@@ -233,18 +233,15 @@ static const auto_chan_table_t auto_channel_select_table_adm1030 = {
  * nearest match if no exact match where found.
  */
 static int
-get_fan_auto_nearest(struct adm1031_data *data,
-                    int chan, u8 val, u8 reg, u8 *new_reg)
+get_fan_auto_nearest(struct adm1031_data *data, int chan, u8 val, u8 reg)
 {
        int i;
        int first_match = -1, exact_match = -1;
        u8 other_reg_val =
            (*data->chan_select_table)[FAN_CHAN_FROM_REG(reg)][chan ? 0 : 1];
 
-       if (val == 0) {
-               *new_reg = 0;
+       if (val == 0)
                return 0;
-       }
 
        for (i = 0; i < 8; i++) {
                if ((val == (*data->chan_select_table)[i][chan]) &&
@@ -264,13 +261,11 @@ get_fan_auto_nearest(struct adm1031_data *data,
        }
 
        if (exact_match >= 0)
-               *new_reg = exact_match;
+               return exact_match;
        else if (first_match >= 0)
-               *new_reg = first_match;
-       else
-               return -EINVAL;
+               return first_match;
 
-       return 0;
+       return -EINVAL;
 }
 
 static ssize_t show_fan_auto_channel(struct device *dev,
@@ -301,11 +296,12 @@ set_fan_auto_channel(struct device *dev, struct device_attribute *attr,
 
        mutex_lock(&data->update_lock);
 
-       ret = get_fan_auto_nearest(data, nr, val, data->conf1, &reg);
-       if (ret) {
+       ret = get_fan_auto_nearest(data, nr, val, data->conf1);
+       if (ret < 0) {
                mutex_unlock(&data->update_lock);
                return ret;
        }
+       reg = ret;
        data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1);
        if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) ^
            (old_fan_mode & ADM1031_CONF1_AUTO_MODE)) {