diff options
| -rw-r--r-- | drivers/hwmon/adm1275.c | 16 | ||||
| -rw-r--r-- | drivers/hwmon/pmbus.c | 10 | ||||
| -rw-r--r-- | drivers/hwmon/pmbus_core.c | 11 |
3 files changed, 24 insertions, 13 deletions
diff --git a/drivers/hwmon/adm1275.c b/drivers/hwmon/adm1275.c index c2ee2048ab91..b9b7caf4a1d2 100644 --- a/drivers/hwmon/adm1275.c +++ b/drivers/hwmon/adm1275.c | |||
| @@ -32,6 +32,7 @@ static int adm1275_probe(struct i2c_client *client, | |||
| 32 | const struct i2c_device_id *id) | 32 | const struct i2c_device_id *id) |
| 33 | { | 33 | { |
| 34 | int config; | 34 | int config; |
| 35 | int ret; | ||
| 35 | struct pmbus_driver_info *info; | 36 | struct pmbus_driver_info *info; |
| 36 | 37 | ||
| 37 | if (!i2c_check_functionality(client->adapter, | 38 | if (!i2c_check_functionality(client->adapter, |
| @@ -43,8 +44,10 @@ static int adm1275_probe(struct i2c_client *client, | |||
| 43 | return -ENOMEM; | 44 | return -ENOMEM; |
| 44 | 45 | ||
| 45 | config = i2c_smbus_read_byte_data(client, ADM1275_PMON_CONFIG); | 46 | config = i2c_smbus_read_byte_data(client, ADM1275_PMON_CONFIG); |
| 46 | if (config < 0) | 47 | if (config < 0) { |
| 47 | return config; | 48 | ret = config; |
| 49 | goto err_mem; | ||
| 50 | } | ||
| 48 | 51 | ||
| 49 | info->pages = 1; | 52 | info->pages = 1; |
| 50 | info->direct[PSC_VOLTAGE_IN] = true; | 53 | info->direct[PSC_VOLTAGE_IN] = true; |
| @@ -76,7 +79,14 @@ static int adm1275_probe(struct i2c_client *client, | |||
| 76 | else | 79 | else |
| 77 | info->func[0] |= PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT; | 80 | info->func[0] |= PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT; |
| 78 | 81 | ||
| 79 | return pmbus_do_probe(client, id, info); | 82 | ret = pmbus_do_probe(client, id, info); |
| 83 | if (ret) | ||
| 84 | goto err_mem; | ||
| 85 | return 0; | ||
| 86 | |||
| 87 | err_mem: | ||
| 88 | kfree(info); | ||
| 89 | return ret; | ||
| 80 | } | 90 | } |
| 81 | 91 | ||
| 82 | static int adm1275_remove(struct i2c_client *client) | 92 | static int adm1275_remove(struct i2c_client *client) |
diff --git a/drivers/hwmon/pmbus.c b/drivers/hwmon/pmbus.c index 98e2e28899e2..931d940923ae 100644 --- a/drivers/hwmon/pmbus.c +++ b/drivers/hwmon/pmbus.c | |||
| @@ -47,12 +47,14 @@ static void pmbus_find_sensor_groups(struct i2c_client *client, | |||
| 47 | if (info->func[0] | 47 | if (info->func[0] |
| 48 | && pmbus_check_byte_register(client, 0, PMBUS_STATUS_INPUT)) | 48 | && pmbus_check_byte_register(client, 0, PMBUS_STATUS_INPUT)) |
| 49 | info->func[0] |= PMBUS_HAVE_STATUS_INPUT; | 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 | info->func[0] |= PMBUS_HAVE_FAN12; | 52 | info->func[0] |= PMBUS_HAVE_FAN12; |
| 52 | if (pmbus_check_byte_register(client, 0, PMBUS_STATUS_FAN_12)) | 53 | if (pmbus_check_byte_register(client, 0, PMBUS_STATUS_FAN_12)) |
| 53 | info->func[0] |= PMBUS_HAVE_STATUS_FAN12; | 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 | info->func[0] |= PMBUS_HAVE_FAN34; | 58 | info->func[0] |= PMBUS_HAVE_FAN34; |
| 57 | if (pmbus_check_byte_register(client, 0, PMBUS_STATUS_FAN_34)) | 59 | if (pmbus_check_byte_register(client, 0, PMBUS_STATUS_FAN_34)) |
| 58 | info->func[0] |= PMBUS_HAVE_STATUS_FAN34; | 60 | info->func[0] |= PMBUS_HAVE_STATUS_FAN34; |
| @@ -63,6 +65,10 @@ static void pmbus_find_sensor_groups(struct i2c_client *client, | |||
| 63 | PMBUS_STATUS_TEMPERATURE)) | 65 | PMBUS_STATUS_TEMPERATURE)) |
| 64 | info->func[0] |= PMBUS_HAVE_STATUS_TEMP; | 66 | info->func[0] |= PMBUS_HAVE_STATUS_TEMP; |
| 65 | } | 67 | } |
| 68 | if (pmbus_check_word_register(client, 0, PMBUS_READ_TEMPERATURE_2)) | ||
| 69 | info->func[0] |= PMBUS_HAVE_TEMP2; | ||
| 70 | if (pmbus_check_word_register(client, 0, PMBUS_READ_TEMPERATURE_3)) | ||
| 71 | info->func[0] |= PMBUS_HAVE_TEMP3; | ||
| 66 | 72 | ||
| 67 | /* Sensors detected on all pages */ | 73 | /* Sensors detected on all pages */ |
| 68 | for (page = 0; page < info->pages; page++) { | 74 | for (page = 0; page < info->pages; page++) { |
diff --git a/drivers/hwmon/pmbus_core.c b/drivers/hwmon/pmbus_core.c index 354770ed3186..744672c1f26d 100644 --- a/drivers/hwmon/pmbus_core.c +++ b/drivers/hwmon/pmbus_core.c | |||
| @@ -1430,14 +1430,9 @@ int pmbus_do_probe(struct i2c_client *client, const struct i2c_device_id *id, | |||
| 1430 | i2c_set_clientdata(client, data); | 1430 | i2c_set_clientdata(client, data); |
| 1431 | mutex_init(&data->update_lock); | 1431 | mutex_init(&data->update_lock); |
| 1432 | 1432 | ||
| 1433 | /* | 1433 | /* Bail out if PMBus status register does not exist. */ |
| 1434 | * Bail out if status register or PMBus revision register | 1434 | if (i2c_smbus_read_byte_data(client, PMBUS_STATUS_BYTE) < 0) { |
| 1435 | * does not exist. | 1435 | dev_err(&client->dev, "PMBus status register not found\n"); |
| 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"); | ||
| 1441 | ret = -ENODEV; | 1436 | ret = -ENODEV; |
| 1442 | goto out_data; | 1437 | goto out_data; |
| 1443 | } | 1438 | } |
