Source
219
219
* in mOhm.
220
220
*/
221
221
val = DIV_ROUND_CLOSEST(val, 25);
222
222
break;
223
223
default:
224
224
return -EINVAL;
225
225
}
226
226
return val;
227
227
}
228
228
229
-
static ssize_t ltc2945_show_value(struct device *dev,
229
+
static ssize_t ltc2945_value_show(struct device *dev,
230
230
struct device_attribute *da, char *buf)
231
231
{
232
232
struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
233
233
long long value;
234
234
235
235
value = ltc2945_reg_to_val(dev, attr->index);
236
236
if (value < 0)
237
237
return value;
238
238
return snprintf(buf, PAGE_SIZE, "%lld\n", value);
239
239
}
240
240
241
-
static ssize_t ltc2945_set_value(struct device *dev,
242
-
struct device_attribute *da,
243
-
const char *buf, size_t count)
241
+
static ssize_t ltc2945_value_store(struct device *dev,
242
+
struct device_attribute *da,
243
+
const char *buf, size_t count)
244
244
{
245
245
struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
246
246
struct regmap *regmap = dev_get_drvdata(dev);
247
247
u8 reg = attr->index;
248
248
unsigned long val;
249
249
u8 regbuf[3];
250
250
int num_regs;
251
251
int regval;
252
252
int ret;
253
253
266
266
} else {
267
267
regval = clamp_val(regval, 0, 0xfff) << 4;
268
268
regbuf[0] = regval >> 8;
269
269
regbuf[1] = regval & 0xff;
270
270
num_regs = 2;
271
271
}
272
272
ret = regmap_bulk_write(regmap, reg, regbuf, num_regs);
273
273
return ret < 0 ? ret : count;
274
274
}
275
275
276
-
static ssize_t ltc2945_reset_history(struct device *dev,
276
+
static ssize_t ltc2945_history_store(struct device *dev,
277
277
struct device_attribute *da,
278
278
const char *buf, size_t count)
279
279
{
280
280
struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
281
281
struct regmap *regmap = dev_get_drvdata(dev);
282
282
u8 reg = attr->index;
283
283
int num_regs = is_power_reg(reg) ? 3 : 2;
284
284
u8 buf_min[3] = { 0xff, 0xff, 0xff };
285
285
u8 buf_max[3] = { 0, 0, 0 };
286
286
unsigned long val;
319
319
}
320
320
/* Reset maximum */
321
321
ret = regmap_bulk_write(regmap, reg, buf_max, num_regs);
322
322
323
323
/* Try resetting test mode even if there was an error */
324
324
regmap_update_bits(regmap, LTC2945_CONTROL, CONTROL_TEST_MODE, 0);
325
325
326
326
return ret ? : count;
327
327
}
328
328
329
-
static ssize_t ltc2945_show_bool(struct device *dev,
329
+
static ssize_t ltc2945_bool_show(struct device *dev,
330
330
struct device_attribute *da, char *buf)
331
331
{
332
332
struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
333
333
struct regmap *regmap = dev_get_drvdata(dev);
334
334
unsigned int fault;
335
335
int ret;
336
336
337
337
ret = regmap_read(regmap, LTC2945_FAULT, &fault);
338
338
if (ret < 0)
339
339
return ret;
340
340
341
341
fault &= attr->index;
342
342
if (fault) /* Clear reported faults in chip register */
343
343
regmap_update_bits(regmap, LTC2945_FAULT, attr->index, 0);
344
344
345
345
return snprintf(buf, PAGE_SIZE, "%d\n", !!fault);
346
346
}
347
347
348
348
/* Input voltages */
349
349
350
-
static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, ltc2945_show_value, NULL,
351
-
LTC2945_VIN_H);
352
-
static SENSOR_DEVICE_ATTR(in1_min, S_IRUGO | S_IWUSR, ltc2945_show_value,
353
-
ltc2945_set_value, LTC2945_MIN_VIN_THRES_H);
354
-
static SENSOR_DEVICE_ATTR(in1_max, S_IRUGO | S_IWUSR, ltc2945_show_value,
355
-
ltc2945_set_value, LTC2945_MAX_VIN_THRES_H);
356
-
static SENSOR_DEVICE_ATTR(in1_lowest, S_IRUGO, ltc2945_show_value, NULL,
357
-
LTC2945_MIN_VIN_H);
358
-
static SENSOR_DEVICE_ATTR(in1_highest, S_IRUGO, ltc2945_show_value, NULL,
359
-
LTC2945_MAX_VIN_H);
360
-
static SENSOR_DEVICE_ATTR(in1_reset_history, S_IWUSR, NULL,
361
-
ltc2945_reset_history, LTC2945_MIN_VIN_H);
362
-
363
-
static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, ltc2945_show_value, NULL,
364
-
LTC2945_ADIN_H);
365
-
static SENSOR_DEVICE_ATTR(in2_min, S_IRUGO | S_IWUSR, ltc2945_show_value,
366
-
ltc2945_set_value, LTC2945_MIN_ADIN_THRES_H);
367
-
static SENSOR_DEVICE_ATTR(in2_max, S_IRUGO | S_IWUSR, ltc2945_show_value,
368
-
ltc2945_set_value, LTC2945_MAX_ADIN_THRES_H);
369
-
static SENSOR_DEVICE_ATTR(in2_lowest, S_IRUGO, ltc2945_show_value, NULL,
370
-
LTC2945_MIN_ADIN_H);
371
-
static SENSOR_DEVICE_ATTR(in2_highest, S_IRUGO, ltc2945_show_value, NULL,
372
-
LTC2945_MAX_ADIN_H);
373
-
static SENSOR_DEVICE_ATTR(in2_reset_history, S_IWUSR, NULL,
374
-
ltc2945_reset_history, LTC2945_MIN_ADIN_H);
350
+
static SENSOR_DEVICE_ATTR_RO(in1_input, ltc2945_value, LTC2945_VIN_H);
351
+
static SENSOR_DEVICE_ATTR_RW(in1_min, ltc2945_value, LTC2945_MIN_VIN_THRES_H);
352
+
static SENSOR_DEVICE_ATTR_RW(in1_max, ltc2945_value, LTC2945_MAX_VIN_THRES_H);
353
+
static SENSOR_DEVICE_ATTR_RO(in1_lowest, ltc2945_value, LTC2945_MIN_VIN_H);
354
+
static SENSOR_DEVICE_ATTR_RO(in1_highest, ltc2945_value, LTC2945_MAX_VIN_H);
355
+
static SENSOR_DEVICE_ATTR_WO(in1_reset_history, ltc2945_history,
356
+
LTC2945_MIN_VIN_H);
357
+
358
+
static SENSOR_DEVICE_ATTR_RO(in2_input, ltc2945_value, LTC2945_ADIN_H);
359
+
static SENSOR_DEVICE_ATTR_RW(in2_min, ltc2945_value, LTC2945_MIN_ADIN_THRES_H);
360
+
static SENSOR_DEVICE_ATTR_RW(in2_max, ltc2945_value, LTC2945_MAX_ADIN_THRES_H);
361
+
static SENSOR_DEVICE_ATTR_RO(in2_lowest, ltc2945_value, LTC2945_MIN_ADIN_H);
362
+
static SENSOR_DEVICE_ATTR_RO(in2_highest, ltc2945_value, LTC2945_MAX_ADIN_H);
363
+
static SENSOR_DEVICE_ATTR_WO(in2_reset_history, ltc2945_history,
364
+
LTC2945_MIN_ADIN_H);
375
365
376
366
/* Voltage alarms */
377
367
378
-
static SENSOR_DEVICE_ATTR(in1_min_alarm, S_IRUGO, ltc2945_show_bool, NULL,
379
-
FAULT_VIN_UV);
380
-
static SENSOR_DEVICE_ATTR(in1_max_alarm, S_IRUGO, ltc2945_show_bool, NULL,
381
-
FAULT_VIN_OV);
382
-
static SENSOR_DEVICE_ATTR(in2_min_alarm, S_IRUGO, ltc2945_show_bool, NULL,
383
-
FAULT_ADIN_UV);
384
-
static SENSOR_DEVICE_ATTR(in2_max_alarm, S_IRUGO, ltc2945_show_bool, NULL,
385
-
FAULT_ADIN_OV);
368
+
static SENSOR_DEVICE_ATTR_RO(in1_min_alarm, ltc2945_bool, FAULT_VIN_UV);
369
+
static SENSOR_DEVICE_ATTR_RO(in1_max_alarm, ltc2945_bool, FAULT_VIN_OV);
370
+
static SENSOR_DEVICE_ATTR_RO(in2_min_alarm, ltc2945_bool, FAULT_ADIN_UV);
371
+
static SENSOR_DEVICE_ATTR_RO(in2_max_alarm, ltc2945_bool, FAULT_ADIN_OV);
386
372
387
373
/* Currents (via sense resistor) */
388
374
389
-
static SENSOR_DEVICE_ATTR(curr1_input, S_IRUGO, ltc2945_show_value, NULL,
390
-
LTC2945_SENSE_H);
391
-
static SENSOR_DEVICE_ATTR(curr1_min, S_IRUGO | S_IWUSR, ltc2945_show_value,
392
-
ltc2945_set_value, LTC2945_MIN_SENSE_THRES_H);
393
-
static SENSOR_DEVICE_ATTR(curr1_max, S_IRUGO | S_IWUSR, ltc2945_show_value,
394
-
ltc2945_set_value, LTC2945_MAX_SENSE_THRES_H);
395
-
static SENSOR_DEVICE_ATTR(curr1_lowest, S_IRUGO, ltc2945_show_value, NULL,
396
-
LTC2945_MIN_SENSE_H);
397
-
static SENSOR_DEVICE_ATTR(curr1_highest, S_IRUGO, ltc2945_show_value, NULL,
398
-
LTC2945_MAX_SENSE_H);
399
-
static SENSOR_DEVICE_ATTR(curr1_reset_history, S_IWUSR, NULL,
400
-
ltc2945_reset_history, LTC2945_MIN_SENSE_H);
375
+
static SENSOR_DEVICE_ATTR_RO(curr1_input, ltc2945_value, LTC2945_SENSE_H);
376
+
static SENSOR_DEVICE_ATTR_RW(curr1_min, ltc2945_value,
377
+
LTC2945_MIN_SENSE_THRES_H);
378
+
static SENSOR_DEVICE_ATTR_RW(curr1_max, ltc2945_value,
379
+
LTC2945_MAX_SENSE_THRES_H);
380
+
static SENSOR_DEVICE_ATTR_RO(curr1_lowest, ltc2945_value, LTC2945_MIN_SENSE_H);
381
+
static SENSOR_DEVICE_ATTR_RO(curr1_highest, ltc2945_value,
382
+
LTC2945_MAX_SENSE_H);
383
+
static SENSOR_DEVICE_ATTR_WO(curr1_reset_history, ltc2945_history,
384
+
LTC2945_MIN_SENSE_H);
401
385
402
386
/* Current alarms */
403
387
404
-
static SENSOR_DEVICE_ATTR(curr1_min_alarm, S_IRUGO, ltc2945_show_bool, NULL,
405
-
FAULT_SENSE_UV);
406
-
static SENSOR_DEVICE_ATTR(curr1_max_alarm, S_IRUGO, ltc2945_show_bool, NULL,
407
-
FAULT_SENSE_OV);
388
+
static SENSOR_DEVICE_ATTR_RO(curr1_min_alarm, ltc2945_bool, FAULT_SENSE_UV);
389
+
static SENSOR_DEVICE_ATTR_RO(curr1_max_alarm, ltc2945_bool, FAULT_SENSE_OV);
408
390
409
391
/* Power */
410
392
411
-
static SENSOR_DEVICE_ATTR(power1_input, S_IRUGO, ltc2945_show_value, NULL,
412
-
LTC2945_POWER_H);
413
-
static SENSOR_DEVICE_ATTR(power1_min, S_IRUGO | S_IWUSR, ltc2945_show_value,
414
-
ltc2945_set_value, LTC2945_MIN_POWER_THRES_H);
415
-
static SENSOR_DEVICE_ATTR(power1_max, S_IRUGO | S_IWUSR, ltc2945_show_value,
416
-
ltc2945_set_value, LTC2945_MAX_POWER_THRES_H);
417
-
static SENSOR_DEVICE_ATTR(power1_input_lowest, S_IRUGO, ltc2945_show_value,
418
-
NULL, LTC2945_MIN_POWER_H);
419
-
static SENSOR_DEVICE_ATTR(power1_input_highest, S_IRUGO, ltc2945_show_value,
420
-
NULL, LTC2945_MAX_POWER_H);
421
-
static SENSOR_DEVICE_ATTR(power1_reset_history, S_IWUSR, NULL,
422
-
ltc2945_reset_history, LTC2945_MIN_POWER_H);
393
+
static SENSOR_DEVICE_ATTR_RO(power1_input, ltc2945_value, LTC2945_POWER_H);
394
+
static SENSOR_DEVICE_ATTR_RW(power1_min, ltc2945_value,
395
+
LTC2945_MIN_POWER_THRES_H);
396
+
static SENSOR_DEVICE_ATTR_RW(power1_max, ltc2945_value,
397
+
LTC2945_MAX_POWER_THRES_H);
398
+
static SENSOR_DEVICE_ATTR_RO(power1_input_lowest, ltc2945_value,
399
+
LTC2945_MIN_POWER_H);
400
+
static SENSOR_DEVICE_ATTR_RO(power1_input_highest, ltc2945_value,
401
+
LTC2945_MAX_POWER_H);
402
+
static SENSOR_DEVICE_ATTR_WO(power1_reset_history, ltc2945_history,
403
+
LTC2945_MIN_POWER_H);
423
404
424
405
/* Power alarms */
425
406
426
-
static SENSOR_DEVICE_ATTR(power1_min_alarm, S_IRUGO, ltc2945_show_bool, NULL,
427
-
FAULT_POWER_UV);
428
-
static SENSOR_DEVICE_ATTR(power1_max_alarm, S_IRUGO, ltc2945_show_bool, NULL,
429
-
FAULT_POWER_OV);
407
+
static SENSOR_DEVICE_ATTR_RO(power1_min_alarm, ltc2945_bool, FAULT_POWER_UV);
408
+
static SENSOR_DEVICE_ATTR_RO(power1_max_alarm, ltc2945_bool, FAULT_POWER_OV);
430
409
431
410
static struct attribute *ltc2945_attrs[] = {
432
411
&sensor_dev_attr_in1_input.dev_attr.attr,
433
412
&sensor_dev_attr_in1_min.dev_attr.attr,
434
413
&sensor_dev_attr_in1_max.dev_attr.attr,
435
414
&sensor_dev_attr_in1_lowest.dev_attr.attr,
436
415
&sensor_dev_attr_in1_highest.dev_attr.attr,
437
416
&sensor_dev_attr_in1_reset_history.dev_attr.attr,
438
417
&sensor_dev_attr_in1_min_alarm.dev_attr.attr,
439
418
&sensor_dev_attr_in1_max_alarm.dev_attr.attr,