.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * adt7475 - Thermal sensor driver for the ADT7475 chip and derivatives |
---|
3 | 4 | * Copyright (C) 2007-2008, Advanced Micro Devices, Inc. |
---|
.. | .. |
---|
6 | 7 | * Copyright (C) 2009 Jean Delvare <jdelvare@suse.de> |
---|
7 | 8 | * |
---|
8 | 9 | * Derived from the lm83 driver by Jean Delvare |
---|
9 | | - * |
---|
10 | | - * This program is free software; you can redistribute it and/or modify |
---|
11 | | - * it under the terms of the GNU General Public License version 2 as |
---|
12 | | - * published by the Free Software Foundation. |
---|
13 | 10 | */ |
---|
14 | 11 | |
---|
15 | 12 | #include <linux/module.h> |
---|
.. | .. |
---|
22 | 19 | #include <linux/hwmon-vid.h> |
---|
23 | 20 | #include <linux/err.h> |
---|
24 | 21 | #include <linux/jiffies.h> |
---|
| 22 | +#include <linux/of.h> |
---|
25 | 23 | #include <linux/util_macros.h> |
---|
26 | 24 | |
---|
27 | 25 | /* Indexes for the sysfs hooks */ |
---|
.. | .. |
---|
168 | 166 | }; |
---|
169 | 167 | MODULE_DEVICE_TABLE(i2c, adt7475_id); |
---|
170 | 168 | |
---|
171 | | -static const struct of_device_id adt7475_of_match[] = { |
---|
| 169 | +static const struct of_device_id __maybe_unused adt7475_of_match[] = { |
---|
172 | 170 | { |
---|
173 | 171 | .compatible = "adi,adt7473", |
---|
174 | 172 | .data = (void *)adt7473 |
---|
.. | .. |
---|
190 | 188 | MODULE_DEVICE_TABLE(of, adt7475_of_match); |
---|
191 | 189 | |
---|
192 | 190 | struct adt7475_data { |
---|
193 | | - struct device *hwmon_dev; |
---|
| 191 | + struct i2c_client *client; |
---|
194 | 192 | struct mutex lock; |
---|
195 | 193 | |
---|
196 | 194 | unsigned long measure_updated; |
---|
197 | 195 | bool valid; |
---|
198 | 196 | |
---|
| 197 | + u8 config2; |
---|
199 | 198 | u8 config4; |
---|
200 | 199 | u8 config5; |
---|
201 | 200 | u8 has_voltage; |
---|
.. | .. |
---|
215 | 214 | |
---|
216 | 215 | u8 vid; |
---|
217 | 216 | u8 vrm; |
---|
| 217 | + const struct attribute_group *groups[9]; |
---|
218 | 218 | }; |
---|
219 | 219 | |
---|
220 | 220 | static struct i2c_driver adt7475_driver; |
---|
.. | .. |
---|
323 | 323 | i2c_smbus_write_byte_data(client, reg, val & 0xFF); |
---|
324 | 324 | } |
---|
325 | 325 | |
---|
326 | | -static ssize_t show_voltage(struct device *dev, struct device_attribute *attr, |
---|
| 326 | +static ssize_t voltage_show(struct device *dev, struct device_attribute *attr, |
---|
327 | 327 | char *buf) |
---|
328 | 328 | { |
---|
329 | 329 | struct adt7475_data *data = adt7475_update_device(dev); |
---|
.. | .. |
---|
344 | 344 | } |
---|
345 | 345 | } |
---|
346 | 346 | |
---|
347 | | -static ssize_t set_voltage(struct device *dev, struct device_attribute *attr, |
---|
348 | | - const char *buf, size_t count) |
---|
| 347 | +static ssize_t voltage_store(struct device *dev, |
---|
| 348 | + struct device_attribute *attr, const char *buf, |
---|
| 349 | + size_t count) |
---|
349 | 350 | { |
---|
350 | 351 | |
---|
351 | 352 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
---|
352 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
353 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 353 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
| 354 | + struct i2c_client *client = data->client; |
---|
354 | 355 | unsigned char reg; |
---|
355 | 356 | long val; |
---|
356 | 357 | |
---|
.. | .. |
---|
381 | 382 | return count; |
---|
382 | 383 | } |
---|
383 | 384 | |
---|
384 | | -static ssize_t show_temp(struct device *dev, struct device_attribute *attr, |
---|
| 385 | +static ssize_t temp_show(struct device *dev, struct device_attribute *attr, |
---|
385 | 386 | char *buf) |
---|
386 | 387 | { |
---|
387 | 388 | struct adt7475_data *data = adt7475_update_device(dev); |
---|
.. | .. |
---|
439 | 440 | return sprintf(buf, "%d\n", out); |
---|
440 | 441 | } |
---|
441 | 442 | |
---|
442 | | -static ssize_t set_temp(struct device *dev, struct device_attribute *attr, |
---|
443 | | - const char *buf, size_t count) |
---|
| 443 | +static ssize_t temp_store(struct device *dev, struct device_attribute *attr, |
---|
| 444 | + const char *buf, size_t count) |
---|
444 | 445 | { |
---|
445 | 446 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
---|
446 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
447 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 447 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
| 448 | + struct i2c_client *client = data->client; |
---|
448 | 449 | unsigned char reg = 0; |
---|
449 | 450 | u8 out; |
---|
450 | 451 | int temp; |
---|
.. | .. |
---|
485 | 486 | val = (temp - val) / 1000; |
---|
486 | 487 | |
---|
487 | 488 | if (sattr->index != 1) { |
---|
488 | | - data->temp[HYSTERSIS][sattr->index] &= 0xF0; |
---|
| 489 | + data->temp[HYSTERSIS][sattr->index] &= 0x0F; |
---|
489 | 490 | data->temp[HYSTERSIS][sattr->index] |= (val & 0xF) << 4; |
---|
490 | 491 | } else { |
---|
491 | | - data->temp[HYSTERSIS][sattr->index] &= 0x0F; |
---|
| 492 | + data->temp[HYSTERSIS][sattr->index] &= 0xF0; |
---|
492 | 493 | data->temp[HYSTERSIS][sattr->index] |= (val & 0xF); |
---|
493 | 494 | } |
---|
494 | 495 | |
---|
.. | .. |
---|
541 | 542 | 37500, 18800, 12500, 7500, 4700, 3100, 1600, 800, |
---|
542 | 543 | }; |
---|
543 | 544 | |
---|
544 | | -static ssize_t show_temp_st(struct device *dev, struct device_attribute *attr, |
---|
545 | | - char *buf) |
---|
| 545 | +static ssize_t temp_st_show(struct device *dev, struct device_attribute *attr, |
---|
| 546 | + char *buf) |
---|
546 | 547 | { |
---|
547 | 548 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
---|
548 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
549 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 549 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
550 | 550 | long val; |
---|
551 | 551 | |
---|
552 | 552 | switch (sattr->index) { |
---|
.. | .. |
---|
554 | 554 | val = data->enh_acoustics[0] & 0xf; |
---|
555 | 555 | break; |
---|
556 | 556 | case 1: |
---|
557 | | - val = (data->enh_acoustics[1] >> 4) & 0xf; |
---|
| 557 | + val = data->enh_acoustics[1] & 0xf; |
---|
558 | 558 | break; |
---|
559 | 559 | case 2: |
---|
560 | 560 | default: |
---|
561 | | - val = data->enh_acoustics[1] & 0xf; |
---|
| 561 | + val = (data->enh_acoustics[1] >> 4) & 0xf; |
---|
562 | 562 | break; |
---|
563 | 563 | } |
---|
564 | 564 | |
---|
.. | .. |
---|
568 | 568 | return sprintf(buf, "0\n"); |
---|
569 | 569 | } |
---|
570 | 570 | |
---|
571 | | -static ssize_t set_temp_st(struct device *dev, struct device_attribute *attr, |
---|
572 | | - const char *buf, size_t count) |
---|
| 571 | +static ssize_t temp_st_store(struct device *dev, |
---|
| 572 | + struct device_attribute *attr, const char *buf, |
---|
| 573 | + size_t count) |
---|
573 | 574 | { |
---|
574 | 575 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
---|
575 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
576 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 576 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
| 577 | + struct i2c_client *client = data->client; |
---|
577 | 578 | unsigned char reg; |
---|
578 | 579 | int shift, idx; |
---|
579 | 580 | ulong val; |
---|
.. | .. |
---|
628 | 629 | 53330, 80000 |
---|
629 | 630 | }; |
---|
630 | 631 | |
---|
631 | | -static ssize_t show_point2(struct device *dev, struct device_attribute *attr, |
---|
| 632 | +static ssize_t point2_show(struct device *dev, struct device_attribute *attr, |
---|
632 | 633 | char *buf) |
---|
633 | 634 | { |
---|
634 | 635 | struct adt7475_data *data = adt7475_update_device(dev); |
---|
.. | .. |
---|
646 | 647 | return sprintf(buf, "%d\n", val + autorange_table[out]); |
---|
647 | 648 | } |
---|
648 | 649 | |
---|
649 | | -static ssize_t set_point2(struct device *dev, struct device_attribute *attr, |
---|
650 | | - const char *buf, size_t count) |
---|
| 650 | +static ssize_t point2_store(struct device *dev, struct device_attribute *attr, |
---|
| 651 | + const char *buf, size_t count) |
---|
651 | 652 | { |
---|
652 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
653 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 653 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
| 654 | + struct i2c_client *client = data->client; |
---|
654 | 655 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
---|
655 | 656 | int temp; |
---|
656 | 657 | long val; |
---|
.. | .. |
---|
689 | 690 | return count; |
---|
690 | 691 | } |
---|
691 | 692 | |
---|
692 | | -static ssize_t show_tach(struct device *dev, struct device_attribute *attr, |
---|
| 693 | +static ssize_t tach_show(struct device *dev, struct device_attribute *attr, |
---|
693 | 694 | char *buf) |
---|
694 | 695 | { |
---|
695 | 696 | struct adt7475_data *data = adt7475_update_device(dev); |
---|
.. | .. |
---|
707 | 708 | return sprintf(buf, "%d\n", out); |
---|
708 | 709 | } |
---|
709 | 710 | |
---|
710 | | -static ssize_t set_tach(struct device *dev, struct device_attribute *attr, |
---|
711 | | - const char *buf, size_t count) |
---|
| 711 | +static ssize_t tach_store(struct device *dev, struct device_attribute *attr, |
---|
| 712 | + const char *buf, size_t count) |
---|
712 | 713 | { |
---|
713 | 714 | |
---|
714 | 715 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
---|
715 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
716 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 716 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
| 717 | + struct i2c_client *client = data->client; |
---|
717 | 718 | unsigned long val; |
---|
718 | 719 | |
---|
719 | 720 | if (kstrtoul(buf, 10, &val)) |
---|
.. | .. |
---|
730 | 731 | return count; |
---|
731 | 732 | } |
---|
732 | 733 | |
---|
733 | | -static ssize_t show_pwm(struct device *dev, struct device_attribute *attr, |
---|
| 734 | +static ssize_t pwm_show(struct device *dev, struct device_attribute *attr, |
---|
734 | 735 | char *buf) |
---|
735 | 736 | { |
---|
736 | 737 | struct adt7475_data *data = adt7475_update_device(dev); |
---|
.. | .. |
---|
742 | 743 | return sprintf(buf, "%d\n", data->pwm[sattr->nr][sattr->index]); |
---|
743 | 744 | } |
---|
744 | 745 | |
---|
745 | | -static ssize_t show_pwmchan(struct device *dev, struct device_attribute *attr, |
---|
| 746 | +static ssize_t pwmchan_show(struct device *dev, struct device_attribute *attr, |
---|
746 | 747 | char *buf) |
---|
747 | 748 | { |
---|
748 | 749 | struct adt7475_data *data = adt7475_update_device(dev); |
---|
.. | .. |
---|
754 | 755 | return sprintf(buf, "%d\n", data->pwmchan[sattr->index]); |
---|
755 | 756 | } |
---|
756 | 757 | |
---|
757 | | -static ssize_t show_pwmctrl(struct device *dev, struct device_attribute *attr, |
---|
| 758 | +static ssize_t pwmctrl_show(struct device *dev, struct device_attribute *attr, |
---|
758 | 759 | char *buf) |
---|
759 | 760 | { |
---|
760 | 761 | struct adt7475_data *data = adt7475_update_device(dev); |
---|
.. | .. |
---|
766 | 767 | return sprintf(buf, "%d\n", data->pwmctl[sattr->index]); |
---|
767 | 768 | } |
---|
768 | 769 | |
---|
769 | | -static ssize_t set_pwm(struct device *dev, struct device_attribute *attr, |
---|
770 | | - const char *buf, size_t count) |
---|
| 770 | +static ssize_t pwm_store(struct device *dev, struct device_attribute *attr, |
---|
| 771 | + const char *buf, size_t count) |
---|
771 | 772 | { |
---|
772 | 773 | |
---|
773 | 774 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
---|
774 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
775 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 775 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
| 776 | + struct i2c_client *client = data->client; |
---|
776 | 777 | unsigned char reg = 0; |
---|
777 | 778 | long val; |
---|
778 | 779 | |
---|
.. | .. |
---|
816 | 817 | return count; |
---|
817 | 818 | } |
---|
818 | 819 | |
---|
819 | | -static ssize_t show_stall_disable(struct device *dev, |
---|
| 820 | +static ssize_t stall_disable_show(struct device *dev, |
---|
820 | 821 | struct device_attribute *attr, char *buf) |
---|
821 | 822 | { |
---|
822 | 823 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
---|
823 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
824 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 824 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
| 825 | + |
---|
825 | 826 | u8 mask = BIT(5 + sattr->index); |
---|
826 | 827 | |
---|
827 | 828 | return sprintf(buf, "%d\n", !!(data->enh_acoustics[0] & mask)); |
---|
828 | 829 | } |
---|
829 | 830 | |
---|
830 | | -static ssize_t set_stall_disable(struct device *dev, |
---|
831 | | - struct device_attribute *attr, const char *buf, |
---|
832 | | - size_t count) |
---|
| 831 | +static ssize_t stall_disable_store(struct device *dev, |
---|
| 832 | + struct device_attribute *attr, |
---|
| 833 | + const char *buf, size_t count) |
---|
833 | 834 | { |
---|
834 | 835 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
---|
835 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
836 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 836 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
| 837 | + struct i2c_client *client = data->client; |
---|
837 | 838 | long val; |
---|
838 | 839 | u8 mask = BIT(5 + sattr->index); |
---|
839 | 840 | |
---|
.. | .. |
---|
911 | 912 | return 0; |
---|
912 | 913 | } |
---|
913 | 914 | |
---|
914 | | -static ssize_t set_pwmchan(struct device *dev, struct device_attribute *attr, |
---|
915 | | - const char *buf, size_t count) |
---|
| 915 | +static ssize_t pwmchan_store(struct device *dev, |
---|
| 916 | + struct device_attribute *attr, const char *buf, |
---|
| 917 | + size_t count) |
---|
916 | 918 | { |
---|
917 | 919 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
---|
918 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
919 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 920 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
| 921 | + struct i2c_client *client = data->client; |
---|
920 | 922 | int r; |
---|
921 | 923 | long val; |
---|
922 | 924 | |
---|
.. | .. |
---|
934 | 936 | return count; |
---|
935 | 937 | } |
---|
936 | 938 | |
---|
937 | | -static ssize_t set_pwmctrl(struct device *dev, struct device_attribute *attr, |
---|
938 | | - const char *buf, size_t count) |
---|
| 939 | +static ssize_t pwmctrl_store(struct device *dev, |
---|
| 940 | + struct device_attribute *attr, const char *buf, |
---|
| 941 | + size_t count) |
---|
939 | 942 | { |
---|
940 | 943 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
---|
941 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
942 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 944 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
| 945 | + struct i2c_client *client = data->client; |
---|
943 | 946 | int r; |
---|
944 | 947 | long val; |
---|
945 | 948 | |
---|
.. | .. |
---|
962 | 965 | 11, 14, 22, 29, 35, 44, 58, 88, 22500 |
---|
963 | 966 | }; |
---|
964 | 967 | |
---|
965 | | -static ssize_t show_pwmfreq(struct device *dev, struct device_attribute *attr, |
---|
| 968 | +static ssize_t pwmfreq_show(struct device *dev, struct device_attribute *attr, |
---|
966 | 969 | char *buf) |
---|
967 | 970 | { |
---|
968 | 971 | struct adt7475_data *data = adt7475_update_device(dev); |
---|
.. | .. |
---|
977 | 980 | return sprintf(buf, "%d\n", pwmfreq_table[idx]); |
---|
978 | 981 | } |
---|
979 | 982 | |
---|
980 | | -static ssize_t set_pwmfreq(struct device *dev, struct device_attribute *attr, |
---|
981 | | - const char *buf, size_t count) |
---|
| 983 | +static ssize_t pwmfreq_store(struct device *dev, |
---|
| 984 | + struct device_attribute *attr, const char *buf, |
---|
| 985 | + size_t count) |
---|
982 | 986 | { |
---|
983 | 987 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
---|
984 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
985 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 988 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
| 989 | + struct i2c_client *client = data->client; |
---|
986 | 990 | int out; |
---|
987 | 991 | long val; |
---|
988 | 992 | |
---|
.. | .. |
---|
1021 | 1025 | struct device_attribute *devattr, |
---|
1022 | 1026 | const char *buf, size_t count) |
---|
1023 | 1027 | { |
---|
1024 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
1025 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 1028 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
| 1029 | + struct i2c_client *client = data->client; |
---|
1026 | 1030 | long val; |
---|
1027 | 1031 | |
---|
1028 | 1032 | if (kstrtol(buf, 10, &val)) |
---|
.. | .. |
---|
1075 | 1079 | return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm)); |
---|
1076 | 1080 | } |
---|
1077 | 1081 | |
---|
1078 | | -static SENSOR_DEVICE_ATTR_2(in0_input, S_IRUGO, show_voltage, NULL, INPUT, 0); |
---|
1079 | | -static SENSOR_DEVICE_ATTR_2(in0_max, S_IRUGO | S_IWUSR, show_voltage, |
---|
1080 | | - set_voltage, MAX, 0); |
---|
1081 | | -static SENSOR_DEVICE_ATTR_2(in0_min, S_IRUGO | S_IWUSR, show_voltage, |
---|
1082 | | - set_voltage, MIN, 0); |
---|
1083 | | -static SENSOR_DEVICE_ATTR_2(in0_alarm, S_IRUGO, show_voltage, NULL, ALARM, 0); |
---|
1084 | | -static SENSOR_DEVICE_ATTR_2(in1_input, S_IRUGO, show_voltage, NULL, INPUT, 1); |
---|
1085 | | -static SENSOR_DEVICE_ATTR_2(in1_max, S_IRUGO | S_IWUSR, show_voltage, |
---|
1086 | | - set_voltage, MAX, 1); |
---|
1087 | | -static SENSOR_DEVICE_ATTR_2(in1_min, S_IRUGO | S_IWUSR, show_voltage, |
---|
1088 | | - set_voltage, MIN, 1); |
---|
1089 | | -static SENSOR_DEVICE_ATTR_2(in1_alarm, S_IRUGO, show_voltage, NULL, ALARM, 1); |
---|
1090 | | -static SENSOR_DEVICE_ATTR_2(in2_input, S_IRUGO, show_voltage, NULL, INPUT, 2); |
---|
1091 | | -static SENSOR_DEVICE_ATTR_2(in2_max, S_IRUGO | S_IWUSR, show_voltage, |
---|
1092 | | - set_voltage, MAX, 2); |
---|
1093 | | -static SENSOR_DEVICE_ATTR_2(in2_min, S_IRUGO | S_IWUSR, show_voltage, |
---|
1094 | | - set_voltage, MIN, 2); |
---|
1095 | | -static SENSOR_DEVICE_ATTR_2(in2_alarm, S_IRUGO, show_voltage, NULL, ALARM, 2); |
---|
1096 | | -static SENSOR_DEVICE_ATTR_2(in3_input, S_IRUGO, show_voltage, NULL, INPUT, 3); |
---|
1097 | | -static SENSOR_DEVICE_ATTR_2(in3_max, S_IRUGO | S_IWUSR, show_voltage, |
---|
1098 | | - set_voltage, MAX, 3); |
---|
1099 | | -static SENSOR_DEVICE_ATTR_2(in3_min, S_IRUGO | S_IWUSR, show_voltage, |
---|
1100 | | - set_voltage, MIN, 3); |
---|
1101 | | -static SENSOR_DEVICE_ATTR_2(in3_alarm, S_IRUGO, show_voltage, NULL, ALARM, 3); |
---|
1102 | | -static SENSOR_DEVICE_ATTR_2(in4_input, S_IRUGO, show_voltage, NULL, INPUT, 4); |
---|
1103 | | -static SENSOR_DEVICE_ATTR_2(in4_max, S_IRUGO | S_IWUSR, show_voltage, |
---|
1104 | | - set_voltage, MAX, 4); |
---|
1105 | | -static SENSOR_DEVICE_ATTR_2(in4_min, S_IRUGO | S_IWUSR, show_voltage, |
---|
1106 | | - set_voltage, MIN, 4); |
---|
1107 | | -static SENSOR_DEVICE_ATTR_2(in4_alarm, S_IRUGO, show_voltage, NULL, ALARM, 8); |
---|
1108 | | -static SENSOR_DEVICE_ATTR_2(in5_input, S_IRUGO, show_voltage, NULL, INPUT, 5); |
---|
1109 | | -static SENSOR_DEVICE_ATTR_2(in5_max, S_IRUGO | S_IWUSR, show_voltage, |
---|
1110 | | - set_voltage, MAX, 5); |
---|
1111 | | -static SENSOR_DEVICE_ATTR_2(in5_min, S_IRUGO | S_IWUSR, show_voltage, |
---|
1112 | | - set_voltage, MIN, 5); |
---|
1113 | | -static SENSOR_DEVICE_ATTR_2(in5_alarm, S_IRUGO, show_voltage, NULL, ALARM, 31); |
---|
1114 | | -static SENSOR_DEVICE_ATTR_2(temp1_input, S_IRUGO, show_temp, NULL, INPUT, 0); |
---|
1115 | | -static SENSOR_DEVICE_ATTR_2(temp1_alarm, S_IRUGO, show_temp, NULL, ALARM, 0); |
---|
1116 | | -static SENSOR_DEVICE_ATTR_2(temp1_fault, S_IRUGO, show_temp, NULL, FAULT, 0); |
---|
1117 | | -static SENSOR_DEVICE_ATTR_2(temp1_max, S_IRUGO | S_IWUSR, show_temp, set_temp, |
---|
1118 | | - MAX, 0); |
---|
1119 | | -static SENSOR_DEVICE_ATTR_2(temp1_min, S_IRUGO | S_IWUSR, show_temp, set_temp, |
---|
1120 | | - MIN, 0); |
---|
1121 | | -static SENSOR_DEVICE_ATTR_2(temp1_offset, S_IRUGO | S_IWUSR, show_temp, |
---|
1122 | | - set_temp, OFFSET, 0); |
---|
1123 | | -static SENSOR_DEVICE_ATTR_2(temp1_auto_point1_temp, S_IRUGO | S_IWUSR, |
---|
1124 | | - show_temp, set_temp, AUTOMIN, 0); |
---|
1125 | | -static SENSOR_DEVICE_ATTR_2(temp1_auto_point2_temp, S_IRUGO | S_IWUSR, |
---|
1126 | | - show_point2, set_point2, 0, 0); |
---|
1127 | | -static SENSOR_DEVICE_ATTR_2(temp1_crit, S_IRUGO | S_IWUSR, show_temp, set_temp, |
---|
1128 | | - THERM, 0); |
---|
1129 | | -static SENSOR_DEVICE_ATTR_2(temp1_crit_hyst, S_IRUGO | S_IWUSR, show_temp, |
---|
1130 | | - set_temp, HYSTERSIS, 0); |
---|
1131 | | -static SENSOR_DEVICE_ATTR_2(temp1_smoothing, S_IRUGO | S_IWUSR, show_temp_st, |
---|
1132 | | - set_temp_st, 0, 0); |
---|
1133 | | -static SENSOR_DEVICE_ATTR_2(temp2_input, S_IRUGO, show_temp, NULL, INPUT, 1); |
---|
1134 | | -static SENSOR_DEVICE_ATTR_2(temp2_alarm, S_IRUGO, show_temp, NULL, ALARM, 1); |
---|
1135 | | -static SENSOR_DEVICE_ATTR_2(temp2_max, S_IRUGO | S_IWUSR, show_temp, set_temp, |
---|
1136 | | - MAX, 1); |
---|
1137 | | -static SENSOR_DEVICE_ATTR_2(temp2_min, S_IRUGO | S_IWUSR, show_temp, set_temp, |
---|
1138 | | - MIN, 1); |
---|
1139 | | -static SENSOR_DEVICE_ATTR_2(temp2_offset, S_IRUGO | S_IWUSR, show_temp, |
---|
1140 | | - set_temp, OFFSET, 1); |
---|
1141 | | -static SENSOR_DEVICE_ATTR_2(temp2_auto_point1_temp, S_IRUGO | S_IWUSR, |
---|
1142 | | - show_temp, set_temp, AUTOMIN, 1); |
---|
1143 | | -static SENSOR_DEVICE_ATTR_2(temp2_auto_point2_temp, S_IRUGO | S_IWUSR, |
---|
1144 | | - show_point2, set_point2, 0, 1); |
---|
1145 | | -static SENSOR_DEVICE_ATTR_2(temp2_crit, S_IRUGO | S_IWUSR, show_temp, set_temp, |
---|
1146 | | - THERM, 1); |
---|
1147 | | -static SENSOR_DEVICE_ATTR_2(temp2_crit_hyst, S_IRUGO | S_IWUSR, show_temp, |
---|
1148 | | - set_temp, HYSTERSIS, 1); |
---|
1149 | | -static SENSOR_DEVICE_ATTR_2(temp2_smoothing, S_IRUGO | S_IWUSR, show_temp_st, |
---|
1150 | | - set_temp_st, 0, 1); |
---|
1151 | | -static SENSOR_DEVICE_ATTR_2(temp3_input, S_IRUGO, show_temp, NULL, INPUT, 2); |
---|
1152 | | -static SENSOR_DEVICE_ATTR_2(temp3_alarm, S_IRUGO, show_temp, NULL, ALARM, 2); |
---|
1153 | | -static SENSOR_DEVICE_ATTR_2(temp3_fault, S_IRUGO, show_temp, NULL, FAULT, 2); |
---|
1154 | | -static SENSOR_DEVICE_ATTR_2(temp3_max, S_IRUGO | S_IWUSR, show_temp, set_temp, |
---|
1155 | | - MAX, 2); |
---|
1156 | | -static SENSOR_DEVICE_ATTR_2(temp3_min, S_IRUGO | S_IWUSR, show_temp, set_temp, |
---|
1157 | | - MIN, 2); |
---|
1158 | | -static SENSOR_DEVICE_ATTR_2(temp3_offset, S_IRUGO | S_IWUSR, show_temp, |
---|
1159 | | - set_temp, OFFSET, 2); |
---|
1160 | | -static SENSOR_DEVICE_ATTR_2(temp3_auto_point1_temp, S_IRUGO | S_IWUSR, |
---|
1161 | | - show_temp, set_temp, AUTOMIN, 2); |
---|
1162 | | -static SENSOR_DEVICE_ATTR_2(temp3_auto_point2_temp, S_IRUGO | S_IWUSR, |
---|
1163 | | - show_point2, set_point2, 0, 2); |
---|
1164 | | -static SENSOR_DEVICE_ATTR_2(temp3_crit, S_IRUGO | S_IWUSR, show_temp, set_temp, |
---|
1165 | | - THERM, 2); |
---|
1166 | | -static SENSOR_DEVICE_ATTR_2(temp3_crit_hyst, S_IRUGO | S_IWUSR, show_temp, |
---|
1167 | | - set_temp, HYSTERSIS, 2); |
---|
1168 | | -static SENSOR_DEVICE_ATTR_2(temp3_smoothing, S_IRUGO | S_IWUSR, show_temp_st, |
---|
1169 | | - set_temp_st, 0, 2); |
---|
1170 | | -static SENSOR_DEVICE_ATTR_2(fan1_input, S_IRUGO, show_tach, NULL, INPUT, 0); |
---|
1171 | | -static SENSOR_DEVICE_ATTR_2(fan1_min, S_IRUGO | S_IWUSR, show_tach, set_tach, |
---|
1172 | | - MIN, 0); |
---|
1173 | | -static SENSOR_DEVICE_ATTR_2(fan1_alarm, S_IRUGO, show_tach, NULL, ALARM, 0); |
---|
1174 | | -static SENSOR_DEVICE_ATTR_2(fan2_input, S_IRUGO, show_tach, NULL, INPUT, 1); |
---|
1175 | | -static SENSOR_DEVICE_ATTR_2(fan2_min, S_IRUGO | S_IWUSR, show_tach, set_tach, |
---|
1176 | | - MIN, 1); |
---|
1177 | | -static SENSOR_DEVICE_ATTR_2(fan2_alarm, S_IRUGO, show_tach, NULL, ALARM, 1); |
---|
1178 | | -static SENSOR_DEVICE_ATTR_2(fan3_input, S_IRUGO, show_tach, NULL, INPUT, 2); |
---|
1179 | | -static SENSOR_DEVICE_ATTR_2(fan3_min, S_IRUGO | S_IWUSR, show_tach, set_tach, |
---|
1180 | | - MIN, 2); |
---|
1181 | | -static SENSOR_DEVICE_ATTR_2(fan3_alarm, S_IRUGO, show_tach, NULL, ALARM, 2); |
---|
1182 | | -static SENSOR_DEVICE_ATTR_2(fan4_input, S_IRUGO, show_tach, NULL, INPUT, 3); |
---|
1183 | | -static SENSOR_DEVICE_ATTR_2(fan4_min, S_IRUGO | S_IWUSR, show_tach, set_tach, |
---|
1184 | | - MIN, 3); |
---|
1185 | | -static SENSOR_DEVICE_ATTR_2(fan4_alarm, S_IRUGO, show_tach, NULL, ALARM, 3); |
---|
1186 | | -static SENSOR_DEVICE_ATTR_2(pwm1, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT, |
---|
1187 | | - 0); |
---|
1188 | | -static SENSOR_DEVICE_ATTR_2(pwm1_freq, S_IRUGO | S_IWUSR, show_pwmfreq, |
---|
1189 | | - set_pwmfreq, INPUT, 0); |
---|
1190 | | -static SENSOR_DEVICE_ATTR_2(pwm1_enable, S_IRUGO | S_IWUSR, show_pwmctrl, |
---|
1191 | | - set_pwmctrl, INPUT, 0); |
---|
1192 | | -static SENSOR_DEVICE_ATTR_2(pwm1_auto_channels_temp, S_IRUGO | S_IWUSR, |
---|
1193 | | - show_pwmchan, set_pwmchan, INPUT, 0); |
---|
1194 | | -static SENSOR_DEVICE_ATTR_2(pwm1_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm, |
---|
1195 | | - set_pwm, MIN, 0); |
---|
1196 | | -static SENSOR_DEVICE_ATTR_2(pwm1_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm, |
---|
1197 | | - set_pwm, MAX, 0); |
---|
1198 | | -static SENSOR_DEVICE_ATTR_2(pwm1_stall_disable, S_IRUGO | S_IWUSR, |
---|
1199 | | - show_stall_disable, set_stall_disable, 0, 0); |
---|
1200 | | -static SENSOR_DEVICE_ATTR_2(pwm2, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT, |
---|
1201 | | - 1); |
---|
1202 | | -static SENSOR_DEVICE_ATTR_2(pwm2_freq, S_IRUGO | S_IWUSR, show_pwmfreq, |
---|
1203 | | - set_pwmfreq, INPUT, 1); |
---|
1204 | | -static SENSOR_DEVICE_ATTR_2(pwm2_enable, S_IRUGO | S_IWUSR, show_pwmctrl, |
---|
1205 | | - set_pwmctrl, INPUT, 1); |
---|
1206 | | -static SENSOR_DEVICE_ATTR_2(pwm2_auto_channels_temp, S_IRUGO | S_IWUSR, |
---|
1207 | | - show_pwmchan, set_pwmchan, INPUT, 1); |
---|
1208 | | -static SENSOR_DEVICE_ATTR_2(pwm2_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm, |
---|
1209 | | - set_pwm, MIN, 1); |
---|
1210 | | -static SENSOR_DEVICE_ATTR_2(pwm2_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm, |
---|
1211 | | - set_pwm, MAX, 1); |
---|
1212 | | -static SENSOR_DEVICE_ATTR_2(pwm2_stall_disable, S_IRUGO | S_IWUSR, |
---|
1213 | | - show_stall_disable, set_stall_disable, 0, 1); |
---|
1214 | | -static SENSOR_DEVICE_ATTR_2(pwm3, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT, |
---|
1215 | | - 2); |
---|
1216 | | -static SENSOR_DEVICE_ATTR_2(pwm3_freq, S_IRUGO | S_IWUSR, show_pwmfreq, |
---|
1217 | | - set_pwmfreq, INPUT, 2); |
---|
1218 | | -static SENSOR_DEVICE_ATTR_2(pwm3_enable, S_IRUGO | S_IWUSR, show_pwmctrl, |
---|
1219 | | - set_pwmctrl, INPUT, 2); |
---|
1220 | | -static SENSOR_DEVICE_ATTR_2(pwm3_auto_channels_temp, S_IRUGO | S_IWUSR, |
---|
1221 | | - show_pwmchan, set_pwmchan, INPUT, 2); |
---|
1222 | | -static SENSOR_DEVICE_ATTR_2(pwm3_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm, |
---|
1223 | | - set_pwm, MIN, 2); |
---|
1224 | | -static SENSOR_DEVICE_ATTR_2(pwm3_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm, |
---|
1225 | | - set_pwm, MAX, 2); |
---|
1226 | | -static SENSOR_DEVICE_ATTR_2(pwm3_stall_disable, S_IRUGO | S_IWUSR, |
---|
1227 | | - show_stall_disable, set_stall_disable, 0, 2); |
---|
| 1082 | +static SENSOR_DEVICE_ATTR_2_RO(in0_input, voltage, INPUT, 0); |
---|
| 1083 | +static SENSOR_DEVICE_ATTR_2_RW(in0_max, voltage, MAX, 0); |
---|
| 1084 | +static SENSOR_DEVICE_ATTR_2_RW(in0_min, voltage, MIN, 0); |
---|
| 1085 | +static SENSOR_DEVICE_ATTR_2_RO(in0_alarm, voltage, ALARM, 0); |
---|
| 1086 | +static SENSOR_DEVICE_ATTR_2_RO(in1_input, voltage, INPUT, 1); |
---|
| 1087 | +static SENSOR_DEVICE_ATTR_2_RW(in1_max, voltage, MAX, 1); |
---|
| 1088 | +static SENSOR_DEVICE_ATTR_2_RW(in1_min, voltage, MIN, 1); |
---|
| 1089 | +static SENSOR_DEVICE_ATTR_2_RO(in1_alarm, voltage, ALARM, 1); |
---|
| 1090 | +static SENSOR_DEVICE_ATTR_2_RO(in2_input, voltage, INPUT, 2); |
---|
| 1091 | +static SENSOR_DEVICE_ATTR_2_RW(in2_max, voltage, MAX, 2); |
---|
| 1092 | +static SENSOR_DEVICE_ATTR_2_RW(in2_min, voltage, MIN, 2); |
---|
| 1093 | +static SENSOR_DEVICE_ATTR_2_RO(in2_alarm, voltage, ALARM, 2); |
---|
| 1094 | +static SENSOR_DEVICE_ATTR_2_RO(in3_input, voltage, INPUT, 3); |
---|
| 1095 | +static SENSOR_DEVICE_ATTR_2_RW(in3_max, voltage, MAX, 3); |
---|
| 1096 | +static SENSOR_DEVICE_ATTR_2_RW(in3_min, voltage, MIN, 3); |
---|
| 1097 | +static SENSOR_DEVICE_ATTR_2_RO(in3_alarm, voltage, ALARM, 3); |
---|
| 1098 | +static SENSOR_DEVICE_ATTR_2_RO(in4_input, voltage, INPUT, 4); |
---|
| 1099 | +static SENSOR_DEVICE_ATTR_2_RW(in4_max, voltage, MAX, 4); |
---|
| 1100 | +static SENSOR_DEVICE_ATTR_2_RW(in4_min, voltage, MIN, 4); |
---|
| 1101 | +static SENSOR_DEVICE_ATTR_2_RO(in4_alarm, voltage, ALARM, 8); |
---|
| 1102 | +static SENSOR_DEVICE_ATTR_2_RO(in5_input, voltage, INPUT, 5); |
---|
| 1103 | +static SENSOR_DEVICE_ATTR_2_RW(in5_max, voltage, MAX, 5); |
---|
| 1104 | +static SENSOR_DEVICE_ATTR_2_RW(in5_min, voltage, MIN, 5); |
---|
| 1105 | +static SENSOR_DEVICE_ATTR_2_RO(in5_alarm, voltage, ALARM, 31); |
---|
| 1106 | +static SENSOR_DEVICE_ATTR_2_RO(temp1_input, temp, INPUT, 0); |
---|
| 1107 | +static SENSOR_DEVICE_ATTR_2_RO(temp1_alarm, temp, ALARM, 0); |
---|
| 1108 | +static SENSOR_DEVICE_ATTR_2_RO(temp1_fault, temp, FAULT, 0); |
---|
| 1109 | +static SENSOR_DEVICE_ATTR_2_RW(temp1_max, temp, MAX, 0); |
---|
| 1110 | +static SENSOR_DEVICE_ATTR_2_RW(temp1_min, temp, MIN, 0); |
---|
| 1111 | +static SENSOR_DEVICE_ATTR_2_RW(temp1_offset, temp, OFFSET, 0); |
---|
| 1112 | +static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_point1_temp, temp, AUTOMIN, 0); |
---|
| 1113 | +static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_point2_temp, point2, 0, 0); |
---|
| 1114 | +static SENSOR_DEVICE_ATTR_2_RW(temp1_crit, temp, THERM, 0); |
---|
| 1115 | +static SENSOR_DEVICE_ATTR_2_RW(temp1_crit_hyst, temp, HYSTERSIS, 0); |
---|
| 1116 | +static SENSOR_DEVICE_ATTR_2_RW(temp1_smoothing, temp_st, 0, 0); |
---|
| 1117 | +static SENSOR_DEVICE_ATTR_2_RO(temp2_input, temp, INPUT, 1); |
---|
| 1118 | +static SENSOR_DEVICE_ATTR_2_RO(temp2_alarm, temp, ALARM, 1); |
---|
| 1119 | +static SENSOR_DEVICE_ATTR_2_RW(temp2_max, temp, MAX, 1); |
---|
| 1120 | +static SENSOR_DEVICE_ATTR_2_RW(temp2_min, temp, MIN, 1); |
---|
| 1121 | +static SENSOR_DEVICE_ATTR_2_RW(temp2_offset, temp, OFFSET, 1); |
---|
| 1122 | +static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_point1_temp, temp, AUTOMIN, 1); |
---|
| 1123 | +static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_point2_temp, point2, 0, 1); |
---|
| 1124 | +static SENSOR_DEVICE_ATTR_2_RW(temp2_crit, temp, THERM, 1); |
---|
| 1125 | +static SENSOR_DEVICE_ATTR_2_RW(temp2_crit_hyst, temp, HYSTERSIS, 1); |
---|
| 1126 | +static SENSOR_DEVICE_ATTR_2_RW(temp2_smoothing, temp_st, 0, 1); |
---|
| 1127 | +static SENSOR_DEVICE_ATTR_2_RO(temp3_input, temp, INPUT, 2); |
---|
| 1128 | +static SENSOR_DEVICE_ATTR_2_RO(temp3_alarm, temp, ALARM, 2); |
---|
| 1129 | +static SENSOR_DEVICE_ATTR_2_RO(temp3_fault, temp, FAULT, 2); |
---|
| 1130 | +static SENSOR_DEVICE_ATTR_2_RW(temp3_max, temp, MAX, 2); |
---|
| 1131 | +static SENSOR_DEVICE_ATTR_2_RW(temp3_min, temp, MIN, 2); |
---|
| 1132 | +static SENSOR_DEVICE_ATTR_2_RW(temp3_offset, temp, OFFSET, 2); |
---|
| 1133 | +static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_point1_temp, temp, AUTOMIN, 2); |
---|
| 1134 | +static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_point2_temp, point2, 0, 2); |
---|
| 1135 | +static SENSOR_DEVICE_ATTR_2_RW(temp3_crit, temp, THERM, 2); |
---|
| 1136 | +static SENSOR_DEVICE_ATTR_2_RW(temp3_crit_hyst, temp, HYSTERSIS, 2); |
---|
| 1137 | +static SENSOR_DEVICE_ATTR_2_RW(temp3_smoothing, temp_st, 0, 2); |
---|
| 1138 | +static SENSOR_DEVICE_ATTR_2_RO(fan1_input, tach, INPUT, 0); |
---|
| 1139 | +static SENSOR_DEVICE_ATTR_2_RW(fan1_min, tach, MIN, 0); |
---|
| 1140 | +static SENSOR_DEVICE_ATTR_2_RO(fan1_alarm, tach, ALARM, 0); |
---|
| 1141 | +static SENSOR_DEVICE_ATTR_2_RO(fan2_input, tach, INPUT, 1); |
---|
| 1142 | +static SENSOR_DEVICE_ATTR_2_RW(fan2_min, tach, MIN, 1); |
---|
| 1143 | +static SENSOR_DEVICE_ATTR_2_RO(fan2_alarm, tach, ALARM, 1); |
---|
| 1144 | +static SENSOR_DEVICE_ATTR_2_RO(fan3_input, tach, INPUT, 2); |
---|
| 1145 | +static SENSOR_DEVICE_ATTR_2_RW(fan3_min, tach, MIN, 2); |
---|
| 1146 | +static SENSOR_DEVICE_ATTR_2_RO(fan3_alarm, tach, ALARM, 2); |
---|
| 1147 | +static SENSOR_DEVICE_ATTR_2_RO(fan4_input, tach, INPUT, 3); |
---|
| 1148 | +static SENSOR_DEVICE_ATTR_2_RW(fan4_min, tach, MIN, 3); |
---|
| 1149 | +static SENSOR_DEVICE_ATTR_2_RO(fan4_alarm, tach, ALARM, 3); |
---|
| 1150 | +static SENSOR_DEVICE_ATTR_2_RW(pwm1, pwm, INPUT, 0); |
---|
| 1151 | +static SENSOR_DEVICE_ATTR_2_RW(pwm1_freq, pwmfreq, INPUT, 0); |
---|
| 1152 | +static SENSOR_DEVICE_ATTR_2_RW(pwm1_enable, pwmctrl, INPUT, 0); |
---|
| 1153 | +static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_channels_temp, pwmchan, INPUT, 0); |
---|
| 1154 | +static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point1_pwm, pwm, MIN, 0); |
---|
| 1155 | +static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point2_pwm, pwm, MAX, 0); |
---|
| 1156 | +static SENSOR_DEVICE_ATTR_2_RW(pwm1_stall_disable, stall_disable, 0, 0); |
---|
| 1157 | +static SENSOR_DEVICE_ATTR_2_RW(pwm2, pwm, INPUT, 1); |
---|
| 1158 | +static SENSOR_DEVICE_ATTR_2_RW(pwm2_freq, pwmfreq, INPUT, 1); |
---|
| 1159 | +static SENSOR_DEVICE_ATTR_2_RW(pwm2_enable, pwmctrl, INPUT, 1); |
---|
| 1160 | +static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_channels_temp, pwmchan, INPUT, 1); |
---|
| 1161 | +static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point1_pwm, pwm, MIN, 1); |
---|
| 1162 | +static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point2_pwm, pwm, MAX, 1); |
---|
| 1163 | +static SENSOR_DEVICE_ATTR_2_RW(pwm2_stall_disable, stall_disable, 0, 1); |
---|
| 1164 | +static SENSOR_DEVICE_ATTR_2_RW(pwm3, pwm, INPUT, 2); |
---|
| 1165 | +static SENSOR_DEVICE_ATTR_2_RW(pwm3_freq, pwmfreq, INPUT, 2); |
---|
| 1166 | +static SENSOR_DEVICE_ATTR_2_RW(pwm3_enable, pwmctrl, INPUT, 2); |
---|
| 1167 | +static SENSOR_DEVICE_ATTR_2_RW(pwm3_auto_channels_temp, pwmchan, INPUT, 2); |
---|
| 1168 | +static SENSOR_DEVICE_ATTR_2_RW(pwm3_auto_point1_pwm, pwm, MIN, 2); |
---|
| 1169 | +static SENSOR_DEVICE_ATTR_2_RW(pwm3_auto_point2_pwm, pwm, MAX, 2); |
---|
| 1170 | +static SENSOR_DEVICE_ATTR_2_RW(pwm3_stall_disable, stall_disable, 0, 2); |
---|
1228 | 1171 | |
---|
1229 | 1172 | /* Non-standard name, might need revisiting */ |
---|
1230 | 1173 | static DEVICE_ATTR_RW(pwm_use_point2_pwm_at_crit); |
---|
.. | .. |
---|
1402 | 1345 | return 0; |
---|
1403 | 1346 | } |
---|
1404 | 1347 | |
---|
1405 | | -static void adt7475_remove_files(struct i2c_client *client, |
---|
1406 | | - struct adt7475_data *data) |
---|
1407 | | -{ |
---|
1408 | | - sysfs_remove_group(&client->dev.kobj, &adt7475_attr_group); |
---|
1409 | | - if (data->has_fan4) |
---|
1410 | | - sysfs_remove_group(&client->dev.kobj, &fan4_attr_group); |
---|
1411 | | - if (data->has_pwm2) |
---|
1412 | | - sysfs_remove_group(&client->dev.kobj, &pwm2_attr_group); |
---|
1413 | | - if (data->has_voltage & (1 << 0)) |
---|
1414 | | - sysfs_remove_group(&client->dev.kobj, &in0_attr_group); |
---|
1415 | | - if (data->has_voltage & (1 << 3)) |
---|
1416 | | - sysfs_remove_group(&client->dev.kobj, &in3_attr_group); |
---|
1417 | | - if (data->has_voltage & (1 << 4)) |
---|
1418 | | - sysfs_remove_group(&client->dev.kobj, &in4_attr_group); |
---|
1419 | | - if (data->has_voltage & (1 << 5)) |
---|
1420 | | - sysfs_remove_group(&client->dev.kobj, &in5_attr_group); |
---|
1421 | | - if (data->has_vid) |
---|
1422 | | - sysfs_remove_group(&client->dev.kobj, &vid_attr_group); |
---|
1423 | | -} |
---|
1424 | | - |
---|
1425 | 1348 | static int adt7475_update_limits(struct i2c_client *client) |
---|
1426 | 1349 | { |
---|
1427 | 1350 | struct adt7475_data *data = i2c_get_clientdata(client); |
---|
.. | .. |
---|
1537 | 1460 | return 0; |
---|
1538 | 1461 | } |
---|
1539 | 1462 | |
---|
1540 | | -static int adt7475_probe(struct i2c_client *client, |
---|
1541 | | - const struct i2c_device_id *id) |
---|
| 1463 | +static int set_property_bit(const struct i2c_client *client, char *property, |
---|
| 1464 | + u8 *config, u8 bit_index) |
---|
| 1465 | +{ |
---|
| 1466 | + u32 prop_value = 0; |
---|
| 1467 | + int ret = of_property_read_u32(client->dev.of_node, property, |
---|
| 1468 | + &prop_value); |
---|
| 1469 | + |
---|
| 1470 | + if (!ret) { |
---|
| 1471 | + if (prop_value) |
---|
| 1472 | + *config |= (1 << bit_index); |
---|
| 1473 | + else |
---|
| 1474 | + *config &= ~(1 << bit_index); |
---|
| 1475 | + } |
---|
| 1476 | + |
---|
| 1477 | + return ret; |
---|
| 1478 | +} |
---|
| 1479 | + |
---|
| 1480 | +static int load_attenuators(const struct i2c_client *client, int chip, |
---|
| 1481 | + struct adt7475_data *data) |
---|
| 1482 | +{ |
---|
| 1483 | + int ret; |
---|
| 1484 | + |
---|
| 1485 | + if (chip == adt7476 || chip == adt7490) { |
---|
| 1486 | + set_property_bit(client, "adi,bypass-attenuator-in0", |
---|
| 1487 | + &data->config4, 4); |
---|
| 1488 | + set_property_bit(client, "adi,bypass-attenuator-in1", |
---|
| 1489 | + &data->config4, 5); |
---|
| 1490 | + set_property_bit(client, "adi,bypass-attenuator-in3", |
---|
| 1491 | + &data->config4, 6); |
---|
| 1492 | + set_property_bit(client, "adi,bypass-attenuator-in4", |
---|
| 1493 | + &data->config4, 7); |
---|
| 1494 | + |
---|
| 1495 | + ret = i2c_smbus_write_byte_data(client, REG_CONFIG4, |
---|
| 1496 | + data->config4); |
---|
| 1497 | + if (ret < 0) |
---|
| 1498 | + return ret; |
---|
| 1499 | + } else if (chip == adt7473 || chip == adt7475) { |
---|
| 1500 | + set_property_bit(client, "adi,bypass-attenuator-in1", |
---|
| 1501 | + &data->config2, 5); |
---|
| 1502 | + |
---|
| 1503 | + ret = i2c_smbus_write_byte_data(client, REG_CONFIG2, |
---|
| 1504 | + data->config2); |
---|
| 1505 | + if (ret < 0) |
---|
| 1506 | + return ret; |
---|
| 1507 | + } |
---|
| 1508 | + |
---|
| 1509 | + return 0; |
---|
| 1510 | +} |
---|
| 1511 | + |
---|
| 1512 | +static int adt7475_set_pwm_polarity(struct i2c_client *client) |
---|
| 1513 | +{ |
---|
| 1514 | + u32 states[ADT7475_PWM_COUNT]; |
---|
| 1515 | + int ret, i; |
---|
| 1516 | + u8 val; |
---|
| 1517 | + |
---|
| 1518 | + ret = device_property_read_u32_array(&client->dev, |
---|
| 1519 | + "adi,pwm-active-state", states, |
---|
| 1520 | + ARRAY_SIZE(states)); |
---|
| 1521 | + if (ret) |
---|
| 1522 | + return ret; |
---|
| 1523 | + |
---|
| 1524 | + for (i = 0; i < ADT7475_PWM_COUNT; i++) { |
---|
| 1525 | + ret = adt7475_read(PWM_CONFIG_REG(i)); |
---|
| 1526 | + if (ret < 0) |
---|
| 1527 | + return ret; |
---|
| 1528 | + val = ret; |
---|
| 1529 | + if (states[i]) |
---|
| 1530 | + val &= ~BIT(4); |
---|
| 1531 | + else |
---|
| 1532 | + val |= BIT(4); |
---|
| 1533 | + |
---|
| 1534 | + ret = i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(i), val); |
---|
| 1535 | + if (ret) |
---|
| 1536 | + return ret; |
---|
| 1537 | + } |
---|
| 1538 | + |
---|
| 1539 | + return 0; |
---|
| 1540 | +} |
---|
| 1541 | + |
---|
| 1542 | +static int adt7475_probe(struct i2c_client *client) |
---|
1542 | 1543 | { |
---|
1543 | 1544 | enum chips chip; |
---|
1544 | 1545 | static const char * const names[] = { |
---|
.. | .. |
---|
1549 | 1550 | }; |
---|
1550 | 1551 | |
---|
1551 | 1552 | struct adt7475_data *data; |
---|
1552 | | - int i, ret = 0, revision; |
---|
1553 | | - u8 config2, config3; |
---|
| 1553 | + struct device *hwmon_dev; |
---|
| 1554 | + int i, ret = 0, revision, group_num = 0; |
---|
| 1555 | + u8 config3; |
---|
| 1556 | + const struct i2c_device_id *id = i2c_match_id(adt7475_id, client); |
---|
1554 | 1557 | |
---|
1555 | 1558 | data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL); |
---|
1556 | 1559 | if (data == NULL) |
---|
1557 | 1560 | return -ENOMEM; |
---|
1558 | 1561 | |
---|
1559 | 1562 | mutex_init(&data->lock); |
---|
| 1563 | + data->client = client; |
---|
1560 | 1564 | i2c_set_clientdata(client, data); |
---|
1561 | 1565 | |
---|
1562 | 1566 | if (client->dev.of_node) |
---|
.. | .. |
---|
1623 | 1627 | } |
---|
1624 | 1628 | |
---|
1625 | 1629 | /* Voltage attenuators can be bypassed, globally or individually */ |
---|
1626 | | - config2 = adt7475_read(REG_CONFIG2); |
---|
1627 | | - if (config2 & CONFIG2_ATTN) { |
---|
| 1630 | + data->config2 = adt7475_read(REG_CONFIG2); |
---|
| 1631 | + ret = load_attenuators(client, chip, data); |
---|
| 1632 | + if (ret) |
---|
| 1633 | + dev_warn(&client->dev, "Error configuring attenuator bypass\n"); |
---|
| 1634 | + |
---|
| 1635 | + if (data->config2 & CONFIG2_ATTN) { |
---|
1628 | 1636 | data->bypass_attn = (0x3 << 3) | 0x3; |
---|
1629 | 1637 | } else { |
---|
1630 | 1638 | data->bypass_attn = ((data->config4 & CONFIG4_ATTN_IN10) >> 4) | |
---|
.. | .. |
---|
1639 | 1647 | for (i = 0; i < ADT7475_PWM_COUNT; i++) |
---|
1640 | 1648 | adt7475_read_pwm(client, i); |
---|
1641 | 1649 | |
---|
| 1650 | + ret = adt7475_set_pwm_polarity(client); |
---|
| 1651 | + if (ret && ret != -EINVAL) |
---|
| 1652 | + dev_warn(&client->dev, "Error configuring pwm polarity\n"); |
---|
| 1653 | + |
---|
1642 | 1654 | /* Start monitoring */ |
---|
1643 | 1655 | switch (chip) { |
---|
1644 | 1656 | case adt7475: |
---|
.. | .. |
---|
1650 | 1662 | break; |
---|
1651 | 1663 | } |
---|
1652 | 1664 | |
---|
1653 | | - ret = sysfs_create_group(&client->dev.kobj, &adt7475_attr_group); |
---|
1654 | | - if (ret) |
---|
1655 | | - return ret; |
---|
| 1665 | + data->groups[group_num++] = &adt7475_attr_group; |
---|
1656 | 1666 | |
---|
1657 | 1667 | /* Features that can be disabled individually */ |
---|
1658 | 1668 | if (data->has_fan4) { |
---|
1659 | | - ret = sysfs_create_group(&client->dev.kobj, &fan4_attr_group); |
---|
1660 | | - if (ret) |
---|
1661 | | - goto eremove; |
---|
| 1669 | + data->groups[group_num++] = &fan4_attr_group; |
---|
1662 | 1670 | } |
---|
1663 | 1671 | if (data->has_pwm2) { |
---|
1664 | | - ret = sysfs_create_group(&client->dev.kobj, &pwm2_attr_group); |
---|
1665 | | - if (ret) |
---|
1666 | | - goto eremove; |
---|
| 1672 | + data->groups[group_num++] = &pwm2_attr_group; |
---|
1667 | 1673 | } |
---|
1668 | 1674 | if (data->has_voltage & (1 << 0)) { |
---|
1669 | | - ret = sysfs_create_group(&client->dev.kobj, &in0_attr_group); |
---|
1670 | | - if (ret) |
---|
1671 | | - goto eremove; |
---|
| 1675 | + data->groups[group_num++] = &in0_attr_group; |
---|
1672 | 1676 | } |
---|
1673 | 1677 | if (data->has_voltage & (1 << 3)) { |
---|
1674 | | - ret = sysfs_create_group(&client->dev.kobj, &in3_attr_group); |
---|
1675 | | - if (ret) |
---|
1676 | | - goto eremove; |
---|
| 1678 | + data->groups[group_num++] = &in3_attr_group; |
---|
1677 | 1679 | } |
---|
1678 | 1680 | if (data->has_voltage & (1 << 4)) { |
---|
1679 | | - ret = sysfs_create_group(&client->dev.kobj, &in4_attr_group); |
---|
1680 | | - if (ret) |
---|
1681 | | - goto eremove; |
---|
| 1681 | + data->groups[group_num++] = &in4_attr_group; |
---|
1682 | 1682 | } |
---|
1683 | 1683 | if (data->has_voltage & (1 << 5)) { |
---|
1684 | | - ret = sysfs_create_group(&client->dev.kobj, &in5_attr_group); |
---|
1685 | | - if (ret) |
---|
1686 | | - goto eremove; |
---|
| 1684 | + data->groups[group_num++] = &in5_attr_group; |
---|
1687 | 1685 | } |
---|
1688 | 1686 | if (data->has_vid) { |
---|
1689 | 1687 | data->vrm = vid_which_vrm(); |
---|
1690 | | - ret = sysfs_create_group(&client->dev.kobj, &vid_attr_group); |
---|
1691 | | - if (ret) |
---|
1692 | | - goto eremove; |
---|
| 1688 | + data->groups[group_num] = &vid_attr_group; |
---|
1693 | 1689 | } |
---|
1694 | 1690 | |
---|
1695 | | - data->hwmon_dev = hwmon_device_register(&client->dev); |
---|
1696 | | - if (IS_ERR(data->hwmon_dev)) { |
---|
1697 | | - ret = PTR_ERR(data->hwmon_dev); |
---|
1698 | | - goto eremove; |
---|
| 1691 | + /* register device with all the acquired attributes */ |
---|
| 1692 | + hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev, |
---|
| 1693 | + client->name, data, |
---|
| 1694 | + data->groups); |
---|
| 1695 | + |
---|
| 1696 | + if (IS_ERR(hwmon_dev)) { |
---|
| 1697 | + ret = PTR_ERR(hwmon_dev); |
---|
| 1698 | + return ret; |
---|
1699 | 1699 | } |
---|
1700 | 1700 | |
---|
1701 | 1701 | dev_info(&client->dev, "%s device, revision %d\n", |
---|
.. | .. |
---|
1717 | 1717 | /* Limits and settings, should never change update more than once */ |
---|
1718 | 1718 | ret = adt7475_update_limits(client); |
---|
1719 | 1719 | if (ret) |
---|
1720 | | - goto eremove; |
---|
1721 | | - |
---|
1722 | | - return 0; |
---|
1723 | | - |
---|
1724 | | -eremove: |
---|
1725 | | - adt7475_remove_files(client, data); |
---|
1726 | | - return ret; |
---|
1727 | | -} |
---|
1728 | | - |
---|
1729 | | -static int adt7475_remove(struct i2c_client *client) |
---|
1730 | | -{ |
---|
1731 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
1732 | | - |
---|
1733 | | - hwmon_device_unregister(data->hwmon_dev); |
---|
1734 | | - adt7475_remove_files(client, data); |
---|
| 1720 | + return ret; |
---|
1735 | 1721 | |
---|
1736 | 1722 | return 0; |
---|
1737 | 1723 | } |
---|
.. | .. |
---|
1742 | 1728 | .name = "adt7475", |
---|
1743 | 1729 | .of_match_table = of_match_ptr(adt7475_of_match), |
---|
1744 | 1730 | }, |
---|
1745 | | - .probe = adt7475_probe, |
---|
1746 | | - .remove = adt7475_remove, |
---|
| 1731 | + .probe_new = adt7475_probe, |
---|
1747 | 1732 | .id_table = adt7475_id, |
---|
1748 | 1733 | .detect = adt7475_detect, |
---|
1749 | 1734 | .address_list = normal_i2c, |
---|
.. | .. |
---|
1817 | 1802 | |
---|
1818 | 1803 | static int adt7475_update_measure(struct device *dev) |
---|
1819 | 1804 | { |
---|
1820 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
1821 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 1805 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
| 1806 | + struct i2c_client *client = data->client; |
---|
1822 | 1807 | u16 ext; |
---|
1823 | 1808 | int i; |
---|
1824 | 1809 | int ret; |
---|
.. | .. |
---|
1914 | 1899 | |
---|
1915 | 1900 | static struct adt7475_data *adt7475_update_device(struct device *dev) |
---|
1916 | 1901 | { |
---|
1917 | | - struct i2c_client *client = to_i2c_client(dev); |
---|
1918 | | - struct adt7475_data *data = i2c_get_clientdata(client); |
---|
| 1902 | + struct adt7475_data *data = dev_get_drvdata(dev); |
---|
1919 | 1903 | int ret; |
---|
1920 | 1904 | |
---|
1921 | 1905 | mutex_lock(&data->lock); |
---|