0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #include <linux/kernel.h>
0015 #include <linux/module.h>
0016 #include <linux/init.h>
0017 #include <linux/err.h>
0018 #include <linux/slab.h>
0019 #include <linux/i2c.h>
0020 #include <linux/hwmon.h>
0021 #include <linux/hwmon-sysfs.h>
0022 #include <linux/jiffies.h>
0023
0024 enum chips { max16065, max16066, max16067, max16068, max16070, max16071 };
0025
0026
0027
0028
0029 #define MAX16065_ADC(x) ((x) * 2)
0030
0031 #define MAX16065_CURR_SENSE 0x18
0032 #define MAX16065_CSP_ADC 0x19
0033 #define MAX16065_FAULT(x) (0x1b + (x))
0034 #define MAX16065_SCALE(x) (0x43 + (x))
0035 #define MAX16065_CURR_CONTROL 0x47
0036 #define MAX16065_LIMIT(l, x) (0x48 + (l) + (x) * 3)
0037
0038
0039
0040
0041
0042
0043
0044 #define MAX16065_SW_ENABLE 0x73
0045
0046 #define MAX16065_WARNING_OV (1 << 3)
0047
0048
0049 #define MAX16065_CURR_ENABLE (1 << 0)
0050
0051 #define MAX16065_NUM_LIMIT 3
0052 #define MAX16065_NUM_ADC 12
0053
0054 static const int max16065_num_adc[] = {
0055 [max16065] = 12,
0056 [max16066] = 8,
0057 [max16067] = 6,
0058 [max16068] = 6,
0059 [max16070] = 12,
0060 [max16071] = 8,
0061 };
0062
0063 static const bool max16065_have_secondary[] = {
0064 [max16065] = true,
0065 [max16066] = true,
0066 [max16067] = false,
0067 [max16068] = false,
0068 [max16070] = true,
0069 [max16071] = true,
0070 };
0071
0072 static const bool max16065_have_current[] = {
0073 [max16065] = true,
0074 [max16066] = true,
0075 [max16067] = false,
0076 [max16068] = false,
0077 [max16070] = true,
0078 [max16071] = true,
0079 };
0080
0081 struct max16065_data {
0082 enum chips type;
0083 struct i2c_client *client;
0084 const struct attribute_group *groups[4];
0085 struct mutex update_lock;
0086 bool valid;
0087 unsigned long last_updated;
0088 int num_adc;
0089 bool have_current;
0090 int curr_gain;
0091
0092 int limit[MAX16065_NUM_LIMIT][MAX16065_NUM_ADC];
0093 int range[MAX16065_NUM_ADC + 1];
0094 int adc[MAX16065_NUM_ADC + 1];
0095 int curr_sense;
0096 int fault[2];
0097 };
0098
0099 static const int max16065_adc_range[] = { 5560, 2780, 1390, 0 };
0100 static const int max16065_csp_adc_range[] = { 7000, 14000 };
0101
0102
0103 static inline int ADC_TO_MV(int adc, int range)
0104 {
0105 return (adc * range) / 1024;
0106 }
0107
0108
0109
0110
0111
0112 static inline int LIMIT_TO_MV(int limit, int range)
0113 {
0114 return limit * range / 256;
0115 }
0116
0117 static inline int MV_TO_LIMIT(int mv, int range)
0118 {
0119 return clamp_val(DIV_ROUND_CLOSEST(mv * 256, range), 0, 255);
0120 }
0121
0122 static inline int ADC_TO_CURR(int adc, int gain)
0123 {
0124 return adc * 1400000 / (gain * 255);
0125 }
0126
0127
0128
0129
0130
0131
0132
0133 static int max16065_read_adc(struct i2c_client *client, int reg)
0134 {
0135 int rv;
0136
0137 rv = i2c_smbus_read_word_swapped(client, reg);
0138 if (unlikely(rv < 0))
0139 return rv;
0140 return rv >> 6;
0141 }
0142
0143 static struct max16065_data *max16065_update_device(struct device *dev)
0144 {
0145 struct max16065_data *data = dev_get_drvdata(dev);
0146 struct i2c_client *client = data->client;
0147
0148 mutex_lock(&data->update_lock);
0149 if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
0150 int i;
0151
0152 for (i = 0; i < data->num_adc; i++)
0153 data->adc[i]
0154 = max16065_read_adc(client, MAX16065_ADC(i));
0155
0156 if (data->have_current) {
0157 data->adc[MAX16065_NUM_ADC]
0158 = max16065_read_adc(client, MAX16065_CSP_ADC);
0159 data->curr_sense
0160 = i2c_smbus_read_byte_data(client,
0161 MAX16065_CURR_SENSE);
0162 }
0163
0164 for (i = 0; i < DIV_ROUND_UP(data->num_adc, 8); i++)
0165 data->fault[i]
0166 = i2c_smbus_read_byte_data(client, MAX16065_FAULT(i));
0167
0168 data->last_updated = jiffies;
0169 data->valid = true;
0170 }
0171 mutex_unlock(&data->update_lock);
0172 return data;
0173 }
0174
0175 static ssize_t max16065_alarm_show(struct device *dev,
0176 struct device_attribute *da, char *buf)
0177 {
0178 struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(da);
0179 struct max16065_data *data = max16065_update_device(dev);
0180 int val = data->fault[attr2->nr];
0181
0182 if (val < 0)
0183 return val;
0184
0185 val &= (1 << attr2->index);
0186 if (val)
0187 i2c_smbus_write_byte_data(data->client,
0188 MAX16065_FAULT(attr2->nr), val);
0189
0190 return sysfs_emit(buf, "%d\n", !!val);
0191 }
0192
0193 static ssize_t max16065_input_show(struct device *dev,
0194 struct device_attribute *da, char *buf)
0195 {
0196 struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
0197 struct max16065_data *data = max16065_update_device(dev);
0198 int adc = data->adc[attr->index];
0199
0200 if (unlikely(adc < 0))
0201 return adc;
0202
0203 return sysfs_emit(buf, "%d\n",
0204 ADC_TO_MV(adc, data->range[attr->index]));
0205 }
0206
0207 static ssize_t max16065_current_show(struct device *dev,
0208 struct device_attribute *da, char *buf)
0209 {
0210 struct max16065_data *data = max16065_update_device(dev);
0211
0212 if (unlikely(data->curr_sense < 0))
0213 return data->curr_sense;
0214
0215 return sysfs_emit(buf, "%d\n",
0216 ADC_TO_CURR(data->curr_sense, data->curr_gain));
0217 }
0218
0219 static ssize_t max16065_limit_store(struct device *dev,
0220 struct device_attribute *da,
0221 const char *buf, size_t count)
0222 {
0223 struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(da);
0224 struct max16065_data *data = dev_get_drvdata(dev);
0225 unsigned long val;
0226 int err;
0227 int limit;
0228
0229 err = kstrtoul(buf, 10, &val);
0230 if (unlikely(err < 0))
0231 return err;
0232
0233 limit = MV_TO_LIMIT(val, data->range[attr2->index]);
0234
0235 mutex_lock(&data->update_lock);
0236 data->limit[attr2->nr][attr2->index]
0237 = LIMIT_TO_MV(limit, data->range[attr2->index]);
0238 i2c_smbus_write_byte_data(data->client,
0239 MAX16065_LIMIT(attr2->nr, attr2->index),
0240 limit);
0241 mutex_unlock(&data->update_lock);
0242
0243 return count;
0244 }
0245
0246 static ssize_t max16065_limit_show(struct device *dev,
0247 struct device_attribute *da, char *buf)
0248 {
0249 struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(da);
0250 struct max16065_data *data = dev_get_drvdata(dev);
0251
0252 return sysfs_emit(buf, "%d\n",
0253 data->limit[attr2->nr][attr2->index]);
0254 }
0255
0256
0257
0258
0259 static SENSOR_DEVICE_ATTR_RO(in0_input, max16065_input, 0);
0260 static SENSOR_DEVICE_ATTR_RO(in1_input, max16065_input, 1);
0261 static SENSOR_DEVICE_ATTR_RO(in2_input, max16065_input, 2);
0262 static SENSOR_DEVICE_ATTR_RO(in3_input, max16065_input, 3);
0263 static SENSOR_DEVICE_ATTR_RO(in4_input, max16065_input, 4);
0264 static SENSOR_DEVICE_ATTR_RO(in5_input, max16065_input, 5);
0265 static SENSOR_DEVICE_ATTR_RO(in6_input, max16065_input, 6);
0266 static SENSOR_DEVICE_ATTR_RO(in7_input, max16065_input, 7);
0267 static SENSOR_DEVICE_ATTR_RO(in8_input, max16065_input, 8);
0268 static SENSOR_DEVICE_ATTR_RO(in9_input, max16065_input, 9);
0269 static SENSOR_DEVICE_ATTR_RO(in10_input, max16065_input, 10);
0270 static SENSOR_DEVICE_ATTR_RO(in11_input, max16065_input, 11);
0271 static SENSOR_DEVICE_ATTR_RO(in12_input, max16065_input, 12);
0272
0273
0274 static SENSOR_DEVICE_ATTR_2_RW(in0_lcrit, max16065_limit, 2, 0);
0275 static SENSOR_DEVICE_ATTR_2_RW(in1_lcrit, max16065_limit, 2, 1);
0276 static SENSOR_DEVICE_ATTR_2_RW(in2_lcrit, max16065_limit, 2, 2);
0277 static SENSOR_DEVICE_ATTR_2_RW(in3_lcrit, max16065_limit, 2, 3);
0278 static SENSOR_DEVICE_ATTR_2_RW(in4_lcrit, max16065_limit, 2, 4);
0279 static SENSOR_DEVICE_ATTR_2_RW(in5_lcrit, max16065_limit, 2, 5);
0280 static SENSOR_DEVICE_ATTR_2_RW(in6_lcrit, max16065_limit, 2, 6);
0281 static SENSOR_DEVICE_ATTR_2_RW(in7_lcrit, max16065_limit, 2, 7);
0282 static SENSOR_DEVICE_ATTR_2_RW(in8_lcrit, max16065_limit, 2, 8);
0283 static SENSOR_DEVICE_ATTR_2_RW(in9_lcrit, max16065_limit, 2, 9);
0284 static SENSOR_DEVICE_ATTR_2_RW(in10_lcrit, max16065_limit, 2, 10);
0285 static SENSOR_DEVICE_ATTR_2_RW(in11_lcrit, max16065_limit, 2, 11);
0286
0287
0288 static SENSOR_DEVICE_ATTR_2_RW(in0_crit, max16065_limit, 1, 0);
0289 static SENSOR_DEVICE_ATTR_2_RW(in1_crit, max16065_limit, 1, 1);
0290 static SENSOR_DEVICE_ATTR_2_RW(in2_crit, max16065_limit, 1, 2);
0291 static SENSOR_DEVICE_ATTR_2_RW(in3_crit, max16065_limit, 1, 3);
0292 static SENSOR_DEVICE_ATTR_2_RW(in4_crit, max16065_limit, 1, 4);
0293 static SENSOR_DEVICE_ATTR_2_RW(in5_crit, max16065_limit, 1, 5);
0294 static SENSOR_DEVICE_ATTR_2_RW(in6_crit, max16065_limit, 1, 6);
0295 static SENSOR_DEVICE_ATTR_2_RW(in7_crit, max16065_limit, 1, 7);
0296 static SENSOR_DEVICE_ATTR_2_RW(in8_crit, max16065_limit, 1, 8);
0297 static SENSOR_DEVICE_ATTR_2_RW(in9_crit, max16065_limit, 1, 9);
0298 static SENSOR_DEVICE_ATTR_2_RW(in10_crit, max16065_limit, 1, 10);
0299 static SENSOR_DEVICE_ATTR_2_RW(in11_crit, max16065_limit, 1, 11);
0300
0301
0302 static SENSOR_DEVICE_ATTR_2_RW(in0_min, max16065_limit, 0, 0);
0303 static SENSOR_DEVICE_ATTR_2_RW(in1_min, max16065_limit, 0, 1);
0304 static SENSOR_DEVICE_ATTR_2_RW(in2_min, max16065_limit, 0, 2);
0305 static SENSOR_DEVICE_ATTR_2_RW(in3_min, max16065_limit, 0, 3);
0306 static SENSOR_DEVICE_ATTR_2_RW(in4_min, max16065_limit, 0, 4);
0307 static SENSOR_DEVICE_ATTR_2_RW(in5_min, max16065_limit, 0, 5);
0308 static SENSOR_DEVICE_ATTR_2_RW(in6_min, max16065_limit, 0, 6);
0309 static SENSOR_DEVICE_ATTR_2_RW(in7_min, max16065_limit, 0, 7);
0310 static SENSOR_DEVICE_ATTR_2_RW(in8_min, max16065_limit, 0, 8);
0311 static SENSOR_DEVICE_ATTR_2_RW(in9_min, max16065_limit, 0, 9);
0312 static SENSOR_DEVICE_ATTR_2_RW(in10_min, max16065_limit, 0, 10);
0313 static SENSOR_DEVICE_ATTR_2_RW(in11_min, max16065_limit, 0, 11);
0314
0315
0316 static SENSOR_DEVICE_ATTR_2_RW(in0_max, max16065_limit, 0, 0);
0317 static SENSOR_DEVICE_ATTR_2_RW(in1_max, max16065_limit, 0, 1);
0318 static SENSOR_DEVICE_ATTR_2_RW(in2_max, max16065_limit, 0, 2);
0319 static SENSOR_DEVICE_ATTR_2_RW(in3_max, max16065_limit, 0, 3);
0320 static SENSOR_DEVICE_ATTR_2_RW(in4_max, max16065_limit, 0, 4);
0321 static SENSOR_DEVICE_ATTR_2_RW(in5_max, max16065_limit, 0, 5);
0322 static SENSOR_DEVICE_ATTR_2_RW(in6_max, max16065_limit, 0, 6);
0323 static SENSOR_DEVICE_ATTR_2_RW(in7_max, max16065_limit, 0, 7);
0324 static SENSOR_DEVICE_ATTR_2_RW(in8_max, max16065_limit, 0, 8);
0325 static SENSOR_DEVICE_ATTR_2_RW(in9_max, max16065_limit, 0, 9);
0326 static SENSOR_DEVICE_ATTR_2_RW(in10_max, max16065_limit, 0, 10);
0327 static SENSOR_DEVICE_ATTR_2_RW(in11_max, max16065_limit, 0, 11);
0328
0329
0330 static SENSOR_DEVICE_ATTR_2_RO(in0_alarm, max16065_alarm, 0, 0);
0331 static SENSOR_DEVICE_ATTR_2_RO(in1_alarm, max16065_alarm, 0, 1);
0332 static SENSOR_DEVICE_ATTR_2_RO(in2_alarm, max16065_alarm, 0, 2);
0333 static SENSOR_DEVICE_ATTR_2_RO(in3_alarm, max16065_alarm, 0, 3);
0334 static SENSOR_DEVICE_ATTR_2_RO(in4_alarm, max16065_alarm, 0, 4);
0335 static SENSOR_DEVICE_ATTR_2_RO(in5_alarm, max16065_alarm, 0, 5);
0336 static SENSOR_DEVICE_ATTR_2_RO(in6_alarm, max16065_alarm, 0, 6);
0337 static SENSOR_DEVICE_ATTR_2_RO(in7_alarm, max16065_alarm, 0, 7);
0338 static SENSOR_DEVICE_ATTR_2_RO(in8_alarm, max16065_alarm, 1, 0);
0339 static SENSOR_DEVICE_ATTR_2_RO(in9_alarm, max16065_alarm, 1, 1);
0340 static SENSOR_DEVICE_ATTR_2_RO(in10_alarm, max16065_alarm, 1, 2);
0341 static SENSOR_DEVICE_ATTR_2_RO(in11_alarm, max16065_alarm, 1, 3);
0342
0343
0344 static SENSOR_DEVICE_ATTR_RO(curr1_input, max16065_current, 0);
0345 static SENSOR_DEVICE_ATTR_2_RO(curr1_alarm, max16065_alarm, 1, 4);
0346
0347
0348
0349
0350
0351 static struct attribute *max16065_basic_attributes[] = {
0352 &sensor_dev_attr_in0_input.dev_attr.attr,
0353 &sensor_dev_attr_in0_lcrit.dev_attr.attr,
0354 &sensor_dev_attr_in0_crit.dev_attr.attr,
0355 &sensor_dev_attr_in0_alarm.dev_attr.attr,
0356
0357 &sensor_dev_attr_in1_input.dev_attr.attr,
0358 &sensor_dev_attr_in1_lcrit.dev_attr.attr,
0359 &sensor_dev_attr_in1_crit.dev_attr.attr,
0360 &sensor_dev_attr_in1_alarm.dev_attr.attr,
0361
0362 &sensor_dev_attr_in2_input.dev_attr.attr,
0363 &sensor_dev_attr_in2_lcrit.dev_attr.attr,
0364 &sensor_dev_attr_in2_crit.dev_attr.attr,
0365 &sensor_dev_attr_in2_alarm.dev_attr.attr,
0366
0367 &sensor_dev_attr_in3_input.dev_attr.attr,
0368 &sensor_dev_attr_in3_lcrit.dev_attr.attr,
0369 &sensor_dev_attr_in3_crit.dev_attr.attr,
0370 &sensor_dev_attr_in3_alarm.dev_attr.attr,
0371
0372 &sensor_dev_attr_in4_input.dev_attr.attr,
0373 &sensor_dev_attr_in4_lcrit.dev_attr.attr,
0374 &sensor_dev_attr_in4_crit.dev_attr.attr,
0375 &sensor_dev_attr_in4_alarm.dev_attr.attr,
0376
0377 &sensor_dev_attr_in5_input.dev_attr.attr,
0378 &sensor_dev_attr_in5_lcrit.dev_attr.attr,
0379 &sensor_dev_attr_in5_crit.dev_attr.attr,
0380 &sensor_dev_attr_in5_alarm.dev_attr.attr,
0381
0382 &sensor_dev_attr_in6_input.dev_attr.attr,
0383 &sensor_dev_attr_in6_lcrit.dev_attr.attr,
0384 &sensor_dev_attr_in6_crit.dev_attr.attr,
0385 &sensor_dev_attr_in6_alarm.dev_attr.attr,
0386
0387 &sensor_dev_attr_in7_input.dev_attr.attr,
0388 &sensor_dev_attr_in7_lcrit.dev_attr.attr,
0389 &sensor_dev_attr_in7_crit.dev_attr.attr,
0390 &sensor_dev_attr_in7_alarm.dev_attr.attr,
0391
0392 &sensor_dev_attr_in8_input.dev_attr.attr,
0393 &sensor_dev_attr_in8_lcrit.dev_attr.attr,
0394 &sensor_dev_attr_in8_crit.dev_attr.attr,
0395 &sensor_dev_attr_in8_alarm.dev_attr.attr,
0396
0397 &sensor_dev_attr_in9_input.dev_attr.attr,
0398 &sensor_dev_attr_in9_lcrit.dev_attr.attr,
0399 &sensor_dev_attr_in9_crit.dev_attr.attr,
0400 &sensor_dev_attr_in9_alarm.dev_attr.attr,
0401
0402 &sensor_dev_attr_in10_input.dev_attr.attr,
0403 &sensor_dev_attr_in10_lcrit.dev_attr.attr,
0404 &sensor_dev_attr_in10_crit.dev_attr.attr,
0405 &sensor_dev_attr_in10_alarm.dev_attr.attr,
0406
0407 &sensor_dev_attr_in11_input.dev_attr.attr,
0408 &sensor_dev_attr_in11_lcrit.dev_attr.attr,
0409 &sensor_dev_attr_in11_crit.dev_attr.attr,
0410 &sensor_dev_attr_in11_alarm.dev_attr.attr,
0411
0412 NULL
0413 };
0414
0415 static struct attribute *max16065_current_attributes[] = {
0416 &sensor_dev_attr_in12_input.dev_attr.attr,
0417 &sensor_dev_attr_curr1_input.dev_attr.attr,
0418 &sensor_dev_attr_curr1_alarm.dev_attr.attr,
0419 NULL
0420 };
0421
0422 static struct attribute *max16065_min_attributes[] = {
0423 &sensor_dev_attr_in0_min.dev_attr.attr,
0424 &sensor_dev_attr_in1_min.dev_attr.attr,
0425 &sensor_dev_attr_in2_min.dev_attr.attr,
0426 &sensor_dev_attr_in3_min.dev_attr.attr,
0427 &sensor_dev_attr_in4_min.dev_attr.attr,
0428 &sensor_dev_attr_in5_min.dev_attr.attr,
0429 &sensor_dev_attr_in6_min.dev_attr.attr,
0430 &sensor_dev_attr_in7_min.dev_attr.attr,
0431 &sensor_dev_attr_in8_min.dev_attr.attr,
0432 &sensor_dev_attr_in9_min.dev_attr.attr,
0433 &sensor_dev_attr_in10_min.dev_attr.attr,
0434 &sensor_dev_attr_in11_min.dev_attr.attr,
0435 NULL
0436 };
0437
0438 static struct attribute *max16065_max_attributes[] = {
0439 &sensor_dev_attr_in0_max.dev_attr.attr,
0440 &sensor_dev_attr_in1_max.dev_attr.attr,
0441 &sensor_dev_attr_in2_max.dev_attr.attr,
0442 &sensor_dev_attr_in3_max.dev_attr.attr,
0443 &sensor_dev_attr_in4_max.dev_attr.attr,
0444 &sensor_dev_attr_in5_max.dev_attr.attr,
0445 &sensor_dev_attr_in6_max.dev_attr.attr,
0446 &sensor_dev_attr_in7_max.dev_attr.attr,
0447 &sensor_dev_attr_in8_max.dev_attr.attr,
0448 &sensor_dev_attr_in9_max.dev_attr.attr,
0449 &sensor_dev_attr_in10_max.dev_attr.attr,
0450 &sensor_dev_attr_in11_max.dev_attr.attr,
0451 NULL
0452 };
0453
0454 static umode_t max16065_basic_is_visible(struct kobject *kobj,
0455 struct attribute *a, int n)
0456 {
0457 struct device *dev = kobj_to_dev(kobj);
0458 struct max16065_data *data = dev_get_drvdata(dev);
0459 int index = n / 4;
0460
0461 if (index >= data->num_adc || !data->range[index])
0462 return 0;
0463 return a->mode;
0464 }
0465
0466 static umode_t max16065_secondary_is_visible(struct kobject *kobj,
0467 struct attribute *a, int index)
0468 {
0469 struct device *dev = kobj_to_dev(kobj);
0470 struct max16065_data *data = dev_get_drvdata(dev);
0471
0472 if (index >= data->num_adc)
0473 return 0;
0474 return a->mode;
0475 }
0476
0477 static const struct attribute_group max16065_basic_group = {
0478 .attrs = max16065_basic_attributes,
0479 .is_visible = max16065_basic_is_visible,
0480 };
0481
0482 static const struct attribute_group max16065_current_group = {
0483 .attrs = max16065_current_attributes,
0484 };
0485
0486 static const struct attribute_group max16065_min_group = {
0487 .attrs = max16065_min_attributes,
0488 .is_visible = max16065_secondary_is_visible,
0489 };
0490
0491 static const struct attribute_group max16065_max_group = {
0492 .attrs = max16065_max_attributes,
0493 .is_visible = max16065_secondary_is_visible,
0494 };
0495
0496 static const struct i2c_device_id max16065_id[];
0497
0498 static int max16065_probe(struct i2c_client *client)
0499 {
0500 struct i2c_adapter *adapter = client->adapter;
0501 struct max16065_data *data;
0502 struct device *dev = &client->dev;
0503 struct device *hwmon_dev;
0504 int i, j, val;
0505 bool have_secondary;
0506 bool secondary_is_max = false;
0507 int groups = 0;
0508 const struct i2c_device_id *id = i2c_match_id(max16065_id, client);
0509
0510 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA
0511 | I2C_FUNC_SMBUS_READ_WORD_DATA))
0512 return -ENODEV;
0513
0514 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
0515 if (unlikely(!data))
0516 return -ENOMEM;
0517
0518 data->client = client;
0519 mutex_init(&data->update_lock);
0520
0521 data->num_adc = max16065_num_adc[id->driver_data];
0522 data->have_current = max16065_have_current[id->driver_data];
0523 have_secondary = max16065_have_secondary[id->driver_data];
0524
0525 if (have_secondary) {
0526 val = i2c_smbus_read_byte_data(client, MAX16065_SW_ENABLE);
0527 if (unlikely(val < 0))
0528 return val;
0529 secondary_is_max = val & MAX16065_WARNING_OV;
0530 }
0531
0532
0533 for (i = 0; i < DIV_ROUND_UP(data->num_adc, 4); i++) {
0534 val = i2c_smbus_read_byte_data(client, MAX16065_SCALE(i));
0535 if (unlikely(val < 0))
0536 return val;
0537 for (j = 0; j < 4 && i * 4 + j < data->num_adc; j++) {
0538 data->range[i * 4 + j] =
0539 max16065_adc_range[(val >> (j * 2)) & 0x3];
0540 }
0541 }
0542
0543
0544 for (i = 0; i < MAX16065_NUM_LIMIT; i++) {
0545 if (i == 0 && !have_secondary)
0546 continue;
0547
0548 for (j = 0; j < data->num_adc; j++) {
0549 val = i2c_smbus_read_byte_data(client,
0550 MAX16065_LIMIT(i, j));
0551 if (unlikely(val < 0))
0552 return val;
0553 data->limit[i][j] = LIMIT_TO_MV(val, data->range[j]);
0554 }
0555 }
0556
0557
0558 data->groups[groups++] = &max16065_basic_group;
0559 if (have_secondary)
0560 data->groups[groups++] = secondary_is_max ?
0561 &max16065_max_group : &max16065_min_group;
0562
0563 if (data->have_current) {
0564 val = i2c_smbus_read_byte_data(client, MAX16065_CURR_CONTROL);
0565 if (unlikely(val < 0))
0566 return val;
0567 if (val & MAX16065_CURR_ENABLE) {
0568
0569
0570
0571
0572 data->curr_gain = 6 << ((val >> 2) & 0x03);
0573 data->range[MAX16065_NUM_ADC]
0574 = max16065_csp_adc_range[(val >> 1) & 0x01];
0575 data->groups[groups++] = &max16065_current_group;
0576 } else {
0577 data->have_current = false;
0578 }
0579 }
0580
0581 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
0582 data, data->groups);
0583 return PTR_ERR_OR_ZERO(hwmon_dev);
0584 }
0585
0586 static const struct i2c_device_id max16065_id[] = {
0587 { "max16065", max16065 },
0588 { "max16066", max16066 },
0589 { "max16067", max16067 },
0590 { "max16068", max16068 },
0591 { "max16070", max16070 },
0592 { "max16071", max16071 },
0593 { }
0594 };
0595
0596 MODULE_DEVICE_TABLE(i2c, max16065_id);
0597
0598
0599 static struct i2c_driver max16065_driver = {
0600 .driver = {
0601 .name = "max16065",
0602 },
0603 .probe_new = max16065_probe,
0604 .id_table = max16065_id,
0605 };
0606
0607 module_i2c_driver(max16065_driver);
0608
0609 MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");
0610 MODULE_DESCRIPTION("MAX16065 driver");
0611 MODULE_LICENSE("GPL");