| .. | .. |
|---|
| 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; |
|---|
| .. | .. |
|---|
| 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) { |
|---|
| .. | .. |
|---|
| 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 = of_property_read_u32_array(client->dev.of_node, |
|---|
| 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); |
|---|