Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

Pull hwmon fixes from Guenter Roeck:

- max6639: Fix pulses-per-revolution implementation

- Several PMBus drivers: Add missing error checks

* tag 'hwmon-for-v7.0-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
hwmon: (max6639) Fix pulses-per-revolution implementation
hwmon: (pmbus/isl68137) Fix unchecked return value and use sysfs_emit()
hwmon: (pmbus/ina233) Add error check for pmbus_read_word_data() return value
hwmon: (pmbus/mp2869) Check pmbus_read_byte_data() before using its return value
hwmon: (pmbus/mp2975) Add error check for pmbus_read_word_data() return value
hwmon: (pmbus/hac300s) Add error check for pmbus_read_word_data() return value

+37 -21
+5 -5
drivers/hwmon/max6639.c
··· 232 232 static int max6639_set_ppr(struct max6639_data *data, int channel, u8 ppr) 233 233 { 234 234 /* Decrement the PPR value and shift left by 6 to match the register format */ 235 - return regmap_write(data->regmap, MAX6639_REG_FAN_PPR(channel), ppr-- << 6); 235 + return regmap_write(data->regmap, MAX6639_REG_FAN_PPR(channel), --ppr << 6); 236 236 } 237 237 238 238 static int max6639_write_fan(struct device *dev, u32 attr, int channel, ··· 524 524 525 525 { 526 526 struct device *dev = &client->dev; 527 - u32 i; 528 - int err, val; 527 + u32 i, val; 528 + int err; 529 529 530 530 err = of_property_read_u32(child, "reg", &i); 531 531 if (err) { ··· 540 540 541 541 err = of_property_read_u32(child, "pulses-per-revolution", &val); 542 542 if (!err) { 543 - if (val < 1 || val > 5) { 544 - dev_err(dev, "invalid pulses-per-revolution %d of %pOFn\n", val, child); 543 + if (val < 1 || val > 4) { 544 + dev_err(dev, "invalid pulses-per-revolution %u of %pOFn\n", val, child); 545 545 return -EINVAL; 546 546 } 547 547 data->ppr[i] = val;
+2
drivers/hwmon/pmbus/hac300s.c
··· 58 58 case PMBUS_MFR_VOUT_MIN: 59 59 case PMBUS_READ_VOUT: 60 60 rv = pmbus_read_word_data(client, page, phase, reg); 61 + if (rv < 0) 62 + return rv; 61 63 return FIELD_GET(LINEAR11_MANTISSA_MASK, rv); 62 64 default: 63 65 return -ENODATA;
+2
drivers/hwmon/pmbus/ina233.c
··· 67 67 switch (reg) { 68 68 case PMBUS_VIRT_READ_VMON: 69 69 ret = pmbus_read_word_data(client, 0, 0xff, MFR_READ_VSHUNT); 70 + if (ret < 0) 71 + return ret; 70 72 71 73 /* Adjust returned value to match VIN coefficients */ 72 74 /* VIN: 1.25 mV VSHUNT: 2.5 uV LSB */
+5 -2
drivers/hwmon/pmbus/isl68137.c
··· 98 98 { 99 99 int val = pmbus_read_byte_data(client, page, PMBUS_OPERATION); 100 100 101 - return sprintf(buf, "%d\n", 102 - (val & ISL68137_VOUT_AVS) == ISL68137_VOUT_AVS ? 1 : 0); 101 + if (val < 0) 102 + return val; 103 + 104 + return sysfs_emit(buf, "%d\n", 105 + (val & ISL68137_VOUT_AVS) == ISL68137_VOUT_AVS); 103 106 } 104 107 105 108 static ssize_t isl68137_avs_enable_store_page(struct i2c_client *client,
+21 -14
drivers/hwmon/pmbus/mp2869.c
··· 165 165 { 166 166 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); 167 167 struct mp2869_data *data = to_mp2869_data(info); 168 - int ret; 168 + int ret, mfr; 169 169 170 170 switch (reg) { 171 171 case PMBUS_VOUT_MODE: ··· 188 188 if (ret < 0) 189 189 return ret; 190 190 191 + mfr = pmbus_read_byte_data(client, page, 192 + PMBUS_STATUS_MFR_SPECIFIC); 193 + if (mfr < 0) 194 + return mfr; 195 + 191 196 ret = (ret & ~GENMASK(2, 2)) | 192 197 FIELD_PREP(GENMASK(2, 2), 193 - FIELD_GET(GENMASK(1, 1), 194 - pmbus_read_byte_data(client, page, 195 - PMBUS_STATUS_MFR_SPECIFIC))); 198 + FIELD_GET(GENMASK(1, 1), mfr)); 196 199 break; 197 200 case PMBUS_STATUS_TEMPERATURE: 198 201 /* ··· 210 207 if (ret < 0) 211 208 return ret; 212 209 210 + mfr = pmbus_read_byte_data(client, page, 211 + PMBUS_STATUS_MFR_SPECIFIC); 212 + if (mfr < 0) 213 + return mfr; 214 + 213 215 ret = (ret & ~GENMASK(7, 6)) | 214 216 FIELD_PREP(GENMASK(6, 6), 215 - FIELD_GET(GENMASK(1, 1), 216 - pmbus_read_byte_data(client, page, 217 - PMBUS_STATUS_MFR_SPECIFIC))) | 217 + FIELD_GET(GENMASK(1, 1), mfr)) | 218 218 FIELD_PREP(GENMASK(7, 7), 219 - FIELD_GET(GENMASK(1, 1), 220 - pmbus_read_byte_data(client, page, 221 - PMBUS_STATUS_MFR_SPECIFIC))); 219 + FIELD_GET(GENMASK(1, 1), mfr)); 222 220 break; 223 221 default: 224 222 ret = -ENODATA; ··· 234 230 { 235 231 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); 236 232 struct mp2869_data *data = to_mp2869_data(info); 237 - int ret; 233 + int ret, mfr; 238 234 239 235 switch (reg) { 240 236 case PMBUS_STATUS_WORD: ··· 250 246 if (ret < 0) 251 247 return ret; 252 248 249 + mfr = pmbus_read_byte_data(client, page, 250 + PMBUS_STATUS_MFR_SPECIFIC); 251 + if (mfr < 0) 252 + return mfr; 253 + 253 254 ret = (ret & ~GENMASK(2, 2)) | 254 255 FIELD_PREP(GENMASK(2, 2), 255 - FIELD_GET(GENMASK(1, 1), 256 - pmbus_read_byte_data(client, page, 257 - PMBUS_STATUS_MFR_SPECIFIC))); 256 + FIELD_GET(GENMASK(1, 1), mfr)); 258 257 break; 259 258 case PMBUS_READ_VIN: 260 259 /*
+2
drivers/hwmon/pmbus/mp2975.c
··· 313 313 case PMBUS_STATUS_WORD: 314 314 /* MP2973 & MP2971 return PGOOD instead of PB_STATUS_POWER_GOOD_N. */ 315 315 ret = pmbus_read_word_data(client, page, phase, reg); 316 + if (ret < 0) 317 + return ret; 316 318 ret ^= PB_STATUS_POWER_GOOD_N; 317 319 break; 318 320 case PMBUS_OT_FAULT_LIMIT: