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

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/staging

* 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/staging:
hwmon: (pmbus) Auto-detect temp2 and temp3 registers/attributes
hwmon: (pmbus) Improve fan detection
hwmon: (adm1275) Free allocated memory if probe function fails
hwmon: (pmbus) Drop check for PMBus revision register in probe function

+24 -13
+13 -3
drivers/hwmon/adm1275.c
··· 32 32 const struct i2c_device_id *id) 33 33 { 34 34 int config; 35 + int ret; 35 36 struct pmbus_driver_info *info; 36 37 37 38 if (!i2c_check_functionality(client->adapter, ··· 44 43 return -ENOMEM; 45 44 46 45 config = i2c_smbus_read_byte_data(client, ADM1275_PMON_CONFIG); 47 - if (config < 0) 48 - return config; 46 + if (config < 0) { 47 + ret = config; 48 + goto err_mem; 49 + } 49 50 50 51 info->pages = 1; 51 52 info->direct[PSC_VOLTAGE_IN] = true; ··· 79 76 else 80 77 info->func[0] |= PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT; 81 78 82 - return pmbus_do_probe(client, id, info); 79 + ret = pmbus_do_probe(client, id, info); 80 + if (ret) 81 + goto err_mem; 82 + return 0; 83 + 84 + err_mem: 85 + kfree(info); 86 + return ret; 83 87 } 84 88 85 89 static int adm1275_remove(struct i2c_client *client)
+8 -2
drivers/hwmon/pmbus.c
··· 47 47 if (info->func[0] 48 48 && pmbus_check_byte_register(client, 0, PMBUS_STATUS_INPUT)) 49 49 info->func[0] |= PMBUS_HAVE_STATUS_INPUT; 50 - if (pmbus_check_word_register(client, 0, PMBUS_READ_FAN_SPEED_1)) { 50 + if (pmbus_check_byte_register(client, 0, PMBUS_FAN_CONFIG_12) && 51 + pmbus_check_word_register(client, 0, PMBUS_READ_FAN_SPEED_1)) { 51 52 info->func[0] |= PMBUS_HAVE_FAN12; 52 53 if (pmbus_check_byte_register(client, 0, PMBUS_STATUS_FAN_12)) 53 54 info->func[0] |= PMBUS_HAVE_STATUS_FAN12; 54 55 } 55 - if (pmbus_check_word_register(client, 0, PMBUS_READ_FAN_SPEED_3)) { 56 + if (pmbus_check_byte_register(client, 0, PMBUS_FAN_CONFIG_34) && 57 + pmbus_check_word_register(client, 0, PMBUS_READ_FAN_SPEED_3)) { 56 58 info->func[0] |= PMBUS_HAVE_FAN34; 57 59 if (pmbus_check_byte_register(client, 0, PMBUS_STATUS_FAN_34)) 58 60 info->func[0] |= PMBUS_HAVE_STATUS_FAN34; ··· 65 63 PMBUS_STATUS_TEMPERATURE)) 66 64 info->func[0] |= PMBUS_HAVE_STATUS_TEMP; 67 65 } 66 + if (pmbus_check_word_register(client, 0, PMBUS_READ_TEMPERATURE_2)) 67 + info->func[0] |= PMBUS_HAVE_TEMP2; 68 + if (pmbus_check_word_register(client, 0, PMBUS_READ_TEMPERATURE_3)) 69 + info->func[0] |= PMBUS_HAVE_TEMP3; 68 70 69 71 /* Sensors detected on all pages */ 70 72 for (page = 0; page < info->pages; page++) {
+3 -8
drivers/hwmon/pmbus_core.c
··· 1430 1430 i2c_set_clientdata(client, data); 1431 1431 mutex_init(&data->update_lock); 1432 1432 1433 - /* 1434 - * Bail out if status register or PMBus revision register 1435 - * does not exist. 1436 - */ 1437 - if (i2c_smbus_read_byte_data(client, PMBUS_STATUS_BYTE) < 0 1438 - || i2c_smbus_read_byte_data(client, PMBUS_REVISION) < 0) { 1439 - dev_err(&client->dev, 1440 - "Status or revision register not found\n"); 1433 + /* Bail out if PMBus status register does not exist. */ 1434 + if (i2c_smbus_read_byte_data(client, PMBUS_STATUS_BYTE) < 0) { 1435 + dev_err(&client->dev, "PMBus status register not found\n"); 1441 1436 ret = -ENODEV; 1442 1437 goto out_data; 1443 1438 }