aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/hwmon/pmbus/zl6100.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/hwmon/pmbus/zl6100.c b/drivers/hwmon/pmbus/zl6100.c
index 7a72b6e4ff1d..48c7b4a716ae 100644
--- a/drivers/hwmon/pmbus/zl6100.c
+++ b/drivers/hwmon/pmbus/zl6100.c
@@ -38,8 +38,11 @@ struct zl6100_data {
38 38
39#define to_zl6100_data(x) container_of(x, struct zl6100_data, info) 39#define to_zl6100_data(x) container_of(x, struct zl6100_data, info)
40 40
41#define ZL6100_MFR_CONFIG 0xd0
41#define ZL6100_DEVICE_ID 0xe4 42#define ZL6100_DEVICE_ID 0xe4
42 43
44#define ZL6100_MFR_XTEMP_ENABLE (1 << 7)
45
43#define ZL6100_WAIT_TIME 1000 /* uS */ 46#define ZL6100_WAIT_TIME 1000 /* uS */
44 47
45static ushort delay = ZL6100_WAIT_TIME; 48static ushort delay = ZL6100_WAIT_TIME;
@@ -162,7 +165,7 @@ static int zl6100_probe(struct i2c_client *client,
162 const struct i2c_device_id *mid; 165 const struct i2c_device_id *mid;
163 166
164 if (!i2c_check_functionality(client->adapter, 167 if (!i2c_check_functionality(client->adapter,
165 I2C_FUNC_SMBUS_READ_BYTE_DATA 168 I2C_FUNC_SMBUS_READ_WORD_DATA
166 | I2C_FUNC_SMBUS_READ_BLOCK_DATA)) 169 | I2C_FUNC_SMBUS_READ_BLOCK_DATA))
167 return -ENODEV; 170 return -ENODEV;
168 171
@@ -210,12 +213,9 @@ static int zl6100_probe(struct i2c_client *client,
210 /* 213 /*
211 * Since there was a direct I2C device access above, wait before 214 * Since there was a direct I2C device access above, wait before
212 * accessing the chip again. 215 * accessing the chip again.
213 * Set the timestamp, wait, then set it again. This should provide
214 * enough buffer time to be safe.
215 */ 216 */
216 data->access = ktime_get(); 217 data->access = ktime_get();
217 zl6100_wait(data); 218 zl6100_wait(data);
218 data->access = ktime_get();
219 219
220 info = &data->info; 220 info = &data->info;
221 221
@@ -223,7 +223,16 @@ static int zl6100_probe(struct i2c_client *client,
223 info->func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT 223 info->func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT
224 | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT 224 | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT
225 | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT 225 | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT
226 | PMBUS_HAVE_TEMP | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_STATUS_TEMP; 226 | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP;
227
228 ret = i2c_smbus_read_word_data(client, ZL6100_MFR_CONFIG);
229 if (ret < 0)
230 goto err_mem;
231 if (ret & ZL6100_MFR_XTEMP_ENABLE)
232 info->func[0] |= PMBUS_HAVE_TEMP2;
233
234 data->access = ktime_get();
235 zl6100_wait(data);
227 236
228 info->read_word_data = zl6100_read_word_data; 237 info->read_word_data = zl6100_read_word_data;
229 info->read_byte_data = zl6100_read_byte_data; 238 info->read_byte_data = zl6100_read_byte_data;