Lines Matching +full:attr +full:- +full:max +full:- +full:name
1 // SPDX-License-Identifier: GPL-2.0-only
22 #include <linux/hwmon-sysfs.h>
115 /* Voltage A-F and VDD */
127 (((int)(adc) - 0x400) * 1000 / 4))
179 struct i2c_client *client = data->cmdreg; in smm665_read_adc()
194 * Then do a two-byte read transaction. in smm665_read_adc()
197 if (rv != -ENXIO) { in smm665_read_adc()
200 * (per Documentation/i2c/fault-codes.rst). in smm665_read_adc()
203 dev_dbg(&client->dev, in smm665_read_adc()
205 return (rv < 0) ? rv : -EIO; in smm665_read_adc()
208 udelay(data->conversion_time); in smm665_read_adc()
221 dev_dbg(&client->dev, "Failed to read ADC value: error %d", rv); in smm665_read_adc()
229 dev_dbg(&client->dev, "Unexpected RADC: Expected %d got %d", in smm665_read_adc()
231 return -EIO; in smm665_read_adc()
240 struct i2c_client *client = data->client; in smm665_update_device()
243 mutex_lock(&data->update_lock); in smm665_update_device()
245 if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { in smm665_update_device()
256 data->faults = val; in smm665_update_device()
265 data->adc[i] = val; in smm665_update_device()
267 data->last_updated = jiffies; in smm665_update_device()
268 data->valid = 1; in smm665_update_device()
271 mutex_unlock(&data->update_lock); in smm665_update_device()
317 return data->alarm_min_limit[index]; in smm665_get_min()
324 return data->alarm_max_limit[index]; in smm665_get_max()
331 return data->critical_min_limit[index]; in smm665_get_lcrit()
338 return data->critical_max_limit[index]; in smm665_get_crit()
344 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); in smm665_show_crit_alarm() local
351 if (data->faults & (1 << attr->index)) in smm665_show_crit_alarm()
360 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); in smm665_show_input() local
362 int adc = attr->index; in smm665_show_input()
368 val = smm665_convert(data->adc[adc], adc); in smm665_show_input()
376 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \
377 const int val = smm665_get_##what(dev, attr->index); \
382 SMM665_SHOW(max);
392 #define SMM665_ATTR(name, type, cmd_idx) \ argument
393 static SENSOR_DEVICE_ATTR(name##_##type, S_IRUGO, \
422 /* Input voltages max */
423 SMM665_ATTR(in1, max, SMM665_MISC16_ADC_DATA_12V);
424 SMM665_ATTR(in2, max, SMM665_MISC16_ADC_DATA_VDD);
425 SMM665_ATTR(in3, max, SMM665_MISC16_ADC_DATA_A);
426 SMM665_ATTR(in4, max, SMM665_MISC16_ADC_DATA_B);
427 SMM665_ATTR(in5, max, SMM665_MISC16_ADC_DATA_C);
428 SMM665_ATTR(in6, max, SMM665_MISC16_ADC_DATA_D);
429 SMM665_ATTR(in7, max, SMM665_MISC16_ADC_DATA_E);
430 SMM665_ATTR(in8, max, SMM665_MISC16_ADC_DATA_F);
431 SMM665_ATTR(in9, max, SMM665_MISC16_ADC_DATA_AIN1);
432 SMM665_ATTR(in10, max, SMM665_MISC16_ADC_DATA_AIN2);
473 SMM665_ATTR(temp1, max, SMM665_MISC16_ADC_DATA_INT_TEMP);
483 &sensor_dev_attr_in1_input.dev_attr.attr,
484 &sensor_dev_attr_in1_min.dev_attr.attr,
485 &sensor_dev_attr_in1_max.dev_attr.attr,
486 &sensor_dev_attr_in1_lcrit.dev_attr.attr,
487 &sensor_dev_attr_in1_crit.dev_attr.attr,
488 &sensor_dev_attr_in1_crit_alarm.dev_attr.attr,
490 &sensor_dev_attr_in2_input.dev_attr.attr,
491 &sensor_dev_attr_in2_min.dev_attr.attr,
492 &sensor_dev_attr_in2_max.dev_attr.attr,
493 &sensor_dev_attr_in2_lcrit.dev_attr.attr,
494 &sensor_dev_attr_in2_crit.dev_attr.attr,
495 &sensor_dev_attr_in2_crit_alarm.dev_attr.attr,
497 &sensor_dev_attr_in3_input.dev_attr.attr,
498 &sensor_dev_attr_in3_min.dev_attr.attr,
499 &sensor_dev_attr_in3_max.dev_attr.attr,
500 &sensor_dev_attr_in3_lcrit.dev_attr.attr,
501 &sensor_dev_attr_in3_crit.dev_attr.attr,
502 &sensor_dev_attr_in3_crit_alarm.dev_attr.attr,
504 &sensor_dev_attr_in4_input.dev_attr.attr,
505 &sensor_dev_attr_in4_min.dev_attr.attr,
506 &sensor_dev_attr_in4_max.dev_attr.attr,
507 &sensor_dev_attr_in4_lcrit.dev_attr.attr,
508 &sensor_dev_attr_in4_crit.dev_attr.attr,
509 &sensor_dev_attr_in4_crit_alarm.dev_attr.attr,
511 &sensor_dev_attr_in5_input.dev_attr.attr,
512 &sensor_dev_attr_in5_min.dev_attr.attr,
513 &sensor_dev_attr_in5_max.dev_attr.attr,
514 &sensor_dev_attr_in5_lcrit.dev_attr.attr,
515 &sensor_dev_attr_in5_crit.dev_attr.attr,
516 &sensor_dev_attr_in5_crit_alarm.dev_attr.attr,
518 &sensor_dev_attr_in6_input.dev_attr.attr,
519 &sensor_dev_attr_in6_min.dev_attr.attr,
520 &sensor_dev_attr_in6_max.dev_attr.attr,
521 &sensor_dev_attr_in6_lcrit.dev_attr.attr,
522 &sensor_dev_attr_in6_crit.dev_attr.attr,
523 &sensor_dev_attr_in6_crit_alarm.dev_attr.attr,
525 &sensor_dev_attr_in7_input.dev_attr.attr,
526 &sensor_dev_attr_in7_min.dev_attr.attr,
527 &sensor_dev_attr_in7_max.dev_attr.attr,
528 &sensor_dev_attr_in7_lcrit.dev_attr.attr,
529 &sensor_dev_attr_in7_crit.dev_attr.attr,
530 &sensor_dev_attr_in7_crit_alarm.dev_attr.attr,
532 &sensor_dev_attr_in8_input.dev_attr.attr,
533 &sensor_dev_attr_in8_min.dev_attr.attr,
534 &sensor_dev_attr_in8_max.dev_attr.attr,
535 &sensor_dev_attr_in8_lcrit.dev_attr.attr,
536 &sensor_dev_attr_in8_crit.dev_attr.attr,
537 &sensor_dev_attr_in8_crit_alarm.dev_attr.attr,
539 &sensor_dev_attr_in9_input.dev_attr.attr,
540 &sensor_dev_attr_in9_min.dev_attr.attr,
541 &sensor_dev_attr_in9_max.dev_attr.attr,
542 &sensor_dev_attr_in9_lcrit.dev_attr.attr,
543 &sensor_dev_attr_in9_crit.dev_attr.attr,
544 &sensor_dev_attr_in9_crit_alarm.dev_attr.attr,
546 &sensor_dev_attr_in10_input.dev_attr.attr,
547 &sensor_dev_attr_in10_min.dev_attr.attr,
548 &sensor_dev_attr_in10_max.dev_attr.attr,
549 &sensor_dev_attr_in10_lcrit.dev_attr.attr,
550 &sensor_dev_attr_in10_crit.dev_attr.attr,
551 &sensor_dev_attr_in10_crit_alarm.dev_attr.attr,
553 &sensor_dev_attr_temp1_input.dev_attr.attr,
554 &sensor_dev_attr_temp1_min.dev_attr.attr,
555 &sensor_dev_attr_temp1_max.dev_attr.attr,
556 &sensor_dev_attr_temp1_lcrit.dev_attr.attr,
557 &sensor_dev_attr_temp1_crit.dev_attr.attr,
558 &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr,
569 struct i2c_adapter *adapter = client->adapter; in smm665_probe()
576 return -ENODEV; in smm665_probe()
579 return -ENODEV; in smm665_probe()
581 data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL); in smm665_probe()
583 return -ENOMEM; in smm665_probe()
586 mutex_init(&data->update_lock); in smm665_probe()
588 data->client = client; in smm665_probe()
589 data->type = i2c_match_id(smm665_id, client)->driver_data; in smm665_probe()
590 data->cmdreg = i2c_new_dummy_device(adapter, (client->addr & ~SMM665_REGMASK) in smm665_probe()
592 if (IS_ERR(data->cmdreg)) in smm665_probe()
593 return PTR_ERR(data->cmdreg); in smm665_probe()
595 switch (data->type) { in smm665_probe()
598 data->conversion_time = SMM665_ADC_WAIT_SMM665; in smm665_probe()
603 data->conversion_time = SMM665_ADC_WAIT_SMM766; in smm665_probe()
607 ret = -ENODEV; in smm665_probe()
608 if (i2c_smbus_read_byte_data(data->cmdreg, SMM665_MISC8_CMD_STS) < 0) in smm665_probe()
628 * configured as critical or non-critical. in smm665_probe()
636 data->critical_min_limit[i] = data->alarm_min_limit[i] in smm665_probe()
642 data->critical_min_limit[i] = smm665_convert(val, i); in smm665_probe()
644 data->alarm_min_limit[i] = smm665_convert(val, i); in smm665_probe()
648 data->critical_max_limit[i] = data->alarm_max_limit[i] in smm665_probe()
654 data->critical_max_limit[i] = smm665_convert(val, i); in smm665_probe()
656 data->alarm_max_limit[i] = smm665_convert(val, i); in smm665_probe()
659 hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev, in smm665_probe()
660 client->name, data, in smm665_probe()
670 i2c_unregister_device(data->cmdreg); in smm665_probe()
678 i2c_unregister_device(data->cmdreg); in smm665_remove()
696 .name = "smm665",