Commit 77746426 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'hwmon-for-v6.0-rc4' of...

Merge tag 'hwmon-for-v6.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging

Pull hwmon fixes from Guenter Roeck:

 - Fix out of bounds access in gpio-fan driver

 - Fix VOUT margin caching in PMBus core

 - Avoid error message after -EPROBE_DEFER from devm_regulator_register()

* tag 'hwmon-for-v6.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
  hwmon: (gpio-fan) Fix array out of bounds access
  hwmon: (pmbus) Fix vout margin caching
  hwmon: (pmbus) Use dev_err_probe() to filter -EPROBE_DEFER error messages
parents 8782fb61 f233d2be
...@@ -391,6 +391,9 @@ static int gpio_fan_set_cur_state(struct thermal_cooling_device *cdev, ...@@ -391,6 +391,9 @@ static int gpio_fan_set_cur_state(struct thermal_cooling_device *cdev,
if (!fan_data) if (!fan_data)
return -EINVAL; return -EINVAL;
if (state >= fan_data->num_speed)
return -EINVAL;
set_fan_speed(fan_data, state); set_fan_speed(fan_data, state);
return 0; return 0;
} }
......
...@@ -2861,7 +2861,7 @@ static int pmbus_regulator_get_low_margin(struct i2c_client *client, int page) ...@@ -2861,7 +2861,7 @@ static int pmbus_regulator_get_low_margin(struct i2c_client *client, int page)
.data = -1, .data = -1,
}; };
if (!data->vout_low[page]) { if (data->vout_low[page] < 0) {
if (pmbus_check_word_register(client, page, PMBUS_MFR_VOUT_MIN)) if (pmbus_check_word_register(client, page, PMBUS_MFR_VOUT_MIN))
s.data = _pmbus_read_word_data(client, page, 0xff, s.data = _pmbus_read_word_data(client, page, 0xff,
PMBUS_MFR_VOUT_MIN); PMBUS_MFR_VOUT_MIN);
...@@ -2887,7 +2887,7 @@ static int pmbus_regulator_get_high_margin(struct i2c_client *client, int page) ...@@ -2887,7 +2887,7 @@ static int pmbus_regulator_get_high_margin(struct i2c_client *client, int page)
.data = -1, .data = -1,
}; };
if (!data->vout_high[page]) { if (data->vout_high[page] < 0) {
if (pmbus_check_word_register(client, page, PMBUS_MFR_VOUT_MAX)) if (pmbus_check_word_register(client, page, PMBUS_MFR_VOUT_MAX))
s.data = _pmbus_read_word_data(client, page, 0xff, s.data = _pmbus_read_word_data(client, page, 0xff,
PMBUS_MFR_VOUT_MAX); PMBUS_MFR_VOUT_MAX);
...@@ -3016,11 +3016,10 @@ static int pmbus_regulator_register(struct pmbus_data *data) ...@@ -3016,11 +3016,10 @@ static int pmbus_regulator_register(struct pmbus_data *data)
rdev = devm_regulator_register(dev, &info->reg_desc[i], rdev = devm_regulator_register(dev, &info->reg_desc[i],
&config); &config);
if (IS_ERR(rdev)) { if (IS_ERR(rdev))
dev_err(dev, "Failed to register %s regulator\n", return dev_err_probe(dev, PTR_ERR(rdev),
"Failed to register %s regulator\n",
info->reg_desc[i].name); info->reg_desc[i].name);
return PTR_ERR(rdev);
}
} }
return 0; return 0;
...@@ -3320,6 +3319,7 @@ int pmbus_do_probe(struct i2c_client *client, struct pmbus_driver_info *info) ...@@ -3320,6 +3319,7 @@ int pmbus_do_probe(struct i2c_client *client, struct pmbus_driver_info *info)
struct pmbus_data *data; struct pmbus_data *data;
size_t groups_num = 0; size_t groups_num = 0;
int ret; int ret;
int i;
char *name; char *name;
if (!info) if (!info)
...@@ -3353,6 +3353,11 @@ int pmbus_do_probe(struct i2c_client *client, struct pmbus_driver_info *info) ...@@ -3353,6 +3353,11 @@ int pmbus_do_probe(struct i2c_client *client, struct pmbus_driver_info *info)
data->currpage = -1; data->currpage = -1;
data->currphase = -1; data->currphase = -1;
for (i = 0; i < ARRAY_SIZE(data->vout_low); i++) {
data->vout_low[i] = -1;
data->vout_high[i] = -1;
}
ret = pmbus_init_common(client, data, info); ret = pmbus_init_common(client, data, info);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
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