Commit ce15a81d authored by Guenter Roeck's avatar Guenter Roeck Committed by Guenter Roeck

hwmon: (adm1031) Fix compiler warning

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: default avatarGuenter Roeck <linux@roeck-us.net>
Acked-by: default avatarJean Delvare <khali@linux-fr.org>
parent 6394011d
...@@ -233,18 +233,15 @@ static const auto_chan_table_t auto_channel_select_table_adm1030 = { ...@@ -233,18 +233,15 @@ static const auto_chan_table_t auto_channel_select_table_adm1030 = {
* nearest match if no exact match where found. * nearest match if no exact match where found.
*/ */
static int static int
get_fan_auto_nearest(struct adm1031_data *data, get_fan_auto_nearest(struct adm1031_data *data, int chan, u8 val, u8 reg)
int chan, u8 val, u8 reg, u8 *new_reg)
{ {
int i; int i;
int first_match = -1, exact_match = -1; int first_match = -1, exact_match = -1;
u8 other_reg_val = u8 other_reg_val =
(*data->chan_select_table)[FAN_CHAN_FROM_REG(reg)][chan ? 0 : 1]; (*data->chan_select_table)[FAN_CHAN_FROM_REG(reg)][chan ? 0 : 1];
if (val == 0) { if (val == 0)
*new_reg = 0;
return 0; return 0;
}
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
if ((val == (*data->chan_select_table)[i][chan]) && if ((val == (*data->chan_select_table)[i][chan]) &&
...@@ -264,13 +261,11 @@ get_fan_auto_nearest(struct adm1031_data *data, ...@@ -264,13 +261,11 @@ get_fan_auto_nearest(struct adm1031_data *data,
} }
if (exact_match >= 0) if (exact_match >= 0)
*new_reg = exact_match; return exact_match;
else if (first_match >= 0) else if (first_match >= 0)
*new_reg = first_match; return first_match;
else
return -EINVAL;
return 0; return -EINVAL;
} }
static ssize_t show_fan_auto_channel(struct device *dev, 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, ...@@ -301,11 +296,12 @@ set_fan_auto_channel(struct device *dev, struct device_attribute *attr,
mutex_lock(&data->update_lock); mutex_lock(&data->update_lock);
ret = get_fan_auto_nearest(data, nr, val, data->conf1, &reg); ret = get_fan_auto_nearest(data, nr, val, data->conf1);
if (ret) { if (ret < 0) {
mutex_unlock(&data->update_lock); mutex_unlock(&data->update_lock);
return ret; return ret;
} }
reg = ret;
data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1); data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1);
if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) ^ if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) ^
(old_fan_mode & ADM1031_CONF1_AUTO_MODE)) { (old_fan_mode & ADM1031_CONF1_AUTO_MODE)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment