Merge branch 'release' of git://lm-sensors.org/kernel/mhoffman/hwmon-2.6

* 'release' of git://lm-sensors.org/kernel/mhoffman/hwmon-2.6: (59 commits)
hwmon: (lm80) Add individual alarm files
hwmon: (lm80) De-macro the sysfs callbacks
hwmon: (lm80) Various cleanups
hwmon: (w83627hf) Refactor beep enable handling
hwmon: (w83627hf) Add individual alarm and beep files
hwmon: (w83627hf) Enable VBAT monitoring
hwmon: (w83627ehf) The W83627DHG has 8 VID pins
hwmon: (asb100) Add individual alarm files
hwmon: (asb100) De-macro the sysfs callbacks
hwmon: (asb100) Various cleanups
hwmon: VRM is not written to registers
hwmon: (dme1737) fix Super-IO device ID override
hwmon: (dme1737) fix divide-by-0
hwmon: (abituguru3) Add AUX4 fan input for Abit IP35 Pro
hwmon: Add support for Texas Instruments/Burr-Brown ADS7828
hwmon: (adm9240) Add individual alarm files
hwmon: (lm77) Add individual alarm files
hwmon: Discard useless I2C driver IDs
hwmon: (lm85) Make the pwmN_enable files writable
hwmon: (lm85) Return standard values in pwmN_enable
...

+3682 -1724
+36
Documentation/hwmon/ads7828
··· 1 + Kernel driver ads7828 2 + ===================== 3 + 4 + Supported chips: 5 + * Texas Instruments/Burr-Brown ADS7828 6 + Prefix: 'ads7828' 7 + Addresses scanned: I2C 0x48, 0x49, 0x4a, 0x4b 8 + Datasheet: Publicly available at the Texas Instruments website : 9 + http://focus.ti.com/lit/ds/symlink/ads7828.pdf 10 + 11 + Authors: 12 + Steve Hardy <steve@linuxrealtime.co.uk> 13 + 14 + Module Parameters 15 + ----------------- 16 + 17 + * se_input: bool (default Y) 18 + Single ended operation - set to N for differential mode 19 + * int_vref: bool (default Y) 20 + Operate with the internal 2.5V reference - set to N for external reference 21 + * vref_mv: int (default 2500) 22 + If using an external reference, set this to the reference voltage in mV 23 + 24 + Description 25 + ----------- 26 + 27 + This driver implements support for the Texas Instruments ADS7828. 28 + 29 + This device is a 12-bit 8-channel A-D converter. 30 + 31 + It can operate in single ended mode (8 +ve inputs) or in differential mode, 32 + where 4 differential pairs can be measured. 33 + 34 + The chip also has the facility to use an external voltage reference. This 35 + may be required if your hardware supplies the ADS7828 from a 5V supply, see 36 + the datasheet for more details.
+1 -1
Documentation/hwmon/it87
··· 30 30 Datasheet: No longer be available 31 31 32 32 Authors: 33 - Christophe Gauthron <chrisg@0-in.com> 33 + Christophe Gauthron 34 34 Jean Delvare <khali@linux-fr.org> 35 35 36 36
+2 -2
Documentation/hwmon/lm78
··· 4 4 Supported chips: 5 5 * National Semiconductor LM78 / LM78-J 6 6 Prefix: 'lm78' 7 - Addresses scanned: I2C 0x20 - 0x2f, ISA 0x290 (8 I/O ports) 7 + Addresses scanned: I2C 0x28 - 0x2f, ISA 0x290 (8 I/O ports) 8 8 Datasheet: Publicly available at the National Semiconductor website 9 9 http://www.national.com/ 10 10 * National Semiconductor LM79 11 11 Prefix: 'lm79' 12 - Addresses scanned: I2C 0x20 - 0x2f, ISA 0x290 (8 I/O ports) 12 + Addresses scanned: I2C 0x28 - 0x2f, ISA 0x290 (8 I/O ports) 13 13 Datasheet: Publicly available at the National Semiconductor website 14 14 http://www.national.com/ 15 15
+8 -3
Documentation/hwmon/lm87
··· 4 4 Supported chips: 5 5 * National Semiconductor LM87 6 6 Prefix: 'lm87' 7 - Addresses scanned: I2C 0x2c - 0x2f 7 + Addresses scanned: I2C 0x2c - 0x2e 8 8 Datasheet: http://www.national.com/pf/LM/LM87.html 9 + * Analog Devices ADM1024 10 + Prefix: 'adm1024' 11 + Addresses scanned: I2C 0x2c - 0x2e 12 + Datasheet: http://www.analog.com/en/prod/0,2877,ADM1024,00.html 9 13 10 14 Authors: 11 15 Frodo Looijaard <frodol@dds.nl>, ··· 23 19 Description 24 20 ----------- 25 21 26 - This driver implements support for the National Semiconductor LM87. 22 + This driver implements support for the National Semiconductor LM87 23 + and the Analog Devices ADM1024. 27 24 28 25 The LM87 implements up to three temperature sensors, up to two fan 29 26 rotation speed sensors, up to seven voltage sensors, alarms, and some 30 - miscellaneous stuff. 27 + miscellaneous stuff. The ADM1024 is fully compatible. 31 28 32 29 Temperatures are measured in degrees Celsius. Each input has a high 33 30 and low alarm settings. A high limit produces an alarm when the value
+1 -1
Documentation/hwmon/userspace-tools
··· 14 14 15 15 Core set of utilities that will allow you to obtain health information, 16 16 setup monitoring limits etc. You can get them on their homepage 17 - http://www.lm-sensors.nu/ or as a package from your Linux distribution. 17 + http://www.lm-sensors.org/ or as a package from your Linux distribution. 18 18 19 19 If from website: 20 20 Get lm-sensors from project web site. Please note, you need only userspace
+3 -2
Documentation/hwmon/w83627ehf
··· 23 23 24 24 The chips implement three temperature sensors, five fan rotation 25 25 speed sensors, ten analog voltage sensors (only nine for the 627DHG), one 26 - VID (6 pins), alarms with beep warnings (control unimplemented), and 27 - some automatic fan regulation strategies (plus manual fan control mode). 26 + VID (6 pins for the 627EHF/EHG, 8 pins for the 627DHG), alarms with beep 27 + warnings (control unimplemented), and some automatic fan regulation 28 + strategies (plus manual fan control mode). 28 29 29 30 Temperatures are measured in degrees Celsius and measurement resolution is 1 30 31 degC for temp1 and 0.5 degC for temp2 and temp3. An alarm is triggered when
+1 -2
Documentation/hwmon/w83627hf
··· 73 73 74 74 For further information on this driver see the w83781d driver documentation. 75 75 76 - [1] http://www2.lm-sensors.nu/~lm78/cvs/browse.cgi/lm_sensors2/doc/vid 77 - 76 + [1] http://www.lm-sensors.org/browser/lm-sensors/trunk/doc/vid
+8 -14
Documentation/hwmon/w83781d
··· 4 4 Supported chips: 5 5 * Winbond W83781D 6 6 Prefix: 'w83781d' 7 - Addresses scanned: I2C 0x20 - 0x2f, ISA 0x290 (8 I/O ports) 7 + Addresses scanned: I2C 0x28 - 0x2f, ISA 0x290 (8 I/O ports) 8 8 Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83781d.pdf 9 9 * Winbond W83782D 10 10 Prefix: 'w83782d' 11 - Addresses scanned: I2C 0x20 - 0x2f, ISA 0x290 (8 I/O ports) 11 + Addresses scanned: I2C 0x28 - 0x2f, ISA 0x290 (8 I/O ports) 12 12 Datasheet: http://www.winbond.com/PDF/sheet/w83782d.pdf 13 13 * Winbond W83783S 14 14 Prefix: 'w83783s' 15 15 Addresses scanned: I2C 0x2d 16 16 Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83783s.pdf 17 - * Winbond W83627HF 18 - Prefix: 'w83627hf' 19 - Addresses scanned: I2C 0x20 - 0x2f, ISA 0x290 (8 I/O ports) 20 - Datasheet: http://www.winbond.com/PDF/sheet/w83627hf.pdf 21 17 * Asus AS99127F 22 18 Prefix: 'as99127f' 23 19 Addresses scanned: I2C 0x28 - 0x2f ··· 46 50 Description 47 51 ----------- 48 52 49 - This driver implements support for the Winbond W83781D, W83782D, W83783S, 50 - W83627HF chips, and the Asus AS99127F chips. We will refer to them 51 - collectively as W8378* chips. 53 + This driver implements support for the Winbond W83781D, W83782D, W83783S 54 + chips, and the Asus AS99127F chips. We will refer to them collectively as 55 + W8378* chips. 52 56 53 57 There is quite some difference between these chips, but they are similar 54 58 enough that it was sensible to put them together in one driver. 55 - The W83627HF chip is assumed to be identical to the ISA W83782D. 56 59 The Asus chips are similar to an I2C-only W83782D. 57 60 58 61 Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA 59 62 as99127f 7 3 0 3 0x31 0x12c3 yes no 60 63 as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no 61 64 w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes 62 - w83627hf 9 3 2 3 0x21 0x5ca3 yes yes(LPC) 63 65 w83782d 9 3 2-4 3 0x30 0x5ca3 yes yes 64 66 w83783s 5-6 3 2 1-2 0x40 0x5ca3 yes no 65 67 ··· 137 143 0x000400: in6 138 144 0x000800: fan3 139 145 0x001000: chassis 140 - 0x002000: temp3 (W83782D and W83627HF only) 141 - 0x010000: in7 (W83782D and W83627HF only) 142 - 0x020000: in8 (W83782D and W83627HF only) 146 + 0x002000: temp3 (W83782D only) 147 + 0x010000: in7 (W83782D only) 148 + 0x020000: in8 (W83782D only) 143 149 144 150 If an alarm triggers, it will remain triggered until the hardware register 145 151 is read at least once. This means that the cause for the alarm may
+54
Documentation/hwmon/w83l786ng
··· 1 + Kernel driver w83l786ng 2 + ===================== 3 + 4 + Supported chips: 5 + * Winbond W83L786NG/W83L786NR 6 + Prefix: 'w83l786ng' 7 + Addresses scanned: I2C 0x2e - 0x2f 8 + Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/W83L786NRNG09.pdf 9 + 10 + Author: Kevin Lo <kevlo@kevlo.org> 11 + 12 + 13 + Module Parameters 14 + ----------------- 15 + 16 + * reset boolean 17 + (default 0) 18 + Use 'reset=1' to reset the chip (via index 0x40, bit 7). The default 19 + behavior is no chip reset to preserve BIOS settings 20 + 21 + 22 + Description 23 + ----------- 24 + 25 + This driver implements support for Winbond W83L786NG/W83L786NR chips. 26 + 27 + The driver implements two temperature sensors, two fan rotation speed 28 + sensors, and three voltage sensors. 29 + 30 + Temperatures are measured in degrees Celsius and measurement resolution is 1 31 + degC for temp1 and temp2. 32 + 33 + Fan rotation speeds are reported in RPM (rotations per minute). Fan readings 34 + readings can be divided by a programmable divider (1, 2, 4, 8, 16, 32, 64 35 + or 128 for fan 1/2) to give the readings more range or accuracy. 36 + 37 + Voltage sensors (also known as IN sensors) report their values in millivolts. 38 + An alarm is triggered if the voltage has crossed a programmable minimum 39 + or maximum limit. 40 + 41 + /sys files 42 + ---------- 43 + 44 + pwm[1-2] - this file stores PWM duty cycle or DC value (fan speed) in range: 45 + 0 (stop) to 255 (full) 46 + pwm[1-2]_enable - this file controls mode of fan/temperature control: 47 + * 0 Manual Mode 48 + * 1 Thermal Cruise 49 + * 2 Smart Fan II 50 + * 4 FAN_SET 51 + pwm[1-2]_mode - Select PWM of DC mode 52 + * 0 DC 53 + * 1 PWM 54 + tolerance[1-2] - Value in degrees of Celsius (degC) for +- T
+1 -1
Documentation/i2c/busses/i2c-piix4
··· 95 95 the SMBus on all IBM systems (detected using DMI data.) 96 96 97 97 For additional information, read: 98 - http://www2.lm-sensors.nu/~lm78/cvs/lm_sensors2/README.thinkpad 98 + http://www.lm-sensors.org/browser/lm-sensors/trunk/README.thinkpad
+48 -14
drivers/firmware/dmi_scan.c
··· 43 43 * We have to be cautious here. We have seen BIOSes with DMI pointers 44 44 * pointing to completely the wrong place for example 45 45 */ 46 - static int __init dmi_table(u32 base, int len, int num, 47 - void (*decode)(const struct dmi_header *)) 46 + static void dmi_table(u8 *buf, int len, int num, 47 + void (*decode)(const struct dmi_header *)) 48 48 { 49 - u8 *buf, *data; 49 + u8 *data = buf; 50 50 int i = 0; 51 - 52 - buf = dmi_ioremap(base, len); 53 - if (buf == NULL) 54 - return -1; 55 - 56 - data = buf; 57 51 58 52 /* 59 53 * Stop when we see all the items the table claimed to have ··· 69 75 data += 2; 70 76 i++; 71 77 } 72 - dmi_iounmap(buf, len); 78 + } 79 + 80 + static u32 dmi_base; 81 + static u16 dmi_len; 82 + static u16 dmi_num; 83 + 84 + static int __init dmi_walk_early(void (*decode)(const struct dmi_header *)) 85 + { 86 + u8 *buf; 87 + 88 + buf = dmi_ioremap(dmi_base, dmi_len); 89 + if (buf == NULL) 90 + return -1; 91 + 92 + dmi_table(buf, dmi_len, dmi_num, decode); 93 + 94 + dmi_iounmap(buf, dmi_len); 73 95 return 0; 74 96 } 75 97 ··· 301 291 302 292 memcpy_fromio(buf, p, 15); 303 293 if ((memcmp(buf, "_DMI_", 5) == 0) && dmi_checksum(buf)) { 304 - u16 num = (buf[13] << 8) | buf[12]; 305 - u16 len = (buf[7] << 8) | buf[6]; 306 - u32 base = (buf[11] << 24) | (buf[10] << 16) | 294 + dmi_num = (buf[13] << 8) | buf[12]; 295 + dmi_len = (buf[7] << 8) | buf[6]; 296 + dmi_base = (buf[11] << 24) | (buf[10] << 16) | 307 297 (buf[9] << 8) | buf[8]; 308 298 309 299 /* ··· 315 305 buf[14] >> 4, buf[14] & 0xF); 316 306 else 317 307 printk(KERN_INFO "DMI present.\n"); 318 - if (dmi_table(base,len, num, dmi_decode) == 0) 308 + if (dmi_walk_early(dmi_decode) == 0) 319 309 return 0; 320 310 } 321 311 return 1; ··· 499 489 500 490 return year; 501 491 } 492 + 493 + /** 494 + * dmi_walk - Walk the DMI table and get called back for every record 495 + * @decode: Callback function 496 + * 497 + * Returns -1 when the DMI table can't be reached, 0 on success. 498 + */ 499 + int dmi_walk(void (*decode)(const struct dmi_header *)) 500 + { 501 + u8 *buf; 502 + 503 + if (!dmi_available) 504 + return -1; 505 + 506 + buf = ioremap(dmi_base, dmi_len); 507 + if (buf == NULL) 508 + return -1; 509 + 510 + dmi_table(buf, dmi_len, dmi_num, decode); 511 + 512 + iounmap(buf); 513 + return 0; 514 + } 515 + EXPORT_SYMBOL_GPL(dmi_walk);
+25 -5
drivers/hwmon/Kconfig
··· 433 433 will be called lm85. 434 434 435 435 config SENSORS_LM87 436 - tristate "National Semiconductor LM87" 436 + tristate "National Semiconductor LM87 and compatibles" 437 437 depends on I2C 438 438 select HWMON_VID 439 439 help 440 440 If you say yes here you get support for National Semiconductor LM87 441 - sensor chips. 441 + and Analog Devices ADM1024 sensor chips. 442 442 443 443 This driver can also be built as a module. If so, the module 444 444 will be called lm87. ··· 588 588 This driver can also be built as a module. If so, the module 589 589 will be called smsc47b397. 590 590 591 + config SENSORS_ADS7828 592 + tristate "Texas Instruments ADS7828" 593 + depends on I2C 594 + help 595 + If you say yes here you get support for Texas Instruments ADS7828 596 + 12-bit 8-channel ADC device. 597 + 598 + This driver can also be built as a module. If so, the module 599 + will be called ads7828. 600 + 591 601 config SENSORS_THMC50 592 602 tristate "Texas Instruments THMC50 / Analog Devices ADM1022" 593 603 depends on I2C && EXPERIMENTAL ··· 641 631 will be called vt8231. 642 632 643 633 config SENSORS_W83781D 644 - tristate "Winbond W83781D, W83782D, W83783S, W83627HF, Asus AS99127F" 634 + tristate "Winbond W83781D, W83782D, W83783S, Asus AS99127F" 645 635 depends on I2C 646 636 select HWMON_VID 647 637 help 648 638 If you say yes here you get support for the Winbond W8378x series 649 - of sensor chips: the W83781D, W83782D, W83783S and W83627HF, 650 - and the similar Asus AS99127F. 639 + of sensor chips: the W83781D, W83782D and W83783S, and the similar 640 + Asus AS99127F. 651 641 652 642 This driver can also be built as a module. If so, the module 653 643 will be called w83781d. ··· 692 682 693 683 This driver can also be built as a module. If so, the module 694 684 will be called w83l785ts. 685 + 686 + config SENSORS_W83L786NG 687 + tristate "Winbond W83L786NG, W83L786NR" 688 + depends on I2C && EXPERIMENTAL 689 + help 690 + If you say yes here you get support for the Winbond W83L786NG 691 + and W83L786NR sensor chips. 692 + 693 + This driver can also be built as a module. If so, the module 694 + will be called w83l786ng. 695 695 696 696 config SENSORS_W83627HF 697 697 tristate "Winbond W83627HF, W83627THF, W83637HF, W83687THF, W83697HF"
+2
drivers/hwmon/Makefile
··· 22 22 obj-$(CONFIG_SENSORS_ADM1029) += adm1029.o 23 23 obj-$(CONFIG_SENSORS_ADM1031) += adm1031.o 24 24 obj-$(CONFIG_SENSORS_ADM9240) += adm9240.o 25 + obj-$(CONFIG_SENSORS_ADS7828) += ads7828.o 25 26 obj-$(CONFIG_SENSORS_ADT7470) += adt7470.o 26 27 obj-$(CONFIG_SENSORS_APPLESMC) += applesmc.o 27 28 obj-$(CONFIG_SENSORS_AMS) += ams/ ··· 69 68 obj-$(CONFIG_SENSORS_VT8231) += vt8231.o 70 69 obj-$(CONFIG_SENSORS_W83627EHF) += w83627ehf.o 71 70 obj-$(CONFIG_SENSORS_W83L785TS) += w83l785ts.o 71 + obj-$(CONFIG_SENSORS_W83L786NG) += w83l786ng.o 72 72 73 73 ifeq ($(CONFIG_HWMON_DEBUG_CHIP),y) 74 74 EXTRA_CFLAGS += -DDEBUG
+1
drivers/hwmon/abituguru3.c
··· 528 528 { "AUX1 Fan", 33, 2, 60, 1, 0 }, 529 529 { "AUX2 Fan", 35, 2, 60, 1, 0 }, 530 530 { "AUX3 Fan", 36, 2, 60, 1, 0 }, 531 + { "AUX4 Fan", 37, 2, 60, 1, 0 }, 531 532 { NULL, 0, 0, 0, 0, 0 } } 532 533 }, 533 534 { 0x001B, "unknown", {
-1
drivers/hwmon/adm1021.c
··· 115 115 .driver = { 116 116 .name = "adm1021", 117 117 }, 118 - .id = I2C_DRIVERID_ADM1021, 119 118 .attach_adapter = adm1021_attach_adapter, 120 119 .detach_client = adm1021_detach_client, 121 120 };
+213 -178
drivers/hwmon/adm1025.c
··· 51 51 #include <linux/jiffies.h> 52 52 #include <linux/i2c.h> 53 53 #include <linux/hwmon.h> 54 + #include <linux/hwmon-sysfs.h> 54 55 #include <linux/hwmon-vid.h> 55 56 #include <linux/err.h> 56 57 #include <linux/mutex.h> ··· 75 74 */ 76 75 77 76 #define ADM1025_REG_MAN_ID 0x3E 78 - #define ADM1025_REG_CHIP_ID 0x3F 77 + #define ADM1025_REG_CHIP_ID 0x3F 79 78 #define ADM1025_REG_CONFIG 0x40 80 79 #define ADM1025_REG_STATUS1 0x41 81 80 #define ADM1025_REG_STATUS2 0x42 ··· 93 92 * The ADM1025 uses signed 8-bit values for temperatures. 94 93 */ 95 94 96 - static int in_scale[6] = { 2500, 2250, 3300, 5000, 12000, 3300 }; 95 + static const int in_scale[6] = { 2500, 2250, 3300, 5000, 12000, 3300 }; 97 96 98 97 #define IN_FROM_REG(reg,scale) (((reg) * (scale) + 96) / 192) 99 98 #define IN_TO_REG(val,scale) ((val) <= 0 ? 0 : \ ··· 123 122 .driver = { 124 123 .name = "adm1025", 125 124 }, 126 - .id = I2C_DRIVERID_ADM1025, 127 125 .attach_adapter = adm1025_attach_adapter, 128 126 .detach_client = adm1025_detach_client, 129 127 }; ··· 153 153 * Sysfs stuff 154 154 */ 155 155 156 - #define show_in(offset) \ 157 - static ssize_t show_in##offset(struct device *dev, struct device_attribute *attr, char *buf) \ 158 - { \ 159 - struct adm1025_data *data = adm1025_update_device(dev); \ 160 - return sprintf(buf, "%u\n", IN_FROM_REG(data->in[offset], \ 161 - in_scale[offset])); \ 162 - } \ 163 - static ssize_t show_in##offset##_min(struct device *dev, struct device_attribute *attr, char *buf) \ 164 - { \ 165 - struct adm1025_data *data = adm1025_update_device(dev); \ 166 - return sprintf(buf, "%u\n", IN_FROM_REG(data->in_min[offset], \ 167 - in_scale[offset])); \ 168 - } \ 169 - static ssize_t show_in##offset##_max(struct device *dev, struct device_attribute *attr, char *buf) \ 170 - { \ 171 - struct adm1025_data *data = adm1025_update_device(dev); \ 172 - return sprintf(buf, "%u\n", IN_FROM_REG(data->in_max[offset], \ 173 - in_scale[offset])); \ 174 - } \ 175 - static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_in##offset, NULL); 176 - show_in(0); 177 - show_in(1); 178 - show_in(2); 179 - show_in(3); 180 - show_in(4); 181 - show_in(5); 156 + static ssize_t 157 + show_in(struct device *dev, struct device_attribute *attr, char *buf) 158 + { 159 + int index = to_sensor_dev_attr(attr)->index; 160 + struct adm1025_data *data = adm1025_update_device(dev); 161 + return sprintf(buf, "%u\n", IN_FROM_REG(data->in[index], 162 + in_scale[index])); 163 + } 182 164 183 - #define show_temp(offset) \ 184 - static ssize_t show_temp##offset(struct device *dev, struct device_attribute *attr, char *buf) \ 185 - { \ 186 - struct adm1025_data *data = adm1025_update_device(dev); \ 187 - return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[offset-1])); \ 188 - } \ 189 - static ssize_t show_temp##offset##_min(struct device *dev, struct device_attribute *attr, char *buf) \ 190 - { \ 191 - struct adm1025_data *data = adm1025_update_device(dev); \ 192 - return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[offset-1])); \ 193 - } \ 194 - static ssize_t show_temp##offset##_max(struct device *dev, struct device_attribute *attr, char *buf) \ 195 - { \ 196 - struct adm1025_data *data = adm1025_update_device(dev); \ 197 - return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[offset-1])); \ 198 - }\ 199 - static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp##offset, NULL); 200 - show_temp(1); 201 - show_temp(2); 165 + static ssize_t 166 + show_in_min(struct device *dev, struct device_attribute *attr, char *buf) 167 + { 168 + int index = to_sensor_dev_attr(attr)->index; 169 + struct adm1025_data *data = adm1025_update_device(dev); 170 + return sprintf(buf, "%u\n", IN_FROM_REG(data->in_min[index], 171 + in_scale[index])); 172 + } 173 + 174 + static ssize_t 175 + show_in_max(struct device *dev, struct device_attribute *attr, char *buf) 176 + { 177 + int index = to_sensor_dev_attr(attr)->index; 178 + struct adm1025_data *data = adm1025_update_device(dev); 179 + return sprintf(buf, "%u\n", IN_FROM_REG(data->in_max[index], 180 + in_scale[index])); 181 + } 182 + 183 + static ssize_t 184 + show_temp(struct device *dev, struct device_attribute *attr, char *buf) 185 + { 186 + int index = to_sensor_dev_attr(attr)->index; 187 + struct adm1025_data *data = adm1025_update_device(dev); 188 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[index])); 189 + } 190 + 191 + static ssize_t 192 + show_temp_min(struct device *dev, struct device_attribute *attr, char *buf) 193 + { 194 + int index = to_sensor_dev_attr(attr)->index; 195 + struct adm1025_data *data = adm1025_update_device(dev); 196 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[index])); 197 + } 198 + 199 + static ssize_t 200 + show_temp_max(struct device *dev, struct device_attribute *attr, char *buf) 201 + { 202 + int index = to_sensor_dev_attr(attr)->index; 203 + struct adm1025_data *data = adm1025_update_device(dev); 204 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[index])); 205 + } 206 + 207 + static ssize_t set_in_min(struct device *dev, struct device_attribute *attr, 208 + const char *buf, size_t count) 209 + { 210 + int index = to_sensor_dev_attr(attr)->index; 211 + struct i2c_client *client = to_i2c_client(dev); 212 + struct adm1025_data *data = i2c_get_clientdata(client); 213 + long val = simple_strtol(buf, NULL, 10); 214 + 215 + mutex_lock(&data->update_lock); 216 + data->in_min[index] = IN_TO_REG(val, in_scale[index]); 217 + i2c_smbus_write_byte_data(client, ADM1025_REG_IN_MIN(index), 218 + data->in_min[index]); 219 + mutex_unlock(&data->update_lock); 220 + return count; 221 + } 222 + 223 + static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, 224 + const char *buf, size_t count) 225 + { 226 + int index = to_sensor_dev_attr(attr)->index; 227 + struct i2c_client *client = to_i2c_client(dev); 228 + struct adm1025_data *data = i2c_get_clientdata(client); 229 + long val = simple_strtol(buf, NULL, 10); 230 + 231 + mutex_lock(&data->update_lock); 232 + data->in_max[index] = IN_TO_REG(val, in_scale[index]); 233 + i2c_smbus_write_byte_data(client, ADM1025_REG_IN_MAX(index), 234 + data->in_max[index]); 235 + mutex_unlock(&data->update_lock); 236 + return count; 237 + } 202 238 203 239 #define set_in(offset) \ 204 - static ssize_t set_in##offset##_min(struct device *dev, struct device_attribute *attr, const char *buf, \ 205 - size_t count) \ 206 - { \ 207 - struct i2c_client *client = to_i2c_client(dev); \ 208 - struct adm1025_data *data = i2c_get_clientdata(client); \ 209 - long val = simple_strtol(buf, NULL, 10); \ 210 - \ 211 - mutex_lock(&data->update_lock); \ 212 - data->in_min[offset] = IN_TO_REG(val, in_scale[offset]); \ 213 - i2c_smbus_write_byte_data(client, ADM1025_REG_IN_MIN(offset), \ 214 - data->in_min[offset]); \ 215 - mutex_unlock(&data->update_lock); \ 216 - return count; \ 217 - } \ 218 - static ssize_t set_in##offset##_max(struct device *dev, struct device_attribute *attr, const char *buf, \ 219 - size_t count) \ 220 - { \ 221 - struct i2c_client *client = to_i2c_client(dev); \ 222 - struct adm1025_data *data = i2c_get_clientdata(client); \ 223 - long val = simple_strtol(buf, NULL, 10); \ 224 - \ 225 - mutex_lock(&data->update_lock); \ 226 - data->in_max[offset] = IN_TO_REG(val, in_scale[offset]); \ 227 - i2c_smbus_write_byte_data(client, ADM1025_REG_IN_MAX(offset), \ 228 - data->in_max[offset]); \ 229 - mutex_unlock(&data->update_lock); \ 230 - return count; \ 231 - } \ 232 - static DEVICE_ATTR(in##offset##_min, S_IWUSR | S_IRUGO, \ 233 - show_in##offset##_min, set_in##offset##_min); \ 234 - static DEVICE_ATTR(in##offset##_max, S_IWUSR | S_IRUGO, \ 235 - show_in##offset##_max, set_in##offset##_max); 240 + static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \ 241 + show_in, NULL, offset); \ 242 + static SENSOR_DEVICE_ATTR(in##offset##_min, S_IWUSR | S_IRUGO, \ 243 + show_in_min, set_in_min, offset); \ 244 + static SENSOR_DEVICE_ATTR(in##offset##_max, S_IWUSR | S_IRUGO, \ 245 + show_in_max, set_in_max, offset) 236 246 set_in(0); 237 247 set_in(1); 238 248 set_in(2); ··· 250 240 set_in(4); 251 241 set_in(5); 252 242 243 + static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr, 244 + const char *buf, size_t count) 245 + { 246 + int index = to_sensor_dev_attr(attr)->index; 247 + struct i2c_client *client = to_i2c_client(dev); 248 + struct adm1025_data *data = i2c_get_clientdata(client); 249 + long val = simple_strtol(buf, NULL, 10); 250 + 251 + mutex_lock(&data->update_lock); 252 + data->temp_min[index] = TEMP_TO_REG(val); 253 + i2c_smbus_write_byte_data(client, ADM1025_REG_TEMP_LOW(index), 254 + data->temp_min[index]); 255 + mutex_unlock(&data->update_lock); 256 + return count; 257 + } 258 + 259 + static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, 260 + const char *buf, size_t count) 261 + { 262 + int index = to_sensor_dev_attr(attr)->index; 263 + struct i2c_client *client = to_i2c_client(dev); 264 + struct adm1025_data *data = i2c_get_clientdata(client); 265 + long val = simple_strtol(buf, NULL, 10); 266 + 267 + mutex_lock(&data->update_lock); 268 + data->temp_max[index] = TEMP_TO_REG(val); 269 + i2c_smbus_write_byte_data(client, ADM1025_REG_TEMP_HIGH(index), 270 + data->temp_max[index]); 271 + mutex_unlock(&data->update_lock); 272 + return count; 273 + } 274 + 253 275 #define set_temp(offset) \ 254 - static ssize_t set_temp##offset##_min(struct device *dev, struct device_attribute *attr, const char *buf, \ 255 - size_t count) \ 256 - { \ 257 - struct i2c_client *client = to_i2c_client(dev); \ 258 - struct adm1025_data *data = i2c_get_clientdata(client); \ 259 - long val = simple_strtol(buf, NULL, 10); \ 260 - \ 261 - mutex_lock(&data->update_lock); \ 262 - data->temp_min[offset-1] = TEMP_TO_REG(val); \ 263 - i2c_smbus_write_byte_data(client, ADM1025_REG_TEMP_LOW(offset-1), \ 264 - data->temp_min[offset-1]); \ 265 - mutex_unlock(&data->update_lock); \ 266 - return count; \ 267 - } \ 268 - static ssize_t set_temp##offset##_max(struct device *dev, struct device_attribute *attr, const char *buf, \ 269 - size_t count) \ 270 - { \ 271 - struct i2c_client *client = to_i2c_client(dev); \ 272 - struct adm1025_data *data = i2c_get_clientdata(client); \ 273 - long val = simple_strtol(buf, NULL, 10); \ 274 - \ 275 - mutex_lock(&data->update_lock); \ 276 - data->temp_max[offset-1] = TEMP_TO_REG(val); \ 277 - i2c_smbus_write_byte_data(client, ADM1025_REG_TEMP_HIGH(offset-1), \ 278 - data->temp_max[offset-1]); \ 279 - mutex_unlock(&data->update_lock); \ 280 - return count; \ 281 - } \ 282 - static DEVICE_ATTR(temp##offset##_min, S_IWUSR | S_IRUGO, \ 283 - show_temp##offset##_min, set_temp##offset##_min); \ 284 - static DEVICE_ATTR(temp##offset##_max, S_IWUSR | S_IRUGO, \ 285 - show_temp##offset##_max, set_temp##offset##_max); 276 + static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \ 277 + show_temp, NULL, offset - 1); \ 278 + static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IWUSR | S_IRUGO, \ 279 + show_temp_min, set_temp_min, offset - 1); \ 280 + static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IWUSR | S_IRUGO, \ 281 + show_temp_max, set_temp_max, offset - 1) 286 282 set_temp(1); 287 283 set_temp(2); 288 284 289 - static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf) 285 + static ssize_t 286 + show_alarms(struct device *dev, struct device_attribute *attr, char *buf) 290 287 { 291 288 struct adm1025_data *data = adm1025_update_device(dev); 292 289 return sprintf(buf, "%u\n", data->alarms); 293 290 } 294 291 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 295 292 296 - static ssize_t show_vid(struct device *dev, struct device_attribute *attr, char *buf) 293 + static ssize_t 294 + show_alarm(struct device *dev, struct device_attribute *attr, char *buf) 295 + { 296 + int bitnr = to_sensor_dev_attr(attr)->index; 297 + struct adm1025_data *data = adm1025_update_device(dev); 298 + return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); 299 + } 300 + static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0); 301 + static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1); 302 + static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2); 303 + static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3); 304 + static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8); 305 + static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 9); 306 + static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 5); 307 + static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 4); 308 + static SENSOR_DEVICE_ATTR(temp1_fault, S_IRUGO, show_alarm, NULL, 14); 309 + 310 + static ssize_t 311 + show_vid(struct device *dev, struct device_attribute *attr, char *buf) 297 312 { 298 313 struct adm1025_data *data = adm1025_update_device(dev); 299 314 return sprintf(buf, "%u\n", vid_from_reg(data->vid, data->vrm)); 300 315 } 301 316 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL); 302 317 303 - static ssize_t show_vrm(struct device *dev, struct device_attribute *attr, char *buf) 318 + static ssize_t 319 + show_vrm(struct device *dev, struct device_attribute *attr, char *buf) 304 320 { 305 321 struct adm1025_data *data = dev_get_drvdata(dev); 306 322 return sprintf(buf, "%u\n", data->vrm); 307 323 } 308 - static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 324 + static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, 325 + const char *buf, size_t count) 309 326 { 310 - struct i2c_client *client = to_i2c_client(dev); 311 - struct adm1025_data *data = i2c_get_clientdata(client); 327 + struct adm1025_data *data = dev_get_drvdata(dev); 312 328 data->vrm = simple_strtoul(buf, NULL, 10); 313 329 return count; 314 330 } ··· 352 316 } 353 317 354 318 static struct attribute *adm1025_attributes[] = { 355 - &dev_attr_in0_input.attr, 356 - &dev_attr_in1_input.attr, 357 - &dev_attr_in2_input.attr, 358 - &dev_attr_in3_input.attr, 359 - &dev_attr_in5_input.attr, 360 - &dev_attr_in0_min.attr, 361 - &dev_attr_in1_min.attr, 362 - &dev_attr_in2_min.attr, 363 - &dev_attr_in3_min.attr, 364 - &dev_attr_in5_min.attr, 365 - &dev_attr_in0_max.attr, 366 - &dev_attr_in1_max.attr, 367 - &dev_attr_in2_max.attr, 368 - &dev_attr_in3_max.attr, 369 - &dev_attr_in5_max.attr, 370 - &dev_attr_temp1_input.attr, 371 - &dev_attr_temp2_input.attr, 372 - &dev_attr_temp1_min.attr, 373 - &dev_attr_temp2_min.attr, 374 - &dev_attr_temp1_max.attr, 375 - &dev_attr_temp2_max.attr, 319 + &sensor_dev_attr_in0_input.dev_attr.attr, 320 + &sensor_dev_attr_in1_input.dev_attr.attr, 321 + &sensor_dev_attr_in2_input.dev_attr.attr, 322 + &sensor_dev_attr_in3_input.dev_attr.attr, 323 + &sensor_dev_attr_in5_input.dev_attr.attr, 324 + &sensor_dev_attr_in0_min.dev_attr.attr, 325 + &sensor_dev_attr_in1_min.dev_attr.attr, 326 + &sensor_dev_attr_in2_min.dev_attr.attr, 327 + &sensor_dev_attr_in3_min.dev_attr.attr, 328 + &sensor_dev_attr_in5_min.dev_attr.attr, 329 + &sensor_dev_attr_in0_max.dev_attr.attr, 330 + &sensor_dev_attr_in1_max.dev_attr.attr, 331 + &sensor_dev_attr_in2_max.dev_attr.attr, 332 + &sensor_dev_attr_in3_max.dev_attr.attr, 333 + &sensor_dev_attr_in5_max.dev_attr.attr, 334 + &sensor_dev_attr_in0_alarm.dev_attr.attr, 335 + &sensor_dev_attr_in1_alarm.dev_attr.attr, 336 + &sensor_dev_attr_in2_alarm.dev_attr.attr, 337 + &sensor_dev_attr_in3_alarm.dev_attr.attr, 338 + &sensor_dev_attr_in5_alarm.dev_attr.attr, 339 + &sensor_dev_attr_temp1_input.dev_attr.attr, 340 + &sensor_dev_attr_temp2_input.dev_attr.attr, 341 + &sensor_dev_attr_temp1_min.dev_attr.attr, 342 + &sensor_dev_attr_temp2_min.dev_attr.attr, 343 + &sensor_dev_attr_temp1_max.dev_attr.attr, 344 + &sensor_dev_attr_temp2_max.dev_attr.attr, 345 + &sensor_dev_attr_temp1_alarm.dev_attr.attr, 346 + &sensor_dev_attr_temp2_alarm.dev_attr.attr, 347 + &sensor_dev_attr_temp1_fault.dev_attr.attr, 376 348 &dev_attr_alarms.attr, 377 349 &dev_attr_cpu0_vid.attr, 378 350 &dev_attr_vrm.attr, ··· 391 347 .attrs = adm1025_attributes, 392 348 }; 393 349 394 - static struct attribute *adm1025_attributes_opt[] = { 395 - &dev_attr_in4_input.attr, 396 - &dev_attr_in4_min.attr, 397 - &dev_attr_in4_max.attr, 350 + static struct attribute *adm1025_attributes_in4[] = { 351 + &sensor_dev_attr_in4_input.dev_attr.attr, 352 + &sensor_dev_attr_in4_min.dev_attr.attr, 353 + &sensor_dev_attr_in4_max.dev_attr.attr, 354 + &sensor_dev_attr_in4_alarm.dev_attr.attr, 398 355 NULL 399 356 }; 400 357 401 - static const struct attribute_group adm1025_group_opt = { 402 - .attrs = adm1025_attributes_opt, 358 + static const struct attribute_group adm1025_group_in4 = { 359 + .attrs = adm1025_attributes_in4, 403 360 }; 404 361 405 362 /* ··· 409 364 */ 410 365 static int adm1025_detect(struct i2c_adapter *adapter, int address, int kind) 411 366 { 412 - struct i2c_client *new_client; 367 + struct i2c_client *client; 413 368 struct adm1025_data *data; 414 369 int err = 0; 415 370 const char *name = ""; ··· 423 378 goto exit; 424 379 } 425 380 426 - /* The common I2C client data is placed right before the 427 - ADM1025-specific data. */ 428 - new_client = &data->client; 429 - i2c_set_clientdata(new_client, data); 430 - new_client->addr = address; 431 - new_client->adapter = adapter; 432 - new_client->driver = &adm1025_driver; 433 - new_client->flags = 0; 381 + client = &data->client; 382 + i2c_set_clientdata(client, data); 383 + client->addr = address; 384 + client->adapter = adapter; 385 + client->driver = &adm1025_driver; 434 386 435 387 /* 436 388 * Now we do the remaining detection. A negative kind means that ··· 439 397 * requested, so both the detection and the identification steps 440 398 * are skipped. 441 399 */ 442 - config = i2c_smbus_read_byte_data(new_client, ADM1025_REG_CONFIG); 400 + config = i2c_smbus_read_byte_data(client, ADM1025_REG_CONFIG); 443 401 if (kind < 0) { /* detection */ 444 402 if ((config & 0x80) != 0x00 445 - || (i2c_smbus_read_byte_data(new_client, 403 + || (i2c_smbus_read_byte_data(client, 446 404 ADM1025_REG_STATUS1) & 0xC0) != 0x00 447 - || (i2c_smbus_read_byte_data(new_client, 405 + || (i2c_smbus_read_byte_data(client, 448 406 ADM1025_REG_STATUS2) & 0xBC) != 0x00) { 449 407 dev_dbg(&adapter->dev, 450 408 "ADM1025 detection failed at 0x%02x.\n", ··· 456 414 if (kind <= 0) { /* identification */ 457 415 u8 man_id, chip_id; 458 416 459 - man_id = i2c_smbus_read_byte_data(new_client, 460 - ADM1025_REG_MAN_ID); 461 - chip_id = i2c_smbus_read_byte_data(new_client, 462 - ADM1025_REG_CHIP_ID); 463 - 417 + man_id = i2c_smbus_read_byte_data(client, ADM1025_REG_MAN_ID); 418 + chip_id = i2c_smbus_read_byte_data(client, ADM1025_REG_CHIP_ID); 419 + 464 420 if (man_id == 0x41) { /* Analog Devices */ 465 421 if ((chip_id & 0xF0) == 0x20) { /* ADM1025/ADM1025A */ 466 422 kind = adm1025; ··· 486 446 } 487 447 488 448 /* We can fill in the remaining client fields */ 489 - strlcpy(new_client->name, name, I2C_NAME_SIZE); 490 - data->valid = 0; 449 + strlcpy(client->name, name, I2C_NAME_SIZE); 491 450 mutex_init(&data->update_lock); 492 451 493 452 /* Tell the I2C layer a new client has arrived */ 494 - if ((err = i2c_attach_client(new_client))) 453 + if ((err = i2c_attach_client(client))) 495 454 goto exit_free; 496 455 497 456 /* Initialize the ADM1025 chip */ 498 - adm1025_init_client(new_client); 457 + adm1025_init_client(client); 499 458 500 459 /* Register sysfs hooks */ 501 - if ((err = sysfs_create_group(&new_client->dev.kobj, &adm1025_group))) 460 + if ((err = sysfs_create_group(&client->dev.kobj, &adm1025_group))) 502 461 goto exit_detach; 503 462 504 463 /* Pin 11 is either in4 (+12V) or VID4 */ 505 464 if (!(config & 0x20)) { 506 - if ((err = device_create_file(&new_client->dev, 507 - &dev_attr_in4_input)) 508 - || (err = device_create_file(&new_client->dev, 509 - &dev_attr_in4_min)) 510 - || (err = device_create_file(&new_client->dev, 511 - &dev_attr_in4_max))) 465 + if ((err = sysfs_create_group(&client->dev.kobj, 466 + &adm1025_group_in4))) 512 467 goto exit_remove; 513 468 } 514 469 515 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 470 + data->hwmon_dev = hwmon_device_register(&client->dev); 516 471 if (IS_ERR(data->hwmon_dev)) { 517 472 err = PTR_ERR(data->hwmon_dev); 518 473 goto exit_remove; ··· 516 481 return 0; 517 482 518 483 exit_remove: 519 - sysfs_remove_group(&new_client->dev.kobj, &adm1025_group); 520 - sysfs_remove_group(&new_client->dev.kobj, &adm1025_group_opt); 484 + sysfs_remove_group(&client->dev.kobj, &adm1025_group); 485 + sysfs_remove_group(&client->dev.kobj, &adm1025_group_in4); 521 486 exit_detach: 522 - i2c_detach_client(new_client); 487 + i2c_detach_client(client); 523 488 exit_free: 524 489 kfree(data); 525 490 exit: ··· 575 540 576 541 hwmon_device_unregister(data->hwmon_dev); 577 542 sysfs_remove_group(&client->dev.kobj, &adm1025_group); 578 - sysfs_remove_group(&client->dev.kobj, &adm1025_group_opt); 543 + sysfs_remove_group(&client->dev.kobj, &adm1025_group_in4); 579 544 580 545 if ((err = i2c_detach_client(client))) 581 546 return err;
+360 -272
drivers/hwmon/adm1026.c
··· 40 40 /* Insmod parameters */ 41 41 I2C_CLIENT_INSMOD_1(adm1026); 42 42 43 - static int gpio_input[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, 44 - -1, -1, -1, -1, -1, -1, -1, -1 }; 43 + static int gpio_input[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, 44 + -1, -1, -1, -1, -1, -1, -1, -1 }; 45 45 static int gpio_output[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, 46 46 -1, -1, -1, -1, -1, -1, -1, -1 }; 47 47 static int gpio_inverted[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, ··· 49 49 static int gpio_normal[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, 50 50 -1, -1, -1, -1, -1, -1, -1, -1 }; 51 51 static int gpio_fan[8] = { -1, -1, -1, -1, -1, -1, -1, -1 }; 52 - module_param_array(gpio_input,int,NULL,0); 53 - MODULE_PARM_DESC(gpio_input,"List of GPIO pins (0-16) to program as inputs"); 54 - module_param_array(gpio_output,int,NULL,0); 55 - MODULE_PARM_DESC(gpio_output,"List of GPIO pins (0-16) to program as " 52 + module_param_array(gpio_input, int, NULL, 0); 53 + MODULE_PARM_DESC(gpio_input, "List of GPIO pins (0-16) to program as inputs"); 54 + module_param_array(gpio_output, int, NULL, 0); 55 + MODULE_PARM_DESC(gpio_output, "List of GPIO pins (0-16) to program as " 56 56 "outputs"); 57 - module_param_array(gpio_inverted,int,NULL,0); 58 - MODULE_PARM_DESC(gpio_inverted,"List of GPIO pins (0-16) to program as " 57 + module_param_array(gpio_inverted, int, NULL, 0); 58 + MODULE_PARM_DESC(gpio_inverted, "List of GPIO pins (0-16) to program as " 59 59 "inverted"); 60 - module_param_array(gpio_normal,int,NULL,0); 61 - MODULE_PARM_DESC(gpio_normal,"List of GPIO pins (0-16) to program as " 60 + module_param_array(gpio_normal, int, NULL, 0); 61 + MODULE_PARM_DESC(gpio_normal, "List of GPIO pins (0-16) to program as " 62 62 "normal/non-inverted"); 63 - module_param_array(gpio_fan,int,NULL,0); 64 - MODULE_PARM_DESC(gpio_fan,"List of GPIO pins (0-7) to program as fan tachs"); 63 + module_param_array(gpio_fan, int, NULL, 0); 64 + MODULE_PARM_DESC(gpio_fan, "List of GPIO pins (0-7) to program as fan tachs"); 65 65 66 66 /* Many ADM1026 constants specified below */ 67 67 68 68 /* The ADM1026 registers */ 69 - #define ADM1026_REG_CONFIG1 0x00 70 - #define CFG1_MONITOR 0x01 71 - #define CFG1_INT_ENABLE 0x02 72 - #define CFG1_INT_CLEAR 0x04 73 - #define CFG1_AIN8_9 0x08 74 - #define CFG1_THERM_HOT 0x10 75 - #define CFG1_DAC_AFC 0x20 76 - #define CFG1_PWM_AFC 0x40 77 - #define CFG1_RESET 0x80 78 - #define ADM1026_REG_CONFIG2 0x01 69 + #define ADM1026_REG_CONFIG1 0x00 70 + #define CFG1_MONITOR 0x01 71 + #define CFG1_INT_ENABLE 0x02 72 + #define CFG1_INT_CLEAR 0x04 73 + #define CFG1_AIN8_9 0x08 74 + #define CFG1_THERM_HOT 0x10 75 + #define CFG1_DAC_AFC 0x20 76 + #define CFG1_PWM_AFC 0x40 77 + #define CFG1_RESET 0x80 78 + 79 + #define ADM1026_REG_CONFIG2 0x01 79 80 /* CONFIG2 controls FAN0/GPIO0 through FAN7/GPIO7 */ 80 - #define ADM1026_REG_CONFIG3 0x07 81 - #define CFG3_GPIO16_ENABLE 0x01 82 - #define CFG3_CI_CLEAR 0x02 83 - #define CFG3_VREF_250 0x04 84 - #define CFG3_GPIO16_DIR 0x40 85 - #define CFG3_GPIO16_POL 0x80 86 - #define ADM1026_REG_E2CONFIG 0x13 87 - #define E2CFG_READ 0x01 88 - #define E2CFG_WRITE 0x02 89 - #define E2CFG_ERASE 0x04 90 - #define E2CFG_ROM 0x08 91 - #define E2CFG_CLK_EXT 0x80 81 + 82 + #define ADM1026_REG_CONFIG3 0x07 83 + #define CFG3_GPIO16_ENABLE 0x01 84 + #define CFG3_CI_CLEAR 0x02 85 + #define CFG3_VREF_250 0x04 86 + #define CFG3_GPIO16_DIR 0x40 87 + #define CFG3_GPIO16_POL 0x80 88 + 89 + #define ADM1026_REG_E2CONFIG 0x13 90 + #define E2CFG_READ 0x01 91 + #define E2CFG_WRITE 0x02 92 + #define E2CFG_ERASE 0x04 93 + #define E2CFG_ROM 0x08 94 + #define E2CFG_CLK_EXT 0x80 92 95 93 96 /* There are 10 general analog inputs and 7 dedicated inputs 94 97 * They are: ··· 132 129 static u16 ADM1026_REG_TEMP_THERM[] = { 0x0d, 0x0e, 0x0f }; 133 130 static u16 ADM1026_REG_TEMP_OFFSET[] = { 0x1e, 0x6e, 0x6f }; 134 131 135 - #define ADM1026_REG_FAN(nr) (0x38 + (nr)) 136 - #define ADM1026_REG_FAN_MIN(nr) (0x60 + (nr)) 137 - #define ADM1026_REG_FAN_DIV_0_3 0x02 138 - #define ADM1026_REG_FAN_DIV_4_7 0x03 132 + #define ADM1026_REG_FAN(nr) (0x38 + (nr)) 133 + #define ADM1026_REG_FAN_MIN(nr) (0x60 + (nr)) 134 + #define ADM1026_REG_FAN_DIV_0_3 0x02 135 + #define ADM1026_REG_FAN_DIV_4_7 0x03 139 136 140 - #define ADM1026_REG_DAC 0x04 141 - #define ADM1026_REG_PWM 0x05 137 + #define ADM1026_REG_DAC 0x04 138 + #define ADM1026_REG_PWM 0x05 142 139 143 - #define ADM1026_REG_GPIO_CFG_0_3 0x08 144 - #define ADM1026_REG_GPIO_CFG_4_7 0x09 145 - #define ADM1026_REG_GPIO_CFG_8_11 0x0a 146 - #define ADM1026_REG_GPIO_CFG_12_15 0x0b 140 + #define ADM1026_REG_GPIO_CFG_0_3 0x08 141 + #define ADM1026_REG_GPIO_CFG_4_7 0x09 142 + #define ADM1026_REG_GPIO_CFG_8_11 0x0a 143 + #define ADM1026_REG_GPIO_CFG_12_15 0x0b 147 144 /* CFG_16 in REG_CFG3 */ 148 - #define ADM1026_REG_GPIO_STATUS_0_7 0x24 149 - #define ADM1026_REG_GPIO_STATUS_8_15 0x25 145 + #define ADM1026_REG_GPIO_STATUS_0_7 0x24 146 + #define ADM1026_REG_GPIO_STATUS_8_15 0x25 150 147 /* STATUS_16 in REG_STATUS4 */ 151 - #define ADM1026_REG_GPIO_MASK_0_7 0x1c 152 - #define ADM1026_REG_GPIO_MASK_8_15 0x1d 148 + #define ADM1026_REG_GPIO_MASK_0_7 0x1c 149 + #define ADM1026_REG_GPIO_MASK_8_15 0x1d 153 150 /* MASK_16 in REG_MASK4 */ 154 151 155 - #define ADM1026_REG_COMPANY 0x16 156 - #define ADM1026_REG_VERSTEP 0x17 152 + #define ADM1026_REG_COMPANY 0x16 153 + #define ADM1026_REG_VERSTEP 0x17 157 154 /* These are the recognized values for the above regs */ 158 - #define ADM1026_COMPANY_ANALOG_DEV 0x41 159 - #define ADM1026_VERSTEP_GENERIC 0x40 160 - #define ADM1026_VERSTEP_ADM1026 0x44 155 + #define ADM1026_COMPANY_ANALOG_DEV 0x41 156 + #define ADM1026_VERSTEP_GENERIC 0x40 157 + #define ADM1026_VERSTEP_ADM1026 0x44 161 158 162 - #define ADM1026_REG_MASK1 0x18 163 - #define ADM1026_REG_MASK2 0x19 164 - #define ADM1026_REG_MASK3 0x1a 165 - #define ADM1026_REG_MASK4 0x1b 159 + #define ADM1026_REG_MASK1 0x18 160 + #define ADM1026_REG_MASK2 0x19 161 + #define ADM1026_REG_MASK3 0x1a 162 + #define ADM1026_REG_MASK4 0x1b 166 163 167 - #define ADM1026_REG_STATUS1 0x20 168 - #define ADM1026_REG_STATUS2 0x21 169 - #define ADM1026_REG_STATUS3 0x22 170 - #define ADM1026_REG_STATUS4 0x23 164 + #define ADM1026_REG_STATUS1 0x20 165 + #define ADM1026_REG_STATUS2 0x21 166 + #define ADM1026_REG_STATUS3 0x22 167 + #define ADM1026_REG_STATUS4 0x23 171 168 172 169 #define ADM1026_FAN_ACTIVATION_TEMP_HYST -6 173 - #define ADM1026_FAN_CONTROL_TEMP_RANGE 20 174 - #define ADM1026_PWM_MAX 255 170 + #define ADM1026_FAN_CONTROL_TEMP_RANGE 20 171 + #define ADM1026_PWM_MAX 255 175 172 176 - /* Conversions. Rounding and limit checking is only done on the TO_REG 173 + /* Conversions. Rounding and limit checking is only done on the TO_REG 177 174 * variants. Note that you should be a bit careful with which arguments 178 175 * these macros are called: arguments may be evaluated more than once. 179 176 */ ··· 189 186 * The values in this table are based on Table II, page 15 of the 190 187 * datasheet. 191 188 */ 192 - static int adm1026_scaling[] = { /* .001 Volts */ 193 - 2250, 2250, 2250, 2250, 2250, 2250, 194 - 1875, 1875, 1875, 1875, 3000, 3330, 189 + static int adm1026_scaling[] = { /* .001 Volts */ 190 + 2250, 2250, 2250, 2250, 2250, 2250, 191 + 1875, 1875, 1875, 1875, 3000, 3330, 195 192 3330, 4995, 2250, 12000, 13875 196 193 }; 197 194 #define NEG12_OFFSET 16000 198 - #define SCALE(val,from,to) (((val)*(to) + ((from)/2))/(from)) 199 - #define INS_TO_REG(n,val) (SENSORS_LIMIT(SCALE(val,adm1026_scaling[n],192),\ 200 - 0,255)) 201 - #define INS_FROM_REG(n,val) (SCALE(val,192,adm1026_scaling[n])) 195 + #define SCALE(val, from, to) (((val)*(to) + ((from)/2))/(from)) 196 + #define INS_TO_REG(n, val) (SENSORS_LIMIT(SCALE(val, adm1026_scaling[n], 192),\ 197 + 0, 255)) 198 + #define INS_FROM_REG(n, val) (SCALE(val, 192, adm1026_scaling[n])) 202 199 203 200 /* FAN speed is measured using 22.5kHz clock and counts for 2 pulses 204 201 * and we assume a 2 pulse-per-rev fan tach signal 205 202 * 22500 kHz * 60 (sec/min) * 2 (pulse) / 2 (pulse/rev) == 1350000 206 203 */ 207 - #define FAN_TO_REG(val,div) ((val)<=0 ? 0xff : SENSORS_LIMIT(1350000/((val)*\ 208 - (div)),1,254)) 209 - #define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==0xff ? 0 : 1350000/((val)*\ 210 - (div))) 204 + #define FAN_TO_REG(val, div) ((val) <= 0 ? 0xff : \ 205 + SENSORS_LIMIT(1350000/((val)*(div)), 1, 254)) 206 + #define FAN_FROM_REG(val, div) ((val) == 0 ? -1:(val) == 0xff ? 0 : \ 207 + 1350000/((val)*(div))) 211 208 #define DIV_FROM_REG(val) (1<<(val)) 212 - #define DIV_TO_REG(val) ((val)>=8 ? 3 : (val)>=4 ? 2 : (val)>=2 ? 1 : 0) 209 + #define DIV_TO_REG(val) ((val) >= 8 ? 3 : (val) >= 4 ? 2 : (val) >= 2 ? 1 : 0) 213 210 214 211 /* Temperature is reported in 1 degC increments */ 215 212 #define TEMP_TO_REG(val) (SENSORS_LIMIT(((val)+((val)<0 ? -500 : 500))/1000,\ 216 - -127,127)) 213 + -127, 127)) 217 214 #define TEMP_FROM_REG(val) ((val) * 1000) 218 215 #define OFFSET_TO_REG(val) (SENSORS_LIMIT(((val)+((val)<0 ? -500 : 500))/1000,\ 219 - -127,127)) 216 + -127, 127)) 220 217 #define OFFSET_FROM_REG(val) ((val) * 1000) 221 218 222 - #define PWM_TO_REG(val) (SENSORS_LIMIT(val,0,255)) 219 + #define PWM_TO_REG(val) (SENSORS_LIMIT(val, 0, 255)) 223 220 #define PWM_FROM_REG(val) (val) 224 221 225 222 #define PWM_MIN_TO_REG(val) ((val) & 0xf0) 226 223 #define PWM_MIN_FROM_REG(val) (((val) & 0xf0) + ((val) >> 4)) 227 224 228 - /* Analog output is a voltage, and scaled to millivolts. The datasheet 229 - * indicates that the DAC could be used to drive the fans, but in our 225 + /* Analog output is a voltage, and scaled to millivolts. The datasheet 226 + * indicates that the DAC could be used to drive the fans, but in our 230 227 * example board (Arima HDAMA) it isn't connected to the fans at all. 231 228 */ 232 - #define DAC_TO_REG(val) (SENSORS_LIMIT(((((val)*255)+500)/2500),0,255)) 229 + #define DAC_TO_REG(val) (SENSORS_LIMIT(((((val)*255)+500)/2500), 0, 255)) 233 230 #define DAC_FROM_REG(val) (((val)*2500)/255) 234 - 235 - /* Typically used with systems using a v9.1 VRM spec ? */ 236 - #define ADM1026_INIT_VRM 91 237 231 238 232 /* Chip sampling rates 239 233 * ··· 243 243 * So, we keep the config data up to date in the cache 244 244 * when it is written and only sample it once every 5 *minutes* 245 245 */ 246 - #define ADM1026_DATA_INTERVAL (1 * HZ) 247 - #define ADM1026_CONFIG_INTERVAL (5 * 60 * HZ) 246 + #define ADM1026_DATA_INTERVAL (1 * HZ) 247 + #define ADM1026_CONFIG_INTERVAL (5 * 60 * HZ) 248 248 249 249 /* We allow for multiple chips in a single system. 250 250 * ··· 261 261 struct adm1026_data { 262 262 struct i2c_client client; 263 263 struct device *hwmon_dev; 264 - enum chips type; 265 264 266 265 struct mutex update_lock; 267 266 int valid; /* !=0 if following fields are valid */ 268 267 unsigned long last_reading; /* In jiffies */ 269 268 unsigned long last_config; /* In jiffies */ 270 269 271 - u8 in[17]; /* Register value */ 272 - u8 in_max[17]; /* Register value */ 273 - u8 in_min[17]; /* Register value */ 274 - s8 temp[3]; /* Register value */ 275 - s8 temp_min[3]; /* Register value */ 276 - s8 temp_max[3]; /* Register value */ 277 - s8 temp_tmin[3]; /* Register value */ 278 - s8 temp_crit[3]; /* Register value */ 279 - s8 temp_offset[3]; /* Register value */ 280 - u8 fan[8]; /* Register value */ 281 - u8 fan_min[8]; /* Register value */ 282 - u8 fan_div[8]; /* Decoded value */ 283 - struct pwm_data pwm1; /* Pwm control values */ 284 - int vid; /* Decoded value */ 285 - u8 vrm; /* VRM version */ 270 + u8 in[17]; /* Register value */ 271 + u8 in_max[17]; /* Register value */ 272 + u8 in_min[17]; /* Register value */ 273 + s8 temp[3]; /* Register value */ 274 + s8 temp_min[3]; /* Register value */ 275 + s8 temp_max[3]; /* Register value */ 276 + s8 temp_tmin[3]; /* Register value */ 277 + s8 temp_crit[3]; /* Register value */ 278 + s8 temp_offset[3]; /* Register value */ 279 + u8 fan[8]; /* Register value */ 280 + u8 fan_min[8]; /* Register value */ 281 + u8 fan_div[8]; /* Decoded value */ 282 + struct pwm_data pwm1; /* Pwm control values */ 283 + int vid; /* Decoded value */ 284 + u8 vrm; /* VRM version */ 286 285 u8 analog_out; /* Register value (DAC) */ 287 - long alarms; /* Register encoding, combined */ 288 - long alarm_mask; /* Register encoding, combined */ 289 - long gpio; /* Register encoding, combined */ 290 - long gpio_mask; /* Register encoding, combined */ 291 - u8 gpio_config[17]; /* Decoded value */ 292 - u8 config1; /* Register value */ 293 - u8 config2; /* Register value */ 294 - u8 config3; /* Register value */ 286 + long alarms; /* Register encoding, combined */ 287 + long alarm_mask; /* Register encoding, combined */ 288 + long gpio; /* Register encoding, combined */ 289 + long gpio_mask; /* Register encoding, combined */ 290 + u8 gpio_config[17]; /* Decoded value */ 291 + u8 config1; /* Register value */ 292 + u8 config2; /* Register value */ 293 + u8 config3; /* Register value */ 295 294 }; 296 295 297 296 static int adm1026_attach_adapter(struct i2c_adapter *adapter); ··· 300 301 static int adm1026_read_value(struct i2c_client *client, u8 reg); 301 302 static int adm1026_write_value(struct i2c_client *client, u8 reg, int value); 302 303 static void adm1026_print_gpio(struct i2c_client *client); 303 - static void adm1026_fixup_gpio(struct i2c_client *client); 304 + static void adm1026_fixup_gpio(struct i2c_client *client); 304 305 static struct adm1026_data *adm1026_update_device(struct device *dev); 305 306 static void adm1026_init_client(struct i2c_client *client); 306 307 ··· 310 311 .name = "adm1026", 311 312 }, 312 313 .attach_adapter = adm1026_attach_adapter, 313 - .detach_client = adm1026_detach_client, 314 + .detach_client = adm1026_detach_client, 314 315 }; 315 316 316 317 static int adm1026_attach_adapter(struct i2c_adapter *adapter) ··· 354 355 int value, i; 355 356 struct adm1026_data *data = i2c_get_clientdata(client); 356 357 357 - dev_dbg(&client->dev, "Initializing device\n"); 358 + dev_dbg(&client->dev, "Initializing device\n"); 358 359 /* Read chip config */ 359 360 data->config1 = adm1026_read_value(client, ADM1026_REG_CONFIG1); 360 361 data->config2 = adm1026_read_value(client, ADM1026_REG_CONFIG2); ··· 383 384 "and temp limits enabled.\n"); 384 385 } 385 386 386 - value = data->config3; 387 387 if (data->config3 & CFG3_GPIO16_ENABLE) { 388 388 dev_dbg(&client->dev, "GPIO16 enabled. THERM " 389 389 "pin disabled.\n"); ··· 424 426 * configured, we don't want to mess with them. 425 427 * If they weren't, the default is 100% PWM, no 426 428 * control and will suffice until 'sensors -s' 427 - * can be run by the user. We DO set the default 429 + * can be run by the user. We DO set the default 428 430 * value for pwm1.auto_pwm_min to its maximum 429 431 * so that enabling automatic pwm fan control 430 - * without first setting a value for pwm1.auto_pwm_min 432 + * without first setting a value for pwm1.auto_pwm_min 431 433 * will not result in potentially dangerous fan speed decrease. 432 434 */ 433 435 data->pwm1.auto_pwm_min=255; ··· 451 453 static void adm1026_print_gpio(struct i2c_client *client) 452 454 { 453 455 struct adm1026_data *data = i2c_get_clientdata(client); 454 - int i; 456 + int i; 455 457 456 458 dev_dbg(&client->dev, "GPIO config is:"); 457 459 for (i = 0;i <= 7;++i) { ··· 475 477 data->gpio_config[16] & 0x02 ? "" : "!", 476 478 data->gpio_config[16] & 0x01 ? "OUT" : "IN"); 477 479 } else { 478 - /* GPIO16 is THERM */ 480 + /* GPIO16 is THERM */ 479 481 dev_dbg(&client->dev, "\tTHERM\n"); 480 482 } 481 483 } ··· 483 485 static void adm1026_fixup_gpio(struct i2c_client *client) 484 486 { 485 487 struct adm1026_data *data = i2c_get_clientdata(client); 486 - int i; 487 - int value; 488 + int i; 489 + int value; 488 490 489 491 /* Make the changes requested. */ 490 492 /* We may need to unlock/stop monitoring or soft-reset the ··· 514 516 } 515 517 } 516 518 517 - /* Inverted */ 519 + /* Inverted */ 518 520 for (i = 0;i <= 16;++i) { 519 521 if (gpio_inverted[i] >= 0 && gpio_inverted[i] <= 16) { 520 522 data->gpio_config[gpio_inverted[i]] &= ~ 0x02; 521 523 } 522 524 } 523 525 524 - /* Normal overrides inverted */ 526 + /* Normal overrides inverted */ 525 527 for (i = 0;i <= 16;++i) { 526 528 if (gpio_normal[i] >= 0 && gpio_normal[i] <= 16) { 527 529 data->gpio_config[gpio_normal[i]] |= 0x02; ··· 567 569 if (!data->valid 568 570 || time_after(jiffies, data->last_reading + ADM1026_DATA_INTERVAL)) { 569 571 /* Things that change quickly */ 570 - dev_dbg(&client->dev,"Reading sensor values\n"); 572 + dev_dbg(&client->dev, "Reading sensor values\n"); 571 573 for (i = 0;i <= 16;++i) { 572 574 data->in[i] = 573 575 adm1026_read_value(client, ADM1026_REG_IN[i]); ··· 580 582 581 583 for (i = 0;i <= 2;++i) { 582 584 /* NOTE: temp[] is s8 and we assume 2's complement 583 - * "conversion" in the assignment */ 585 + * "conversion" in the assignment */ 584 586 data->temp[i] = 585 587 adm1026_read_value(client, ADM1026_REG_TEMP[i]); 586 588 } 587 589 588 - data->pwm1.pwm = adm1026_read_value(client, 590 + data->pwm1.pwm = adm1026_read_value(client, 589 591 ADM1026_REG_PWM); 590 - data->analog_out = adm1026_read_value(client, 592 + data->analog_out = adm1026_read_value(client, 591 593 ADM1026_REG_DAC); 592 594 /* GPIO16 is MSbit of alarms, move it to gpio */ 593 595 alarms = adm1026_read_value(client, ADM1026_REG_STATUS4); 594 - gpio = alarms & 0x80 ? 0x0100 : 0; /* GPIO16 */ 596 + gpio = alarms & 0x80 ? 0x0100 : 0; /* GPIO16 */ 595 597 alarms &= 0x7f; 596 598 alarms <<= 8; 597 599 alarms |= adm1026_read_value(client, ADM1026_REG_STATUS3); ··· 602 604 data->alarms = alarms; 603 605 604 606 /* Read the GPIO values */ 605 - gpio |= adm1026_read_value(client, 607 + gpio |= adm1026_read_value(client, 606 608 ADM1026_REG_GPIO_STATUS_8_15); 607 609 gpio <<= 8; 608 - gpio |= adm1026_read_value(client, 610 + gpio |= adm1026_read_value(client, 609 611 ADM1026_REG_GPIO_STATUS_0_7); 610 612 data->gpio = gpio; 611 613 612 614 data->last_reading = jiffies; 613 - }; /* last_reading */ 615 + }; /* last_reading */ 614 616 615 617 if (!data->valid || 616 618 time_after(jiffies, data->last_config + ADM1026_CONFIG_INTERVAL)) { 617 619 /* Things that don't change often */ 618 620 dev_dbg(&client->dev, "Reading config values\n"); 619 621 for (i = 0;i <= 16;++i) { 620 - data->in_min[i] = adm1026_read_value(client, 622 + data->in_min[i] = adm1026_read_value(client, 621 623 ADM1026_REG_IN_MIN[i]); 622 - data->in_max[i] = adm1026_read_value(client, 624 + data->in_max[i] = adm1026_read_value(client, 623 625 ADM1026_REG_IN_MAX[i]); 624 626 } 625 627 ··· 627 629 | (adm1026_read_value(client, ADM1026_REG_FAN_DIV_4_7) 628 630 << 8); 629 631 for (i = 0;i <= 7;++i) { 630 - data->fan_min[i] = adm1026_read_value(client, 632 + data->fan_min[i] = adm1026_read_value(client, 631 633 ADM1026_REG_FAN_MIN(i)); 632 634 data->fan_div[i] = DIV_FROM_REG(value & 0x03); 633 635 value >>= 2; 634 636 } 635 637 636 638 for (i = 0; i <= 2; ++i) { 637 - /* NOTE: temp_xxx[] are s8 and we assume 2's 639 + /* NOTE: temp_xxx[] are s8 and we assume 2's 638 640 * complement "conversion" in the assignment 639 641 */ 640 - data->temp_min[i] = adm1026_read_value(client, 642 + data->temp_min[i] = adm1026_read_value(client, 641 643 ADM1026_REG_TEMP_MIN[i]); 642 - data->temp_max[i] = adm1026_read_value(client, 644 + data->temp_max[i] = adm1026_read_value(client, 643 645 ADM1026_REG_TEMP_MAX[i]); 644 - data->temp_tmin[i] = adm1026_read_value(client, 646 + data->temp_tmin[i] = adm1026_read_value(client, 645 647 ADM1026_REG_TEMP_TMIN[i]); 646 - data->temp_crit[i] = adm1026_read_value(client, 648 + data->temp_crit[i] = adm1026_read_value(client, 647 649 ADM1026_REG_TEMP_THERM[i]); 648 - data->temp_offset[i] = adm1026_read_value(client, 650 + data->temp_offset[i] = adm1026_read_value(client, 649 651 ADM1026_REG_TEMP_OFFSET[i]); 650 652 } 651 653 652 654 /* Read the STATUS/alarm masks */ 653 - alarms = adm1026_read_value(client, ADM1026_REG_MASK4); 654 - gpio = alarms & 0x80 ? 0x0100 : 0; /* GPIO16 */ 655 - alarms = (alarms & 0x7f) << 8; 655 + alarms = adm1026_read_value(client, ADM1026_REG_MASK4); 656 + gpio = alarms & 0x80 ? 0x0100 : 0; /* GPIO16 */ 657 + alarms = (alarms & 0x7f) << 8; 656 658 alarms |= adm1026_read_value(client, ADM1026_REG_MASK3); 657 659 alarms <<= 8; 658 660 alarms |= adm1026_read_value(client, ADM1026_REG_MASK2); ··· 661 663 data->alarm_mask = alarms; 662 664 663 665 /* Read the GPIO values */ 664 - gpio |= adm1026_read_value(client, 666 + gpio |= adm1026_read_value(client, 665 667 ADM1026_REG_GPIO_MASK_8_15); 666 668 gpio <<= 8; 667 669 gpio |= adm1026_read_value(client, ADM1026_REG_GPIO_MASK_0_7); 668 670 data->gpio_mask = gpio; 669 671 670 672 /* Read various values from CONFIG1 */ 671 - data->config1 = adm1026_read_value(client, 673 + data->config1 = adm1026_read_value(client, 672 674 ADM1026_REG_CONFIG1); 673 675 if (data->config1 & CFG1_PWM_AFC) { 674 676 data->pwm1.enable = 2; 675 - data->pwm1.auto_pwm_min = 677 + data->pwm1.auto_pwm_min = 676 678 PWM_MIN_FROM_REG(data->pwm1.pwm); 677 679 } 678 680 /* Read the GPIO config */ 679 - data->config2 = adm1026_read_value(client, 681 + data->config2 = adm1026_read_value(client, 680 682 ADM1026_REG_CONFIG2); 681 - data->config3 = adm1026_read_value(client, 683 + data->config3 = adm1026_read_value(client, 682 684 ADM1026_REG_CONFIG3); 683 685 data->gpio_config[16] = (data->config3 >> 6) & 0x03; 684 686 ··· 693 695 } 694 696 695 697 data->last_config = jiffies; 696 - }; /* last_config */ 698 + }; /* last_config */ 697 699 698 700 dev_dbg(&client->dev, "Setting VID from GPIO11-15.\n"); 699 701 data->vid = (data->gpio >> 11) & 0x1f; ··· 708 710 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 709 711 int nr = sensor_attr->index; 710 712 struct adm1026_data *data = adm1026_update_device(dev); 711 - return sprintf(buf,"%d\n", INS_FROM_REG(nr, data->in[nr])); 713 + return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in[nr])); 712 714 } 713 715 static ssize_t show_in_min(struct device *dev, struct device_attribute *attr, 714 716 char *buf) 715 717 { 716 718 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 717 719 int nr = sensor_attr->index; 718 - struct adm1026_data *data = adm1026_update_device(dev); 719 - return sprintf(buf,"%d\n", INS_FROM_REG(nr, data->in_min[nr])); 720 + struct adm1026_data *data = adm1026_update_device(dev); 721 + return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_min[nr])); 720 722 } 721 723 static ssize_t set_in_min(struct device *dev, struct device_attribute *attr, 722 724 const char *buf, size_t count) ··· 731 733 data->in_min[nr] = INS_TO_REG(nr, val); 732 734 adm1026_write_value(client, ADM1026_REG_IN_MIN[nr], data->in_min[nr]); 733 735 mutex_unlock(&data->update_lock); 734 - return count; 736 + return count; 735 737 } 736 738 static ssize_t show_in_max(struct device *dev, struct device_attribute *attr, 737 739 char *buf) ··· 739 741 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 740 742 int nr = sensor_attr->index; 741 743 struct adm1026_data *data = adm1026_update_device(dev); 742 - return sprintf(buf,"%d\n", INS_FROM_REG(nr, data->in_max[nr])); 744 + return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_max[nr])); 743 745 } 744 746 static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, 745 747 const char *buf, size_t count) ··· 786 788 static ssize_t show_in16(struct device *dev, struct device_attribute *attr, char *buf) 787 789 { 788 790 struct adm1026_data *data = adm1026_update_device(dev); 789 - return sprintf(buf,"%d\n", INS_FROM_REG(16, data->in[16]) - 791 + return sprintf(buf, "%d\n", INS_FROM_REG(16, data->in[16]) - 790 792 NEG12_OFFSET); 791 793 } 792 794 static ssize_t show_in16_min(struct device *dev, struct device_attribute *attr, char *buf) 793 795 { 794 - struct adm1026_data *data = adm1026_update_device(dev); 795 - return sprintf(buf,"%d\n", INS_FROM_REG(16, data->in_min[16]) 796 + struct adm1026_data *data = adm1026_update_device(dev); 797 + return sprintf(buf, "%d\n", INS_FROM_REG(16, data->in_min[16]) 796 798 - NEG12_OFFSET); 797 799 } 798 800 static ssize_t set_in16_min(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) ··· 805 807 data->in_min[16] = INS_TO_REG(16, val + NEG12_OFFSET); 806 808 adm1026_write_value(client, ADM1026_REG_IN_MIN[16], data->in_min[16]); 807 809 mutex_unlock(&data->update_lock); 808 - return count; 810 + return count; 809 811 } 810 812 static ssize_t show_in16_max(struct device *dev, struct device_attribute *attr, char *buf) 811 813 { 812 814 struct adm1026_data *data = adm1026_update_device(dev); 813 - return sprintf(buf,"%d\n", INS_FROM_REG(16, data->in_max[16]) 815 + return sprintf(buf, "%d\n", INS_FROM_REG(16, data->in_max[16]) 814 816 - NEG12_OFFSET); 815 817 } 816 818 static ssize_t set_in16_max(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) ··· 841 843 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 842 844 int nr = sensor_attr->index; 843 845 struct adm1026_data *data = adm1026_update_device(dev); 844 - return sprintf(buf,"%d\n", FAN_FROM_REG(data->fan[nr], 846 + return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr], 845 847 data->fan_div[nr])); 846 848 } 847 849 static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr, ··· 850 852 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 851 853 int nr = sensor_attr->index; 852 854 struct adm1026_data *data = adm1026_update_device(dev); 853 - return sprintf(buf,"%d\n", FAN_FROM_REG(data->fan_min[nr], 855 + return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr], 854 856 data->fan_div[nr])); 855 857 } 856 858 static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, ··· 870 872 return count; 871 873 } 872 874 873 - #define fan_offset(offset) \ 874 - static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan, NULL, \ 875 - offset - 1); \ 876 - static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \ 875 + #define fan_offset(offset) \ 876 + static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan, NULL, \ 877 + offset - 1); \ 878 + static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \ 877 879 show_fan_min, set_fan_min, offset - 1); 878 880 879 881 fan_offset(1); ··· 890 892 { 891 893 struct i2c_client *client = to_i2c_client(dev); 892 894 struct adm1026_data *data = i2c_get_clientdata(client); 893 - int new_min; 894 - int new_div = data->fan_div[fan]; 895 + int new_min; 896 + int new_div = data->fan_div[fan]; 895 897 896 898 /* 0 and 0xff are special. Don't adjust them */ 897 899 if (data->fan_min[fan] == 0 || data->fan_min[fan] == 0xff) { ··· 911 913 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 912 914 int nr = sensor_attr->index; 913 915 struct adm1026_data *data = adm1026_update_device(dev); 914 - return sprintf(buf,"%d\n", data->fan_div[nr]); 916 + return sprintf(buf, "%d\n", data->fan_div[nr]); 915 917 } 916 918 static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 917 919 const char *buf, size_t count) ··· 920 922 int nr = sensor_attr->index; 921 923 struct i2c_client *client = to_i2c_client(dev); 922 924 struct adm1026_data *data = i2c_get_clientdata(client); 923 - int val,orig_div,new_div,shift; 925 + int val, orig_div, new_div, shift; 924 926 925 927 val = simple_strtol(buf, NULL, 10); 926 - new_div = DIV_TO_REG(val); 928 + new_div = DIV_TO_REG(val); 927 929 if (new_div == 0) { 928 930 return -EINVAL; 929 931 } ··· 944 946 } 945 947 946 948 if (data->fan_div[nr] != orig_div) { 947 - fixup_fan_min(dev,nr,orig_div); 949 + fixup_fan_min(dev, nr, orig_div); 948 950 } 949 951 mutex_unlock(&data->update_lock); 950 952 return count; 951 953 } 952 954 953 - #define fan_offset_div(offset) \ 954 - static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \ 955 + #define fan_offset_div(offset) \ 956 + static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \ 955 957 show_fan_div, set_fan_div, offset - 1); 956 958 957 959 fan_offset_div(1); ··· 970 972 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 971 973 int nr = sensor_attr->index; 972 974 struct adm1026_data *data = adm1026_update_device(dev); 973 - return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp[nr])); 975 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[nr])); 974 976 } 975 977 static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr, 976 978 char *buf) ··· 978 980 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 979 981 int nr = sensor_attr->index; 980 982 struct adm1026_data *data = adm1026_update_device(dev); 981 - return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_min[nr])); 983 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr])); 982 984 } 983 985 static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr, 984 986 const char *buf, size_t count) ··· 1002 1004 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1003 1005 int nr = sensor_attr->index; 1004 1006 struct adm1026_data *data = adm1026_update_device(dev); 1005 - return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_max[nr])); 1007 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr])); 1006 1008 } 1007 1009 static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, 1008 1010 const char *buf, size_t count) ··· 1022 1024 } 1023 1025 1024 1026 #define temp_reg(offset) \ 1025 - static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp, \ 1027 + static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp, \ 1026 1028 NULL, offset - 1); \ 1027 1029 static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \ 1028 1030 show_temp_min, set_temp_min, offset - 1); \ ··· 1040 1042 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1041 1043 int nr = sensor_attr->index; 1042 1044 struct adm1026_data *data = adm1026_update_device(dev); 1043 - return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_offset[nr])); 1045 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_offset[nr])); 1044 1046 } 1045 1047 static ssize_t set_temp_offset(struct device *dev, 1046 1048 struct device_attribute *attr, const char *buf, ··· 1074 1076 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1075 1077 int nr = sensor_attr->index; 1076 1078 struct adm1026_data *data = adm1026_update_device(dev); 1077 - return sprintf(buf,"%d\n", TEMP_FROM_REG( 1079 + return sprintf(buf, "%d\n", TEMP_FROM_REG( 1078 1080 ADM1026_FAN_ACTIVATION_TEMP_HYST + data->temp_tmin[nr])); 1079 1081 } 1080 1082 static ssize_t show_temp_auto_point2_temp(struct device *dev, ··· 1083 1085 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1084 1086 int nr = sensor_attr->index; 1085 1087 struct adm1026_data *data = adm1026_update_device(dev); 1086 - return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_tmin[nr] + 1088 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_tmin[nr] + 1087 1089 ADM1026_FAN_CONTROL_TEMP_RANGE)); 1088 1090 } 1089 1091 static ssize_t show_temp_auto_point1_temp(struct device *dev, ··· 1092 1094 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1093 1095 int nr = sensor_attr->index; 1094 1096 struct adm1026_data *data = adm1026_update_device(dev); 1095 - return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_tmin[nr])); 1097 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_tmin[nr])); 1096 1098 } 1097 1099 static ssize_t set_temp_auto_point1_temp(struct device *dev, 1098 1100 struct device_attribute *attr, const char *buf, size_t count) ··· 1111 1113 return count; 1112 1114 } 1113 1115 1114 - #define temp_auto_point(offset) \ 1115 - static SENSOR_DEVICE_ATTR(temp##offset##_auto_point1_temp, S_IRUGO | S_IWUSR, \ 1116 - show_temp_auto_point1_temp, set_temp_auto_point1_temp, \ 1117 - offset - 1); \ 1118 - static SENSOR_DEVICE_ATTR(temp##offset##_auto_point1_temp_hyst, S_IRUGO, \ 1119 - show_temp_auto_point1_temp_hyst, NULL, offset - 1); \ 1120 - static SENSOR_DEVICE_ATTR(temp##offset##_auto_point2_temp, S_IRUGO, \ 1116 + #define temp_auto_point(offset) \ 1117 + static SENSOR_DEVICE_ATTR(temp##offset##_auto_point1_temp, \ 1118 + S_IRUGO | S_IWUSR, show_temp_auto_point1_temp, \ 1119 + set_temp_auto_point1_temp, offset - 1); \ 1120 + static SENSOR_DEVICE_ATTR(temp##offset##_auto_point1_temp_hyst, S_IRUGO,\ 1121 + show_temp_auto_point1_temp_hyst, NULL, offset - 1); \ 1122 + static SENSOR_DEVICE_ATTR(temp##offset##_auto_point2_temp, S_IRUGO, \ 1121 1123 show_temp_auto_point2_temp, NULL, offset - 1); 1122 1124 1123 1125 temp_auto_point(1); ··· 1128 1130 struct device_attribute *attr, char *buf) 1129 1131 { 1130 1132 struct adm1026_data *data = adm1026_update_device(dev); 1131 - return sprintf(buf,"%d\n", (data->config1 & CFG1_THERM_HOT) >> 4); 1133 + return sprintf(buf, "%d\n", (data->config1 & CFG1_THERM_HOT) >> 4); 1132 1134 } 1133 1135 static ssize_t set_temp_crit_enable(struct device *dev, 1134 1136 struct device_attribute *attr, const char *buf, size_t count) ··· 1140 1142 if ((val == 1) || (val==0)) { 1141 1143 mutex_lock(&data->update_lock); 1142 1144 data->config1 = (data->config1 & ~CFG1_THERM_HOT) | (val << 4); 1143 - adm1026_write_value(client, ADM1026_REG_CONFIG1, 1145 + adm1026_write_value(client, ADM1026_REG_CONFIG1, 1144 1146 data->config1); 1145 1147 mutex_unlock(&data->update_lock); 1146 1148 } ··· 1161 1163 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1162 1164 int nr = sensor_attr->index; 1163 1165 struct adm1026_data *data = adm1026_update_device(dev); 1164 - return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_crit[nr])); 1166 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit[nr])); 1165 1167 } 1166 1168 static ssize_t set_temp_crit(struct device *dev, struct device_attribute *attr, 1167 1169 const char *buf, size_t count) ··· 1191 1193 static ssize_t show_analog_out_reg(struct device *dev, struct device_attribute *attr, char *buf) 1192 1194 { 1193 1195 struct adm1026_data *data = adm1026_update_device(dev); 1194 - return sprintf(buf,"%d\n", DAC_FROM_REG(data->analog_out)); 1196 + return sprintf(buf, "%d\n", DAC_FROM_REG(data->analog_out)); 1195 1197 } 1196 1198 static ssize_t set_analog_out_reg(struct device *dev, struct device_attribute *attr, const char *buf, 1197 1199 size_t count) ··· 1207 1209 return count; 1208 1210 } 1209 1211 1210 - static DEVICE_ATTR(analog_out, S_IRUGO | S_IWUSR, show_analog_out_reg, 1212 + static DEVICE_ATTR(analog_out, S_IRUGO | S_IWUSR, show_analog_out_reg, 1211 1213 set_analog_out_reg); 1212 1214 1213 1215 static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr, char *buf) 1214 1216 { 1215 1217 struct adm1026_data *data = adm1026_update_device(dev); 1216 - return sprintf(buf,"%d\n", vid_from_reg(data->vid & 0x3f, data->vrm)); 1218 + return sprintf(buf, "%d\n", vid_from_reg(data->vid & 0x3f, data->vrm)); 1217 1219 } 1218 1220 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL); 1219 1221 1220 1222 static ssize_t show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf) 1221 1223 { 1222 1224 struct adm1026_data *data = dev_get_drvdata(dev); 1223 - return sprintf(buf,"%d\n", data->vrm); 1225 + return sprintf(buf, "%d\n", data->vrm); 1224 1226 } 1225 1227 static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, 1226 1228 size_t count) 1227 1229 { 1228 - struct i2c_client *client = to_i2c_client(dev); 1229 - struct adm1026_data *data = i2c_get_clientdata(client); 1230 + struct adm1026_data *data = dev_get_drvdata(dev); 1230 1231 1231 1232 data->vrm = simple_strtol(buf, NULL, 10); 1232 1233 return count; ··· 1236 1239 static ssize_t show_alarms_reg(struct device *dev, struct device_attribute *attr, char *buf) 1237 1240 { 1238 1241 struct adm1026_data *data = adm1026_update_device(dev); 1239 - return sprintf(buf, "%ld\n", (long) (data->alarms)); 1242 + return sprintf(buf, "%ld\n", data->alarms); 1240 1243 } 1241 1244 1242 1245 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL); 1243 1246 1247 + static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, 1248 + char *buf) 1249 + { 1250 + struct adm1026_data *data = adm1026_update_device(dev); 1251 + int bitnr = to_sensor_dev_attr(attr)->index; 1252 + return sprintf(buf, "%ld\n", (data->alarms >> bitnr) & 1); 1253 + } 1254 + 1255 + static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 0); 1256 + static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 1); 1257 + static SENSOR_DEVICE_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 1); 1258 + static SENSOR_DEVICE_ATTR(in11_alarm, S_IRUGO, show_alarm, NULL, 2); 1259 + static SENSOR_DEVICE_ATTR(in12_alarm, S_IRUGO, show_alarm, NULL, 3); 1260 + static SENSOR_DEVICE_ATTR(in13_alarm, S_IRUGO, show_alarm, NULL, 4); 1261 + static SENSOR_DEVICE_ATTR(in14_alarm, S_IRUGO, show_alarm, NULL, 5); 1262 + static SENSOR_DEVICE_ATTR(in15_alarm, S_IRUGO, show_alarm, NULL, 6); 1263 + static SENSOR_DEVICE_ATTR(in16_alarm, S_IRUGO, show_alarm, NULL, 7); 1264 + static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 8); 1265 + static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 9); 1266 + static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 10); 1267 + static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 11); 1268 + static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 12); 1269 + static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 13); 1270 + static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 14); 1271 + static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 15); 1272 + static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 16); 1273 + static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 17); 1274 + static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 18); 1275 + static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 19); 1276 + static SENSOR_DEVICE_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 20); 1277 + static SENSOR_DEVICE_ATTR(fan6_alarm, S_IRUGO, show_alarm, NULL, 21); 1278 + static SENSOR_DEVICE_ATTR(fan7_alarm, S_IRUGO, show_alarm, NULL, 22); 1279 + static SENSOR_DEVICE_ATTR(fan8_alarm, S_IRUGO, show_alarm, NULL, 23); 1280 + static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 24); 1281 + static SENSOR_DEVICE_ATTR(in10_alarm, S_IRUGO, show_alarm, NULL, 25); 1282 + static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 26); 1283 + 1244 1284 static ssize_t show_alarm_mask(struct device *dev, struct device_attribute *attr, char *buf) 1245 1285 { 1246 1286 struct adm1026_data *data = adm1026_update_device(dev); 1247 - return sprintf(buf,"%ld\n", data->alarm_mask); 1287 + return sprintf(buf, "%ld\n", data->alarm_mask); 1248 1288 } 1249 1289 static ssize_t set_alarm_mask(struct device *dev, struct device_attribute *attr, const char *buf, 1250 1290 size_t count) ··· 1317 1283 static ssize_t show_gpio(struct device *dev, struct device_attribute *attr, char *buf) 1318 1284 { 1319 1285 struct adm1026_data *data = adm1026_update_device(dev); 1320 - return sprintf(buf,"%ld\n", data->gpio); 1286 + return sprintf(buf, "%ld\n", data->gpio); 1321 1287 } 1322 1288 static ssize_t set_gpio(struct device *dev, struct device_attribute *attr, const char *buf, 1323 1289 size_t count) ··· 1325 1291 struct i2c_client *client = to_i2c_client(dev); 1326 1292 struct adm1026_data *data = i2c_get_clientdata(client); 1327 1293 int val = simple_strtol(buf, NULL, 10); 1328 - long gpio; 1294 + long gpio; 1329 1295 1330 1296 mutex_lock(&data->update_lock); 1331 1297 data->gpio = val & 0x1ffff; 1332 1298 gpio = data->gpio; 1333 - adm1026_write_value(client, ADM1026_REG_GPIO_STATUS_0_7,gpio & 0xff); 1299 + adm1026_write_value(client, ADM1026_REG_GPIO_STATUS_0_7, gpio & 0xff); 1334 1300 gpio >>= 8; 1335 - adm1026_write_value(client, ADM1026_REG_GPIO_STATUS_8_15,gpio & 0xff); 1301 + adm1026_write_value(client, ADM1026_REG_GPIO_STATUS_8_15, gpio & 0xff); 1336 1302 gpio = ((gpio >> 1) & 0x80) | (data->alarms >> 24 & 0x7f); 1337 - adm1026_write_value(client, ADM1026_REG_STATUS4,gpio & 0xff); 1303 + adm1026_write_value(client, ADM1026_REG_STATUS4, gpio & 0xff); 1338 1304 mutex_unlock(&data->update_lock); 1339 1305 return count; 1340 1306 } ··· 1345 1311 static ssize_t show_gpio_mask(struct device *dev, struct device_attribute *attr, char *buf) 1346 1312 { 1347 1313 struct adm1026_data *data = adm1026_update_device(dev); 1348 - return sprintf(buf,"%ld\n", data->gpio_mask); 1314 + return sprintf(buf, "%ld\n", data->gpio_mask); 1349 1315 } 1350 1316 static ssize_t set_gpio_mask(struct device *dev, struct device_attribute *attr, const char *buf, 1351 1317 size_t count) ··· 1353 1319 struct i2c_client *client = to_i2c_client(dev); 1354 1320 struct adm1026_data *data = i2c_get_clientdata(client); 1355 1321 int val = simple_strtol(buf, NULL, 10); 1356 - long mask; 1322 + long mask; 1357 1323 1358 1324 mutex_lock(&data->update_lock); 1359 1325 data->gpio_mask = val & 0x1ffff; 1360 1326 mask = data->gpio_mask; 1361 - adm1026_write_value(client, ADM1026_REG_GPIO_MASK_0_7,mask & 0xff); 1327 + adm1026_write_value(client, ADM1026_REG_GPIO_MASK_0_7, mask & 0xff); 1362 1328 mask >>= 8; 1363 - adm1026_write_value(client, ADM1026_REG_GPIO_MASK_8_15,mask & 0xff); 1329 + adm1026_write_value(client, ADM1026_REG_GPIO_MASK_8_15, mask & 0xff); 1364 1330 mask = ((mask >> 1) & 0x80) | (data->alarm_mask >> 24 & 0x7f); 1365 - adm1026_write_value(client, ADM1026_REG_MASK1,mask & 0xff); 1331 + adm1026_write_value(client, ADM1026_REG_MASK1, mask & 0xff); 1366 1332 mutex_unlock(&data->update_lock); 1367 1333 return count; 1368 1334 } ··· 1372 1338 static ssize_t show_pwm_reg(struct device *dev, struct device_attribute *attr, char *buf) 1373 1339 { 1374 1340 struct adm1026_data *data = adm1026_update_device(dev); 1375 - return sprintf(buf,"%d\n", PWM_FROM_REG(data->pwm1.pwm)); 1341 + return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm1.pwm)); 1376 1342 } 1377 1343 static ssize_t set_pwm_reg(struct device *dev, struct device_attribute *attr, const char *buf, 1378 1344 size_t count) ··· 1393 1359 static ssize_t show_auto_pwm_min(struct device *dev, struct device_attribute *attr, char *buf) 1394 1360 { 1395 1361 struct adm1026_data *data = adm1026_update_device(dev); 1396 - return sprintf(buf,"%d\n", data->pwm1.auto_pwm_min); 1362 + return sprintf(buf, "%d\n", data->pwm1.auto_pwm_min); 1397 1363 } 1398 1364 static ssize_t set_auto_pwm_min(struct device *dev, struct device_attribute *attr, const char *buf, 1399 1365 size_t count) ··· 1403 1369 int val = simple_strtol(buf, NULL, 10); 1404 1370 1405 1371 mutex_lock(&data->update_lock); 1406 - data->pwm1.auto_pwm_min = SENSORS_LIMIT(val,0,255); 1372 + data->pwm1.auto_pwm_min = SENSORS_LIMIT(val, 0, 255); 1407 1373 if (data->pwm1.enable == 2) { /* apply immediately */ 1408 1374 data->pwm1.pwm = PWM_TO_REG((data->pwm1.pwm & 0x0f) | 1409 - PWM_MIN_TO_REG(data->pwm1.auto_pwm_min)); 1375 + PWM_MIN_TO_REG(data->pwm1.auto_pwm_min)); 1410 1376 adm1026_write_value(client, ADM1026_REG_PWM, data->pwm1.pwm); 1411 1377 } 1412 1378 mutex_unlock(&data->update_lock); ··· 1414 1380 } 1415 1381 static ssize_t show_auto_pwm_max(struct device *dev, struct device_attribute *attr, char *buf) 1416 1382 { 1417 - return sprintf(buf,"%d\n", ADM1026_PWM_MAX); 1383 + return sprintf(buf, "%d\n", ADM1026_PWM_MAX); 1418 1384 } 1419 1385 static ssize_t show_pwm_enable(struct device *dev, struct device_attribute *attr, char *buf) 1420 1386 { 1421 1387 struct adm1026_data *data = adm1026_update_device(dev); 1422 - return sprintf(buf,"%d\n", data->pwm1.enable); 1388 + return sprintf(buf, "%d\n", data->pwm1.enable); 1423 1389 } 1424 1390 static ssize_t set_pwm_enable(struct device *dev, struct device_attribute *attr, const char *buf, 1425 1391 size_t count) ··· 1427 1393 struct i2c_client *client = to_i2c_client(dev); 1428 1394 struct adm1026_data *data = i2c_get_clientdata(client); 1429 1395 int val = simple_strtol(buf, NULL, 10); 1430 - int old_enable; 1396 + int old_enable; 1431 1397 1432 1398 if ((val >= 0) && (val < 3)) { 1433 1399 mutex_lock(&data->update_lock); ··· 1437 1403 | ((val == 2) ? CFG1_PWM_AFC : 0); 1438 1404 adm1026_write_value(client, ADM1026_REG_CONFIG1, 1439 1405 data->config1); 1440 - if (val == 2) { /* apply pwm1_auto_pwm_min to pwm1 */ 1406 + if (val == 2) { /* apply pwm1_auto_pwm_min to pwm1 */ 1441 1407 data->pwm1.pwm = PWM_TO_REG((data->pwm1.pwm & 0x0f) | 1442 - PWM_MIN_TO_REG(data->pwm1.auto_pwm_min)); 1443 - adm1026_write_value(client, ADM1026_REG_PWM, 1408 + PWM_MIN_TO_REG(data->pwm1.auto_pwm_min)); 1409 + adm1026_write_value(client, ADM1026_REG_PWM, 1444 1410 data->pwm1.pwm); 1445 1411 } else if (!((old_enable == 1) && (val == 1))) { 1446 1412 /* set pwm to safe value */ 1447 1413 data->pwm1.pwm = 255; 1448 - adm1026_write_value(client, ADM1026_REG_PWM, 1414 + adm1026_write_value(client, ADM1026_REG_PWM, 1449 1415 data->pwm1.pwm); 1450 1416 } 1451 1417 mutex_unlock(&data->update_lock); ··· 1454 1420 } 1455 1421 1456 1422 /* enable PWM fan control */ 1457 - static DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, show_pwm_reg, set_pwm_reg); 1458 - static DEVICE_ATTR(pwm2, S_IRUGO | S_IWUSR, show_pwm_reg, set_pwm_reg); 1459 - static DEVICE_ATTR(pwm3, S_IRUGO | S_IWUSR, show_pwm_reg, set_pwm_reg); 1460 - static DEVICE_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, show_pwm_enable, 1423 + static DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, show_pwm_reg, set_pwm_reg); 1424 + static DEVICE_ATTR(pwm2, S_IRUGO | S_IWUSR, show_pwm_reg, set_pwm_reg); 1425 + static DEVICE_ATTR(pwm3, S_IRUGO | S_IWUSR, show_pwm_reg, set_pwm_reg); 1426 + static DEVICE_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, show_pwm_enable, 1461 1427 set_pwm_enable); 1462 - static DEVICE_ATTR(pwm2_enable, S_IRUGO | S_IWUSR, show_pwm_enable, 1428 + static DEVICE_ATTR(pwm2_enable, S_IRUGO | S_IWUSR, show_pwm_enable, 1463 1429 set_pwm_enable); 1464 - static DEVICE_ATTR(pwm3_enable, S_IRUGO | S_IWUSR, show_pwm_enable, 1430 + static DEVICE_ATTR(pwm3_enable, S_IRUGO | S_IWUSR, show_pwm_enable, 1465 1431 set_pwm_enable); 1466 - static DEVICE_ATTR(temp1_auto_point1_pwm, S_IRUGO | S_IWUSR, 1432 + static DEVICE_ATTR(temp1_auto_point1_pwm, S_IRUGO | S_IWUSR, 1467 1433 show_auto_pwm_min, set_auto_pwm_min); 1468 - static DEVICE_ATTR(temp2_auto_point1_pwm, S_IRUGO | S_IWUSR, 1434 + static DEVICE_ATTR(temp2_auto_point1_pwm, S_IRUGO | S_IWUSR, 1469 1435 show_auto_pwm_min, set_auto_pwm_min); 1470 - static DEVICE_ATTR(temp3_auto_point1_pwm, S_IRUGO | S_IWUSR, 1436 + static DEVICE_ATTR(temp3_auto_point1_pwm, S_IRUGO | S_IWUSR, 1471 1437 show_auto_pwm_min, set_auto_pwm_min); 1472 1438 1473 1439 static DEVICE_ATTR(temp1_auto_point2_pwm, S_IRUGO, show_auto_pwm_max, NULL); ··· 1478 1444 &sensor_dev_attr_in0_input.dev_attr.attr, 1479 1445 &sensor_dev_attr_in0_max.dev_attr.attr, 1480 1446 &sensor_dev_attr_in0_min.dev_attr.attr, 1447 + &sensor_dev_attr_in0_alarm.dev_attr.attr, 1481 1448 &sensor_dev_attr_in1_input.dev_attr.attr, 1482 1449 &sensor_dev_attr_in1_max.dev_attr.attr, 1483 1450 &sensor_dev_attr_in1_min.dev_attr.attr, 1451 + &sensor_dev_attr_in1_alarm.dev_attr.attr, 1484 1452 &sensor_dev_attr_in2_input.dev_attr.attr, 1485 1453 &sensor_dev_attr_in2_max.dev_attr.attr, 1486 1454 &sensor_dev_attr_in2_min.dev_attr.attr, 1455 + &sensor_dev_attr_in2_alarm.dev_attr.attr, 1487 1456 &sensor_dev_attr_in3_input.dev_attr.attr, 1488 1457 &sensor_dev_attr_in3_max.dev_attr.attr, 1489 1458 &sensor_dev_attr_in3_min.dev_attr.attr, 1459 + &sensor_dev_attr_in3_alarm.dev_attr.attr, 1490 1460 &sensor_dev_attr_in4_input.dev_attr.attr, 1491 1461 &sensor_dev_attr_in4_max.dev_attr.attr, 1492 1462 &sensor_dev_attr_in4_min.dev_attr.attr, 1463 + &sensor_dev_attr_in4_alarm.dev_attr.attr, 1493 1464 &sensor_dev_attr_in5_input.dev_attr.attr, 1494 1465 &sensor_dev_attr_in5_max.dev_attr.attr, 1495 1466 &sensor_dev_attr_in5_min.dev_attr.attr, 1467 + &sensor_dev_attr_in5_alarm.dev_attr.attr, 1496 1468 &sensor_dev_attr_in6_input.dev_attr.attr, 1497 1469 &sensor_dev_attr_in6_max.dev_attr.attr, 1498 1470 &sensor_dev_attr_in6_min.dev_attr.attr, 1471 + &sensor_dev_attr_in6_alarm.dev_attr.attr, 1499 1472 &sensor_dev_attr_in7_input.dev_attr.attr, 1500 1473 &sensor_dev_attr_in7_max.dev_attr.attr, 1501 1474 &sensor_dev_attr_in7_min.dev_attr.attr, 1502 - &sensor_dev_attr_in8_input.dev_attr.attr, 1503 - &sensor_dev_attr_in8_max.dev_attr.attr, 1504 - &sensor_dev_attr_in8_min.dev_attr.attr, 1505 - &sensor_dev_attr_in9_input.dev_attr.attr, 1506 - &sensor_dev_attr_in9_max.dev_attr.attr, 1507 - &sensor_dev_attr_in9_min.dev_attr.attr, 1475 + &sensor_dev_attr_in7_alarm.dev_attr.attr, 1508 1476 &sensor_dev_attr_in10_input.dev_attr.attr, 1509 1477 &sensor_dev_attr_in10_max.dev_attr.attr, 1510 1478 &sensor_dev_attr_in10_min.dev_attr.attr, 1479 + &sensor_dev_attr_in10_alarm.dev_attr.attr, 1511 1480 &sensor_dev_attr_in11_input.dev_attr.attr, 1512 1481 &sensor_dev_attr_in11_max.dev_attr.attr, 1513 1482 &sensor_dev_attr_in11_min.dev_attr.attr, 1483 + &sensor_dev_attr_in11_alarm.dev_attr.attr, 1514 1484 &sensor_dev_attr_in12_input.dev_attr.attr, 1515 1485 &sensor_dev_attr_in12_max.dev_attr.attr, 1516 1486 &sensor_dev_attr_in12_min.dev_attr.attr, 1487 + &sensor_dev_attr_in12_alarm.dev_attr.attr, 1517 1488 &sensor_dev_attr_in13_input.dev_attr.attr, 1518 1489 &sensor_dev_attr_in13_max.dev_attr.attr, 1519 1490 &sensor_dev_attr_in13_min.dev_attr.attr, 1491 + &sensor_dev_attr_in13_alarm.dev_attr.attr, 1520 1492 &sensor_dev_attr_in14_input.dev_attr.attr, 1521 1493 &sensor_dev_attr_in14_max.dev_attr.attr, 1522 1494 &sensor_dev_attr_in14_min.dev_attr.attr, 1495 + &sensor_dev_attr_in14_alarm.dev_attr.attr, 1523 1496 &sensor_dev_attr_in15_input.dev_attr.attr, 1524 1497 &sensor_dev_attr_in15_max.dev_attr.attr, 1525 1498 &sensor_dev_attr_in15_min.dev_attr.attr, 1499 + &sensor_dev_attr_in15_alarm.dev_attr.attr, 1526 1500 &sensor_dev_attr_in16_input.dev_attr.attr, 1527 1501 &sensor_dev_attr_in16_max.dev_attr.attr, 1528 1502 &sensor_dev_attr_in16_min.dev_attr.attr, 1503 + &sensor_dev_attr_in16_alarm.dev_attr.attr, 1529 1504 &sensor_dev_attr_fan1_input.dev_attr.attr, 1530 1505 &sensor_dev_attr_fan1_div.dev_attr.attr, 1531 1506 &sensor_dev_attr_fan1_min.dev_attr.attr, 1507 + &sensor_dev_attr_fan1_alarm.dev_attr.attr, 1532 1508 &sensor_dev_attr_fan2_input.dev_attr.attr, 1533 1509 &sensor_dev_attr_fan2_div.dev_attr.attr, 1534 1510 &sensor_dev_attr_fan2_min.dev_attr.attr, 1511 + &sensor_dev_attr_fan2_alarm.dev_attr.attr, 1535 1512 &sensor_dev_attr_fan3_input.dev_attr.attr, 1536 1513 &sensor_dev_attr_fan3_div.dev_attr.attr, 1537 1514 &sensor_dev_attr_fan3_min.dev_attr.attr, 1515 + &sensor_dev_attr_fan3_alarm.dev_attr.attr, 1538 1516 &sensor_dev_attr_fan4_input.dev_attr.attr, 1539 1517 &sensor_dev_attr_fan4_div.dev_attr.attr, 1540 1518 &sensor_dev_attr_fan4_min.dev_attr.attr, 1519 + &sensor_dev_attr_fan4_alarm.dev_attr.attr, 1541 1520 &sensor_dev_attr_fan5_input.dev_attr.attr, 1542 1521 &sensor_dev_attr_fan5_div.dev_attr.attr, 1543 1522 &sensor_dev_attr_fan5_min.dev_attr.attr, 1523 + &sensor_dev_attr_fan5_alarm.dev_attr.attr, 1544 1524 &sensor_dev_attr_fan6_input.dev_attr.attr, 1545 1525 &sensor_dev_attr_fan6_div.dev_attr.attr, 1546 1526 &sensor_dev_attr_fan6_min.dev_attr.attr, 1527 + &sensor_dev_attr_fan6_alarm.dev_attr.attr, 1547 1528 &sensor_dev_attr_fan7_input.dev_attr.attr, 1548 1529 &sensor_dev_attr_fan7_div.dev_attr.attr, 1549 1530 &sensor_dev_attr_fan7_min.dev_attr.attr, 1531 + &sensor_dev_attr_fan7_alarm.dev_attr.attr, 1550 1532 &sensor_dev_attr_fan8_input.dev_attr.attr, 1551 1533 &sensor_dev_attr_fan8_div.dev_attr.attr, 1552 1534 &sensor_dev_attr_fan8_min.dev_attr.attr, 1535 + &sensor_dev_attr_fan8_alarm.dev_attr.attr, 1553 1536 &sensor_dev_attr_temp1_input.dev_attr.attr, 1554 1537 &sensor_dev_attr_temp1_max.dev_attr.attr, 1555 1538 &sensor_dev_attr_temp1_min.dev_attr.attr, 1539 + &sensor_dev_attr_temp1_alarm.dev_attr.attr, 1556 1540 &sensor_dev_attr_temp2_input.dev_attr.attr, 1557 1541 &sensor_dev_attr_temp2_max.dev_attr.attr, 1558 1542 &sensor_dev_attr_temp2_min.dev_attr.attr, 1559 - &sensor_dev_attr_temp3_input.dev_attr.attr, 1560 - &sensor_dev_attr_temp3_max.dev_attr.attr, 1561 - &sensor_dev_attr_temp3_min.dev_attr.attr, 1543 + &sensor_dev_attr_temp2_alarm.dev_attr.attr, 1562 1544 &sensor_dev_attr_temp1_offset.dev_attr.attr, 1563 1545 &sensor_dev_attr_temp2_offset.dev_attr.attr, 1564 - &sensor_dev_attr_temp3_offset.dev_attr.attr, 1565 1546 &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr, 1566 1547 &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr, 1567 - &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr, 1568 1548 &sensor_dev_attr_temp1_auto_point1_temp_hyst.dev_attr.attr, 1569 1549 &sensor_dev_attr_temp2_auto_point1_temp_hyst.dev_attr.attr, 1570 - &sensor_dev_attr_temp3_auto_point1_temp_hyst.dev_attr.attr, 1571 1550 &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr, 1572 1551 &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr, 1573 - &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr, 1574 1552 &sensor_dev_attr_temp1_crit.dev_attr.attr, 1575 1553 &sensor_dev_attr_temp2_crit.dev_attr.attr, 1576 - &sensor_dev_attr_temp3_crit.dev_attr.attr, 1577 1554 &dev_attr_temp1_crit_enable.attr, 1578 1555 &dev_attr_temp2_crit_enable.attr, 1579 - &dev_attr_temp3_crit_enable.attr, 1580 1556 &dev_attr_cpu0_vid.attr, 1581 1557 &dev_attr_vrm.attr, 1582 1558 &dev_attr_alarms.attr, ··· 1601 1557 &dev_attr_pwm3_enable.attr, 1602 1558 &dev_attr_temp1_auto_point1_pwm.attr, 1603 1559 &dev_attr_temp2_auto_point1_pwm.attr, 1604 - &dev_attr_temp3_auto_point1_pwm.attr, 1605 1560 &dev_attr_temp1_auto_point2_pwm.attr, 1606 1561 &dev_attr_temp2_auto_point2_pwm.attr, 1607 - &dev_attr_temp3_auto_point2_pwm.attr, 1608 1562 &dev_attr_analog_out.attr, 1609 1563 NULL 1610 1564 }; ··· 1611 1569 .attrs = adm1026_attributes, 1612 1570 }; 1613 1571 1572 + static struct attribute *adm1026_attributes_temp3[] = { 1573 + &sensor_dev_attr_temp3_input.dev_attr.attr, 1574 + &sensor_dev_attr_temp3_max.dev_attr.attr, 1575 + &sensor_dev_attr_temp3_min.dev_attr.attr, 1576 + &sensor_dev_attr_temp3_alarm.dev_attr.attr, 1577 + &sensor_dev_attr_temp3_offset.dev_attr.attr, 1578 + &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr, 1579 + &sensor_dev_attr_temp3_auto_point1_temp_hyst.dev_attr.attr, 1580 + &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr, 1581 + &sensor_dev_attr_temp3_crit.dev_attr.attr, 1582 + &dev_attr_temp3_crit_enable.attr, 1583 + &dev_attr_temp3_auto_point1_pwm.attr, 1584 + &dev_attr_temp3_auto_point2_pwm.attr, 1585 + }; 1586 + 1587 + static const struct attribute_group adm1026_group_temp3 = { 1588 + .attrs = adm1026_attributes_temp3, 1589 + }; 1590 + 1591 + static struct attribute *adm1026_attributes_in8_9[] = { 1592 + &sensor_dev_attr_in8_input.dev_attr.attr, 1593 + &sensor_dev_attr_in8_max.dev_attr.attr, 1594 + &sensor_dev_attr_in8_min.dev_attr.attr, 1595 + &sensor_dev_attr_in8_alarm.dev_attr.attr, 1596 + &sensor_dev_attr_in9_input.dev_attr.attr, 1597 + &sensor_dev_attr_in9_max.dev_attr.attr, 1598 + &sensor_dev_attr_in9_min.dev_attr.attr, 1599 + &sensor_dev_attr_in9_alarm.dev_attr.attr, 1600 + }; 1601 + 1602 + static const struct attribute_group adm1026_group_in8_9 = { 1603 + .attrs = adm1026_attributes_in8_9, 1604 + }; 1605 + 1614 1606 static int adm1026_detect(struct i2c_adapter *adapter, int address, 1615 1607 int kind) 1616 1608 { 1617 1609 int company, verstep; 1618 - struct i2c_client *new_client; 1610 + struct i2c_client *client; 1619 1611 struct adm1026_data *data; 1620 1612 int err = 0; 1621 1613 const char *type_name = ""; ··· 1668 1592 goto exit; 1669 1593 } 1670 1594 1671 - new_client = &data->client; 1672 - i2c_set_clientdata(new_client, data); 1673 - new_client->addr = address; 1674 - new_client->adapter = adapter; 1675 - new_client->driver = &adm1026_driver; 1676 - new_client->flags = 0; 1595 + client = &data->client; 1596 + i2c_set_clientdata(client, data); 1597 + client->addr = address; 1598 + client->adapter = adapter; 1599 + client->driver = &adm1026_driver; 1677 1600 1678 1601 /* Now, we do the remaining detection. */ 1679 1602 1680 - company = adm1026_read_value(new_client, ADM1026_REG_COMPANY); 1681 - verstep = adm1026_read_value(new_client, ADM1026_REG_VERSTEP); 1603 + company = adm1026_read_value(client, ADM1026_REG_COMPANY); 1604 + verstep = adm1026_read_value(client, ADM1026_REG_VERSTEP); 1682 1605 1683 - dev_dbg(&new_client->dev, "Detecting device at %d,0x%02x with" 1606 + dev_dbg(&client->dev, "Detecting device at %d,0x%02x with" 1684 1607 " COMPANY: 0x%02x and VERSTEP: 0x%02x\n", 1685 - i2c_adapter_id(new_client->adapter), new_client->addr, 1608 + i2c_adapter_id(client->adapter), client->addr, 1686 1609 company, verstep); 1687 1610 1688 1611 /* If auto-detecting, Determine the chip type. */ 1689 1612 if (kind <= 0) { 1690 - dev_dbg(&new_client->dev, "Autodetecting device at %d,0x%02x " 1613 + dev_dbg(&client->dev, "Autodetecting device at %d,0x%02x " 1691 1614 "...\n", i2c_adapter_id(adapter), address); 1692 1615 if (company == ADM1026_COMPANY_ANALOG_DEV 1693 1616 && verstep == ADM1026_VERSTEP_ADM1026) { ··· 1702 1627 verstep); 1703 1628 kind = any_chip; 1704 1629 } else { 1705 - dev_dbg(&new_client->dev, ": Autodetection " 1630 + dev_dbg(&client->dev, ": Autodetection " 1706 1631 "failed\n"); 1707 1632 /* Not an ADM1026 ... */ 1708 - if (kind == 0) { /* User used force=x,y */ 1633 + if (kind == 0) { /* User used force=x,y */ 1709 1634 dev_err(&adapter->dev, "Generic ADM1026 not " 1710 1635 "found at %d,0x%02x. Try " 1711 1636 "force_adm1026.\n", 1712 1637 i2c_adapter_id(adapter), address); 1713 1638 } 1714 - err = 0; 1715 1639 goto exitfree; 1716 1640 } 1717 1641 } ··· 1729 1655 err = -EFAULT; 1730 1656 goto exitfree; 1731 1657 } 1732 - strlcpy(new_client->name, type_name, I2C_NAME_SIZE); 1658 + strlcpy(client->name, type_name, I2C_NAME_SIZE); 1733 1659 1734 1660 /* Fill in the remaining client fields */ 1735 - data->type = kind; 1736 - data->valid = 0; 1737 1661 mutex_init(&data->update_lock); 1738 1662 1739 1663 /* Tell the I2C layer a new client has arrived */ 1740 - if ((err = i2c_attach_client(new_client))) 1664 + if ((err = i2c_attach_client(client))) 1741 1665 goto exitfree; 1742 1666 1743 1667 /* Set the VRM version */ 1744 1668 data->vrm = vid_which_vrm(); 1745 1669 1746 1670 /* Initialize the ADM1026 chip */ 1747 - adm1026_init_client(new_client); 1671 + adm1026_init_client(client); 1748 1672 1749 1673 /* Register sysfs hooks */ 1750 - if ((err = sysfs_create_group(&new_client->dev.kobj, &adm1026_group))) 1674 + if ((err = sysfs_create_group(&client->dev.kobj, &adm1026_group))) 1751 1675 goto exitdetach; 1676 + if (data->config1 & CFG1_AIN8_9) 1677 + err = sysfs_create_group(&client->dev.kobj, 1678 + &adm1026_group_in8_9); 1679 + else 1680 + err = sysfs_create_group(&client->dev.kobj, 1681 + &adm1026_group_temp3); 1682 + if (err) 1683 + goto exitremove; 1752 1684 1753 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 1685 + data->hwmon_dev = hwmon_device_register(&client->dev); 1754 1686 if (IS_ERR(data->hwmon_dev)) { 1755 1687 err = PTR_ERR(data->hwmon_dev); 1756 1688 goto exitremove; ··· 1766 1686 1767 1687 /* Error out and cleanup code */ 1768 1688 exitremove: 1769 - sysfs_remove_group(&new_client->dev.kobj, &adm1026_group); 1689 + sysfs_remove_group(&client->dev.kobj, &adm1026_group); 1690 + if (data->config1 & CFG1_AIN8_9) 1691 + sysfs_remove_group(&client->dev.kobj, &adm1026_group_in8_9); 1692 + else 1693 + sysfs_remove_group(&client->dev.kobj, &adm1026_group_temp3); 1770 1694 exitdetach: 1771 - i2c_detach_client(new_client); 1695 + i2c_detach_client(client); 1772 1696 exitfree: 1773 1697 kfree(data); 1774 1698 exit: ··· 1784 1700 struct adm1026_data *data = i2c_get_clientdata(client); 1785 1701 hwmon_device_unregister(data->hwmon_dev); 1786 1702 sysfs_remove_group(&client->dev.kobj, &adm1026_group); 1703 + if (data->config1 & CFG1_AIN8_9) 1704 + sysfs_remove_group(&client->dev.kobj, &adm1026_group_in8_9); 1705 + else 1706 + sysfs_remove_group(&client->dev.kobj, &adm1026_group_temp3); 1787 1707 i2c_detach_client(client); 1788 1708 kfree(data); 1789 1709 return 0; ··· 1798 1710 return i2c_add_driver(&adm1026_driver); 1799 1711 } 1800 1712 1801 - static void __exit sm_adm1026_exit(void) 1713 + static void __exit sm_adm1026_exit(void) 1802 1714 { 1803 1715 i2c_del_driver(&adm1026_driver); 1804 1716 } 1805 1717 1806 1718 MODULE_LICENSE("GPL"); 1807 1719 MODULE_AUTHOR("Philip Pokorny <ppokorny@penguincomputing.com>, " 1808 - "Justin Thiessen <jthiessen@penguincomputing.com>"); 1720 + "Justin Thiessen <jthiessen@penguincomputing.com>"); 1809 1721 MODULE_DESCRIPTION("ADM1026 driver"); 1810 1722 1811 1723 module_init(sm_adm1026_init);
+242 -259
drivers/hwmon/adm1031.c
··· 5 5 Supports adm1030 / adm1031 6 6 Copyright (C) 2004 Alexandre d'Alton <alex@alexdalton.org> 7 7 Reworked by Jean Delvare <khali@linux-fr.org> 8 - 8 + 9 9 This program is free software; you can redistribute it and/or modify 10 10 it under the terms of the GNU General Public License as published by 11 11 the Free Software Foundation; either version 2 of the License, or ··· 27 27 #include <linux/jiffies.h> 28 28 #include <linux/i2c.h> 29 29 #include <linux/hwmon.h> 30 + #include <linux/hwmon-sysfs.h> 30 31 #include <linux/err.h> 31 32 #include <linux/mutex.h> 32 33 33 34 /* Following macros takes channel parameter starting from 0 to 2 */ 34 35 #define ADM1031_REG_FAN_SPEED(nr) (0x08 + (nr)) 35 - #define ADM1031_REG_FAN_DIV(nr) (0x20 + (nr)) 36 + #define ADM1031_REG_FAN_DIV(nr) (0x20 + (nr)) 36 37 #define ADM1031_REG_PWM (0x22) 37 38 #define ADM1031_REG_FAN_MIN(nr) (0x10 + (nr)) 38 39 39 - #define ADM1031_REG_TEMP_MAX(nr) (0x14 + 4*(nr)) 40 - #define ADM1031_REG_TEMP_MIN(nr) (0x15 + 4*(nr)) 41 - #define ADM1031_REG_TEMP_CRIT(nr) (0x16 + 4*(nr)) 40 + #define ADM1031_REG_TEMP_MAX(nr) (0x14 + 4 * (nr)) 41 + #define ADM1031_REG_TEMP_MIN(nr) (0x15 + 4 * (nr)) 42 + #define ADM1031_REG_TEMP_CRIT(nr) (0x16 + 4 * (nr)) 42 43 43 - #define ADM1031_REG_TEMP(nr) (0xa + (nr)) 44 + #define ADM1031_REG_TEMP(nr) (0x0a + (nr)) 44 45 #define ADM1031_REG_AUTO_TEMP(nr) (0x24 + (nr)) 45 46 46 47 #define ADM1031_REG_STATUS(nr) (0x2 + (nr)) 47 48 48 - #define ADM1031_REG_CONF1 0x0 49 - #define ADM1031_REG_CONF2 0x1 50 - #define ADM1031_REG_EXT_TEMP 0x6 49 + #define ADM1031_REG_CONF1 0x00 50 + #define ADM1031_REG_CONF2 0x01 51 + #define ADM1031_REG_EXT_TEMP 0x06 51 52 52 53 #define ADM1031_CONF1_MONITOR_ENABLE 0x01 /* Monitoring enable */ 53 54 #define ADM1031_CONF1_PWM_INVERT 0x08 /* PWM Invert */ ··· 79 78 /* The chan_select_table contains the possible configurations for 80 79 * auto fan control. 81 80 */ 82 - auto_chan_table_t *chan_select_table; 81 + const auto_chan_table_t *chan_select_table; 83 82 u16 alarm; 84 83 u8 conf1; 85 84 u8 conf2; ··· 182 181 #define GET_FAN_AUTO_BITFIELD(data, idx) \ 183 182 (*(data)->chan_select_table)[FAN_CHAN_FROM_REG((data)->conf1)][idx%2] 184 183 185 - /* The tables below contains the possible values for the auto fan 184 + /* The tables below contains the possible values for the auto fan 186 185 * control bitfields. the index in the table is the register value. 187 186 * MSb is the auto fan control enable bit, so the four first entries 188 187 * in the table disables auto fan control when both bitfields are zero. 189 188 */ 190 - static auto_chan_table_t auto_channel_select_table_adm1031 = { 191 - {0, 0}, {0, 0}, {0, 0}, {0, 0}, 192 - {2 /*0b010 */ , 4 /*0b100 */ }, 193 - {2 /*0b010 */ , 2 /*0b010 */ }, 194 - {4 /*0b100 */ , 4 /*0b100 */ }, 195 - {7 /*0b111 */ , 7 /*0b111 */ }, 189 + static const auto_chan_table_t auto_channel_select_table_adm1031 = { 190 + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, 191 + { 2 /* 0b010 */ , 4 /* 0b100 */ }, 192 + { 2 /* 0b010 */ , 2 /* 0b010 */ }, 193 + { 4 /* 0b100 */ , 4 /* 0b100 */ }, 194 + { 7 /* 0b111 */ , 7 /* 0b111 */ }, 196 195 }; 197 196 198 - static auto_chan_table_t auto_channel_select_table_adm1030 = { 199 - {0, 0}, {0, 0}, {0, 0}, {0, 0}, 200 - {2 /*0b10 */ , 0}, 201 - {0xff /*invalid */ , 0}, 202 - {0xff /*invalid */ , 0}, 203 - {3 /*0b11 */ , 0}, 197 + static const auto_chan_table_t auto_channel_select_table_adm1030 = { 198 + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, 199 + { 2 /* 0b10 */ , 0 }, 200 + { 0xff /* invalid */ , 0 }, 201 + { 0xff /* invalid */ , 0 }, 202 + { 3 /* 0b11 */ , 0 }, 204 203 }; 205 204 206 205 /* That function checks if a bitfield is valid and returns the other bitfield ··· 229 228 break; 230 229 } else if (val == (*data->chan_select_table)[i][chan] && 231 230 first_match == -1) { 232 - /* Save the first match in case of an exact match has not been 233 - * found 231 + /* Save the first match in case of an exact match has 232 + * not been found 234 233 */ 235 234 first_match = i; 236 235 } ··· 246 245 return 0; 247 246 } 248 247 249 - static ssize_t show_fan_auto_channel(struct device *dev, char *buf, int nr) 248 + static ssize_t show_fan_auto_channel(struct device *dev, 249 + struct device_attribute *attr, char *buf) 250 250 { 251 + int nr = to_sensor_dev_attr(attr)->index; 251 252 struct adm1031_data *data = adm1031_update_device(dev); 252 253 return sprintf(buf, "%d\n", GET_FAN_AUTO_BITFIELD(data, nr)); 253 254 } 254 255 255 256 static ssize_t 256 - set_fan_auto_channel(struct device *dev, const char *buf, size_t count, int nr) 257 + set_fan_auto_channel(struct device *dev, struct device_attribute *attr, 258 + const char *buf, size_t count) 257 259 { 258 260 struct i2c_client *client = to_i2c_client(dev); 259 261 struct adm1031_data *data = i2c_get_clientdata(client); 262 + int nr = to_sensor_dev_attr(attr)->index; 260 263 int val = simple_strtol(buf, NULL, 10); 261 264 u8 reg; 262 265 int ret; ··· 269 264 old_fan_mode = data->conf1; 270 265 271 266 mutex_lock(&data->update_lock); 272 - 267 + 273 268 if ((ret = get_fan_auto_nearest(data, nr, val, data->conf1, &reg))) { 274 269 mutex_unlock(&data->update_lock); 275 270 return ret; 276 271 } 277 - if (((data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1)) & ADM1031_CONF1_AUTO_MODE) ^ 272 + data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1); 273 + if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) ^ 278 274 (old_fan_mode & ADM1031_CONF1_AUTO_MODE)) { 279 275 if (data->conf1 & ADM1031_CONF1_AUTO_MODE){ 280 - /* Switch to Auto Fan Mode 281 - * Save PWM registers 276 + /* Switch to Auto Fan Mode 277 + * Save PWM registers 282 278 * Set PWM registers to 33% Both */ 283 279 data->old_pwm[0] = data->pwm[0]; 284 280 data->old_pwm[1] = data->pwm[1]; ··· 289 283 data->pwm[0] = data->old_pwm[0]; 290 284 data->pwm[1] = data->old_pwm[1]; 291 285 /* Restore PWM registers */ 292 - adm1031_write_value(client, ADM1031_REG_PWM, 286 + adm1031_write_value(client, ADM1031_REG_PWM, 293 287 data->pwm[0] | (data->pwm[1] << 4)); 294 288 } 295 289 } ··· 299 293 return count; 300 294 } 301 295 302 - #define fan_auto_channel_offset(offset) \ 303 - static ssize_t show_fan_auto_channel_##offset (struct device *dev, struct device_attribute *attr, char *buf) \ 304 - { \ 305 - return show_fan_auto_channel(dev, buf, offset - 1); \ 306 - } \ 307 - static ssize_t set_fan_auto_channel_##offset (struct device *dev, struct device_attribute *attr, \ 308 - const char *buf, size_t count) \ 309 - { \ 310 - return set_fan_auto_channel(dev, buf, count, offset - 1); \ 311 - } \ 312 - static DEVICE_ATTR(auto_fan##offset##_channel, S_IRUGO | S_IWUSR, \ 313 - show_fan_auto_channel_##offset, \ 314 - set_fan_auto_channel_##offset) 315 - 316 - fan_auto_channel_offset(1); 317 - fan_auto_channel_offset(2); 296 + static SENSOR_DEVICE_ATTR(auto_fan1_channel, S_IRUGO | S_IWUSR, 297 + show_fan_auto_channel, set_fan_auto_channel, 0); 298 + static SENSOR_DEVICE_ATTR(auto_fan2_channel, S_IRUGO | S_IWUSR, 299 + show_fan_auto_channel, set_fan_auto_channel, 1); 318 300 319 301 /* Auto Temps */ 320 - static ssize_t show_auto_temp_off(struct device *dev, char *buf, int nr) 302 + static ssize_t show_auto_temp_off(struct device *dev, 303 + struct device_attribute *attr, char *buf) 321 304 { 305 + int nr = to_sensor_dev_attr(attr)->index; 322 306 struct adm1031_data *data = adm1031_update_device(dev); 323 - return sprintf(buf, "%d\n", 307 + return sprintf(buf, "%d\n", 324 308 AUTO_TEMP_OFF_FROM_REG(data->auto_temp[nr])); 325 309 } 326 - static ssize_t show_auto_temp_min(struct device *dev, char *buf, int nr) 310 + static ssize_t show_auto_temp_min(struct device *dev, 311 + struct device_attribute *attr, char *buf) 327 312 { 313 + int nr = to_sensor_dev_attr(attr)->index; 328 314 struct adm1031_data *data = adm1031_update_device(dev); 329 315 return sprintf(buf, "%d\n", 330 316 AUTO_TEMP_MIN_FROM_REG(data->auto_temp[nr])); 331 317 } 332 318 static ssize_t 333 - set_auto_temp_min(struct device *dev, const char *buf, size_t count, int nr) 319 + set_auto_temp_min(struct device *dev, struct device_attribute *attr, 320 + const char *buf, size_t count) 334 321 { 335 322 struct i2c_client *client = to_i2c_client(dev); 336 323 struct adm1031_data *data = i2c_get_clientdata(client); 324 + int nr = to_sensor_dev_attr(attr)->index; 337 325 int val = simple_strtol(buf, NULL, 10); 338 326 339 327 mutex_lock(&data->update_lock); ··· 337 337 mutex_unlock(&data->update_lock); 338 338 return count; 339 339 } 340 - static ssize_t show_auto_temp_max(struct device *dev, char *buf, int nr) 340 + static ssize_t show_auto_temp_max(struct device *dev, 341 + struct device_attribute *attr, char *buf) 341 342 { 343 + int nr = to_sensor_dev_attr(attr)->index; 342 344 struct adm1031_data *data = adm1031_update_device(dev); 343 345 return sprintf(buf, "%d\n", 344 346 AUTO_TEMP_MAX_FROM_REG(data->auto_temp[nr])); 345 347 } 346 348 static ssize_t 347 - set_auto_temp_max(struct device *dev, const char *buf, size_t count, int nr) 349 + set_auto_temp_max(struct device *dev, struct device_attribute *attr, 350 + const char *buf, size_t count) 348 351 { 349 352 struct i2c_client *client = to_i2c_client(dev); 350 353 struct adm1031_data *data = i2c_get_clientdata(client); 354 + int nr = to_sensor_dev_attr(attr)->index; 351 355 int val = simple_strtol(buf, NULL, 10); 352 356 353 357 mutex_lock(&data->update_lock); ··· 362 358 return count; 363 359 } 364 360 365 - #define auto_temp_reg(offset) \ 366 - static ssize_t show_auto_temp_##offset##_off (struct device *dev, struct device_attribute *attr, char *buf) \ 367 - { \ 368 - return show_auto_temp_off(dev, buf, offset - 1); \ 369 - } \ 370 - static ssize_t show_auto_temp_##offset##_min (struct device *dev, struct device_attribute *attr, char *buf) \ 371 - { \ 372 - return show_auto_temp_min(dev, buf, offset - 1); \ 373 - } \ 374 - static ssize_t show_auto_temp_##offset##_max (struct device *dev, struct device_attribute *attr, char *buf) \ 375 - { \ 376 - return show_auto_temp_max(dev, buf, offset - 1); \ 377 - } \ 378 - static ssize_t set_auto_temp_##offset##_min (struct device *dev, struct device_attribute *attr, \ 379 - const char *buf, size_t count) \ 380 - { \ 381 - return set_auto_temp_min(dev, buf, count, offset - 1); \ 382 - } \ 383 - static ssize_t set_auto_temp_##offset##_max (struct device *dev, struct device_attribute *attr, \ 384 - const char *buf, size_t count) \ 385 - { \ 386 - return set_auto_temp_max(dev, buf, count, offset - 1); \ 387 - } \ 388 - static DEVICE_ATTR(auto_temp##offset##_off, S_IRUGO, \ 389 - show_auto_temp_##offset##_off, NULL); \ 390 - static DEVICE_ATTR(auto_temp##offset##_min, S_IRUGO | S_IWUSR, \ 391 - show_auto_temp_##offset##_min, set_auto_temp_##offset##_min);\ 392 - static DEVICE_ATTR(auto_temp##offset##_max, S_IRUGO | S_IWUSR, \ 393 - show_auto_temp_##offset##_max, set_auto_temp_##offset##_max) 361 + #define auto_temp_reg(offset) \ 362 + static SENSOR_DEVICE_ATTR(auto_temp##offset##_off, S_IRUGO, \ 363 + show_auto_temp_off, NULL, offset - 1); \ 364 + static SENSOR_DEVICE_ATTR(auto_temp##offset##_min, S_IRUGO | S_IWUSR, \ 365 + show_auto_temp_min, set_auto_temp_min, offset - 1); \ 366 + static SENSOR_DEVICE_ATTR(auto_temp##offset##_max, S_IRUGO | S_IWUSR, \ 367 + show_auto_temp_max, set_auto_temp_max, offset - 1) 394 368 395 369 auto_temp_reg(1); 396 370 auto_temp_reg(2); 397 371 auto_temp_reg(3); 398 372 399 373 /* pwm */ 400 - static ssize_t show_pwm(struct device *dev, char *buf, int nr) 374 + static ssize_t show_pwm(struct device *dev, 375 + struct device_attribute *attr, char *buf) 401 376 { 377 + int nr = to_sensor_dev_attr(attr)->index; 402 378 struct adm1031_data *data = adm1031_update_device(dev); 403 379 return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm[nr])); 404 380 } 405 - static ssize_t 406 - set_pwm(struct device *dev, const char *buf, size_t count, int nr) 381 + static ssize_t set_pwm(struct device *dev, struct device_attribute *attr, 382 + const char *buf, size_t count) 407 383 { 408 384 struct i2c_client *client = to_i2c_client(dev); 409 385 struct adm1031_data *data = i2c_get_clientdata(client); 386 + int nr = to_sensor_dev_attr(attr)->index; 410 387 int val = simple_strtol(buf, NULL, 10); 411 388 int reg; 412 389 413 390 mutex_lock(&data->update_lock); 414 - if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) && 391 + if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) && 415 392 (((val>>4) & 0xf) != 5)) { 416 393 /* In automatic mode, the only PWM accepted is 33% */ 417 394 mutex_unlock(&data->update_lock); ··· 407 422 return count; 408 423 } 409 424 410 - #define pwm_reg(offset) \ 411 - static ssize_t show_pwm_##offset (struct device *dev, struct device_attribute *attr, char *buf) \ 412 - { \ 413 - return show_pwm(dev, buf, offset - 1); \ 414 - } \ 415 - static ssize_t set_pwm_##offset (struct device *dev, struct device_attribute *attr, \ 416 - const char *buf, size_t count) \ 417 - { \ 418 - return set_pwm(dev, buf, count, offset - 1); \ 419 - } \ 420 - static DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \ 421 - show_pwm_##offset, set_pwm_##offset) 422 - 423 - pwm_reg(1); 424 - pwm_reg(2); 425 + static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, show_pwm, set_pwm, 0); 426 + static SENSOR_DEVICE_ATTR(pwm2, S_IRUGO | S_IWUSR, show_pwm, set_pwm, 1); 427 + static SENSOR_DEVICE_ATTR(auto_fan1_min_pwm, S_IRUGO | S_IWUSR, 428 + show_pwm, set_pwm, 0); 429 + static SENSOR_DEVICE_ATTR(auto_fan2_min_pwm, S_IRUGO | S_IWUSR, 430 + show_pwm, set_pwm, 1); 425 431 426 432 /* Fans */ 427 433 ··· 447 471 AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[0]) 448 472 || data->temp[1] >= 449 473 AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[1]) 450 - || (data->chip_type == adm1031 474 + || (data->chip_type == adm1031 451 475 && data->temp[2] >= 452 476 AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[2])); 453 477 break; ··· 459 483 } 460 484 461 485 462 - static ssize_t show_fan(struct device *dev, char *buf, int nr) 486 + static ssize_t show_fan(struct device *dev, 487 + struct device_attribute *attr, char *buf) 463 488 { 489 + int nr = to_sensor_dev_attr(attr)->index; 464 490 struct adm1031_data *data = adm1031_update_device(dev); 465 491 int value; 466 492 ··· 471 493 return sprintf(buf, "%d\n", value); 472 494 } 473 495 474 - static ssize_t show_fan_div(struct device *dev, char *buf, int nr) 496 + static ssize_t show_fan_div(struct device *dev, 497 + struct device_attribute *attr, char *buf) 475 498 { 499 + int nr = to_sensor_dev_attr(attr)->index; 476 500 struct adm1031_data *data = adm1031_update_device(dev); 477 501 return sprintf(buf, "%d\n", FAN_DIV_FROM_REG(data->fan_div[nr])); 478 502 } 479 - static ssize_t show_fan_min(struct device *dev, char *buf, int nr) 503 + static ssize_t show_fan_min(struct device *dev, 504 + struct device_attribute *attr, char *buf) 480 505 { 506 + int nr = to_sensor_dev_attr(attr)->index; 481 507 struct adm1031_data *data = adm1031_update_device(dev); 482 508 return sprintf(buf, "%d\n", 483 509 FAN_FROM_REG(data->fan_min[nr], 484 510 FAN_DIV_FROM_REG(data->fan_div[nr]))); 485 511 } 486 - static ssize_t 487 - set_fan_min(struct device *dev, const char *buf, size_t count, int nr) 512 + static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, 513 + const char *buf, size_t count) 488 514 { 489 515 struct i2c_client *client = to_i2c_client(dev); 490 516 struct adm1031_data *data = i2c_get_clientdata(client); 517 + int nr = to_sensor_dev_attr(attr)->index; 491 518 int val = simple_strtol(buf, NULL, 10); 492 519 493 520 mutex_lock(&data->update_lock); 494 521 if (val) { 495 - data->fan_min[nr] = 522 + data->fan_min[nr] = 496 523 FAN_TO_REG(val, FAN_DIV_FROM_REG(data->fan_div[nr])); 497 524 } else { 498 525 data->fan_min[nr] = 0xff; ··· 506 523 mutex_unlock(&data->update_lock); 507 524 return count; 508 525 } 509 - static ssize_t 510 - set_fan_div(struct device *dev, const char *buf, size_t count, int nr) 526 + static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 527 + const char *buf, size_t count) 511 528 { 512 529 struct i2c_client *client = to_i2c_client(dev); 513 530 struct adm1031_data *data = i2c_get_clientdata(client); 531 + int nr = to_sensor_dev_attr(attr)->index; 514 532 int val = simple_strtol(buf, NULL, 10); 515 533 u8 tmp; 516 534 int old_div; ··· 519 535 520 536 tmp = val == 8 ? 0xc0 : 521 537 val == 4 ? 0x80 : 522 - val == 2 ? 0x40 : 523 - val == 1 ? 0x00 : 538 + val == 2 ? 0x40 : 539 + val == 1 ? 0x00 : 524 540 0xff; 525 541 if (tmp == 0xff) 526 542 return -EINVAL; 527 - 528 - mutex_lock(&data->update_lock); 529 - old_div = FAN_DIV_FROM_REG(data->fan_div[nr]); 530 - data->fan_div[nr] = (tmp & 0xC0) | (0x3f & data->fan_div[nr]); 531 - new_min = data->fan_min[nr] * old_div / 532 - FAN_DIV_FROM_REG(data->fan_div[nr]); 533 - data->fan_min[nr] = new_min > 0xff ? 0xff : new_min; 534 - data->fan[nr] = data->fan[nr] * old_div / 535 - FAN_DIV_FROM_REG(data->fan_div[nr]); 536 543 537 - adm1031_write_value(client, ADM1031_REG_FAN_DIV(nr), 544 + mutex_lock(&data->update_lock); 545 + /* Get fresh readings */ 546 + data->fan_div[nr] = adm1031_read_value(client, 547 + ADM1031_REG_FAN_DIV(nr)); 548 + data->fan_min[nr] = adm1031_read_value(client, 549 + ADM1031_REG_FAN_MIN(nr)); 550 + 551 + /* Write the new clock divider and fan min */ 552 + old_div = FAN_DIV_FROM_REG(data->fan_div[nr]); 553 + data->fan_div[nr] = tmp | (0x3f & data->fan_div[nr]); 554 + new_min = data->fan_min[nr] * old_div / val; 555 + data->fan_min[nr] = new_min > 0xff ? 0xff : new_min; 556 + 557 + adm1031_write_value(client, ADM1031_REG_FAN_DIV(nr), 538 558 data->fan_div[nr]); 539 - adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr), 559 + adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr), 540 560 data->fan_min[nr]); 561 + 562 + /* Invalidate the cache: fan speed is no longer valid */ 563 + data->valid = 0; 541 564 mutex_unlock(&data->update_lock); 542 565 return count; 543 566 } 544 567 545 568 #define fan_offset(offset) \ 546 - static ssize_t show_fan_##offset (struct device *dev, struct device_attribute *attr, char *buf) \ 547 - { \ 548 - return show_fan(dev, buf, offset - 1); \ 549 - } \ 550 - static ssize_t show_fan_##offset##_min (struct device *dev, struct device_attribute *attr, char *buf) \ 551 - { \ 552 - return show_fan_min(dev, buf, offset - 1); \ 553 - } \ 554 - static ssize_t show_fan_##offset##_div (struct device *dev, struct device_attribute *attr, char *buf) \ 555 - { \ 556 - return show_fan_div(dev, buf, offset - 1); \ 557 - } \ 558 - static ssize_t set_fan_##offset##_min (struct device *dev, struct device_attribute *attr, \ 559 - const char *buf, size_t count) \ 560 - { \ 561 - return set_fan_min(dev, buf, count, offset - 1); \ 562 - } \ 563 - static ssize_t set_fan_##offset##_div (struct device *dev, struct device_attribute *attr, \ 564 - const char *buf, size_t count) \ 565 - { \ 566 - return set_fan_div(dev, buf, count, offset - 1); \ 567 - } \ 568 - static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan_##offset, \ 569 - NULL); \ 570 - static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \ 571 - show_fan_##offset##_min, set_fan_##offset##_min); \ 572 - static DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \ 573 - show_fan_##offset##_div, set_fan_##offset##_div); \ 574 - static DEVICE_ATTR(auto_fan##offset##_min_pwm, S_IRUGO | S_IWUSR, \ 575 - show_pwm_##offset, set_pwm_##offset) 569 + static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, \ 570 + show_fan, NULL, offset - 1); \ 571 + static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \ 572 + show_fan_min, set_fan_min, offset - 1); \ 573 + static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \ 574 + show_fan_div, set_fan_div, offset - 1) 576 575 577 576 fan_offset(1); 578 577 fan_offset(2); 579 578 580 579 581 580 /* Temps */ 582 - static ssize_t show_temp(struct device *dev, char *buf, int nr) 581 + static ssize_t show_temp(struct device *dev, 582 + struct device_attribute *attr, char *buf) 583 583 { 584 + int nr = to_sensor_dev_attr(attr)->index; 584 585 struct adm1031_data *data = adm1031_update_device(dev); 585 586 int ext; 586 587 ext = nr == 0 ? ··· 573 604 (((data->ext_temp[nr] >> ((nr - 1) * 3)) & 7)); 574 605 return sprintf(buf, "%d\n", TEMP_FROM_REG_EXT(data->temp[nr], ext)); 575 606 } 576 - static ssize_t show_temp_min(struct device *dev, char *buf, int nr) 607 + static ssize_t show_temp_min(struct device *dev, 608 + struct device_attribute *attr, char *buf) 577 609 { 610 + int nr = to_sensor_dev_attr(attr)->index; 578 611 struct adm1031_data *data = adm1031_update_device(dev); 579 612 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr])); 580 613 } 581 - static ssize_t show_temp_max(struct device *dev, char *buf, int nr) 614 + static ssize_t show_temp_max(struct device *dev, 615 + struct device_attribute *attr, char *buf) 582 616 { 617 + int nr = to_sensor_dev_attr(attr)->index; 583 618 struct adm1031_data *data = adm1031_update_device(dev); 584 619 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr])); 585 620 } 586 - static ssize_t show_temp_crit(struct device *dev, char *buf, int nr) 621 + static ssize_t show_temp_crit(struct device *dev, 622 + struct device_attribute *attr, char *buf) 587 623 { 624 + int nr = to_sensor_dev_attr(attr)->index; 588 625 struct adm1031_data *data = adm1031_update_device(dev); 589 626 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit[nr])); 590 627 } 591 - static ssize_t 592 - set_temp_min(struct device *dev, const char *buf, size_t count, int nr) 628 + static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr, 629 + const char *buf, size_t count) 593 630 { 594 631 struct i2c_client *client = to_i2c_client(dev); 595 632 struct adm1031_data *data = i2c_get_clientdata(client); 633 + int nr = to_sensor_dev_attr(attr)->index; 596 634 int val; 597 635 598 636 val = simple_strtol(buf, NULL, 10); ··· 611 635 mutex_unlock(&data->update_lock); 612 636 return count; 613 637 } 614 - static ssize_t 615 - set_temp_max(struct device *dev, const char *buf, size_t count, int nr) 638 + static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, 639 + const char *buf, size_t count) 616 640 { 617 641 struct i2c_client *client = to_i2c_client(dev); 618 642 struct adm1031_data *data = i2c_get_clientdata(client); 643 + int nr = to_sensor_dev_attr(attr)->index; 619 644 int val; 620 645 621 646 val = simple_strtol(buf, NULL, 10); ··· 628 651 mutex_unlock(&data->update_lock); 629 652 return count; 630 653 } 631 - static ssize_t 632 - set_temp_crit(struct device *dev, const char *buf, size_t count, int nr) 654 + static ssize_t set_temp_crit(struct device *dev, struct device_attribute *attr, 655 + const char *buf, size_t count) 633 656 { 634 657 struct i2c_client *client = to_i2c_client(dev); 635 658 struct adm1031_data *data = i2c_get_clientdata(client); 659 + int nr = to_sensor_dev_attr(attr)->index; 636 660 int val; 637 661 638 662 val = simple_strtol(buf, NULL, 10); ··· 646 668 return count; 647 669 } 648 670 649 - #define temp_reg(offset) \ 650 - static ssize_t show_temp_##offset (struct device *dev, struct device_attribute *attr, char *buf) \ 651 - { \ 652 - return show_temp(dev, buf, offset - 1); \ 653 - } \ 654 - static ssize_t show_temp_##offset##_min (struct device *dev, struct device_attribute *attr, char *buf) \ 655 - { \ 656 - return show_temp_min(dev, buf, offset - 1); \ 657 - } \ 658 - static ssize_t show_temp_##offset##_max (struct device *dev, struct device_attribute *attr, char *buf) \ 659 - { \ 660 - return show_temp_max(dev, buf, offset - 1); \ 661 - } \ 662 - static ssize_t show_temp_##offset##_crit (struct device *dev, struct device_attribute *attr, char *buf) \ 663 - { \ 664 - return show_temp_crit(dev, buf, offset - 1); \ 665 - } \ 666 - static ssize_t set_temp_##offset##_min (struct device *dev, struct device_attribute *attr, \ 667 - const char *buf, size_t count) \ 668 - { \ 669 - return set_temp_min(dev, buf, count, offset - 1); \ 670 - } \ 671 - static ssize_t set_temp_##offset##_max (struct device *dev, struct device_attribute *attr, \ 672 - const char *buf, size_t count) \ 673 - { \ 674 - return set_temp_max(dev, buf, count, offset - 1); \ 675 - } \ 676 - static ssize_t set_temp_##offset##_crit (struct device *dev, struct device_attribute *attr, \ 677 - const char *buf, size_t count) \ 678 - { \ 679 - return set_temp_crit(dev, buf, count, offset - 1); \ 680 - } \ 681 - static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp_##offset, \ 682 - NULL); \ 683 - static DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \ 684 - show_temp_##offset##_min, set_temp_##offset##_min); \ 685 - static DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \ 686 - show_temp_##offset##_max, set_temp_##offset##_max); \ 687 - static DEVICE_ATTR(temp##offset##_crit, S_IRUGO | S_IWUSR, \ 688 - show_temp_##offset##_crit, set_temp_##offset##_crit) 671 + #define temp_reg(offset) \ 672 + static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \ 673 + show_temp, NULL, offset - 1); \ 674 + static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \ 675 + show_temp_min, set_temp_min, offset - 1); \ 676 + static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \ 677 + show_temp_max, set_temp_max, offset - 1); \ 678 + static SENSOR_DEVICE_ATTR(temp##offset##_crit, S_IRUGO | S_IWUSR, \ 679 + show_temp_crit, set_temp_crit, offset - 1) 689 680 690 681 temp_reg(1); 691 682 temp_reg(2); ··· 669 722 670 723 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 671 724 725 + static ssize_t show_alarm(struct device *dev, 726 + struct device_attribute *attr, char *buf) 727 + { 728 + int bitnr = to_sensor_dev_attr(attr)->index; 729 + struct adm1031_data *data = adm1031_update_device(dev); 730 + return sprintf(buf, "%d\n", (data->alarm >> bitnr) & 1); 731 + } 732 + 733 + static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 0); 734 + static SENSOR_DEVICE_ATTR(fan1_fault, S_IRUGO, show_alarm, NULL, 1); 735 + static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 2); 736 + static SENSOR_DEVICE_ATTR(temp2_min_alarm, S_IRUGO, show_alarm, NULL, 3); 737 + static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 4); 738 + static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_alarm, NULL, 5); 739 + static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6); 740 + static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 7); 741 + static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 8); 742 + static SENSOR_DEVICE_ATTR(fan2_fault, S_IRUGO, show_alarm, NULL, 9); 743 + static SENSOR_DEVICE_ATTR(temp3_max_alarm, S_IRUGO, show_alarm, NULL, 10); 744 + static SENSOR_DEVICE_ATTR(temp3_min_alarm, S_IRUGO, show_alarm, NULL, 11); 745 + static SENSOR_DEVICE_ATTR(temp3_crit_alarm, S_IRUGO, show_alarm, NULL, 12); 746 + static SENSOR_DEVICE_ATTR(temp3_fault, S_IRUGO, show_alarm, NULL, 13); 747 + static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 14); 672 748 673 749 static int adm1031_attach_adapter(struct i2c_adapter *adapter) 674 750 { ··· 701 731 } 702 732 703 733 static struct attribute *adm1031_attributes[] = { 704 - &dev_attr_fan1_input.attr, 705 - &dev_attr_fan1_div.attr, 706 - &dev_attr_fan1_min.attr, 707 - &dev_attr_pwm1.attr, 708 - &dev_attr_auto_fan1_channel.attr, 709 - &dev_attr_temp1_input.attr, 710 - &dev_attr_temp1_min.attr, 711 - &dev_attr_temp1_max.attr, 712 - &dev_attr_temp1_crit.attr, 713 - &dev_attr_temp2_input.attr, 714 - &dev_attr_temp2_min.attr, 715 - &dev_attr_temp2_max.attr, 716 - &dev_attr_temp2_crit.attr, 734 + &sensor_dev_attr_fan1_input.dev_attr.attr, 735 + &sensor_dev_attr_fan1_div.dev_attr.attr, 736 + &sensor_dev_attr_fan1_min.dev_attr.attr, 737 + &sensor_dev_attr_fan1_alarm.dev_attr.attr, 738 + &sensor_dev_attr_fan1_fault.dev_attr.attr, 739 + &sensor_dev_attr_pwm1.dev_attr.attr, 740 + &sensor_dev_attr_auto_fan1_channel.dev_attr.attr, 741 + &sensor_dev_attr_temp1_input.dev_attr.attr, 742 + &sensor_dev_attr_temp1_min.dev_attr.attr, 743 + &sensor_dev_attr_temp1_min_alarm.dev_attr.attr, 744 + &sensor_dev_attr_temp1_max.dev_attr.attr, 745 + &sensor_dev_attr_temp1_max_alarm.dev_attr.attr, 746 + &sensor_dev_attr_temp1_crit.dev_attr.attr, 747 + &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr, 748 + &sensor_dev_attr_temp2_input.dev_attr.attr, 749 + &sensor_dev_attr_temp2_min.dev_attr.attr, 750 + &sensor_dev_attr_temp2_min_alarm.dev_attr.attr, 751 + &sensor_dev_attr_temp2_max.dev_attr.attr, 752 + &sensor_dev_attr_temp2_max_alarm.dev_attr.attr, 753 + &sensor_dev_attr_temp2_crit.dev_attr.attr, 754 + &sensor_dev_attr_temp2_crit_alarm.dev_attr.attr, 755 + &sensor_dev_attr_temp2_fault.dev_attr.attr, 717 756 718 - &dev_attr_auto_temp1_off.attr, 719 - &dev_attr_auto_temp1_min.attr, 720 - &dev_attr_auto_temp1_max.attr, 757 + &sensor_dev_attr_auto_temp1_off.dev_attr.attr, 758 + &sensor_dev_attr_auto_temp1_min.dev_attr.attr, 759 + &sensor_dev_attr_auto_temp1_max.dev_attr.attr, 721 760 722 - &dev_attr_auto_temp2_off.attr, 723 - &dev_attr_auto_temp2_min.attr, 724 - &dev_attr_auto_temp2_max.attr, 761 + &sensor_dev_attr_auto_temp2_off.dev_attr.attr, 762 + &sensor_dev_attr_auto_temp2_min.dev_attr.attr, 763 + &sensor_dev_attr_auto_temp2_max.dev_attr.attr, 725 764 726 - &dev_attr_auto_fan1_min_pwm.attr, 765 + &sensor_dev_attr_auto_fan1_min_pwm.dev_attr.attr, 727 766 728 767 &dev_attr_alarms.attr, 729 768 ··· 744 765 }; 745 766 746 767 static struct attribute *adm1031_attributes_opt[] = { 747 - &dev_attr_fan2_input.attr, 748 - &dev_attr_fan2_div.attr, 749 - &dev_attr_fan2_min.attr, 750 - &dev_attr_pwm2.attr, 751 - &dev_attr_auto_fan2_channel.attr, 752 - &dev_attr_temp3_input.attr, 753 - &dev_attr_temp3_min.attr, 754 - &dev_attr_temp3_max.attr, 755 - &dev_attr_temp3_crit.attr, 756 - &dev_attr_auto_temp3_off.attr, 757 - &dev_attr_auto_temp3_min.attr, 758 - &dev_attr_auto_temp3_max.attr, 759 - &dev_attr_auto_fan2_min_pwm.attr, 768 + &sensor_dev_attr_fan2_input.dev_attr.attr, 769 + &sensor_dev_attr_fan2_div.dev_attr.attr, 770 + &sensor_dev_attr_fan2_min.dev_attr.attr, 771 + &sensor_dev_attr_fan2_alarm.dev_attr.attr, 772 + &sensor_dev_attr_fan2_fault.dev_attr.attr, 773 + &sensor_dev_attr_pwm2.dev_attr.attr, 774 + &sensor_dev_attr_auto_fan2_channel.dev_attr.attr, 775 + &sensor_dev_attr_temp3_input.dev_attr.attr, 776 + &sensor_dev_attr_temp3_min.dev_attr.attr, 777 + &sensor_dev_attr_temp3_min_alarm.dev_attr.attr, 778 + &sensor_dev_attr_temp3_max.dev_attr.attr, 779 + &sensor_dev_attr_temp3_max_alarm.dev_attr.attr, 780 + &sensor_dev_attr_temp3_crit.dev_attr.attr, 781 + &sensor_dev_attr_temp3_crit_alarm.dev_attr.attr, 782 + &sensor_dev_attr_temp3_fault.dev_attr.attr, 783 + &sensor_dev_attr_auto_temp3_off.dev_attr.attr, 784 + &sensor_dev_attr_auto_temp3_min.dev_attr.attr, 785 + &sensor_dev_attr_auto_temp3_max.dev_attr.attr, 786 + &sensor_dev_attr_auto_fan2_min_pwm.dev_attr.attr, 760 787 NULL 761 788 }; 762 789 ··· 773 788 /* This function is called by i2c_probe */ 774 789 static int adm1031_detect(struct i2c_adapter *adapter, int address, int kind) 775 790 { 776 - struct i2c_client *new_client; 791 + struct i2c_client *client; 777 792 struct adm1031_data *data; 778 793 int err = 0; 779 794 const char *name = ""; ··· 786 801 goto exit; 787 802 } 788 803 789 - new_client = &data->client; 790 - i2c_set_clientdata(new_client, data); 791 - new_client->addr = address; 792 - new_client->adapter = adapter; 793 - new_client->driver = &adm1031_driver; 794 - new_client->flags = 0; 804 + client = &data->client; 805 + i2c_set_clientdata(client, data); 806 + client->addr = address; 807 + client->adapter = adapter; 808 + client->driver = &adm1031_driver; 795 809 796 810 if (kind < 0) { 797 811 int id, co; 798 - id = i2c_smbus_read_byte_data(new_client, 0x3d); 799 - co = i2c_smbus_read_byte_data(new_client, 0x3e); 812 + id = i2c_smbus_read_byte_data(client, 0x3d); 813 + co = i2c_smbus_read_byte_data(client, 0x3e); 800 814 801 815 if (!((id == 0x31 || id == 0x30) && co == 0x41)) 802 816 goto exit_free; ··· 816 832 } 817 833 data->chip_type = kind; 818 834 819 - strlcpy(new_client->name, name, I2C_NAME_SIZE); 820 - data->valid = 0; 835 + strlcpy(client->name, name, I2C_NAME_SIZE); 821 836 mutex_init(&data->update_lock); 822 837 823 838 /* Tell the I2C layer a new client has arrived */ 824 - if ((err = i2c_attach_client(new_client))) 839 + if ((err = i2c_attach_client(client))) 825 840 goto exit_free; 826 841 827 842 /* Initialize the ADM1031 chip */ 828 - adm1031_init_client(new_client); 843 + adm1031_init_client(client); 829 844 830 845 /* Register sysfs hooks */ 831 - if ((err = sysfs_create_group(&new_client->dev.kobj, &adm1031_group))) 846 + if ((err = sysfs_create_group(&client->dev.kobj, &adm1031_group))) 832 847 goto exit_detach; 833 848 834 849 if (kind == adm1031) { 835 - if ((err = sysfs_create_group(&new_client->dev.kobj, 850 + if ((err = sysfs_create_group(&client->dev.kobj, 836 851 &adm1031_group_opt))) 837 852 goto exit_remove; 838 853 } 839 854 840 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 855 + data->hwmon_dev = hwmon_device_register(&client->dev); 841 856 if (IS_ERR(data->hwmon_dev)) { 842 857 err = PTR_ERR(data->hwmon_dev); 843 858 goto exit_remove; ··· 845 862 return 0; 846 863 847 864 exit_remove: 848 - sysfs_remove_group(&new_client->dev.kobj, &adm1031_group); 849 - sysfs_remove_group(&new_client->dev.kobj, &adm1031_group_opt); 865 + sysfs_remove_group(&client->dev.kobj, &adm1031_group); 866 + sysfs_remove_group(&client->dev.kobj, &adm1031_group_opt); 850 867 exit_detach: 851 - i2c_detach_client(new_client); 868 + i2c_detach_client(client); 852 869 exit_free: 853 870 kfree(data); 854 871 exit: ··· 880 897 if (data->chip_type == adm1031) { 881 898 mask |= (ADM1031_CONF2_PWM2_ENABLE | 882 899 ADM1031_CONF2_TACH2_ENABLE); 883 - } 900 + } 884 901 /* Initialize the ADM1031 chip (enables fan speed reading ) */ 885 902 read_val = adm1031_read_value(client, ADM1031_REG_CONF2); 886 903 if ((read_val | mask) != read_val) { ··· 959 976 if (data->chip_type == adm1030) { 960 977 data->alarm &= 0xc0ff; 961 978 } 962 - 979 + 963 980 for (chan=0; chan<(data->chip_type == adm1030 ? 1 : 2); chan++) { 964 981 data->fan_div[chan] = 965 982 adm1031_read_value(client, ADM1031_REG_FAN_DIV(chan)); ··· 968 985 data->fan[chan] = 969 986 adm1031_read_value(client, ADM1031_REG_FAN_SPEED(chan)); 970 987 data->pwm[chan] = 971 - 0xf & (adm1031_read_value(client, ADM1031_REG_PWM) >> 988 + 0xf & (adm1031_read_value(client, ADM1031_REG_PWM) >> 972 989 (4*chan)); 973 990 } 974 991 data->last_updated = jiffies;
+26 -1
drivers/hwmon/adm9240.c
··· 141 141 .driver = { 142 142 .name = "adm9240", 143 143 }, 144 - .id = I2C_DRIVERID_ADM9240, 145 144 .attach_adapter = adm9240_attach_adapter, 146 145 .detach_client = adm9240_detach_client, 147 146 }; ··· 414 415 } 415 416 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 416 417 418 + static ssize_t show_alarm(struct device *dev, 419 + struct device_attribute *attr, char *buf) 420 + { 421 + int bitnr = to_sensor_dev_attr(attr)->index; 422 + struct adm9240_data *data = adm9240_update_device(dev); 423 + return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); 424 + } 425 + static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0); 426 + static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1); 427 + static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2); 428 + static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3); 429 + static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8); 430 + static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 9); 431 + static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4); 432 + static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6); 433 + static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7); 434 + 417 435 /* vid */ 418 436 static ssize_t show_vid(struct device *dev, 419 437 struct device_attribute *attr, char *buf) ··· 485 469 &sensor_dev_attr_in0_input.dev_attr.attr, 486 470 &sensor_dev_attr_in0_min.dev_attr.attr, 487 471 &sensor_dev_attr_in0_max.dev_attr.attr, 472 + &sensor_dev_attr_in0_alarm.dev_attr.attr, 488 473 &sensor_dev_attr_in1_input.dev_attr.attr, 489 474 &sensor_dev_attr_in1_min.dev_attr.attr, 490 475 &sensor_dev_attr_in1_max.dev_attr.attr, 476 + &sensor_dev_attr_in1_alarm.dev_attr.attr, 491 477 &sensor_dev_attr_in2_input.dev_attr.attr, 492 478 &sensor_dev_attr_in2_min.dev_attr.attr, 493 479 &sensor_dev_attr_in2_max.dev_attr.attr, 480 + &sensor_dev_attr_in2_alarm.dev_attr.attr, 494 481 &sensor_dev_attr_in3_input.dev_attr.attr, 495 482 &sensor_dev_attr_in3_min.dev_attr.attr, 496 483 &sensor_dev_attr_in3_max.dev_attr.attr, 484 + &sensor_dev_attr_in3_alarm.dev_attr.attr, 497 485 &sensor_dev_attr_in4_input.dev_attr.attr, 498 486 &sensor_dev_attr_in4_min.dev_attr.attr, 499 487 &sensor_dev_attr_in4_max.dev_attr.attr, 488 + &sensor_dev_attr_in4_alarm.dev_attr.attr, 500 489 &sensor_dev_attr_in5_input.dev_attr.attr, 501 490 &sensor_dev_attr_in5_min.dev_attr.attr, 502 491 &sensor_dev_attr_in5_max.dev_attr.attr, 492 + &sensor_dev_attr_in5_alarm.dev_attr.attr, 503 493 &dev_attr_temp1_input.attr, 504 494 &sensor_dev_attr_temp1_max.dev_attr.attr, 505 495 &sensor_dev_attr_temp1_max_hyst.dev_attr.attr, 496 + &sensor_dev_attr_temp1_alarm.dev_attr.attr, 506 497 &sensor_dev_attr_fan1_input.dev_attr.attr, 507 498 &sensor_dev_attr_fan1_div.dev_attr.attr, 508 499 &sensor_dev_attr_fan1_min.dev_attr.attr, 500 + &sensor_dev_attr_fan1_alarm.dev_attr.attr, 509 501 &sensor_dev_attr_fan2_input.dev_attr.attr, 510 502 &sensor_dev_attr_fan2_div.dev_attr.attr, 511 503 &sensor_dev_attr_fan2_min.dev_attr.attr, 504 + &sensor_dev_attr_fan2_alarm.dev_attr.attr, 512 505 &dev_attr_alarms.attr, 513 506 &dev_attr_aout_output.attr, 514 507 &dev_attr_chassis_clear.attr,
+297
drivers/hwmon/ads7828.c
··· 1 + /* 2 + ads7828.c - lm_sensors driver for ads7828 12-bit 8-channel ADC 3 + (C) 2007 EADS Astrium 4 + 5 + This driver is based on the lm75 and other lm_sensors/hwmon drivers 6 + 7 + Written by Steve Hardy <steve@linuxrealtime.co.uk> 8 + 9 + Datasheet available at: http://focus.ti.com/lit/ds/symlink/ads7828.pdf 10 + 11 + This program is free software; you can redistribute it and/or modify 12 + it under the terms of the GNU General Public License as published by 13 + the Free Software Foundation; either version 2 of the License, or 14 + (at your option) any later version. 15 + 16 + This program is distributed in the hope that it will be useful, 17 + but WITHOUT ANY WARRANTY; without even the implied warranty of 18 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 + GNU General Public License for more details. 20 + 21 + You should have received a copy of the GNU General Public License 22 + along with this program; if not, write to the Free Software 23 + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 + */ 25 + 26 + #include <linux/module.h> 27 + #include <linux/init.h> 28 + #include <linux/slab.h> 29 + #include <linux/jiffies.h> 30 + #include <linux/i2c.h> 31 + #include <linux/hwmon.h> 32 + #include <linux/hwmon-sysfs.h> 33 + #include <linux/err.h> 34 + #include <linux/mutex.h> 35 + 36 + /* The ADS7828 registers */ 37 + #define ADS7828_NCH 8 /* 8 channels of 12-bit A-D supported */ 38 + #define ADS7828_CMD_SD_SE 0x80 /* Single ended inputs */ 39 + #define ADS7828_CMD_SD_DIFF 0x00 /* Differential inputs */ 40 + #define ADS7828_CMD_PD0 0x0 /* Power Down between A-D conversions */ 41 + #define ADS7828_CMD_PD1 0x04 /* Internal ref OFF && A-D ON */ 42 + #define ADS7828_CMD_PD2 0x08 /* Internal ref ON && A-D OFF */ 43 + #define ADS7828_CMD_PD3 0x0C /* Internal ref ON && A-D ON */ 44 + #define ADS7828_INT_VREF_MV 2500 /* Internal vref is 2.5V, 2500mV */ 45 + 46 + /* Addresses to scan */ 47 + static unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 48 + I2C_CLIENT_END }; 49 + 50 + /* Insmod parameters */ 51 + I2C_CLIENT_INSMOD_1(ads7828); 52 + 53 + /* Other module parameters */ 54 + static int se_input = 1; /* Default is SE, 0 == diff */ 55 + static int int_vref = 1; /* Default is internal ref ON */ 56 + static int vref_mv = ADS7828_INT_VREF_MV; /* set if vref != 2.5V */ 57 + module_param(se_input, bool, S_IRUGO); 58 + module_param(int_vref, bool, S_IRUGO); 59 + module_param(vref_mv, int, S_IRUGO); 60 + 61 + /* Global Variables */ 62 + static u8 ads7828_cmd_byte; /* cmd byte without channel bits */ 63 + static unsigned int ads7828_lsb_resol; /* resolution of the ADC sample lsb */ 64 + 65 + /* Each client has this additional data */ 66 + struct ads7828_data { 67 + struct i2c_client client; 68 + struct device *hwmon_dev; 69 + struct mutex update_lock; /* mutex protect updates */ 70 + char valid; /* !=0 if following fields are valid */ 71 + unsigned long last_updated; /* In jiffies */ 72 + u16 adc_input[ADS7828_NCH]; /* ADS7828_NCH 12-bit samples */ 73 + }; 74 + 75 + /* Function declaration - necessary due to function dependencies */ 76 + static int ads7828_detect(struct i2c_adapter *adapter, int address, int kind); 77 + 78 + /* The ADS7828 returns the 12-bit sample in two bytes, 79 + these are read as a word then byte-swapped */ 80 + static u16 ads7828_read_value(struct i2c_client *client, u8 reg) 81 + { 82 + return swab16(i2c_smbus_read_word_data(client, reg)); 83 + } 84 + 85 + static inline u8 channel_cmd_byte(int ch) 86 + { 87 + /* cmd byte C2,C1,C0 - see datasheet */ 88 + u8 cmd = (((ch>>1) | (ch&0x01)<<2)<<4); 89 + cmd |= ads7828_cmd_byte; 90 + return cmd; 91 + } 92 + 93 + /* Update data for the device (all 8 channels) */ 94 + static struct ads7828_data *ads7828_update_device(struct device *dev) 95 + { 96 + struct i2c_client *client = to_i2c_client(dev); 97 + struct ads7828_data *data = i2c_get_clientdata(client); 98 + 99 + mutex_lock(&data->update_lock); 100 + 101 + if (time_after(jiffies, data->last_updated + HZ + HZ / 2) 102 + || !data->valid) { 103 + unsigned int ch; 104 + dev_dbg(&client->dev, "Starting ads7828 update\n"); 105 + 106 + for (ch = 0; ch < ADS7828_NCH; ch++) { 107 + u8 cmd = channel_cmd_byte(ch); 108 + data->adc_input[ch] = ads7828_read_value(client, cmd); 109 + } 110 + data->last_updated = jiffies; 111 + data->valid = 1; 112 + } 113 + 114 + mutex_unlock(&data->update_lock); 115 + 116 + return data; 117 + } 118 + 119 + /* sysfs callback function */ 120 + static ssize_t show_in(struct device *dev, struct device_attribute *da, 121 + char *buf) 122 + { 123 + struct sensor_device_attribute *attr = to_sensor_dev_attr(da); 124 + struct ads7828_data *data = ads7828_update_device(dev); 125 + /* Print value (in mV as specified in sysfs-interface documentation) */ 126 + return sprintf(buf, "%d\n", (data->adc_input[attr->index] * 127 + ads7828_lsb_resol)/1000); 128 + } 129 + 130 + #define in_reg(offset)\ 131 + static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, show_in,\ 132 + NULL, offset) 133 + 134 + in_reg(0); 135 + in_reg(1); 136 + in_reg(2); 137 + in_reg(3); 138 + in_reg(4); 139 + in_reg(5); 140 + in_reg(6); 141 + in_reg(7); 142 + 143 + static struct attribute *ads7828_attributes[] = { 144 + &sensor_dev_attr_in0_input.dev_attr.attr, 145 + &sensor_dev_attr_in1_input.dev_attr.attr, 146 + &sensor_dev_attr_in2_input.dev_attr.attr, 147 + &sensor_dev_attr_in3_input.dev_attr.attr, 148 + &sensor_dev_attr_in4_input.dev_attr.attr, 149 + &sensor_dev_attr_in5_input.dev_attr.attr, 150 + &sensor_dev_attr_in6_input.dev_attr.attr, 151 + &sensor_dev_attr_in7_input.dev_attr.attr, 152 + NULL 153 + }; 154 + 155 + static const struct attribute_group ads7828_group = { 156 + .attrs = ads7828_attributes, 157 + }; 158 + 159 + static int ads7828_attach_adapter(struct i2c_adapter *adapter) 160 + { 161 + if (!(adapter->class & I2C_CLASS_HWMON)) 162 + return 0; 163 + return i2c_probe(adapter, &addr_data, ads7828_detect); 164 + } 165 + 166 + static int ads7828_detach_client(struct i2c_client *client) 167 + { 168 + struct ads7828_data *data = i2c_get_clientdata(client); 169 + hwmon_device_unregister(data->hwmon_dev); 170 + sysfs_remove_group(&client->dev.kobj, &ads7828_group); 171 + i2c_detach_client(client); 172 + kfree(i2c_get_clientdata(client)); 173 + return 0; 174 + } 175 + 176 + /* This is the driver that will be inserted */ 177 + static struct i2c_driver ads7828_driver = { 178 + .driver = { 179 + .name = "ads7828", 180 + }, 181 + .attach_adapter = ads7828_attach_adapter, 182 + .detach_client = ads7828_detach_client, 183 + }; 184 + 185 + /* This function is called by i2c_probe */ 186 + static int ads7828_detect(struct i2c_adapter *adapter, int address, int kind) 187 + { 188 + struct i2c_client *client; 189 + struct ads7828_data *data; 190 + int err = 0; 191 + const char *name = ""; 192 + 193 + /* Check we have a valid client */ 194 + if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_READ_WORD_DATA)) 195 + goto exit; 196 + 197 + /* OK. For now, we presume we have a valid client. We now create the 198 + client structure, even though we cannot fill it completely yet. 199 + But it allows us to access ads7828_read_value. */ 200 + data = kzalloc(sizeof(struct ads7828_data), GFP_KERNEL); 201 + if (!data) { 202 + err = -ENOMEM; 203 + goto exit; 204 + } 205 + 206 + client = &data->client; 207 + i2c_set_clientdata(client, data); 208 + client->addr = address; 209 + client->adapter = adapter; 210 + client->driver = &ads7828_driver; 211 + 212 + /* Now, we do the remaining detection. There is no identification 213 + dedicated register so attempt to sanity check using knowledge of 214 + the chip 215 + - Read from the 8 channel addresses 216 + - Check the top 4 bits of each result are not set (12 data bits) 217 + */ 218 + if (kind < 0) { 219 + int ch; 220 + for (ch = 0; ch < ADS7828_NCH; ch++) { 221 + u16 in_data; 222 + u8 cmd = channel_cmd_byte(ch); 223 + in_data = ads7828_read_value(client, cmd); 224 + if (in_data & 0xF000) { 225 + printk(KERN_DEBUG 226 + "%s : Doesn't look like an ads7828 device\n", 227 + __FUNCTION__); 228 + goto exit_free; 229 + } 230 + } 231 + } 232 + 233 + /* Determine the chip type - only one kind supported! */ 234 + if (kind <= 0) 235 + kind = ads7828; 236 + 237 + if (kind == ads7828) 238 + name = "ads7828"; 239 + 240 + /* Fill in the remaining client fields, put it into the global list */ 241 + strlcpy(client->name, name, I2C_NAME_SIZE); 242 + 243 + mutex_init(&data->update_lock); 244 + 245 + /* Tell the I2C layer a new client has arrived */ 246 + err = i2c_attach_client(client); 247 + if (err) 248 + goto exit_free; 249 + 250 + /* Register sysfs hooks */ 251 + err = sysfs_create_group(&client->dev.kobj, &ads7828_group); 252 + if (err) 253 + goto exit_detach; 254 + 255 + data->hwmon_dev = hwmon_device_register(&client->dev); 256 + if (IS_ERR(data->hwmon_dev)) { 257 + err = PTR_ERR(data->hwmon_dev); 258 + goto exit_remove; 259 + } 260 + 261 + return 0; 262 + 263 + exit_remove: 264 + sysfs_remove_group(&client->dev.kobj, &ads7828_group); 265 + exit_detach: 266 + i2c_detach_client(client); 267 + exit_free: 268 + kfree(data); 269 + exit: 270 + return err; 271 + } 272 + 273 + static int __init sensors_ads7828_init(void) 274 + { 275 + /* Initialize the command byte according to module parameters */ 276 + ads7828_cmd_byte = se_input ? 277 + ADS7828_CMD_SD_SE : ADS7828_CMD_SD_DIFF; 278 + ads7828_cmd_byte |= int_vref ? 279 + ADS7828_CMD_PD3 : ADS7828_CMD_PD1; 280 + 281 + /* Calculate the LSB resolution */ 282 + ads7828_lsb_resol = (vref_mv*1000)/4096; 283 + 284 + return i2c_add_driver(&ads7828_driver); 285 + } 286 + 287 + static void __exit sensors_ads7828_exit(void) 288 + { 289 + i2c_del_driver(&ads7828_driver); 290 + } 291 + 292 + MODULE_AUTHOR("Steve Hardy <steve@linuxrealtime.co.uk>"); 293 + MODULE_DESCRIPTION("ADS7828 driver"); 294 + MODULE_LICENSE("GPL"); 295 + 296 + module_init(sensors_ads7828_init); 297 + module_exit(sensors_ads7828_exit);
+85 -15
drivers/hwmon/adt7470.c
··· 48 48 #define ADT7470_REG_CFG 0x40 49 49 #define ADT7470_FSPD_MASK 0x04 50 50 #define ADT7470_REG_ALARM1 0x41 51 + #define ADT7470_R1T_ALARM 0x01 52 + #define ADT7470_R2T_ALARM 0x02 53 + #define ADT7470_R3T_ALARM 0x04 54 + #define ADT7470_R4T_ALARM 0x08 55 + #define ADT7470_R5T_ALARM 0x10 56 + #define ADT7470_R6T_ALARM 0x20 57 + #define ADT7470_R7T_ALARM 0x40 58 + #define ADT7470_OOL_ALARM 0x80 51 59 #define ADT7470_REG_ALARM2 0x42 60 + #define ADT7470_R8T_ALARM 0x01 61 + #define ADT7470_R9T_ALARM 0x02 62 + #define ADT7470_R10T_ALARM 0x04 63 + #define ADT7470_FAN1_ALARM 0x10 64 + #define ADT7470_FAN2_ALARM 0x20 65 + #define ADT7470_FAN3_ALARM 0x40 66 + #define ADT7470_FAN4_ALARM 0x80 52 67 #define ADT7470_REG_TEMP_LIMITS_BASE_ADDR 0x44 53 68 #define ADT7470_REG_TEMP_LIMITS_MAX_ADDR 0x57 54 69 #define ADT7470_REG_FAN_MIN_BASE_ADDR 0x58 ··· 112 97 #define ADT7470_REG_PWM_AUTO_TEMP(x) (ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR + \ 113 98 ((x) / 2)) 114 99 100 + #define ALARM2(x) ((x) << 8) 101 + 115 102 #define ADT7470_VENDOR 0x41 116 103 #define ADT7470_DEVICE 0x70 117 104 /* datasheet only mentions a revision 2 */ ··· 130 113 131 114 /* sleep 1s while gathering temperature data */ 132 115 #define TEMP_COLLECTION_TIME 1000 133 - 134 - #define power_of_2(x) (((x) & ((x) - 1)) == 0) 135 116 136 117 /* datasheet says to divide this number by the fan reading to get fan rpm */ 137 118 #define FAN_PERIOD_TO_RPM(x) ((90000 * 60) / (x)) ··· 153 138 u16 fan[ADT7470_FAN_COUNT]; 154 139 u16 fan_min[ADT7470_FAN_COUNT]; 155 140 u16 fan_max[ADT7470_FAN_COUNT]; 156 - u16 alarms, alarms_mask; 141 + u16 alarm; 142 + u16 alarms_mask; 157 143 u8 force_pwm_max; 158 144 u8 pwm[ADT7470_PWM_COUNT]; 159 145 u8 pwm_max[ADT7470_PWM_COUNT]; ··· 278 262 else 279 263 data->force_pwm_max = 0; 280 264 281 - data->alarms = adt7470_read_word_data(client, ADT7470_REG_ALARM1); 265 + data->alarm = i2c_smbus_read_byte_data(client, ADT7470_REG_ALARM1); 266 + if (data->alarm & ADT7470_OOL_ALARM) 267 + data->alarm |= ALARM2(i2c_smbus_read_byte_data(client, 268 + ADT7470_REG_ALARM2)); 282 269 data->alarms_mask = adt7470_read_word_data(client, 283 270 ADT7470_REG_ALARM1_MASK); 284 271 ··· 389 370 return sprintf(buf, "%d\n", 1000 * data->temp[attr->index]); 390 371 } 391 372 392 - static ssize_t show_alarms(struct device *dev, 373 + static ssize_t show_alarm_mask(struct device *dev, 393 374 struct device_attribute *devattr, 394 375 char *buf) 395 376 { 396 - struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 397 377 struct adt7470_data *data = adt7470_update_device(dev); 398 378 399 - if (attr->index) 400 - return sprintf(buf, "%x\n", data->alarms); 401 - else 402 - return sprintf(buf, "%x\n", data->alarms_mask); 379 + return sprintf(buf, "%x\n", data->alarms_mask); 403 380 } 404 381 405 382 static ssize_t show_fan_max(struct device *dev, ··· 692 677 { 693 678 if (input == ADT7470_PWM_ALL_TEMPS) 694 679 return 0; 695 - if (input < 1 || !power_of_2(input)) 680 + if (input < 1 || !is_power_of_2(input)) 696 681 return -EINVAL; 697 682 return ilog2(input) + 1; 698 683 } ··· 730 715 return count; 731 716 } 732 717 733 - static SENSOR_DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL, 0); 734 - static SENSOR_DEVICE_ATTR(alarm_mask, S_IRUGO, show_alarms, NULL, 1); 718 + static ssize_t show_alarm(struct device *dev, 719 + struct device_attribute *devattr, 720 + char *buf) 721 + { 722 + struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 723 + struct adt7470_data *data = adt7470_update_device(dev); 724 + 725 + if (data->alarm & attr->index) 726 + return sprintf(buf, "1\n"); 727 + else 728 + return sprintf(buf, "0\n"); 729 + } 730 + 731 + static DEVICE_ATTR(alarm_mask, S_IRUGO, show_alarm_mask, NULL); 735 732 736 733 static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max, 737 734 set_temp_max, 0); ··· 798 771 static SENSOR_DEVICE_ATTR(temp9_input, S_IRUGO, show_temp, NULL, 8); 799 772 static SENSOR_DEVICE_ATTR(temp10_input, S_IRUGO, show_temp, NULL, 9); 800 773 774 + static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 775 + ADT7470_R1T_ALARM); 776 + static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 777 + ADT7470_R2T_ALARM); 778 + static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 779 + ADT7470_R3T_ALARM); 780 + static SENSOR_DEVICE_ATTR(temp4_alarm, S_IRUGO, show_alarm, NULL, 781 + ADT7470_R4T_ALARM); 782 + static SENSOR_DEVICE_ATTR(temp5_alarm, S_IRUGO, show_alarm, NULL, 783 + ADT7470_R5T_ALARM); 784 + static SENSOR_DEVICE_ATTR(temp6_alarm, S_IRUGO, show_alarm, NULL, 785 + ADT7470_R6T_ALARM); 786 + static SENSOR_DEVICE_ATTR(temp7_alarm, S_IRUGO, show_alarm, NULL, 787 + ADT7470_R7T_ALARM); 788 + static SENSOR_DEVICE_ATTR(temp8_alarm, S_IRUGO, show_alarm, NULL, 789 + ALARM2(ADT7470_R8T_ALARM)); 790 + static SENSOR_DEVICE_ATTR(temp9_alarm, S_IRUGO, show_alarm, NULL, 791 + ALARM2(ADT7470_R9T_ALARM)); 792 + static SENSOR_DEVICE_ATTR(temp10_alarm, S_IRUGO, show_alarm, NULL, 793 + ALARM2(ADT7470_R10T_ALARM)); 794 + 801 795 static SENSOR_DEVICE_ATTR(fan1_max, S_IWUSR | S_IRUGO, show_fan_max, 802 796 set_fan_max, 0); 803 797 static SENSOR_DEVICE_ATTR(fan2_max, S_IWUSR | S_IRUGO, show_fan_max, ··· 841 793 static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1); 842 794 static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2); 843 795 static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3); 796 + 797 + static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 798 + ALARM2(ADT7470_FAN1_ALARM)); 799 + static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 800 + ALARM2(ADT7470_FAN2_ALARM)); 801 + static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 802 + ALARM2(ADT7470_FAN3_ALARM)); 803 + static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 804 + ALARM2(ADT7470_FAN4_ALARM)); 844 805 845 806 static SENSOR_DEVICE_ATTR(force_pwm_max, S_IWUSR | S_IRUGO, 846 807 show_force_pwm_max, set_force_pwm_max, 0); ··· 915 858 916 859 static struct attribute *adt7470_attr[] = 917 860 { 918 - &sensor_dev_attr_alarms.dev_attr.attr, 919 - &sensor_dev_attr_alarm_mask.dev_attr.attr, 861 + &dev_attr_alarm_mask.attr, 920 862 &sensor_dev_attr_temp1_max.dev_attr.attr, 921 863 &sensor_dev_attr_temp2_max.dev_attr.attr, 922 864 &sensor_dev_attr_temp3_max.dev_attr.attr, ··· 946 890 &sensor_dev_attr_temp8_input.dev_attr.attr, 947 891 &sensor_dev_attr_temp9_input.dev_attr.attr, 948 892 &sensor_dev_attr_temp10_input.dev_attr.attr, 893 + &sensor_dev_attr_temp1_alarm.dev_attr.attr, 894 + &sensor_dev_attr_temp2_alarm.dev_attr.attr, 895 + &sensor_dev_attr_temp3_alarm.dev_attr.attr, 896 + &sensor_dev_attr_temp4_alarm.dev_attr.attr, 897 + &sensor_dev_attr_temp5_alarm.dev_attr.attr, 898 + &sensor_dev_attr_temp6_alarm.dev_attr.attr, 899 + &sensor_dev_attr_temp7_alarm.dev_attr.attr, 900 + &sensor_dev_attr_temp8_alarm.dev_attr.attr, 901 + &sensor_dev_attr_temp9_alarm.dev_attr.attr, 902 + &sensor_dev_attr_temp10_alarm.dev_attr.attr, 949 903 &sensor_dev_attr_fan1_max.dev_attr.attr, 950 904 &sensor_dev_attr_fan2_max.dev_attr.attr, 951 905 &sensor_dev_attr_fan3_max.dev_attr.attr, ··· 968 902 &sensor_dev_attr_fan2_input.dev_attr.attr, 969 903 &sensor_dev_attr_fan3_input.dev_attr.attr, 970 904 &sensor_dev_attr_fan4_input.dev_attr.attr, 905 + &sensor_dev_attr_fan1_alarm.dev_attr.attr, 906 + &sensor_dev_attr_fan2_alarm.dev_attr.attr, 907 + &sensor_dev_attr_fan3_alarm.dev_attr.attr, 908 + &sensor_dev_attr_fan4_alarm.dev_attr.attr, 971 909 &sensor_dev_attr_force_pwm_max.dev_attr.attr, 972 910 &sensor_dev_attr_pwm1.dev_attr.attr, 973 911 &sensor_dev_attr_pwm2.dev_attr.attr,
+181 -210
drivers/hwmon/asb100.c
··· 40 40 #include <linux/slab.h> 41 41 #include <linux/i2c.h> 42 42 #include <linux/hwmon.h> 43 + #include <linux/hwmon-sysfs.h> 43 44 #include <linux/hwmon-vid.h> 44 45 #include <linux/err.h> 45 46 #include <linux/init.h> 46 47 #include <linux/jiffies.h> 47 48 #include <linux/mutex.h> 48 49 #include "lm75.h" 49 - 50 - /* 51 - HISTORY: 52 - 2003-12-29 1.0.0 Ported from lm_sensors project for kernel 2.6 53 - */ 54 - #define ASB100_VERSION "1.0.0" 55 50 56 51 /* I2C addresses to scan */ 57 52 static unsigned short normal_i2c[] = { 0x2d, I2C_CLIENT_END }; ··· 216 221 .driver = { 217 222 .name = "asb100", 218 223 }, 219 - .id = I2C_DRIVERID_ASB100, 220 224 .attach_adapter = asb100_attach_adapter, 221 225 .detach_client = asb100_detach_client, 222 226 }; 223 227 224 228 /* 7 Voltages */ 225 229 #define show_in_reg(reg) \ 226 - static ssize_t show_##reg (struct device *dev, char *buf, int nr) \ 230 + static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \ 231 + char *buf) \ 227 232 { \ 233 + int nr = to_sensor_dev_attr(attr)->index; \ 228 234 struct asb100_data *data = asb100_update_device(dev); \ 229 235 return sprintf(buf, "%d\n", IN_FROM_REG(data->reg[nr])); \ 230 236 } ··· 235 239 show_in_reg(in_max) 236 240 237 241 #define set_in_reg(REG, reg) \ 238 - static ssize_t set_in_##reg(struct device *dev, const char *buf, \ 239 - size_t count, int nr) \ 242 + static ssize_t set_in_##reg(struct device *dev, struct device_attribute *attr, \ 243 + const char *buf, size_t count) \ 240 244 { \ 245 + int nr = to_sensor_dev_attr(attr)->index; \ 241 246 struct i2c_client *client = to_i2c_client(dev); \ 242 247 struct asb100_data *data = i2c_get_clientdata(client); \ 243 248 unsigned long val = simple_strtoul(buf, NULL, 10); \ ··· 255 258 set_in_reg(MAX, max) 256 259 257 260 #define sysfs_in(offset) \ 258 - static ssize_t \ 259 - show_in##offset (struct device *dev, struct device_attribute *attr, char *buf) \ 260 - { \ 261 - return show_in(dev, buf, offset); \ 262 - } \ 263 - static DEVICE_ATTR(in##offset##_input, S_IRUGO, \ 264 - show_in##offset, NULL); \ 265 - static ssize_t \ 266 - show_in##offset##_min (struct device *dev, struct device_attribute *attr, char *buf) \ 267 - { \ 268 - return show_in_min(dev, buf, offset); \ 269 - } \ 270 - static ssize_t \ 271 - show_in##offset##_max (struct device *dev, struct device_attribute *attr, char *buf) \ 272 - { \ 273 - return show_in_max(dev, buf, offset); \ 274 - } \ 275 - static ssize_t set_in##offset##_min (struct device *dev, struct device_attribute *attr, \ 276 - const char *buf, size_t count) \ 277 - { \ 278 - return set_in_min(dev, buf, count, offset); \ 279 - } \ 280 - static ssize_t set_in##offset##_max (struct device *dev, struct device_attribute *attr, \ 281 - const char *buf, size_t count) \ 282 - { \ 283 - return set_in_max(dev, buf, count, offset); \ 284 - } \ 285 - static DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \ 286 - show_in##offset##_min, set_in##offset##_min); \ 287 - static DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \ 288 - show_in##offset##_max, set_in##offset##_max); 261 + static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \ 262 + show_in, NULL, offset); \ 263 + static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \ 264 + show_in_min, set_in_min, offset); \ 265 + static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \ 266 + show_in_max, set_in_max, offset) 289 267 290 268 sysfs_in(0); 291 269 sysfs_in(1); ··· 271 299 sysfs_in(6); 272 300 273 301 /* 3 Fans */ 274 - static ssize_t show_fan(struct device *dev, char *buf, int nr) 302 + static ssize_t show_fan(struct device *dev, struct device_attribute *attr, 303 + char *buf) 275 304 { 305 + int nr = to_sensor_dev_attr(attr)->index; 276 306 struct asb100_data *data = asb100_update_device(dev); 277 307 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr], 278 308 DIV_FROM_REG(data->fan_div[nr]))); 279 309 } 280 310 281 - static ssize_t show_fan_min(struct device *dev, char *buf, int nr) 311 + static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr, 312 + char *buf) 282 313 { 314 + int nr = to_sensor_dev_attr(attr)->index; 283 315 struct asb100_data *data = asb100_update_device(dev); 284 316 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr], 285 317 DIV_FROM_REG(data->fan_div[nr]))); 286 318 } 287 319 288 - static ssize_t show_fan_div(struct device *dev, char *buf, int nr) 320 + static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr, 321 + char *buf) 289 322 { 323 + int nr = to_sensor_dev_attr(attr)->index; 290 324 struct asb100_data *data = asb100_update_device(dev); 291 325 return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr])); 292 326 } 293 327 294 - static ssize_t set_fan_min(struct device *dev, const char *buf, 295 - size_t count, int nr) 328 + static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, 329 + const char *buf, size_t count) 296 330 { 331 + int nr = to_sensor_dev_attr(attr)->index; 297 332 struct i2c_client *client = to_i2c_client(dev); 298 333 struct asb100_data *data = i2c_get_clientdata(client); 299 334 u32 val = simple_strtoul(buf, NULL, 10); ··· 316 337 determined in part by the fan divisor. This follows the principle of 317 338 least surprise; the user doesn't expect the fan minimum to change just 318 339 because the divisor changed. */ 319 - static ssize_t set_fan_div(struct device *dev, const char *buf, 320 - size_t count, int nr) 340 + static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 341 + const char *buf, size_t count) 321 342 { 343 + int nr = to_sensor_dev_attr(attr)->index; 322 344 struct i2c_client *client = to_i2c_client(dev); 323 345 struct asb100_data *data = i2c_get_clientdata(client); 324 346 unsigned long min; 325 347 unsigned long val = simple_strtoul(buf, NULL, 10); 326 348 int reg; 327 - 349 + 328 350 mutex_lock(&data->update_lock); 329 351 330 352 min = FAN_FROM_REG(data->fan_min[nr], 331 353 DIV_FROM_REG(data->fan_div[nr])); 332 354 data->fan_div[nr] = DIV_TO_REG(val); 333 355 334 - switch(nr) { 356 + switch (nr) { 335 357 case 0: /* fan 1 */ 336 358 reg = asb100_read_value(client, ASB100_REG_VID_FANDIV); 337 359 reg = (reg & 0xcf) | (data->fan_div[0] << 4); ··· 362 382 } 363 383 364 384 #define sysfs_fan(offset) \ 365 - static ssize_t show_fan##offset(struct device *dev, struct device_attribute *attr, char *buf) \ 366 - { \ 367 - return show_fan(dev, buf, offset - 1); \ 368 - } \ 369 - static ssize_t show_fan##offset##_min(struct device *dev, struct device_attribute *attr, char *buf) \ 370 - { \ 371 - return show_fan_min(dev, buf, offset - 1); \ 372 - } \ 373 - static ssize_t show_fan##offset##_div(struct device *dev, struct device_attribute *attr, char *buf) \ 374 - { \ 375 - return show_fan_div(dev, buf, offset - 1); \ 376 - } \ 377 - static ssize_t set_fan##offset##_min(struct device *dev, struct device_attribute *attr, const char *buf, \ 378 - size_t count) \ 379 - { \ 380 - return set_fan_min(dev, buf, count, offset - 1); \ 381 - } \ 382 - static ssize_t set_fan##offset##_div(struct device *dev, struct device_attribute *attr, const char *buf, \ 383 - size_t count) \ 384 - { \ 385 - return set_fan_div(dev, buf, count, offset - 1); \ 386 - } \ 387 - static DEVICE_ATTR(fan##offset##_input, S_IRUGO, \ 388 - show_fan##offset, NULL); \ 389 - static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \ 390 - show_fan##offset##_min, set_fan##offset##_min); \ 391 - static DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \ 392 - show_fan##offset##_div, set_fan##offset##_div); 385 + static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, \ 386 + show_fan, NULL, offset - 1); \ 387 + static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \ 388 + show_fan_min, set_fan_min, offset - 1); \ 389 + static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \ 390 + show_fan_div, set_fan_div, offset - 1) 393 391 394 392 sysfs_fan(1); 395 393 sysfs_fan(2); ··· 388 430 } 389 431 return ret; 390 432 } 391 - 433 + 392 434 #define show_temp_reg(reg) \ 393 - static ssize_t show_##reg(struct device *dev, char *buf, int nr) \ 435 + static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \ 436 + char *buf) \ 394 437 { \ 438 + int nr = to_sensor_dev_attr(attr)->index; \ 395 439 struct asb100_data *data = asb100_update_device(dev); \ 396 440 return sprintf_temp_from_reg(data->reg[nr], buf, nr); \ 397 441 } ··· 403 443 show_temp_reg(temp_hyst); 404 444 405 445 #define set_temp_reg(REG, reg) \ 406 - static ssize_t set_##reg(struct device *dev, const char *buf, \ 407 - size_t count, int nr) \ 446 + static ssize_t set_##reg(struct device *dev, struct device_attribute *attr, \ 447 + const char *buf, size_t count) \ 408 448 { \ 449 + int nr = to_sensor_dev_attr(attr)->index; \ 409 450 struct i2c_client *client = to_i2c_client(dev); \ 410 451 struct asb100_data *data = i2c_get_clientdata(client); \ 411 452 long val = simple_strtol(buf, NULL, 10); \ ··· 430 469 set_temp_reg(HYST, temp_hyst); 431 470 432 471 #define sysfs_temp(num) \ 433 - static ssize_t show_temp##num(struct device *dev, struct device_attribute *attr, char *buf) \ 434 - { \ 435 - return show_temp(dev, buf, num-1); \ 436 - } \ 437 - static DEVICE_ATTR(temp##num##_input, S_IRUGO, show_temp##num, NULL); \ 438 - static ssize_t show_temp_max##num(struct device *dev, struct device_attribute *attr, char *buf) \ 439 - { \ 440 - return show_temp_max(dev, buf, num-1); \ 441 - } \ 442 - static ssize_t set_temp_max##num(struct device *dev, struct device_attribute *attr, const char *buf, \ 443 - size_t count) \ 444 - { \ 445 - return set_temp_max(dev, buf, count, num-1); \ 446 - } \ 447 - static DEVICE_ATTR(temp##num##_max, S_IRUGO | S_IWUSR, \ 448 - show_temp_max##num, set_temp_max##num); \ 449 - static ssize_t show_temp_hyst##num(struct device *dev, struct device_attribute *attr, char *buf) \ 450 - { \ 451 - return show_temp_hyst(dev, buf, num-1); \ 452 - } \ 453 - static ssize_t set_temp_hyst##num(struct device *dev, struct device_attribute *attr, const char *buf, \ 454 - size_t count) \ 455 - { \ 456 - return set_temp_hyst(dev, buf, count, num-1); \ 457 - } \ 458 - static DEVICE_ATTR(temp##num##_max_hyst, S_IRUGO | S_IWUSR, \ 459 - show_temp_hyst##num, set_temp_hyst##num); 472 + static SENSOR_DEVICE_ATTR(temp##num##_input, S_IRUGO, \ 473 + show_temp, NULL, num - 1); \ 474 + static SENSOR_DEVICE_ATTR(temp##num##_max, S_IRUGO | S_IWUSR, \ 475 + show_temp_max, set_temp_max, num - 1); \ 476 + static SENSOR_DEVICE_ATTR(temp##num##_max_hyst, S_IRUGO | S_IWUSR, \ 477 + show_temp_hyst, set_temp_hyst, num - 1) 460 478 461 479 sysfs_temp(1); 462 480 sysfs_temp(2); ··· 443 503 sysfs_temp(4); 444 504 445 505 /* VID */ 446 - static ssize_t show_vid(struct device *dev, struct device_attribute *attr, char *buf) 506 + static ssize_t show_vid(struct device *dev, struct device_attribute *attr, 507 + char *buf) 447 508 { 448 509 struct asb100_data *data = asb100_update_device(dev); 449 510 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm)); ··· 453 512 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL); 454 513 455 514 /* VRM */ 456 - static ssize_t show_vrm(struct device *dev, struct device_attribute *attr, char *buf) 515 + static ssize_t show_vrm(struct device *dev, struct device_attribute *attr, 516 + char *buf) 457 517 { 458 518 struct asb100_data *data = dev_get_drvdata(dev); 459 519 return sprintf(buf, "%d\n", data->vrm); 460 520 } 461 521 462 - static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 522 + static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, 523 + const char *buf, size_t count) 463 524 { 464 - struct i2c_client *client = to_i2c_client(dev); 465 - struct asb100_data *data = i2c_get_clientdata(client); 466 - unsigned long val = simple_strtoul(buf, NULL, 10); 467 - data->vrm = val; 525 + struct asb100_data *data = dev_get_drvdata(dev); 526 + data->vrm = simple_strtoul(buf, NULL, 10); 468 527 return count; 469 528 } 470 529 471 530 /* Alarms */ 472 531 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm, set_vrm); 473 532 474 - static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf) 533 + static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, 534 + char *buf) 475 535 { 476 536 struct asb100_data *data = asb100_update_device(dev); 477 537 return sprintf(buf, "%u\n", data->alarms); ··· 480 538 481 539 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 482 540 541 + static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, 542 + char *buf) 543 + { 544 + int bitnr = to_sensor_dev_attr(attr)->index; 545 + struct asb100_data *data = asb100_update_device(dev); 546 + return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); 547 + } 548 + static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0); 549 + static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1); 550 + static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2); 551 + static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3); 552 + static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8); 553 + static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6); 554 + static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7); 555 + static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11); 556 + static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4); 557 + static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5); 558 + static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13); 559 + 483 560 /* 1 PWM */ 484 - static ssize_t show_pwm1(struct device *dev, struct device_attribute *attr, char *buf) 561 + static ssize_t show_pwm1(struct device *dev, struct device_attribute *attr, 562 + char *buf) 485 563 { 486 564 struct asb100_data *data = asb100_update_device(dev); 487 565 return sprintf(buf, "%d\n", ASB100_PWM_FROM_REG(data->pwm & 0x0f)); 488 566 } 489 567 490 - static ssize_t set_pwm1(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 568 + static ssize_t set_pwm1(struct device *dev, struct device_attribute *attr, 569 + const char *buf, size_t count) 491 570 { 492 571 struct i2c_client *client = to_i2c_client(dev); 493 572 struct asb100_data *data = i2c_get_clientdata(client); ··· 522 559 return count; 523 560 } 524 561 525 - static ssize_t show_pwm_enable1(struct device *dev, struct device_attribute *attr, char *buf) 562 + static ssize_t show_pwm_enable1(struct device *dev, 563 + struct device_attribute *attr, char *buf) 526 564 { 527 565 struct asb100_data *data = asb100_update_device(dev); 528 566 return sprintf(buf, "%d\n", (data->pwm & 0x80) ? 1 : 0); 529 567 } 530 568 531 - static ssize_t set_pwm_enable1(struct device *dev, struct device_attribute *attr, const char *buf, 532 - size_t count) 569 + static ssize_t set_pwm_enable1(struct device *dev, 570 + struct device_attribute *attr, const char *buf, size_t count) 533 571 { 534 572 struct i2c_client *client = to_i2c_client(dev); 535 573 struct asb100_data *data = i2c_get_clientdata(client); ··· 549 585 show_pwm_enable1, set_pwm_enable1); 550 586 551 587 static struct attribute *asb100_attributes[] = { 552 - &dev_attr_in0_input.attr, 553 - &dev_attr_in0_min.attr, 554 - &dev_attr_in0_max.attr, 555 - &dev_attr_in1_input.attr, 556 - &dev_attr_in1_min.attr, 557 - &dev_attr_in1_max.attr, 558 - &dev_attr_in2_input.attr, 559 - &dev_attr_in2_min.attr, 560 - &dev_attr_in2_max.attr, 561 - &dev_attr_in3_input.attr, 562 - &dev_attr_in3_min.attr, 563 - &dev_attr_in3_max.attr, 564 - &dev_attr_in4_input.attr, 565 - &dev_attr_in4_min.attr, 566 - &dev_attr_in4_max.attr, 567 - &dev_attr_in5_input.attr, 568 - &dev_attr_in5_min.attr, 569 - &dev_attr_in5_max.attr, 570 - &dev_attr_in6_input.attr, 571 - &dev_attr_in6_min.attr, 572 - &dev_attr_in6_max.attr, 588 + &sensor_dev_attr_in0_input.dev_attr.attr, 589 + &sensor_dev_attr_in0_min.dev_attr.attr, 590 + &sensor_dev_attr_in0_max.dev_attr.attr, 591 + &sensor_dev_attr_in1_input.dev_attr.attr, 592 + &sensor_dev_attr_in1_min.dev_attr.attr, 593 + &sensor_dev_attr_in1_max.dev_attr.attr, 594 + &sensor_dev_attr_in2_input.dev_attr.attr, 595 + &sensor_dev_attr_in2_min.dev_attr.attr, 596 + &sensor_dev_attr_in2_max.dev_attr.attr, 597 + &sensor_dev_attr_in3_input.dev_attr.attr, 598 + &sensor_dev_attr_in3_min.dev_attr.attr, 599 + &sensor_dev_attr_in3_max.dev_attr.attr, 600 + &sensor_dev_attr_in4_input.dev_attr.attr, 601 + &sensor_dev_attr_in4_min.dev_attr.attr, 602 + &sensor_dev_attr_in4_max.dev_attr.attr, 603 + &sensor_dev_attr_in5_input.dev_attr.attr, 604 + &sensor_dev_attr_in5_min.dev_attr.attr, 605 + &sensor_dev_attr_in5_max.dev_attr.attr, 606 + &sensor_dev_attr_in6_input.dev_attr.attr, 607 + &sensor_dev_attr_in6_min.dev_attr.attr, 608 + &sensor_dev_attr_in6_max.dev_attr.attr, 573 609 574 - &dev_attr_fan1_input.attr, 575 - &dev_attr_fan1_min.attr, 576 - &dev_attr_fan1_div.attr, 577 - &dev_attr_fan2_input.attr, 578 - &dev_attr_fan2_min.attr, 579 - &dev_attr_fan2_div.attr, 580 - &dev_attr_fan3_input.attr, 581 - &dev_attr_fan3_min.attr, 582 - &dev_attr_fan3_div.attr, 610 + &sensor_dev_attr_fan1_input.dev_attr.attr, 611 + &sensor_dev_attr_fan1_min.dev_attr.attr, 612 + &sensor_dev_attr_fan1_div.dev_attr.attr, 613 + &sensor_dev_attr_fan2_input.dev_attr.attr, 614 + &sensor_dev_attr_fan2_min.dev_attr.attr, 615 + &sensor_dev_attr_fan2_div.dev_attr.attr, 616 + &sensor_dev_attr_fan3_input.dev_attr.attr, 617 + &sensor_dev_attr_fan3_min.dev_attr.attr, 618 + &sensor_dev_attr_fan3_div.dev_attr.attr, 583 619 584 - &dev_attr_temp1_input.attr, 585 - &dev_attr_temp1_max.attr, 586 - &dev_attr_temp1_max_hyst.attr, 587 - &dev_attr_temp2_input.attr, 588 - &dev_attr_temp2_max.attr, 589 - &dev_attr_temp2_max_hyst.attr, 590 - &dev_attr_temp3_input.attr, 591 - &dev_attr_temp3_max.attr, 592 - &dev_attr_temp3_max_hyst.attr, 593 - &dev_attr_temp4_input.attr, 594 - &dev_attr_temp4_max.attr, 595 - &dev_attr_temp4_max_hyst.attr, 620 + &sensor_dev_attr_temp1_input.dev_attr.attr, 621 + &sensor_dev_attr_temp1_max.dev_attr.attr, 622 + &sensor_dev_attr_temp1_max_hyst.dev_attr.attr, 623 + &sensor_dev_attr_temp2_input.dev_attr.attr, 624 + &sensor_dev_attr_temp2_max.dev_attr.attr, 625 + &sensor_dev_attr_temp2_max_hyst.dev_attr.attr, 626 + &sensor_dev_attr_temp3_input.dev_attr.attr, 627 + &sensor_dev_attr_temp3_max.dev_attr.attr, 628 + &sensor_dev_attr_temp3_max_hyst.dev_attr.attr, 629 + &sensor_dev_attr_temp4_input.dev_attr.attr, 630 + &sensor_dev_attr_temp4_max.dev_attr.attr, 631 + &sensor_dev_attr_temp4_max_hyst.dev_attr.attr, 632 + 633 + &sensor_dev_attr_in0_alarm.dev_attr.attr, 634 + &sensor_dev_attr_in1_alarm.dev_attr.attr, 635 + &sensor_dev_attr_in2_alarm.dev_attr.attr, 636 + &sensor_dev_attr_in3_alarm.dev_attr.attr, 637 + &sensor_dev_attr_in4_alarm.dev_attr.attr, 638 + &sensor_dev_attr_fan1_alarm.dev_attr.attr, 639 + &sensor_dev_attr_fan2_alarm.dev_attr.attr, 640 + &sensor_dev_attr_fan3_alarm.dev_attr.attr, 641 + &sensor_dev_attr_temp1_alarm.dev_attr.attr, 642 + &sensor_dev_attr_temp2_alarm.dev_attr.attr, 643 + &sensor_dev_attr_temp3_alarm.dev_attr.attr, 596 644 597 645 &dev_attr_cpu0_vid.attr, 598 646 &dev_attr_vrm.attr, ··· 632 656 } 633 657 634 658 static int asb100_detect_subclients(struct i2c_adapter *adapter, int address, 635 - int kind, struct i2c_client *new_client) 659 + int kind, struct i2c_client *client) 636 660 { 637 661 int i, id, err; 638 - struct asb100_data *data = i2c_get_clientdata(new_client); 662 + struct asb100_data *data = i2c_get_clientdata(client); 639 663 640 664 data->lm75[0] = kzalloc(sizeof(struct i2c_client), GFP_KERNEL); 641 665 if (!(data->lm75[0])) { ··· 655 679 for (i = 2; i <= 3; i++) { 656 680 if (force_subclients[i] < 0x48 || 657 681 force_subclients[i] > 0x4f) { 658 - dev_err(&new_client->dev, "invalid subclient " 682 + dev_err(&client->dev, "invalid subclient " 659 683 "address %d; must be 0x48-0x4f\n", 660 684 force_subclients[i]); 661 685 err = -ENODEV; 662 686 goto ERROR_SC_2; 663 687 } 664 688 } 665 - asb100_write_value(new_client, ASB100_REG_I2C_SUBADDR, 689 + asb100_write_value(client, ASB100_REG_I2C_SUBADDR, 666 690 (force_subclients[2] & 0x07) | 667 - ((force_subclients[3] & 0x07) <<4)); 691 + ((force_subclients[3] & 0x07) << 4)); 668 692 data->lm75[0]->addr = force_subclients[2]; 669 693 data->lm75[1]->addr = force_subclients[3]; 670 694 } else { 671 - int val = asb100_read_value(new_client, ASB100_REG_I2C_SUBADDR); 695 + int val = asb100_read_value(client, ASB100_REG_I2C_SUBADDR); 672 696 data->lm75[0]->addr = 0x48 + (val & 0x07); 673 697 data->lm75[1]->addr = 0x48 + ((val >> 4) & 0x07); 674 698 } 675 699 676 - if(data->lm75[0]->addr == data->lm75[1]->addr) { 677 - dev_err(&new_client->dev, "duplicate addresses 0x%x " 700 + if (data->lm75[0]->addr == data->lm75[1]->addr) { 701 + dev_err(&client->dev, "duplicate addresses 0x%x " 678 702 "for subclients\n", data->lm75[0]->addr); 679 703 err = -ENODEV; 680 704 goto ERROR_SC_2; ··· 684 708 i2c_set_clientdata(data->lm75[i], NULL); 685 709 data->lm75[i]->adapter = adapter; 686 710 data->lm75[i]->driver = &asb100_driver; 687 - data->lm75[i]->flags = 0; 688 711 strlcpy(data->lm75[i]->name, "asb100 subclient", I2C_NAME_SIZE); 689 712 } 690 713 691 714 if ((err = i2c_attach_client(data->lm75[0]))) { 692 - dev_err(&new_client->dev, "subclient %d registration " 715 + dev_err(&client->dev, "subclient %d registration " 693 716 "at address 0x%x failed.\n", i, data->lm75[0]->addr); 694 717 goto ERROR_SC_2; 695 718 } 696 719 697 720 if ((err = i2c_attach_client(data->lm75[1]))) { 698 - dev_err(&new_client->dev, "subclient %d registration " 721 + dev_err(&client->dev, "subclient %d registration " 699 722 "at address 0x%x failed.\n", i, data->lm75[1]->addr); 700 723 goto ERROR_SC_3; 701 724 } ··· 715 740 static int asb100_detect(struct i2c_adapter *adapter, int address, int kind) 716 741 { 717 742 int err; 718 - struct i2c_client *new_client; 743 + struct i2c_client *client; 719 744 struct asb100_data *data; 720 745 721 746 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { ··· 735 760 goto ERROR0; 736 761 } 737 762 738 - new_client = &data->client; 763 + client = &data->client; 739 764 mutex_init(&data->lock); 740 - i2c_set_clientdata(new_client, data); 741 - new_client->addr = address; 742 - new_client->adapter = adapter; 743 - new_client->driver = &asb100_driver; 744 - new_client->flags = 0; 765 + i2c_set_clientdata(client, data); 766 + client->addr = address; 767 + client->adapter = adapter; 768 + client->driver = &asb100_driver; 745 769 746 770 /* Now, we do the remaining detection. */ 747 771 ··· 750 776 bank. */ 751 777 if (kind < 0) { 752 778 753 - int val1 = asb100_read_value(new_client, ASB100_REG_BANK); 754 - int val2 = asb100_read_value(new_client, ASB100_REG_CHIPMAN); 779 + int val1 = asb100_read_value(client, ASB100_REG_BANK); 780 + int val2 = asb100_read_value(client, ASB100_REG_CHIPMAN); 755 781 756 782 /* If we're in bank 0 */ 757 - if ( (!(val1 & 0x07)) && 783 + if ((!(val1 & 0x07)) && 758 784 /* Check for ASB100 ID (low byte) */ 759 - ( ((!(val1 & 0x80)) && (val2 != 0x94)) || 785 + (((!(val1 & 0x80)) && (val2 != 0x94)) || 760 786 /* Check for ASB100 ID (high byte ) */ 761 - ((val1 & 0x80) && (val2 != 0x06)) ) ) { 787 + ((val1 & 0x80) && (val2 != 0x06)))) { 762 788 pr_debug("asb100.o: detect failed, " 763 789 "bad chip id 0x%02x!\n", val2); 764 790 err = -ENODEV; ··· 769 795 770 796 /* We have either had a force parameter, or we have already detected 771 797 Winbond. Put it now into bank 0 and Vendor ID High Byte */ 772 - asb100_write_value(new_client, ASB100_REG_BANK, 773 - (asb100_read_value(new_client, ASB100_REG_BANK) & 0x78) | 0x80); 798 + asb100_write_value(client, ASB100_REG_BANK, 799 + (asb100_read_value(client, ASB100_REG_BANK) & 0x78) | 0x80); 774 800 775 801 /* Determine the chip type. */ 776 802 if (kind <= 0) { 777 - int val1 = asb100_read_value(new_client, ASB100_REG_WCHIPID); 778 - int val2 = asb100_read_value(new_client, ASB100_REG_CHIPMAN); 803 + int val1 = asb100_read_value(client, ASB100_REG_WCHIPID); 804 + int val2 = asb100_read_value(client, ASB100_REG_CHIPMAN); 779 805 780 806 if ((val1 == 0x31) && (val2 == 0x06)) 781 807 kind = asb100; 782 808 else { 783 809 if (kind == 0) 784 - dev_warn(&new_client->dev, "ignoring " 810 + dev_warn(&client->dev, "ignoring " 785 811 "'force' parameter for unknown chip " 786 812 "at adapter %d, address 0x%02x.\n", 787 813 i2c_adapter_id(adapter), address); ··· 791 817 } 792 818 793 819 /* Fill in remaining client fields and put it into the global list */ 794 - strlcpy(new_client->name, "asb100", I2C_NAME_SIZE); 820 + strlcpy(client->name, "asb100", I2C_NAME_SIZE); 795 821 data->type = kind; 796 - 797 - data->valid = 0; 798 822 mutex_init(&data->update_lock); 799 823 800 824 /* Tell the I2C layer a new client has arrived */ 801 - if ((err = i2c_attach_client(new_client))) 825 + if ((err = i2c_attach_client(client))) 802 826 goto ERROR1; 803 827 804 828 /* Attach secondary lm75 clients */ 805 829 if ((err = asb100_detect_subclients(adapter, address, kind, 806 - new_client))) 830 + client))) 807 831 goto ERROR2; 808 832 809 833 /* Initialize the chip */ 810 - asb100_init_client(new_client); 834 + asb100_init_client(client); 811 835 812 836 /* A few vars need to be filled upon startup */ 813 - data->fan_min[0] = asb100_read_value(new_client, ASB100_REG_FAN_MIN(0)); 814 - data->fan_min[1] = asb100_read_value(new_client, ASB100_REG_FAN_MIN(1)); 815 - data->fan_min[2] = asb100_read_value(new_client, ASB100_REG_FAN_MIN(2)); 837 + data->fan_min[0] = asb100_read_value(client, ASB100_REG_FAN_MIN(0)); 838 + data->fan_min[1] = asb100_read_value(client, ASB100_REG_FAN_MIN(1)); 839 + data->fan_min[2] = asb100_read_value(client, ASB100_REG_FAN_MIN(2)); 816 840 817 841 /* Register sysfs hooks */ 818 - if ((err = sysfs_create_group(&new_client->dev.kobj, &asb100_group))) 842 + if ((err = sysfs_create_group(&client->dev.kobj, &asb100_group))) 819 843 goto ERROR3; 820 844 821 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 845 + data->hwmon_dev = hwmon_device_register(&client->dev); 822 846 if (IS_ERR(data->hwmon_dev)) { 823 847 err = PTR_ERR(data->hwmon_dev); 824 848 goto ERROR4; ··· 825 853 return 0; 826 854 827 855 ERROR4: 828 - sysfs_remove_group(&new_client->dev.kobj, &asb100_group); 856 + sysfs_remove_group(&client->dev.kobj, &asb100_group); 829 857 ERROR3: 830 858 i2c_detach_client(data->lm75[1]); 831 859 i2c_detach_client(data->lm75[0]); 832 860 kfree(data->lm75[1]); 833 861 kfree(data->lm75[0]); 834 862 ERROR2: 835 - i2c_detach_client(new_client); 863 + i2c_detach_client(client); 836 864 ERROR1: 837 865 kfree(data); 838 866 ERROR0: ··· 888 916 /* convert from ISA to LM75 I2C addresses */ 889 917 switch (reg & 0xff) { 890 918 case 0x50: /* TEMP */ 891 - res = swab16(i2c_smbus_read_word_data (cl, 0)); 919 + res = swab16(i2c_smbus_read_word_data(cl, 0)); 892 920 break; 893 921 case 0x52: /* CONFIG */ 894 922 res = i2c_smbus_read_byte_data(cl, 1); 895 923 break; 896 924 case 0x53: /* HYST */ 897 - res = swab16(i2c_smbus_read_word_data (cl, 2)); 925 + res = swab16(i2c_smbus_read_word_data(cl, 2)); 898 926 break; 899 927 case 0x55: /* MAX */ 900 928 default: 901 - res = swab16(i2c_smbus_read_word_data (cl, 3)); 929 + res = swab16(i2c_smbus_read_word_data(cl, 3)); 902 930 break; 903 931 } 904 932 } ··· 961 989 vid = vid_from_reg(vid, data->vrm); 962 990 963 991 /* Start monitoring */ 964 - asb100_write_value(client, ASB100_REG_CONFIG, 992 + asb100_write_value(client, ASB100_REG_CONFIG, 965 993 (asb100_read_value(client, ASB100_REG_CONFIG) & 0xf7) | 0x01); 966 994 } 967 995 ··· 1050 1078 1051 1079 module_init(asb100_init); 1052 1080 module_exit(asb100_exit); 1053 -
+17 -6
drivers/hwmon/dme1737.c
··· 44 44 module_param(force_start, bool, 0); 45 45 MODULE_PARM_DESC(force_start, "Force the chip to start monitoring inputs"); 46 46 47 + static unsigned short force_id; 48 + module_param(force_id, ushort, 0); 49 + MODULE_PARM_DESC(force_id, "Override the detected device ID"); 50 + 47 51 /* Addresses to scan */ 48 52 static unsigned short normal_i2c[] = {0x2c, 0x2d, 0x2e, I2C_CLIENT_END}; 49 53 ··· 283 279 /* Fan input RPM */ 284 280 static inline int FAN_FROM_REG(int reg, int tpc) 285 281 { 286 - return (reg == 0 || reg == 0xffff) ? 0 : 287 - (tpc == 0) ? 90000 * 60 / reg : tpc * reg; 282 + if (tpc) { 283 + return tpc * reg; 284 + } else { 285 + return (reg == 0 || reg == 0xffff) ? 0 : 90000 * 60 / reg; 286 + } 288 287 } 289 288 290 289 static inline int FAN_TO_REG(int val, int tpc) 291 290 { 292 - return SENSORS_LIMIT((tpc == 0) ? 90000 * 60 / val : val / tpc, 293 - 0, 0xffff); 291 + if (tpc) { 292 + return SENSORS_LIMIT(val / tpc, 0, 0xffff); 293 + } else { 294 + return (val <= 0) ? 0xffff : 295 + SENSORS_LIMIT(90000 * 60 / val, 0, 0xfffe); 296 + } 294 297 } 295 298 296 299 /* Fan TPC (tach pulse count) ··· 2030 2019 2031 2020 /* Check device ID 2032 2021 * The DME1737 can return either 0x78 or 0x77 as its device ID. */ 2033 - reg = dme1737_sio_inb(sio_cip, 0x20); 2022 + reg = force_id ? force_id : dme1737_sio_inb(sio_cip, 0x20); 2034 2023 if (!(reg == 0x77 || reg == 0x78)) { 2035 2024 err = -ENODEV; 2036 2025 goto exit; ··· 2202 2191 /* Check device ID 2203 2192 * We currently know about SCH3112 (0x7c), SCH3114 (0x7d), and 2204 2193 * SCH3116 (0x7f). */ 2205 - reg = dme1737_sio_inb(sio_cip, 0x20); 2194 + reg = force_id ? force_id : dme1737_sio_inb(sio_cip, 0x20); 2206 2195 if (!(reg == 0x7c || reg == 0x7d || reg == 0x7f)) { 2207 2196 err = -ENODEV; 2208 2197 goto exit;
-1
drivers/hwmon/ds1621.c
··· 94 94 .driver = { 95 95 .name = "ds1621", 96 96 }, 97 - .id = I2C_DRIVERID_DS1621, 98 97 .attach_adapter = ds1621_attach_adapter, 99 98 .detach_client = ds1621_detach_client, 100 99 };
+5 -1
drivers/hwmon/f71805f.c
··· 41 41 #include <linux/ioport.h> 42 42 #include <asm/io.h> 43 43 44 + static unsigned short force_id; 45 + module_param(force_id, ushort, 0); 46 + MODULE_PARM_DESC(force_id, "Override the detected device ID"); 47 + 44 48 static struct platform_device *pdev; 45 49 46 50 #define DRVNAME "f71805f" ··· 1501 1497 if (devid != SIO_FINTEK_ID) 1502 1498 goto exit; 1503 1499 1504 - devid = superio_inw(sioaddr, SIO_REG_DEVID); 1500 + devid = force_id ? force_id : superio_inw(sioaddr, SIO_REG_DEVID); 1505 1501 switch (devid) { 1506 1502 case SIO_F71805F_ID: 1507 1503 sio_data->kind = f71805f;
+5 -1
drivers/hwmon/f71882fg.c
··· 74 74 75 75 #define FAN_MIN_DETECT 366 /* Lowest detectable fanspeed */ 76 76 77 + static unsigned short force_id; 78 + module_param(force_id, ushort, 0); 79 + MODULE_PARM_DESC(force_id, "Override the detected device ID"); 80 + 77 81 static struct platform_device *f71882fg_pdev = NULL; 78 82 79 83 /* Super-I/O Function prototypes */ ··· 847 843 goto exit; 848 844 } 849 845 850 - devid = superio_inw(sioaddr, SIO_REG_DEVID); 846 + devid = force_id ? force_id : superio_inw(sioaddr, SIO_REG_DEVID); 851 847 if (devid != SIO_F71882_ID) { 852 848 printk(KERN_INFO DRVNAME ": Unsupported Fintek device\n"); 853 849 goto exit;
-1
drivers/hwmon/fscher.c
··· 123 123 .driver = { 124 124 .name = "fscher", 125 125 }, 126 - .id = I2C_DRIVERID_FSCHER, 127 126 .attach_adapter = fscher_attach_adapter, 128 127 .detach_client = fscher_detach_client, 129 128 };
+90 -4
drivers/hwmon/fschmd.c
··· 41 41 #include <linux/err.h> 42 42 #include <linux/mutex.h> 43 43 #include <linux/sysfs.h> 44 + #include <linux/dmi.h> 44 45 45 46 /* Addresses to scan */ 46 47 static unsigned short normal_i2c[] = { 0x73, I2C_CLIENT_END }; ··· 134 133 { 0x71, 0x81, 0x91 }, /* her */ 135 134 { 0x71, 0xd1, 0x81, 0x91 }, /* scy */ 136 135 { 0x71, 0x81, 0x91 }, /* hrc */ 137 - { 0x71, 0x81, 0x91, 0xd1, 0xe1 }, /* hmd */ 136 + { 0x71, 0x81, 0x91, 0xd1, 0xe1 }, /* hmd */ 138 137 }; 139 138 140 139 /* temperature high limit registers, FSC does not document these. Proven to be ··· 147 146 { 0x76, 0x86, 0x96 }, /* her */ 148 147 { 0x76, 0xd6, 0x86, 0x96 }, /* scy */ 149 148 { 0x76, 0x86, 0x96 }, /* hrc */ 150 - { 0x76, 0x86, 0x96, 0xd6, 0xe6 }, /* hmd */ 149 + { 0x76, 0x86, 0x96, 0xd6, 0xe6 }, /* hmd */ 151 150 }; 152 151 153 152 /* These were found through experimenting with an fscher, currently they are ··· 211 210 u8 fan_ripple[6]; /* divider for rps */ 212 211 }; 213 212 213 + /* Global variables to hold information read from special DMI tables, which are 214 + available on FSC machines with an fscher or later chip. */ 215 + static int dmi_mult[3] = { 490, 200, 100 }; 216 + static int dmi_offset[3] = { 0, 0, 0 }; 217 + static int dmi_vref = -1; 218 + 219 + 214 220 /* 215 221 * Sysfs attr show / store functions 216 222 */ ··· 229 221 int index = to_sensor_dev_attr(devattr)->index; 230 222 struct fschmd_data *data = fschmd_update_device(dev); 231 223 232 - return sprintf(buf, "%d\n", (data->volt[index] * 233 - max_reading[index] + 128) / 255); 224 + /* fscher / fschrc - 1 as data->kind is an array index, not a chips */ 225 + if (data->kind == (fscher - 1) || data->kind >= (fschrc - 1)) 226 + return sprintf(buf, "%d\n", (data->volt[index] * dmi_vref * 227 + dmi_mult[index]) / 255 + dmi_offset[index]); 228 + else 229 + return sprintf(buf, "%d\n", (data->volt[index] * 230 + max_reading[index] + 128) / 255); 234 231 } 235 232 236 233 ··· 538 525 * Real code 539 526 */ 540 527 528 + /* DMI decode routine to read voltage scaling factors from special DMI tables, 529 + which are available on FSC machines with an fscher or later chip. */ 530 + static void fschmd_dmi_decode(const struct dmi_header *header) 531 + { 532 + int i, mult[3] = { 0 }, offset[3] = { 0 }, vref = 0, found = 0; 533 + 534 + /* dmi code ugliness, we get passed the address of the contents of 535 + a complete DMI record, but in the form of a dmi_header pointer, in 536 + reality this address holds header->length bytes of which the header 537 + are the first 4 bytes */ 538 + u8 *dmi_data = (u8 *)header; 539 + 540 + /* We are looking for OEM-specific type 185 */ 541 + if (header->type != 185) 542 + return; 543 + 544 + /* we are looking for what Siemens calls "subtype" 19, the subtype 545 + is stored in byte 5 of the dmi block */ 546 + if (header->length < 5 || dmi_data[4] != 19) 547 + return; 548 + 549 + /* After the subtype comes 1 unknown byte and then blocks of 5 bytes, 550 + consisting of what Siemens calls an "Entity" number, followed by 551 + 2 16-bit words in LSB first order */ 552 + for (i = 6; (i + 4) < header->length; i += 5) { 553 + /* entity 1 - 3: voltage multiplier and offset */ 554 + if (dmi_data[i] >= 1 && dmi_data[i] <= 3) { 555 + /* Our in sensors order and the DMI order differ */ 556 + const int shuffle[3] = { 1, 0, 2 }; 557 + int in = shuffle[dmi_data[i] - 1]; 558 + 559 + /* Check for twice the same entity */ 560 + if (found & (1 << in)) 561 + return; 562 + 563 + mult[in] = dmi_data[i + 1] | (dmi_data[i + 2] << 8); 564 + offset[in] = dmi_data[i + 3] | (dmi_data[i + 4] << 8); 565 + 566 + found |= 1 << in; 567 + } 568 + 569 + /* entity 7: reference voltage */ 570 + if (dmi_data[i] == 7) { 571 + /* Check for twice the same entity */ 572 + if (found & 0x08) 573 + return; 574 + 575 + vref = dmi_data[i + 1] | (dmi_data[i + 2] << 8); 576 + 577 + found |= 0x08; 578 + } 579 + } 580 + 581 + if (found == 0x0F) { 582 + for (i = 0; i < 3; i++) { 583 + dmi_mult[i] = mult[i] * 10; 584 + dmi_offset[i] = offset[i] * 10; 585 + } 586 + dmi_vref = vref; 587 + } 588 + } 589 + 541 590 static int fschmd_detect(struct i2c_adapter *adapter, int address, int kind) 542 591 { 543 592 struct i2c_client *client; ··· 659 584 data->temp_max[0] = 70 + 128; 660 585 data->temp_max[1] = 50 + 128; 661 586 data->temp_max[2] = 50 + 128; 587 + } 588 + 589 + /* Read the special DMI table for fscher and newer chips */ 590 + if (kind == fscher || kind >= fschrc) { 591 + dmi_walk(fschmd_dmi_decode); 592 + if (dmi_vref == -1) { 593 + printk(KERN_WARNING FSCHMD_NAME 594 + ": Couldn't get voltage scaling factors from " 595 + "BIOS DMI table, using builtin defaults\n"); 596 + dmi_vref = 33; 597 + } 662 598 } 663 599 664 600 /* i2c kind goes from 1-5, we want from 0-4 to address arrays */
-1
drivers/hwmon/fscpos.c
··· 105 105 .driver = { 106 106 .name = "fscpos", 107 107 }, 108 - .id = I2C_DRIVERID_FSCPOS, 109 108 .attach_adapter = fscpos_attach_adapter, 110 109 .detach_client = fscpos_detach_client, 111 110 };
+181 -88
drivers/hwmon/gl518sm.c
··· 30 30 * We did not keep that part of the original driver in the Linux 2.6 31 31 * version, since it was making the driver significantly more complex 32 32 * with no real benefit. 33 - * 34 - * History: 35 - * 2004-01-28 Original port. (Hong-Gunn Chew) 36 - * 2004-01-31 Code review and approval. (Jean Delvare) 37 33 */ 38 34 39 35 #include <linux/module.h> ··· 38 42 #include <linux/jiffies.h> 39 43 #include <linux/i2c.h> 40 44 #include <linux/hwmon.h> 45 + #include <linux/hwmon-sysfs.h> 41 46 #include <linux/err.h> 42 47 #include <linux/mutex.h> 43 48 #include <linux/sysfs.h> ··· 96 99 long rpmdiv; 97 100 if (rpm == 0) 98 101 return 0; 99 - rpmdiv = SENSORS_LIMIT(rpm, 1, 1920000) * div; 100 - return SENSORS_LIMIT((960000 + rpmdiv / 2) / rpmdiv, 1, 255); 102 + rpmdiv = SENSORS_LIMIT(rpm, 1, 960000) * div; 103 + return SENSORS_LIMIT((480000 + rpmdiv / 2) / rpmdiv, 1, 255); 101 104 } 102 - #define FAN_FROM_REG(val,div) ((val)==0 ? 0 : (960000/((val)*(div)))) 105 + #define FAN_FROM_REG(val,div) ((val)==0 ? 0 : (480000/((val)*(div)))) 103 106 104 107 #define IN_TO_REG(val) (SENSORS_LIMIT((((val)+9)/19),0,255)) 105 108 #define IN_FROM_REG(val) ((val)*19) ··· 107 110 #define VDD_TO_REG(val) (SENSORS_LIMIT((((val)*4+47)/95),0,255)) 108 111 #define VDD_FROM_REG(val) (((val)*95+2)/4) 109 112 110 - #define DIV_TO_REG(val) ((val)==4?2:(val)==2?1:(val)==1?0:3) 111 113 #define DIV_FROM_REG(val) (1 << (val)) 112 114 113 115 #define BEEP_MASK_TO_REG(val) ((val) & 0x7f & data->alarm_mask) ··· 125 129 u8 voltage_in[4]; /* Register values; [0] = VDD */ 126 130 u8 voltage_min[4]; /* Register values; [0] = VDD */ 127 131 u8 voltage_max[4]; /* Register values; [0] = VDD */ 128 - u8 iter_voltage_in[4]; /* Register values; [0] = VDD */ 129 132 u8 fan_in[2]; 130 133 u8 fan_min[2]; 131 134 u8 fan_div[2]; /* Register encoding, shifted right */ ··· 133 138 u8 temp_max; /* Register values */ 134 139 u8 temp_hyst; /* Register values */ 135 140 u8 alarms; /* Register value */ 136 - u8 alarm_mask; /* Register value */ 141 + u8 alarm_mask; 137 142 u8 beep_mask; /* Register value */ 138 143 u8 beep_enable; /* Boolean */ 139 144 }; ··· 151 156 .driver = { 152 157 .name = "gl518sm", 153 158 }, 154 - .id = I2C_DRIVERID_GL518, 155 159 .attach_adapter = gl518_attach_adapter, 156 160 .detach_client = gl518_detach_client, 157 161 }; ··· 166 172 return sprintf(buf, "%d\n", type##_FROM_REG(data->value)); \ 167 173 } 168 174 169 - #define show_fan(suffix, value, index) \ 170 - static ssize_t show_##suffix(struct device *dev, struct device_attribute *attr, char *buf) \ 171 - { \ 172 - struct gl518_data *data = gl518_update_device(dev); \ 173 - return sprintf(buf, "%d\n", FAN_FROM_REG(data->value[index], \ 174 - DIV_FROM_REG(data->fan_div[index]))); \ 175 - } 176 - 177 175 show(TEMP, temp_input1, temp_in); 178 176 show(TEMP, temp_max1, temp_max); 179 177 show(TEMP, temp_hyst1, temp_hyst); 180 178 show(BOOL, fan_auto1, fan_auto1); 181 - show_fan(fan_input1, fan_in, 0); 182 - show_fan(fan_input2, fan_in, 1); 183 - show_fan(fan_min1, fan_min, 0); 184 - show_fan(fan_min2, fan_min, 1); 185 - show(DIV, fan_div1, fan_div[0]); 186 - show(DIV, fan_div2, fan_div[1]); 187 179 show(VDD, in_input0, voltage_in[0]); 188 180 show(IN, in_input1, voltage_in[1]); 189 181 show(IN, in_input2, voltage_in[2]); ··· 185 205 show(RAW, alarms, alarms); 186 206 show(BOOL, beep_enable, beep_enable); 187 207 show(BEEP_MASK, beep_mask, beep_mask); 208 + 209 + static ssize_t show_fan_input(struct device *dev, 210 + struct device_attribute *attr, char *buf) 211 + { 212 + int nr = to_sensor_dev_attr(attr)->index; 213 + struct gl518_data *data = gl518_update_device(dev); 214 + return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_in[nr], 215 + DIV_FROM_REG(data->fan_div[nr]))); 216 + } 217 + 218 + static ssize_t show_fan_min(struct device *dev, 219 + struct device_attribute *attr, char *buf) 220 + { 221 + int nr = to_sensor_dev_attr(attr)->index; 222 + struct gl518_data *data = gl518_update_device(dev); 223 + return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr], 224 + DIV_FROM_REG(data->fan_div[nr]))); 225 + } 226 + 227 + static ssize_t show_fan_div(struct device *dev, 228 + struct device_attribute *attr, char *buf) 229 + { 230 + int nr = to_sensor_dev_attr(attr)->index; 231 + struct gl518_data *data = gl518_update_device(dev); 232 + return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr])); 233 + } 188 234 189 235 #define set(type, suffix, value, reg) \ 190 236 static ssize_t set_##suffix(struct device *dev, struct device_attribute *attr, const char *buf, \ ··· 253 247 set(TEMP, temp_max1, temp_max, GL518_REG_TEMP_MAX); 254 248 set(TEMP, temp_hyst1, temp_hyst, GL518_REG_TEMP_HYST); 255 249 set_bits(BOOL, fan_auto1, fan_auto1, GL518_REG_MISC, 0x08, 3); 256 - set_bits(DIV, fan_div1, fan_div[0], GL518_REG_MISC, 0xc0, 6); 257 - set_bits(DIV, fan_div2, fan_div[1], GL518_REG_MISC, 0x30, 4); 258 250 set_low(VDD, in_min0, voltage_min[0], GL518_REG_VDD_LIMIT); 259 251 set_low(IN, in_min1, voltage_min[1], GL518_REG_VIN1_LIMIT); 260 252 set_low(IN, in_min2, voltage_min[2], GL518_REG_VIN2_LIMIT); ··· 264 260 set_bits(BOOL, beep_enable, beep_enable, GL518_REG_CONF, 0x04, 2); 265 261 set(BEEP_MASK, beep_mask, beep_mask, GL518_REG_ALARM); 266 262 267 - static ssize_t set_fan_min1(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 263 + static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, 264 + const char *buf, size_t count) 268 265 { 269 266 struct i2c_client *client = to_i2c_client(dev); 270 267 struct gl518_data *data = i2c_get_clientdata(client); 268 + int nr = to_sensor_dev_attr(attr)->index; 271 269 int regvalue; 272 270 unsigned long val = simple_strtoul(buf, NULL, 10); 273 271 274 272 mutex_lock(&data->update_lock); 275 273 regvalue = gl518_read_value(client, GL518_REG_FAN_LIMIT); 276 - data->fan_min[0] = FAN_TO_REG(val, 277 - DIV_FROM_REG(data->fan_div[0])); 278 - regvalue = (regvalue & 0x00ff) | (data->fan_min[0] << 8); 274 + data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr])); 275 + regvalue = (regvalue & (0xff << (8 * nr))) 276 + | (data->fan_min[nr] << (8 * (1 - nr))); 279 277 gl518_write_value(client, GL518_REG_FAN_LIMIT, regvalue); 280 278 281 279 data->beep_mask = gl518_read_value(client, GL518_REG_ALARM); 282 - if (data->fan_min[0] == 0) 283 - data->alarm_mask &= ~0x20; 280 + if (data->fan_min[nr] == 0) 281 + data->alarm_mask &= ~(0x20 << nr); 284 282 else 285 - data->alarm_mask |= 0x20; 283 + data->alarm_mask |= (0x20 << nr); 286 284 data->beep_mask &= data->alarm_mask; 287 285 gl518_write_value(client, GL518_REG_ALARM, data->beep_mask); 288 286 ··· 292 286 return count; 293 287 } 294 288 295 - static ssize_t set_fan_min2(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 289 + static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 290 + const char *buf, size_t count) 296 291 { 297 292 struct i2c_client *client = to_i2c_client(dev); 298 293 struct gl518_data *data = i2c_get_clientdata(client); 294 + int nr = to_sensor_dev_attr(attr)->index; 299 295 int regvalue; 300 296 unsigned long val = simple_strtoul(buf, NULL, 10); 301 297 298 + switch (val) { 299 + case 1: val = 0; break; 300 + case 2: val = 1; break; 301 + case 4: val = 2; break; 302 + case 8: val = 3; break; 303 + default: 304 + dev_err(dev, "Invalid fan clock divider %lu, choose one " 305 + "of 1, 2, 4 or 8\n", val); 306 + return -EINVAL; 307 + } 308 + 302 309 mutex_lock(&data->update_lock); 303 - regvalue = gl518_read_value(client, GL518_REG_FAN_LIMIT); 304 - data->fan_min[1] = FAN_TO_REG(val, 305 - DIV_FROM_REG(data->fan_div[1])); 306 - regvalue = (regvalue & 0xff00) | data->fan_min[1]; 307 - gl518_write_value(client, GL518_REG_FAN_LIMIT, regvalue); 308 - 309 - data->beep_mask = gl518_read_value(client, GL518_REG_ALARM); 310 - if (data->fan_min[1] == 0) 311 - data->alarm_mask &= ~0x40; 312 - else 313 - data->alarm_mask |= 0x40; 314 - data->beep_mask &= data->alarm_mask; 315 - gl518_write_value(client, GL518_REG_ALARM, data->beep_mask); 316 - 310 + regvalue = gl518_read_value(client, GL518_REG_MISC); 311 + data->fan_div[nr] = val; 312 + regvalue = (regvalue & ~(0xc0 >> (2 * nr))) 313 + | (data->fan_div[nr] << (6 - 2 * nr)); 314 + gl518_write_value(client, GL518_REG_MISC, regvalue); 317 315 mutex_unlock(&data->update_lock); 318 316 return count; 319 317 } ··· 327 317 static DEVICE_ATTR(temp1_max_hyst, S_IWUSR|S_IRUGO, 328 318 show_temp_hyst1, set_temp_hyst1); 329 319 static DEVICE_ATTR(fan1_auto, S_IWUSR|S_IRUGO, show_fan_auto1, set_fan_auto1); 330 - static DEVICE_ATTR(fan1_input, S_IRUGO, show_fan_input1, NULL); 331 - static DEVICE_ATTR(fan2_input, S_IRUGO, show_fan_input2, NULL); 332 - static DEVICE_ATTR(fan1_min, S_IWUSR|S_IRUGO, show_fan_min1, set_fan_min1); 333 - static DEVICE_ATTR(fan2_min, S_IWUSR|S_IRUGO, show_fan_min2, set_fan_min2); 334 - static DEVICE_ATTR(fan1_div, S_IWUSR|S_IRUGO, show_fan_div1, set_fan_div1); 335 - static DEVICE_ATTR(fan2_div, S_IWUSR|S_IRUGO, show_fan_div2, set_fan_div2); 320 + static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan_input, NULL, 0); 321 + static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan_input, NULL, 1); 322 + static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR|S_IRUGO, 323 + show_fan_min, set_fan_min, 0); 324 + static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR|S_IRUGO, 325 + show_fan_min, set_fan_min, 1); 326 + static SENSOR_DEVICE_ATTR(fan1_div, S_IWUSR|S_IRUGO, 327 + show_fan_div, set_fan_div, 0); 328 + static SENSOR_DEVICE_ATTR(fan2_div, S_IWUSR|S_IRUGO, 329 + show_fan_div, set_fan_div, 1); 336 330 static DEVICE_ATTR(in0_input, S_IRUGO, show_in_input0, NULL); 337 331 static DEVICE_ATTR(in1_input, S_IRUGO, show_in_input1, NULL); 338 332 static DEVICE_ATTR(in2_input, S_IRUGO, show_in_input2, NULL); ··· 355 341 static DEVICE_ATTR(beep_mask, S_IWUSR|S_IRUGO, 356 342 show_beep_mask, set_beep_mask); 357 343 344 + static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, 345 + char *buf) 346 + { 347 + int bitnr = to_sensor_dev_attr(attr)->index; 348 + struct gl518_data *data = gl518_update_device(dev); 349 + return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); 350 + } 351 + 352 + static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0); 353 + static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1); 354 + static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2); 355 + static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3); 356 + static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4); 357 + static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 5); 358 + static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 6); 359 + 360 + static ssize_t show_beep(struct device *dev, struct device_attribute *attr, 361 + char *buf) 362 + { 363 + int bitnr = to_sensor_dev_attr(attr)->index; 364 + struct gl518_data *data = gl518_update_device(dev); 365 + return sprintf(buf, "%u\n", (data->beep_mask >> bitnr) & 1); 366 + } 367 + 368 + static ssize_t set_beep(struct device *dev, struct device_attribute *attr, 369 + const char *buf, size_t count) 370 + { 371 + struct i2c_client *client = to_i2c_client(dev); 372 + struct gl518_data *data = i2c_get_clientdata(client); 373 + int bitnr = to_sensor_dev_attr(attr)->index; 374 + unsigned long bit; 375 + 376 + bit = simple_strtoul(buf, NULL, 10); 377 + if (bit & ~1) 378 + return -EINVAL; 379 + 380 + mutex_lock(&data->update_lock); 381 + data->beep_mask = gl518_read_value(client, GL518_REG_ALARM); 382 + if (bit) 383 + data->beep_mask |= (1 << bitnr); 384 + else 385 + data->beep_mask &= ~(1 << bitnr); 386 + gl518_write_value(client, GL518_REG_ALARM, data->beep_mask); 387 + mutex_unlock(&data->update_lock); 388 + return count; 389 + } 390 + 391 + static SENSOR_DEVICE_ATTR(in0_beep, S_IRUGO|S_IWUSR, show_beep, set_beep, 0); 392 + static SENSOR_DEVICE_ATTR(in1_beep, S_IRUGO|S_IWUSR, show_beep, set_beep, 1); 393 + static SENSOR_DEVICE_ATTR(in2_beep, S_IRUGO|S_IWUSR, show_beep, set_beep, 2); 394 + static SENSOR_DEVICE_ATTR(in3_beep, S_IRUGO|S_IWUSR, show_beep, set_beep, 3); 395 + static SENSOR_DEVICE_ATTR(temp1_beep, S_IRUGO|S_IWUSR, show_beep, set_beep, 4); 396 + static SENSOR_DEVICE_ATTR(fan1_beep, S_IRUGO|S_IWUSR, show_beep, set_beep, 5); 397 + static SENSOR_DEVICE_ATTR(fan2_beep, S_IRUGO|S_IWUSR, show_beep, set_beep, 6); 398 + 358 399 static struct attribute *gl518_attributes[] = { 359 - &dev_attr_in0_input.attr, 360 - &dev_attr_in1_input.attr, 361 - &dev_attr_in2_input.attr, 362 400 &dev_attr_in3_input.attr, 363 401 &dev_attr_in0_min.attr, 364 402 &dev_attr_in1_min.attr, ··· 420 354 &dev_attr_in1_max.attr, 421 355 &dev_attr_in2_max.attr, 422 356 &dev_attr_in3_max.attr, 357 + &sensor_dev_attr_in0_alarm.dev_attr.attr, 358 + &sensor_dev_attr_in1_alarm.dev_attr.attr, 359 + &sensor_dev_attr_in2_alarm.dev_attr.attr, 360 + &sensor_dev_attr_in3_alarm.dev_attr.attr, 361 + &sensor_dev_attr_in0_beep.dev_attr.attr, 362 + &sensor_dev_attr_in1_beep.dev_attr.attr, 363 + &sensor_dev_attr_in2_beep.dev_attr.attr, 364 + &sensor_dev_attr_in3_beep.dev_attr.attr, 423 365 424 366 &dev_attr_fan1_auto.attr, 425 - &dev_attr_fan1_input.attr, 426 - &dev_attr_fan2_input.attr, 427 - &dev_attr_fan1_min.attr, 428 - &dev_attr_fan2_min.attr, 429 - &dev_attr_fan1_div.attr, 430 - &dev_attr_fan2_div.attr, 367 + &sensor_dev_attr_fan1_input.dev_attr.attr, 368 + &sensor_dev_attr_fan2_input.dev_attr.attr, 369 + &sensor_dev_attr_fan1_min.dev_attr.attr, 370 + &sensor_dev_attr_fan2_min.dev_attr.attr, 371 + &sensor_dev_attr_fan1_div.dev_attr.attr, 372 + &sensor_dev_attr_fan2_div.dev_attr.attr, 373 + &sensor_dev_attr_fan1_alarm.dev_attr.attr, 374 + &sensor_dev_attr_fan2_alarm.dev_attr.attr, 375 + &sensor_dev_attr_fan1_beep.dev_attr.attr, 376 + &sensor_dev_attr_fan2_beep.dev_attr.attr, 431 377 432 378 &dev_attr_temp1_input.attr, 433 379 &dev_attr_temp1_max.attr, 434 380 &dev_attr_temp1_max_hyst.attr, 381 + &sensor_dev_attr_temp1_alarm.dev_attr.attr, 382 + &sensor_dev_attr_temp1_beep.dev_attr.attr, 435 383 436 384 &dev_attr_alarms.attr, 437 385 &dev_attr_beep_enable.attr, ··· 455 375 456 376 static const struct attribute_group gl518_group = { 457 377 .attrs = gl518_attributes, 378 + }; 379 + 380 + static struct attribute *gl518_attributes_r80[] = { 381 + &dev_attr_in0_input.attr, 382 + &dev_attr_in1_input.attr, 383 + &dev_attr_in2_input.attr, 384 + NULL 385 + }; 386 + 387 + static const struct attribute_group gl518_group_r80 = { 388 + .attrs = gl518_attributes_r80, 458 389 }; 459 390 460 391 /* ··· 482 391 static int gl518_detect(struct i2c_adapter *adapter, int address, int kind) 483 392 { 484 393 int i; 485 - struct i2c_client *new_client; 394 + struct i2c_client *client; 486 395 struct gl518_data *data; 487 396 int err = 0; 488 397 ··· 499 408 goto exit; 500 409 } 501 410 502 - new_client = &data->client; 503 - i2c_set_clientdata(new_client, data); 411 + client = &data->client; 412 + i2c_set_clientdata(client, data); 504 413 505 - new_client->addr = address; 506 - new_client->adapter = adapter; 507 - new_client->driver = &gl518_driver; 508 - new_client->flags = 0; 414 + client->addr = address; 415 + client->adapter = adapter; 416 + client->driver = &gl518_driver; 509 417 510 418 /* Now, we do the remaining detection. */ 511 419 512 420 if (kind < 0) { 513 - if ((gl518_read_value(new_client, GL518_REG_CHIP_ID) != 0x80) 514 - || (gl518_read_value(new_client, GL518_REG_CONF) & 0x80)) 421 + if ((gl518_read_value(client, GL518_REG_CHIP_ID) != 0x80) 422 + || (gl518_read_value(client, GL518_REG_CONF) & 0x80)) 515 423 goto exit_free; 516 424 } 517 425 518 426 /* Determine the chip type. */ 519 427 if (kind <= 0) { 520 - i = gl518_read_value(new_client, GL518_REG_REVISION); 428 + i = gl518_read_value(client, GL518_REG_REVISION); 521 429 if (i == 0x00) { 522 430 kind = gl518sm_r00; 523 431 } else if (i == 0x80) { ··· 532 442 } 533 443 534 444 /* Fill in the remaining client fields */ 535 - strlcpy(new_client->name, "gl518sm", I2C_NAME_SIZE); 445 + strlcpy(client->name, "gl518sm", I2C_NAME_SIZE); 536 446 data->type = kind; 537 - data->valid = 0; 538 447 mutex_init(&data->update_lock); 539 448 540 449 /* Tell the I2C layer a new client has arrived */ 541 - if ((err = i2c_attach_client(new_client))) 450 + if ((err = i2c_attach_client(client))) 542 451 goto exit_free; 543 452 544 453 /* Initialize the GL518SM chip */ 545 454 data->alarm_mask = 0xff; 546 - data->voltage_in[0]=data->voltage_in[1]=data->voltage_in[2]=0; 547 - gl518_init_client((struct i2c_client *) new_client); 455 + gl518_init_client(client); 548 456 549 457 /* Register sysfs hooks */ 550 - if ((err = sysfs_create_group(&new_client->dev.kobj, &gl518_group))) 458 + if ((err = sysfs_create_group(&client->dev.kobj, &gl518_group))) 551 459 goto exit_detach; 460 + if (data->type == gl518sm_r80) 461 + if ((err = sysfs_create_group(&client->dev.kobj, 462 + &gl518_group_r80))) 463 + goto exit_remove_files; 552 464 553 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 465 + data->hwmon_dev = hwmon_device_register(&client->dev); 554 466 if (IS_ERR(data->hwmon_dev)) { 555 467 err = PTR_ERR(data->hwmon_dev); 556 468 goto exit_remove_files; ··· 561 469 return 0; 562 470 563 471 exit_remove_files: 564 - sysfs_remove_group(&new_client->dev.kobj, &gl518_group); 472 + sysfs_remove_group(&client->dev.kobj, &gl518_group); 473 + if (data->type == gl518sm_r80) 474 + sysfs_remove_group(&client->dev.kobj, &gl518_group_r80); 565 475 exit_detach: 566 - i2c_detach_client(new_client); 476 + i2c_detach_client(client); 567 477 exit_free: 568 478 kfree(data); 569 479 exit: ··· 598 504 599 505 hwmon_device_unregister(data->hwmon_dev); 600 506 sysfs_remove_group(&client->dev.kobj, &gl518_group); 507 + if (data->type == gl518sm_r80) 508 + sysfs_remove_group(&client->dev.kobj, &gl518_group_r80); 601 509 602 510 if ((err = i2c_detach_client(client))) 603 511 return err; ··· 608 512 return 0; 609 513 } 610 514 611 - /* Registers 0x07 to 0x0c are word-sized, others are byte-sized 515 + /* Registers 0x07 to 0x0c are word-sized, others are byte-sized 612 516 GL518 uses a high-byte first convention, which is exactly opposite to 613 - the usual practice. */ 517 + the SMBus standard. */ 614 518 static int gl518_read_value(struct i2c_client *client, u8 reg) 615 519 { 616 520 if ((reg >= 0x07) && (reg <= 0x0c)) ··· 619 523 return i2c_smbus_read_byte_data(client, reg); 620 524 } 621 525 622 - /* Registers 0x07 to 0x0c are word-sized, others are byte-sized 623 - GL518 uses a high-byte first convention, which is exactly opposite to 624 - the usual practice. */ 625 526 static int gl518_write_value(struct i2c_client *client, u8 reg, u16 value) 626 527 { 627 528 if ((reg >= 0x07) && (reg <= 0x0c))
+386 -256
drivers/hwmon/gl520sm.c
··· 27 27 #include <linux/jiffies.h> 28 28 #include <linux/i2c.h> 29 29 #include <linux/hwmon.h> 30 + #include <linux/hwmon-sysfs.h> 30 31 #include <linux/hwmon-vid.h> 31 32 #include <linux/err.h> 32 33 #include <linux/mutex.h> ··· 44 43 /* Insmod parameters */ 45 44 I2C_CLIENT_INSMOD_1(gl520sm); 46 45 47 - /* Many GL520 constants specified below 46 + /* Many GL520 constants specified below 48 47 One of the inputs can be configured as either temp or voltage. 49 - That's why _TEMP2 and _IN4 access the same register 48 + That's why _TEMP2 and _IN4 access the same register 50 49 */ 51 50 52 51 /* The GL520 registers */ ··· 57 56 58 57 #define GL520_REG_VID_INPUT 0x02 59 58 60 - #define GL520_REG_IN0_INPUT 0x15 61 - #define GL520_REG_IN0_LIMIT 0x0c 62 - #define GL520_REG_IN0_MIN GL520_REG_IN0_LIMIT 63 - #define GL520_REG_IN0_MAX GL520_REG_IN0_LIMIT 59 + static const u8 GL520_REG_IN_INPUT[] = { 0x15, 0x14, 0x13, 0x0d, 0x0e }; 60 + static const u8 GL520_REG_IN_LIMIT[] = { 0x0c, 0x09, 0x0a, 0x0b }; 61 + static const u8 GL520_REG_IN_MIN[] = { 0x0c, 0x09, 0x0a, 0x0b, 0x18 }; 62 + static const u8 GL520_REG_IN_MAX[] = { 0x0c, 0x09, 0x0a, 0x0b, 0x17 }; 64 63 65 - #define GL520_REG_IN1_INPUT 0x14 66 - #define GL520_REG_IN1_LIMIT 0x09 67 - #define GL520_REG_IN1_MIN GL520_REG_IN1_LIMIT 68 - #define GL520_REG_IN1_MAX GL520_REG_IN1_LIMIT 69 - 70 - #define GL520_REG_IN2_INPUT 0x13 71 - #define GL520_REG_IN2_LIMIT 0x0a 72 - #define GL520_REG_IN2_MIN GL520_REG_IN2_LIMIT 73 - #define GL520_REG_IN2_MAX GL520_REG_IN2_LIMIT 74 - 75 - #define GL520_REG_IN3_INPUT 0x0d 76 - #define GL520_REG_IN3_LIMIT 0x0b 77 - #define GL520_REG_IN3_MIN GL520_REG_IN3_LIMIT 78 - #define GL520_REG_IN3_MAX GL520_REG_IN3_LIMIT 79 - 80 - #define GL520_REG_IN4_INPUT 0x0e 81 - #define GL520_REG_IN4_MAX 0x17 82 - #define GL520_REG_IN4_MIN 0x18 83 - 84 - #define GL520_REG_TEMP1_INPUT 0x04 85 - #define GL520_REG_TEMP1_MAX 0x05 86 - #define GL520_REG_TEMP1_MAX_HYST 0x06 87 - 88 - #define GL520_REG_TEMP2_INPUT 0x0e 89 - #define GL520_REG_TEMP2_MAX 0x17 90 - #define GL520_REG_TEMP2_MAX_HYST 0x18 64 + static const u8 GL520_REG_TEMP_INPUT[] = { 0x04, 0x0e }; 65 + static const u8 GL520_REG_TEMP_MAX[] = { 0x05, 0x17 }; 66 + static const u8 GL520_REG_TEMP_MAX_HYST[] = { 0x06, 0x18 }; 91 67 92 68 #define GL520_REG_FAN_INPUT 0x07 93 69 #define GL520_REG_FAN_MIN 0x08 ··· 92 114 .driver = { 93 115 .name = "gl520sm", 94 116 }, 95 - .id = I2C_DRIVERID_GL520, 96 117 .attach_adapter = gl520_attach_adapter, 97 118 .detach_client = gl520_detach_client, 98 119 }; ··· 127 150 * Sysfs stuff 128 151 */ 129 152 130 - #define sysfs_r(type, n, item, reg) \ 131 - static ssize_t get_##type##item (struct gl520_data *, char *, int); \ 132 - static ssize_t get_##type##n##item (struct device *, struct device_attribute *attr, char *); \ 133 - static ssize_t get_##type##n##item (struct device *dev, struct device_attribute *attr, char *buf) \ 134 - { \ 135 - struct gl520_data *data = gl520_update_device(dev); \ 136 - return get_##type##item(data, buf, (n)); \ 137 - } 138 - 139 - #define sysfs_w(type, n, item, reg) \ 140 - static ssize_t set_##type##item (struct i2c_client *, struct gl520_data *, const char *, size_t, int, int); \ 141 - static ssize_t set_##type##n##item (struct device *, struct device_attribute *attr, const char *, size_t); \ 142 - static ssize_t set_##type##n##item (struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \ 143 - { \ 144 - struct i2c_client *client = to_i2c_client(dev); \ 145 - struct gl520_data *data = i2c_get_clientdata(client); \ 146 - return set_##type##item(client, data, buf, count, (n), reg); \ 147 - } 148 - 149 - #define sysfs_rw_n(type, n, item, reg) \ 150 - sysfs_r(type, n, item, reg) \ 151 - sysfs_w(type, n, item, reg) \ 152 - static DEVICE_ATTR(type##n##item, S_IRUGO | S_IWUSR, get_##type##n##item, set_##type##n##item); 153 - 154 - #define sysfs_ro_n(type, n, item, reg) \ 155 - sysfs_r(type, n, item, reg) \ 156 - static DEVICE_ATTR(type##n##item, S_IRUGO, get_##type##n##item, NULL); 157 - 158 - #define sysfs_rw(type, item, reg) \ 159 - sysfs_r(type, 0, item, reg) \ 160 - sysfs_w(type, 0, item, reg) \ 161 - static DEVICE_ATTR(type##item, S_IRUGO | S_IWUSR, get_##type##0##item, set_##type##0##item); 162 - 163 - #define sysfs_ro(type, item, reg) \ 164 - sysfs_r(type, 0, item, reg) \ 165 - static DEVICE_ATTR(type##item, S_IRUGO, get_##type##0##item, NULL); 166 - 167 - 168 - #define sysfs_vid(n) \ 169 - sysfs_ro_n(cpu, n, _vid, GL520_REG_VID_INPUT) 170 - 171 - #define sysfs_in(n) \ 172 - sysfs_ro_n(in, n, _input, GL520_REG_IN##n##INPUT) \ 173 - sysfs_rw_n(in, n, _min, GL520_REG_IN##n##_MIN) \ 174 - sysfs_rw_n(in, n, _max, GL520_REG_IN##n##_MAX) \ 175 - 176 - #define sysfs_fan(n) \ 177 - sysfs_ro_n(fan, n, _input, GL520_REG_FAN_INPUT) \ 178 - sysfs_rw_n(fan, n, _min, GL520_REG_FAN_MIN) \ 179 - sysfs_rw_n(fan, n, _div, GL520_REG_FAN_DIV) 180 - 181 - #define sysfs_fan_off(n) \ 182 - sysfs_rw_n(fan, n, _off, GL520_REG_FAN_OFF) \ 183 - 184 - #define sysfs_temp(n) \ 185 - sysfs_ro_n(temp, n, _input, GL520_REG_TEMP##n##_INPUT) \ 186 - sysfs_rw_n(temp, n, _max, GL520_REG_TEMP##n##_MAX) \ 187 - sysfs_rw_n(temp, n, _max_hyst, GL520_REG_TEMP##n##_MAX_HYST) 188 - 189 - #define sysfs_alarms() \ 190 - sysfs_ro(alarms, , GL520_REG_ALARMS) \ 191 - sysfs_rw(beep_enable, , GL520_REG_BEEP_ENABLE) \ 192 - sysfs_rw(beep_mask, , GL520_REG_BEEP_MASK) 193 - 194 - 195 - sysfs_vid(0) 196 - 197 - sysfs_in(0) 198 - sysfs_in(1) 199 - sysfs_in(2) 200 - sysfs_in(3) 201 - sysfs_in(4) 202 - 203 - sysfs_fan(1) 204 - sysfs_fan(2) 205 - sysfs_fan_off(1) 206 - 207 - sysfs_temp(1) 208 - sysfs_temp(2) 209 - 210 - sysfs_alarms() 211 - 212 - 213 - static ssize_t get_cpu_vid(struct gl520_data *data, char *buf, int n) 153 + static ssize_t get_cpu_vid(struct device *dev, struct device_attribute *attr, 154 + char *buf) 214 155 { 156 + struct gl520_data *data = gl520_update_device(dev); 215 157 return sprintf(buf, "%u\n", vid_from_reg(data->vid, data->vrm)); 216 158 } 159 + static DEVICE_ATTR(cpu0_vid, S_IRUGO, get_cpu_vid, NULL); 217 160 218 161 #define VDD_FROM_REG(val) (((val)*95+2)/4) 219 162 #define VDD_TO_REG(val) (SENSORS_LIMIT((((val)*4+47)/95),0,255)) ··· 141 244 #define IN_FROM_REG(val) ((val)*19) 142 245 #define IN_TO_REG(val) (SENSORS_LIMIT((((val)+9)/19),0,255)) 143 246 144 - static ssize_t get_in_input(struct gl520_data *data, char *buf, int n) 247 + static ssize_t get_in_input(struct device *dev, struct device_attribute *attr, 248 + char *buf) 145 249 { 250 + int n = to_sensor_dev_attr(attr)->index; 251 + struct gl520_data *data = gl520_update_device(dev); 146 252 u8 r = data->in_input[n]; 147 253 148 254 if (n == 0) ··· 154 254 return sprintf(buf, "%d\n", IN_FROM_REG(r)); 155 255 } 156 256 157 - static ssize_t get_in_min(struct gl520_data *data, char *buf, int n) 257 + static ssize_t get_in_min(struct device *dev, struct device_attribute *attr, 258 + char *buf) 158 259 { 260 + int n = to_sensor_dev_attr(attr)->index; 261 + struct gl520_data *data = gl520_update_device(dev); 159 262 u8 r = data->in_min[n]; 160 263 161 264 if (n == 0) ··· 167 264 return sprintf(buf, "%d\n", IN_FROM_REG(r)); 168 265 } 169 266 170 - static ssize_t get_in_max(struct gl520_data *data, char *buf, int n) 267 + static ssize_t get_in_max(struct device *dev, struct device_attribute *attr, 268 + char *buf) 171 269 { 270 + int n = to_sensor_dev_attr(attr)->index; 271 + struct gl520_data *data = gl520_update_device(dev); 172 272 u8 r = data->in_max[n]; 173 273 174 274 if (n == 0) ··· 180 274 return sprintf(buf, "%d\n", IN_FROM_REG(r)); 181 275 } 182 276 183 - static ssize_t set_in_min(struct i2c_client *client, struct gl520_data *data, const char *buf, size_t count, int n, int reg) 277 + static ssize_t set_in_min(struct device *dev, struct device_attribute *attr, 278 + const char *buf, size_t count) 184 279 { 280 + struct i2c_client *client = to_i2c_client(dev); 281 + struct gl520_data *data = i2c_get_clientdata(client); 282 + int n = to_sensor_dev_attr(attr)->index; 185 283 long v = simple_strtol(buf, NULL, 10); 186 284 u8 r; 187 285 ··· 199 289 data->in_min[n] = r; 200 290 201 291 if (n < 4) 202 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0xff) | r); 292 + gl520_write_value(client, GL520_REG_IN_MIN[n], 293 + (gl520_read_value(client, GL520_REG_IN_MIN[n]) 294 + & ~0xff) | r); 203 295 else 204 - gl520_write_value(client, reg, r); 296 + gl520_write_value(client, GL520_REG_IN_MIN[n], r); 205 297 206 298 mutex_unlock(&data->update_lock); 207 299 return count; 208 300 } 209 301 210 - static ssize_t set_in_max(struct i2c_client *client, struct gl520_data *data, const char *buf, size_t count, int n, int reg) 302 + static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, 303 + const char *buf, size_t count) 211 304 { 305 + struct i2c_client *client = to_i2c_client(dev); 306 + struct gl520_data *data = i2c_get_clientdata(client); 307 + int n = to_sensor_dev_attr(attr)->index; 212 308 long v = simple_strtol(buf, NULL, 10); 213 309 u8 r; 214 310 ··· 228 312 data->in_max[n] = r; 229 313 230 314 if (n < 4) 231 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0xff00) | (r << 8)); 315 + gl520_write_value(client, GL520_REG_IN_MAX[n], 316 + (gl520_read_value(client, GL520_REG_IN_MAX[n]) 317 + & ~0xff00) | (r << 8)); 232 318 else 233 - gl520_write_value(client, reg, r); 319 + gl520_write_value(client, GL520_REG_IN_MAX[n], r); 234 320 235 321 mutex_unlock(&data->update_lock); 236 322 return count; 237 323 } 238 324 325 + static SENSOR_DEVICE_ATTR(in0_input, S_IRUGO, get_in_input, NULL, 0); 326 + static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, get_in_input, NULL, 1); 327 + static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, get_in_input, NULL, 2); 328 + static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, get_in_input, NULL, 3); 329 + static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, get_in_input, NULL, 4); 330 + static SENSOR_DEVICE_ATTR(in0_min, S_IRUGO | S_IWUSR, 331 + get_in_min, set_in_min, 0); 332 + static SENSOR_DEVICE_ATTR(in1_min, S_IRUGO | S_IWUSR, 333 + get_in_min, set_in_min, 1); 334 + static SENSOR_DEVICE_ATTR(in2_min, S_IRUGO | S_IWUSR, 335 + get_in_min, set_in_min, 2); 336 + static SENSOR_DEVICE_ATTR(in3_min, S_IRUGO | S_IWUSR, 337 + get_in_min, set_in_min, 3); 338 + static SENSOR_DEVICE_ATTR(in4_min, S_IRUGO | S_IWUSR, 339 + get_in_min, set_in_min, 4); 340 + static SENSOR_DEVICE_ATTR(in0_max, S_IRUGO | S_IWUSR, 341 + get_in_max, set_in_max, 0); 342 + static SENSOR_DEVICE_ATTR(in1_max, S_IRUGO | S_IWUSR, 343 + get_in_max, set_in_max, 1); 344 + static SENSOR_DEVICE_ATTR(in2_max, S_IRUGO | S_IWUSR, 345 + get_in_max, set_in_max, 2); 346 + static SENSOR_DEVICE_ATTR(in3_max, S_IRUGO | S_IWUSR, 347 + get_in_max, set_in_max, 3); 348 + static SENSOR_DEVICE_ATTR(in4_max, S_IRUGO | S_IWUSR, 349 + get_in_max, set_in_max, 4); 350 + 239 351 #define DIV_FROM_REG(val) (1 << (val)) 240 352 #define FAN_FROM_REG(val,div) ((val)==0 ? 0 : (480000/((val) << (div)))) 241 353 #define FAN_TO_REG(val,div) ((val)<=0?0:SENSORS_LIMIT((480000 + ((val) << ((div)-1))) / ((val) << (div)), 1, 255)); 242 354 243 - static ssize_t get_fan_input(struct gl520_data *data, char *buf, int n) 355 + static ssize_t get_fan_input(struct device *dev, struct device_attribute *attr, 356 + char *buf) 244 357 { 245 - return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_input[n - 1], data->fan_div[n - 1])); 358 + int n = to_sensor_dev_attr(attr)->index; 359 + struct gl520_data *data = gl520_update_device(dev); 360 + 361 + return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_input[n], 362 + data->fan_div[n])); 246 363 } 247 364 248 - static ssize_t get_fan_min(struct gl520_data *data, char *buf, int n) 365 + static ssize_t get_fan_min(struct device *dev, struct device_attribute *attr, 366 + char *buf) 249 367 { 250 - return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[n - 1], data->fan_div[n - 1])); 368 + int n = to_sensor_dev_attr(attr)->index; 369 + struct gl520_data *data = gl520_update_device(dev); 370 + 371 + return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[n], 372 + data->fan_div[n])); 251 373 } 252 374 253 - static ssize_t get_fan_div(struct gl520_data *data, char *buf, int n) 375 + static ssize_t get_fan_div(struct device *dev, struct device_attribute *attr, 376 + char *buf) 254 377 { 255 - return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[n - 1])); 378 + int n = to_sensor_dev_attr(attr)->index; 379 + struct gl520_data *data = gl520_update_device(dev); 380 + 381 + return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[n])); 256 382 } 257 383 258 - static ssize_t get_fan_off(struct gl520_data *data, char *buf, int n) 384 + static ssize_t get_fan_off(struct device *dev, struct device_attribute *attr, 385 + char *buf) 259 386 { 387 + struct gl520_data *data = gl520_update_device(dev); 260 388 return sprintf(buf, "%d\n", data->fan_off); 261 389 } 262 390 263 - static ssize_t set_fan_min(struct i2c_client *client, struct gl520_data *data, const char *buf, size_t count, int n, int reg) 391 + static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, 392 + const char *buf, size_t count) 264 393 { 394 + struct i2c_client *client = to_i2c_client(dev); 395 + struct gl520_data *data = i2c_get_clientdata(client); 396 + int n = to_sensor_dev_attr(attr)->index; 265 397 unsigned long v = simple_strtoul(buf, NULL, 10); 266 398 u8 r; 267 399 268 400 mutex_lock(&data->update_lock); 269 - r = FAN_TO_REG(v, data->fan_div[n - 1]); 270 - data->fan_min[n - 1] = r; 401 + r = FAN_TO_REG(v, data->fan_div[n]); 402 + data->fan_min[n] = r; 271 403 272 - if (n == 1) 273 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0xff00) | (r << 8)); 404 + if (n == 0) 405 + gl520_write_value(client, GL520_REG_FAN_MIN, 406 + (gl520_read_value(client, GL520_REG_FAN_MIN) 407 + & ~0xff00) | (r << 8)); 274 408 else 275 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0xff) | r); 409 + gl520_write_value(client, GL520_REG_FAN_MIN, 410 + (gl520_read_value(client, GL520_REG_FAN_MIN) 411 + & ~0xff) | r); 276 412 277 413 data->beep_mask = gl520_read_value(client, GL520_REG_BEEP_MASK); 278 - if (data->fan_min[n - 1] == 0) 279 - data->alarm_mask &= (n == 1) ? ~0x20 : ~0x40; 414 + if (data->fan_min[n] == 0) 415 + data->alarm_mask &= (n == 0) ? ~0x20 : ~0x40; 280 416 else 281 - data->alarm_mask |= (n == 1) ? 0x20 : 0x40; 417 + data->alarm_mask |= (n == 0) ? 0x20 : 0x40; 282 418 data->beep_mask &= data->alarm_mask; 283 419 gl520_write_value(client, GL520_REG_BEEP_MASK, data->beep_mask); 284 420 ··· 338 370 return count; 339 371 } 340 372 341 - static ssize_t set_fan_div(struct i2c_client *client, struct gl520_data *data, const char *buf, size_t count, int n, int reg) 373 + static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 374 + const char *buf, size_t count) 342 375 { 376 + struct i2c_client *client = to_i2c_client(dev); 377 + struct gl520_data *data = i2c_get_clientdata(client); 378 + int n = to_sensor_dev_attr(attr)->index; 343 379 unsigned long v = simple_strtoul(buf, NULL, 10); 344 380 u8 r; 345 381 ··· 358 386 } 359 387 360 388 mutex_lock(&data->update_lock); 361 - data->fan_div[n - 1] = r; 389 + data->fan_div[n] = r; 362 390 363 - if (n == 1) 364 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0xc0) | (r << 6)); 391 + if (n == 0) 392 + gl520_write_value(client, GL520_REG_FAN_DIV, 393 + (gl520_read_value(client, GL520_REG_FAN_DIV) 394 + & ~0xc0) | (r << 6)); 365 395 else 366 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0x30) | (r << 4)); 396 + gl520_write_value(client, GL520_REG_FAN_DIV, 397 + (gl520_read_value(client, GL520_REG_FAN_DIV) 398 + & ~0x30) | (r << 4)); 367 399 368 400 mutex_unlock(&data->update_lock); 369 401 return count; 370 402 } 371 403 372 - static ssize_t set_fan_off(struct i2c_client *client, struct gl520_data *data, const char *buf, size_t count, int n, int reg) 404 + static ssize_t set_fan_off(struct device *dev, struct device_attribute *attr, 405 + const char *buf, size_t count) 373 406 { 407 + struct i2c_client *client = to_i2c_client(dev); 408 + struct gl520_data *data = i2c_get_clientdata(client); 374 409 u8 r = simple_strtoul(buf, NULL, 10)?1:0; 375 410 376 411 mutex_lock(&data->update_lock); 377 412 data->fan_off = r; 378 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0x0c) | (r << 2)); 413 + gl520_write_value(client, GL520_REG_FAN_OFF, 414 + (gl520_read_value(client, GL520_REG_FAN_OFF) 415 + & ~0x0c) | (r << 2)); 379 416 mutex_unlock(&data->update_lock); 380 417 return count; 381 418 } 419 + 420 + static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, get_fan_input, NULL, 0); 421 + static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, get_fan_input, NULL, 1); 422 + static SENSOR_DEVICE_ATTR(fan1_min, S_IRUGO | S_IWUSR, 423 + get_fan_min, set_fan_min, 0); 424 + static SENSOR_DEVICE_ATTR(fan2_min, S_IRUGO | S_IWUSR, 425 + get_fan_min, set_fan_min, 1); 426 + static SENSOR_DEVICE_ATTR(fan1_div, S_IRUGO | S_IWUSR, 427 + get_fan_div, set_fan_div, 0); 428 + static SENSOR_DEVICE_ATTR(fan2_div, S_IRUGO | S_IWUSR, 429 + get_fan_div, set_fan_div, 1); 430 + static DEVICE_ATTR(fan1_off, S_IRUGO | S_IWUSR, 431 + get_fan_off, set_fan_off); 382 432 383 433 #define TEMP_FROM_REG(val) (((val) - 130) * 1000) 384 434 #define TEMP_TO_REG(val) (SENSORS_LIMIT(((((val)<0?(val)-500:(val)+500) / 1000)+130),0,255)) 385 435 386 - static ssize_t get_temp_input(struct gl520_data *data, char *buf, int n) 436 + static ssize_t get_temp_input(struct device *dev, struct device_attribute *attr, 437 + char *buf) 387 438 { 388 - return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_input[n - 1])); 439 + int n = to_sensor_dev_attr(attr)->index; 440 + struct gl520_data *data = gl520_update_device(dev); 441 + 442 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_input[n])); 389 443 } 390 444 391 - static ssize_t get_temp_max(struct gl520_data *data, char *buf, int n) 445 + static ssize_t get_temp_max(struct device *dev, struct device_attribute *attr, 446 + char *buf) 392 447 { 393 - return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[n - 1])); 448 + int n = to_sensor_dev_attr(attr)->index; 449 + struct gl520_data *data = gl520_update_device(dev); 450 + 451 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[n])); 394 452 } 395 453 396 - static ssize_t get_temp_max_hyst(struct gl520_data *data, char *buf, int n) 454 + static ssize_t get_temp_max_hyst(struct device *dev, struct device_attribute 455 + *attr, char *buf) 397 456 { 398 - return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max_hyst[n - 1])); 457 + int n = to_sensor_dev_attr(attr)->index; 458 + struct gl520_data *data = gl520_update_device(dev); 459 + 460 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max_hyst[n])); 399 461 } 400 462 401 - static ssize_t set_temp_max(struct i2c_client *client, struct gl520_data *data, const char *buf, size_t count, int n, int reg) 463 + static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, 464 + const char *buf, size_t count) 402 465 { 466 + struct i2c_client *client = to_i2c_client(dev); 467 + struct gl520_data *data = i2c_get_clientdata(client); 468 + int n = to_sensor_dev_attr(attr)->index; 403 469 long v = simple_strtol(buf, NULL, 10); 404 470 405 471 mutex_lock(&data->update_lock); 406 - data->temp_max[n - 1] = TEMP_TO_REG(v); 407 - gl520_write_value(client, reg, data->temp_max[n - 1]); 472 + data->temp_max[n] = TEMP_TO_REG(v); 473 + gl520_write_value(client, GL520_REG_TEMP_MAX[n], data->temp_max[n]); 408 474 mutex_unlock(&data->update_lock); 409 475 return count; 410 476 } 411 477 412 - static ssize_t set_temp_max_hyst(struct i2c_client *client, struct gl520_data *data, const char *buf, size_t count, int n, int reg) 478 + static ssize_t set_temp_max_hyst(struct device *dev, struct device_attribute 479 + *attr, const char *buf, size_t count) 413 480 { 481 + struct i2c_client *client = to_i2c_client(dev); 482 + struct gl520_data *data = i2c_get_clientdata(client); 483 + int n = to_sensor_dev_attr(attr)->index; 414 484 long v = simple_strtol(buf, NULL, 10); 415 485 416 486 mutex_lock(&data->update_lock); 417 - data->temp_max_hyst[n - 1] = TEMP_TO_REG(v); 418 - gl520_write_value(client, reg, data->temp_max_hyst[n - 1]); 487 + data->temp_max_hyst[n] = TEMP_TO_REG(v); 488 + gl520_write_value(client, GL520_REG_TEMP_MAX_HYST[n], 489 + data->temp_max_hyst[n]); 419 490 mutex_unlock(&data->update_lock); 420 491 return count; 421 492 } 422 493 423 - static ssize_t get_alarms(struct gl520_data *data, char *buf, int n) 494 + static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, get_temp_input, NULL, 0); 495 + static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, get_temp_input, NULL, 1); 496 + static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO | S_IWUSR, 497 + get_temp_max, set_temp_max, 0); 498 + static SENSOR_DEVICE_ATTR(temp2_max, S_IRUGO | S_IWUSR, 499 + get_temp_max, set_temp_max, 1); 500 + static SENSOR_DEVICE_ATTR(temp1_max_hyst, S_IRUGO | S_IWUSR, 501 + get_temp_max_hyst, set_temp_max_hyst, 0); 502 + static SENSOR_DEVICE_ATTR(temp2_max_hyst, S_IRUGO | S_IWUSR, 503 + get_temp_max_hyst, set_temp_max_hyst, 1); 504 + 505 + static ssize_t get_alarms(struct device *dev, struct device_attribute *attr, 506 + char *buf) 424 507 { 508 + struct gl520_data *data = gl520_update_device(dev); 425 509 return sprintf(buf, "%d\n", data->alarms); 426 510 } 427 511 428 - static ssize_t get_beep_enable(struct gl520_data *data, char *buf, int n) 512 + static ssize_t get_beep_enable(struct device *dev, struct device_attribute 513 + *attr, char *buf) 429 514 { 515 + struct gl520_data *data = gl520_update_device(dev); 430 516 return sprintf(buf, "%d\n", data->beep_enable); 431 517 } 432 518 433 - static ssize_t get_beep_mask(struct gl520_data *data, char *buf, int n) 519 + static ssize_t get_beep_mask(struct device *dev, struct device_attribute *attr, 520 + char *buf) 434 521 { 522 + struct gl520_data *data = gl520_update_device(dev); 435 523 return sprintf(buf, "%d\n", data->beep_mask); 436 524 } 437 525 438 - static ssize_t set_beep_enable(struct i2c_client *client, struct gl520_data *data, const char *buf, size_t count, int n, int reg) 526 + static ssize_t set_beep_enable(struct device *dev, struct device_attribute 527 + *attr, const char *buf, size_t count) 439 528 { 529 + struct i2c_client *client = to_i2c_client(dev); 530 + struct gl520_data *data = i2c_get_clientdata(client); 440 531 u8 r = simple_strtoul(buf, NULL, 10)?0:1; 441 532 442 533 mutex_lock(&data->update_lock); 443 534 data->beep_enable = !r; 444 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0x04) | (r << 2)); 535 + gl520_write_value(client, GL520_REG_BEEP_ENABLE, 536 + (gl520_read_value(client, GL520_REG_BEEP_ENABLE) 537 + & ~0x04) | (r << 2)); 445 538 mutex_unlock(&data->update_lock); 446 539 return count; 447 540 } 448 541 449 - static ssize_t set_beep_mask(struct i2c_client *client, struct gl520_data *data, const char *buf, size_t count, int n, int reg) 542 + static ssize_t set_beep_mask(struct device *dev, struct device_attribute *attr, 543 + const char *buf, size_t count) 450 544 { 545 + struct i2c_client *client = to_i2c_client(dev); 546 + struct gl520_data *data = i2c_get_clientdata(client); 451 547 u8 r = simple_strtoul(buf, NULL, 10); 452 - 548 + 453 549 mutex_lock(&data->update_lock); 454 550 r &= data->alarm_mask; 455 551 data->beep_mask = r; 456 - gl520_write_value(client, reg, r); 552 + gl520_write_value(client, GL520_REG_BEEP_MASK, r); 457 553 mutex_unlock(&data->update_lock); 458 554 return count; 459 555 } 556 + 557 + static DEVICE_ATTR(alarms, S_IRUGO, get_alarms, NULL); 558 + static DEVICE_ATTR(beep_enable, S_IRUGO | S_IWUSR, 559 + get_beep_enable, set_beep_enable); 560 + static DEVICE_ATTR(beep_mask, S_IRUGO | S_IWUSR, 561 + get_beep_mask, set_beep_mask); 562 + 563 + static ssize_t get_alarm(struct device *dev, struct device_attribute *attr, 564 + char *buf) 565 + { 566 + int bit_nr = to_sensor_dev_attr(attr)->index; 567 + struct gl520_data *data = gl520_update_device(dev); 568 + 569 + return sprintf(buf, "%d\n", (data->alarms >> bit_nr) & 1); 570 + } 571 + 572 + static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, get_alarm, NULL, 0); 573 + static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, get_alarm, NULL, 1); 574 + static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, get_alarm, NULL, 2); 575 + static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, get_alarm, NULL, 3); 576 + static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, get_alarm, NULL, 4); 577 + static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, get_alarm, NULL, 5); 578 + static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, get_alarm, NULL, 6); 579 + static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, get_alarm, NULL, 7); 580 + static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, get_alarm, NULL, 7); 581 + 582 + static ssize_t get_beep(struct device *dev, struct device_attribute *attr, 583 + char *buf) 584 + { 585 + int bitnr = to_sensor_dev_attr(attr)->index; 586 + struct gl520_data *data = gl520_update_device(dev); 587 + 588 + return sprintf(buf, "%d\n", (data->beep_mask >> bitnr) & 1); 589 + } 590 + 591 + static ssize_t set_beep(struct device *dev, struct device_attribute *attr, 592 + const char *buf, size_t count) 593 + { 594 + struct i2c_client *client = to_i2c_client(dev); 595 + struct gl520_data *data = i2c_get_clientdata(client); 596 + int bitnr = to_sensor_dev_attr(attr)->index; 597 + unsigned long bit; 598 + 599 + bit = simple_strtoul(buf, NULL, 10); 600 + if (bit & ~1) 601 + return -EINVAL; 602 + 603 + mutex_lock(&data->update_lock); 604 + data->beep_mask = gl520_read_value(client, GL520_REG_BEEP_MASK); 605 + if (bit) 606 + data->beep_mask |= (1 << bitnr); 607 + else 608 + data->beep_mask &= ~(1 << bitnr); 609 + gl520_write_value(client, GL520_REG_BEEP_MASK, data->beep_mask); 610 + mutex_unlock(&data->update_lock); 611 + return count; 612 + } 613 + 614 + static SENSOR_DEVICE_ATTR(in0_beep, S_IRUGO | S_IWUSR, get_beep, set_beep, 0); 615 + static SENSOR_DEVICE_ATTR(in1_beep, S_IRUGO | S_IWUSR, get_beep, set_beep, 1); 616 + static SENSOR_DEVICE_ATTR(in2_beep, S_IRUGO | S_IWUSR, get_beep, set_beep, 2); 617 + static SENSOR_DEVICE_ATTR(in3_beep, S_IRUGO | S_IWUSR, get_beep, set_beep, 3); 618 + static SENSOR_DEVICE_ATTR(temp1_beep, S_IRUGO | S_IWUSR, get_beep, set_beep, 4); 619 + static SENSOR_DEVICE_ATTR(fan1_beep, S_IRUGO | S_IWUSR, get_beep, set_beep, 5); 620 + static SENSOR_DEVICE_ATTR(fan2_beep, S_IRUGO | S_IWUSR, get_beep, set_beep, 6); 621 + static SENSOR_DEVICE_ATTR(temp2_beep, S_IRUGO | S_IWUSR, get_beep, set_beep, 7); 622 + static SENSOR_DEVICE_ATTR(in4_beep, S_IRUGO | S_IWUSR, get_beep, set_beep, 7); 460 623 461 624 static struct attribute *gl520_attributes[] = { 462 625 &dev_attr_cpu0_vid.attr, 463 626 464 - &dev_attr_in0_input.attr, 465 - &dev_attr_in0_min.attr, 466 - &dev_attr_in0_max.attr, 467 - &dev_attr_in1_input.attr, 468 - &dev_attr_in1_min.attr, 469 - &dev_attr_in1_max.attr, 470 - &dev_attr_in2_input.attr, 471 - &dev_attr_in2_min.attr, 472 - &dev_attr_in2_max.attr, 473 - &dev_attr_in3_input.attr, 474 - &dev_attr_in3_min.attr, 475 - &dev_attr_in3_max.attr, 627 + &sensor_dev_attr_in0_input.dev_attr.attr, 628 + &sensor_dev_attr_in0_min.dev_attr.attr, 629 + &sensor_dev_attr_in0_max.dev_attr.attr, 630 + &sensor_dev_attr_in0_alarm.dev_attr.attr, 631 + &sensor_dev_attr_in0_beep.dev_attr.attr, 632 + &sensor_dev_attr_in1_input.dev_attr.attr, 633 + &sensor_dev_attr_in1_min.dev_attr.attr, 634 + &sensor_dev_attr_in1_max.dev_attr.attr, 635 + &sensor_dev_attr_in1_alarm.dev_attr.attr, 636 + &sensor_dev_attr_in1_beep.dev_attr.attr, 637 + &sensor_dev_attr_in2_input.dev_attr.attr, 638 + &sensor_dev_attr_in2_min.dev_attr.attr, 639 + &sensor_dev_attr_in2_max.dev_attr.attr, 640 + &sensor_dev_attr_in2_alarm.dev_attr.attr, 641 + &sensor_dev_attr_in2_beep.dev_attr.attr, 642 + &sensor_dev_attr_in3_input.dev_attr.attr, 643 + &sensor_dev_attr_in3_min.dev_attr.attr, 644 + &sensor_dev_attr_in3_max.dev_attr.attr, 645 + &sensor_dev_attr_in3_alarm.dev_attr.attr, 646 + &sensor_dev_attr_in3_beep.dev_attr.attr, 476 647 477 - &dev_attr_fan1_input.attr, 478 - &dev_attr_fan1_min.attr, 479 - &dev_attr_fan1_div.attr, 648 + &sensor_dev_attr_fan1_input.dev_attr.attr, 649 + &sensor_dev_attr_fan1_min.dev_attr.attr, 650 + &sensor_dev_attr_fan1_div.dev_attr.attr, 651 + &sensor_dev_attr_fan1_alarm.dev_attr.attr, 652 + &sensor_dev_attr_fan1_beep.dev_attr.attr, 480 653 &dev_attr_fan1_off.attr, 481 - &dev_attr_fan2_input.attr, 482 - &dev_attr_fan2_min.attr, 483 - &dev_attr_fan2_div.attr, 654 + &sensor_dev_attr_fan2_input.dev_attr.attr, 655 + &sensor_dev_attr_fan2_min.dev_attr.attr, 656 + &sensor_dev_attr_fan2_div.dev_attr.attr, 657 + &sensor_dev_attr_fan2_alarm.dev_attr.attr, 658 + &sensor_dev_attr_fan2_beep.dev_attr.attr, 484 659 485 - &dev_attr_temp1_input.attr, 486 - &dev_attr_temp1_max.attr, 487 - &dev_attr_temp1_max_hyst.attr, 660 + &sensor_dev_attr_temp1_input.dev_attr.attr, 661 + &sensor_dev_attr_temp1_max.dev_attr.attr, 662 + &sensor_dev_attr_temp1_max_hyst.dev_attr.attr, 663 + &sensor_dev_attr_temp1_alarm.dev_attr.attr, 664 + &sensor_dev_attr_temp1_beep.dev_attr.attr, 488 665 489 666 &dev_attr_alarms.attr, 490 667 &dev_attr_beep_enable.attr, ··· 646 525 }; 647 526 648 527 static struct attribute *gl520_attributes_opt[] = { 649 - &dev_attr_in4_input.attr, 650 - &dev_attr_in4_min.attr, 651 - &dev_attr_in4_max.attr, 528 + &sensor_dev_attr_in4_input.dev_attr.attr, 529 + &sensor_dev_attr_in4_min.dev_attr.attr, 530 + &sensor_dev_attr_in4_max.dev_attr.attr, 531 + &sensor_dev_attr_in4_alarm.dev_attr.attr, 532 + &sensor_dev_attr_in4_beep.dev_attr.attr, 652 533 653 - &dev_attr_temp2_input.attr, 654 - &dev_attr_temp2_max.attr, 655 - &dev_attr_temp2_max_hyst.attr, 534 + &sensor_dev_attr_temp2_input.dev_attr.attr, 535 + &sensor_dev_attr_temp2_max.dev_attr.attr, 536 + &sensor_dev_attr_temp2_max_hyst.dev_attr.attr, 537 + &sensor_dev_attr_temp2_alarm.dev_attr.attr, 538 + &sensor_dev_attr_temp2_beep.dev_attr.attr, 656 539 NULL 657 540 }; 658 541 ··· 678 553 679 554 static int gl520_detect(struct i2c_adapter *adapter, int address, int kind) 680 555 { 681 - struct i2c_client *new_client; 556 + struct i2c_client *client; 682 557 struct gl520_data *data; 683 558 int err = 0; 684 559 ··· 695 570 goto exit; 696 571 } 697 572 698 - new_client = &data->client; 699 - i2c_set_clientdata(new_client, data); 700 - new_client->addr = address; 701 - new_client->adapter = adapter; 702 - new_client->driver = &gl520_driver; 703 - new_client->flags = 0; 573 + client = &data->client; 574 + i2c_set_clientdata(client, data); 575 + client->addr = address; 576 + client->adapter = adapter; 577 + client->driver = &gl520_driver; 704 578 705 579 /* Determine the chip type. */ 706 580 if (kind < 0) { 707 - if ((gl520_read_value(new_client, GL520_REG_CHIP_ID) != 0x20) || 708 - ((gl520_read_value(new_client, GL520_REG_REVISION) & 0x7f) != 0x00) || 709 - ((gl520_read_value(new_client, GL520_REG_CONF) & 0x80) != 0x00)) { 710 - dev_dbg(&new_client->dev, "Unknown chip type, skipping\n"); 581 + if ((gl520_read_value(client, GL520_REG_CHIP_ID) != 0x20) || 582 + ((gl520_read_value(client, GL520_REG_REVISION) & 0x7f) != 0x00) || 583 + ((gl520_read_value(client, GL520_REG_CONF) & 0x80) != 0x00)) { 584 + dev_dbg(&client->dev, "Unknown chip type, skipping\n"); 711 585 goto exit_free; 712 586 } 713 587 } 714 588 715 589 /* Fill in the remaining client fields */ 716 - strlcpy(new_client->name, "gl520sm", I2C_NAME_SIZE); 717 - data->valid = 0; 590 + strlcpy(client->name, "gl520sm", I2C_NAME_SIZE); 718 591 mutex_init(&data->update_lock); 719 592 720 593 /* Tell the I2C layer a new client has arrived */ 721 - if ((err = i2c_attach_client(new_client))) 594 + if ((err = i2c_attach_client(client))) 722 595 goto exit_free; 723 596 724 597 /* Initialize the GL520SM chip */ 725 - gl520_init_client(new_client); 598 + gl520_init_client(client); 726 599 727 600 /* Register sysfs hooks */ 728 - if ((err = sysfs_create_group(&new_client->dev.kobj, &gl520_group))) 601 + if ((err = sysfs_create_group(&client->dev.kobj, &gl520_group))) 729 602 goto exit_detach; 730 603 731 604 if (data->two_temps) { 732 - if ((err = device_create_file(&new_client->dev, 733 - &dev_attr_temp2_input)) 734 - || (err = device_create_file(&new_client->dev, 735 - &dev_attr_temp2_max)) 736 - || (err = device_create_file(&new_client->dev, 737 - &dev_attr_temp2_max_hyst))) 605 + if ((err = device_create_file(&client->dev, 606 + &sensor_dev_attr_temp2_input.dev_attr)) 607 + || (err = device_create_file(&client->dev, 608 + &sensor_dev_attr_temp2_max.dev_attr)) 609 + || (err = device_create_file(&client->dev, 610 + &sensor_dev_attr_temp2_max_hyst.dev_attr)) 611 + || (err = device_create_file(&client->dev, 612 + &sensor_dev_attr_temp2_alarm.dev_attr)) 613 + || (err = device_create_file(&client->dev, 614 + &sensor_dev_attr_temp2_beep.dev_attr))) 738 615 goto exit_remove_files; 739 616 } else { 740 - if ((err = device_create_file(&new_client->dev, 741 - &dev_attr_in4_input)) 742 - || (err = device_create_file(&new_client->dev, 743 - &dev_attr_in4_min)) 744 - || (err = device_create_file(&new_client->dev, 745 - &dev_attr_in4_max))) 617 + if ((err = device_create_file(&client->dev, 618 + &sensor_dev_attr_in4_input.dev_attr)) 619 + || (err = device_create_file(&client->dev, 620 + &sensor_dev_attr_in4_min.dev_attr)) 621 + || (err = device_create_file(&client->dev, 622 + &sensor_dev_attr_in4_max.dev_attr)) 623 + || (err = device_create_file(&client->dev, 624 + &sensor_dev_attr_in4_alarm.dev_attr)) 625 + || (err = device_create_file(&client->dev, 626 + &sensor_dev_attr_in4_beep.dev_attr))) 746 627 goto exit_remove_files; 747 628 } 748 629 749 630 750 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 631 + data->hwmon_dev = hwmon_device_register(&client->dev); 751 632 if (IS_ERR(data->hwmon_dev)) { 752 633 err = PTR_ERR(data->hwmon_dev); 753 634 goto exit_remove_files; ··· 762 631 return 0; 763 632 764 633 exit_remove_files: 765 - sysfs_remove_group(&new_client->dev.kobj, &gl520_group); 766 - sysfs_remove_group(&new_client->dev.kobj, &gl520_group_opt); 634 + sysfs_remove_group(&client->dev.kobj, &gl520_group); 635 + sysfs_remove_group(&client->dev.kobj, &gl520_group_opt); 767 636 exit_detach: 768 - i2c_detach_client(new_client); 637 + i2c_detach_client(client); 769 638 exit_free: 770 639 kfree(data); 771 640 exit: ··· 828 697 } 829 698 830 699 831 - /* Registers 0x07 to 0x0c are word-sized, others are byte-sized 700 + /* Registers 0x07 to 0x0c are word-sized, others are byte-sized 832 701 GL520 uses a high-byte first convention */ 833 702 static int gl520_read_value(struct i2c_client *client, u8 reg) 834 703 { ··· 851 720 { 852 721 struct i2c_client *client = to_i2c_client(dev); 853 722 struct gl520_data *data = i2c_get_clientdata(client); 854 - int val; 723 + int val, i; 855 724 856 725 mutex_lock(&data->update_lock); 857 726 ··· 863 732 data->beep_mask = gl520_read_value(client, GL520_REG_BEEP_MASK); 864 733 data->vid = gl520_read_value(client, GL520_REG_VID_INPUT) & 0x1f; 865 734 866 - val = gl520_read_value(client, GL520_REG_IN0_LIMIT); 867 - data->in_min[0] = val & 0xff; 868 - data->in_max[0] = (val >> 8) & 0xff; 869 - val = gl520_read_value(client, GL520_REG_IN1_LIMIT); 870 - data->in_min[1] = val & 0xff; 871 - data->in_max[1] = (val >> 8) & 0xff; 872 - val = gl520_read_value(client, GL520_REG_IN2_LIMIT); 873 - data->in_min[2] = val & 0xff; 874 - data->in_max[2] = (val >> 8) & 0xff; 875 - val = gl520_read_value(client, GL520_REG_IN3_LIMIT); 876 - data->in_min[3] = val & 0xff; 877 - data->in_max[3] = (val >> 8) & 0xff; 735 + for (i = 0; i < 4; i++) { 736 + data->in_input[i] = gl520_read_value(client, 737 + GL520_REG_IN_INPUT[i]); 738 + val = gl520_read_value(client, GL520_REG_IN_LIMIT[i]); 739 + data->in_min[i] = val & 0xff; 740 + data->in_max[i] = (val >> 8) & 0xff; 741 + } 878 742 879 743 val = gl520_read_value(client, GL520_REG_FAN_INPUT); 880 744 data->fan_input[0] = (val >> 8) & 0xff; ··· 879 753 data->fan_min[0] = (val >> 8) & 0xff; 880 754 data->fan_min[1] = val & 0xff; 881 755 882 - data->temp_input[0] = gl520_read_value(client, GL520_REG_TEMP1_INPUT); 883 - data->temp_max[0] = gl520_read_value(client, GL520_REG_TEMP1_MAX); 884 - data->temp_max_hyst[0] = gl520_read_value(client, GL520_REG_TEMP1_MAX_HYST); 756 + data->temp_input[0] = gl520_read_value(client, 757 + GL520_REG_TEMP_INPUT[0]); 758 + data->temp_max[0] = gl520_read_value(client, 759 + GL520_REG_TEMP_MAX[0]); 760 + data->temp_max_hyst[0] = gl520_read_value(client, 761 + GL520_REG_TEMP_MAX_HYST[0]); 885 762 886 763 val = gl520_read_value(client, GL520_REG_FAN_DIV); 887 764 data->fan_div[0] = (val >> 6) & 0x03; ··· 896 767 val = gl520_read_value(client, GL520_REG_CONF); 897 768 data->beep_enable = !((val >> 2) & 1); 898 769 899 - data->in_input[0] = gl520_read_value(client, GL520_REG_IN0_INPUT); 900 - data->in_input[1] = gl520_read_value(client, GL520_REG_IN1_INPUT); 901 - data->in_input[2] = gl520_read_value(client, GL520_REG_IN2_INPUT); 902 - data->in_input[3] = gl520_read_value(client, GL520_REG_IN3_INPUT); 903 - 904 770 /* Temp1 and Vin4 are the same input */ 905 771 if (data->two_temps) { 906 - data->temp_input[1] = gl520_read_value(client, GL520_REG_TEMP2_INPUT); 907 - data->temp_max[1] = gl520_read_value(client, GL520_REG_TEMP2_MAX); 908 - data->temp_max_hyst[1] = gl520_read_value(client, GL520_REG_TEMP2_MAX_HYST); 772 + data->temp_input[1] = gl520_read_value(client, 773 + GL520_REG_TEMP_INPUT[1]); 774 + data->temp_max[1] = gl520_read_value(client, 775 + GL520_REG_TEMP_MAX[1]); 776 + data->temp_max_hyst[1] = gl520_read_value(client, 777 + GL520_REG_TEMP_MAX_HYST[1]); 909 778 } else { 910 - data->in_input[4] = gl520_read_value(client, GL520_REG_IN4_INPUT); 911 - data->in_min[4] = gl520_read_value(client, GL520_REG_IN4_MIN); 912 - data->in_max[4] = gl520_read_value(client, GL520_REG_IN4_MAX); 779 + data->in_input[4] = gl520_read_value(client, 780 + GL520_REG_IN_INPUT[4]); 781 + data->in_min[4] = gl520_read_value(client, 782 + GL520_REG_IN_MIN[4]); 783 + data->in_max[4] = gl520_read_value(client, 784 + GL520_REG_IN_MAX[4]); 913 785 } 914 786 915 787 data->last_updated = jiffies;
+76 -12
drivers/hwmon/it87.c
··· 17 17 IT8726F Super I/O chip w/LPC interface 18 18 Sis950 A clone of the IT8705F 19 19 20 - Copyright (C) 2001 Chris Gauthron <chrisg@0-in.com> 21 - Copyright (C) 2005-2006 Jean Delvare <khali@linux-fr.org> 20 + Copyright (C) 2001 Chris Gauthron 21 + Copyright (C) 2005-2007 Jean Delvare <khali@linux-fr.org> 22 22 23 23 This program is free software; you can redistribute it and/or modify 24 24 it under the terms of the GNU General Public License as published by ··· 51 51 #define DRVNAME "it87" 52 52 53 53 enum chips { it87, it8712, it8716, it8718 }; 54 + 55 + static unsigned short force_id; 56 + module_param(force_id, ushort, 0); 57 + MODULE_PARM_DESC(force_id, "Override the detected device ID"); 54 58 55 59 static struct platform_device *pdev; 56 60 ··· 780 776 } 781 777 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 782 778 779 + static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, 780 + char *buf) 781 + { 782 + int bitnr = to_sensor_dev_attr(attr)->index; 783 + struct it87_data *data = it87_update_device(dev); 784 + return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); 785 + } 786 + static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 8); 787 + static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 9); 788 + static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 10); 789 + static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 11); 790 + static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 12); 791 + static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 13); 792 + static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 14); 793 + static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 15); 794 + static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 0); 795 + static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 1); 796 + static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 2); 797 + static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 3); 798 + static SENSOR_DEVICE_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 6); 799 + static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 16); 800 + static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 17); 801 + static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 18); 802 + 783 803 static ssize_t 784 804 show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf) 785 805 { ··· 865 837 &sensor_dev_attr_in5_max.dev_attr.attr, 866 838 &sensor_dev_attr_in6_max.dev_attr.attr, 867 839 &sensor_dev_attr_in7_max.dev_attr.attr, 840 + &sensor_dev_attr_in0_alarm.dev_attr.attr, 841 + &sensor_dev_attr_in1_alarm.dev_attr.attr, 842 + &sensor_dev_attr_in2_alarm.dev_attr.attr, 843 + &sensor_dev_attr_in3_alarm.dev_attr.attr, 844 + &sensor_dev_attr_in4_alarm.dev_attr.attr, 845 + &sensor_dev_attr_in5_alarm.dev_attr.attr, 846 + &sensor_dev_attr_in6_alarm.dev_attr.attr, 847 + &sensor_dev_attr_in7_alarm.dev_attr.attr, 868 848 869 849 &sensor_dev_attr_temp1_input.dev_attr.attr, 870 850 &sensor_dev_attr_temp2_input.dev_attr.attr, ··· 886 850 &sensor_dev_attr_temp1_type.dev_attr.attr, 887 851 &sensor_dev_attr_temp2_type.dev_attr.attr, 888 852 &sensor_dev_attr_temp3_type.dev_attr.attr, 853 + &sensor_dev_attr_temp1_alarm.dev_attr.attr, 854 + &sensor_dev_attr_temp2_alarm.dev_attr.attr, 855 + &sensor_dev_attr_temp3_alarm.dev_attr.attr, 889 856 890 857 &dev_attr_alarms.attr, 891 858 &dev_attr_name.attr, ··· 921 882 &sensor_dev_attr_fan3_min.dev_attr.attr, 922 883 &sensor_dev_attr_fan3_div.dev_attr.attr, 923 884 885 + &sensor_dev_attr_fan1_alarm.dev_attr.attr, 886 + &sensor_dev_attr_fan2_alarm.dev_attr.attr, 887 + &sensor_dev_attr_fan3_alarm.dev_attr.attr, 888 + &sensor_dev_attr_fan4_alarm.dev_attr.attr, 889 + &sensor_dev_attr_fan5_alarm.dev_attr.attr, 890 + 924 891 &sensor_dev_attr_pwm1_enable.dev_attr.attr, 925 892 &sensor_dev_attr_pwm2_enable.dev_attr.attr, 926 893 &sensor_dev_attr_pwm3_enable.dev_attr.attr, 927 894 &sensor_dev_attr_pwm1.dev_attr.attr, 928 895 &sensor_dev_attr_pwm2.dev_attr.attr, 929 896 &sensor_dev_attr_pwm3.dev_attr.attr, 897 + &dev_attr_pwm1_freq.attr, 898 + &dev_attr_pwm2_freq.attr, 899 + &dev_attr_pwm3_freq.attr, 930 900 931 901 &dev_attr_vrm.attr, 932 902 &dev_attr_cpu0_vid.attr, ··· 954 906 u16 chip_type; 955 907 956 908 superio_enter(); 957 - chip_type = superio_inw(DEVID); 909 + chip_type = force_id ? force_id : superio_inw(DEVID); 958 910 959 911 switch (chip_type) { 960 912 case IT8705F_DEVID: ··· 1075 1027 if ((err = device_create_file(dev, 1076 1028 &sensor_dev_attr_fan1_input16.dev_attr)) 1077 1029 || (err = device_create_file(dev, 1078 - &sensor_dev_attr_fan1_min16.dev_attr))) 1030 + &sensor_dev_attr_fan1_min16.dev_attr)) 1031 + || (err = device_create_file(dev, 1032 + &sensor_dev_attr_fan1_alarm.dev_attr))) 1079 1033 goto ERROR4; 1080 1034 } 1081 1035 if (data->has_fan & (1 << 1)) { 1082 1036 if ((err = device_create_file(dev, 1083 1037 &sensor_dev_attr_fan2_input16.dev_attr)) 1084 1038 || (err = device_create_file(dev, 1085 - &sensor_dev_attr_fan2_min16.dev_attr))) 1039 + &sensor_dev_attr_fan2_min16.dev_attr)) 1040 + || (err = device_create_file(dev, 1041 + &sensor_dev_attr_fan2_alarm.dev_attr))) 1086 1042 goto ERROR4; 1087 1043 } 1088 1044 if (data->has_fan & (1 << 2)) { 1089 1045 if ((err = device_create_file(dev, 1090 1046 &sensor_dev_attr_fan3_input16.dev_attr)) 1091 1047 || (err = device_create_file(dev, 1092 - &sensor_dev_attr_fan3_min16.dev_attr))) 1048 + &sensor_dev_attr_fan3_min16.dev_attr)) 1049 + || (err = device_create_file(dev, 1050 + &sensor_dev_attr_fan3_alarm.dev_attr))) 1093 1051 goto ERROR4; 1094 1052 } 1095 1053 if (data->has_fan & (1 << 3)) { 1096 1054 if ((err = device_create_file(dev, 1097 1055 &sensor_dev_attr_fan4_input16.dev_attr)) 1098 1056 || (err = device_create_file(dev, 1099 - &sensor_dev_attr_fan4_min16.dev_attr))) 1057 + &sensor_dev_attr_fan4_min16.dev_attr)) 1058 + || (err = device_create_file(dev, 1059 + &sensor_dev_attr_fan4_alarm.dev_attr))) 1100 1060 goto ERROR4; 1101 1061 } 1102 1062 if (data->has_fan & (1 << 4)) { 1103 1063 if ((err = device_create_file(dev, 1104 1064 &sensor_dev_attr_fan5_input16.dev_attr)) 1105 1065 || (err = device_create_file(dev, 1106 - &sensor_dev_attr_fan5_min16.dev_attr))) 1066 + &sensor_dev_attr_fan5_min16.dev_attr)) 1067 + || (err = device_create_file(dev, 1068 + &sensor_dev_attr_fan5_alarm.dev_attr))) 1107 1069 goto ERROR4; 1108 1070 } 1109 1071 } else { ··· 1124 1066 || (err = device_create_file(dev, 1125 1067 &sensor_dev_attr_fan1_min.dev_attr)) 1126 1068 || (err = device_create_file(dev, 1127 - &sensor_dev_attr_fan1_div.dev_attr))) 1069 + &sensor_dev_attr_fan1_div.dev_attr)) 1070 + || (err = device_create_file(dev, 1071 + &sensor_dev_attr_fan1_alarm.dev_attr))) 1128 1072 goto ERROR4; 1129 1073 } 1130 1074 if (data->has_fan & (1 << 1)) { ··· 1135 1075 || (err = device_create_file(dev, 1136 1076 &sensor_dev_attr_fan2_min.dev_attr)) 1137 1077 || (err = device_create_file(dev, 1138 - &sensor_dev_attr_fan2_div.dev_attr))) 1078 + &sensor_dev_attr_fan2_div.dev_attr)) 1079 + || (err = device_create_file(dev, 1080 + &sensor_dev_attr_fan2_alarm.dev_attr))) 1139 1081 goto ERROR4; 1140 1082 } 1141 1083 if (data->has_fan & (1 << 2)) { ··· 1146 1084 || (err = device_create_file(dev, 1147 1085 &sensor_dev_attr_fan3_min.dev_attr)) 1148 1086 || (err = device_create_file(dev, 1149 - &sensor_dev_attr_fan3_div.dev_attr))) 1087 + &sensor_dev_attr_fan3_div.dev_attr)) 1088 + || (err = device_create_file(dev, 1089 + &sensor_dev_attr_fan3_alarm.dev_attr))) 1150 1090 goto ERROR4; 1151 1091 } 1152 1092 } ··· 1552 1488 } 1553 1489 1554 1490 1555 - MODULE_AUTHOR("Chris Gauthron <chrisg@0-in.com>, " 1491 + MODULE_AUTHOR("Chris Gauthron, " 1556 1492 "Jean Delvare <khali@linux-fr.org>"); 1557 1493 MODULE_DESCRIPTION("IT8705F/8712F/8716F/8718F/8726F, SiS950 driver"); 1558 1494 module_param(update_vbat, bool, 0);
-1
drivers/hwmon/lm75.c
··· 74 74 .driver = { 75 75 .name = "lm75", 76 76 }, 77 - .id = I2C_DRIVERID_LM75, 78 77 .attach_adapter = lm75_attach_adapter, 79 78 .detach_client = lm75_detach_client, 80 79 };
+15 -5
drivers/hwmon/lm77.c
··· 31 31 #include <linux/jiffies.h> 32 32 #include <linux/i2c.h> 33 33 #include <linux/hwmon.h> 34 + #include <linux/hwmon-sysfs.h> 34 35 #include <linux/err.h> 35 36 #include <linux/mutex.h> 36 37 ··· 114 113 show(temp_crit); 115 114 show(temp_min); 116 115 show(temp_max); 117 - show(alarms); 118 116 119 117 /* read routines for hysteresis values */ 120 118 static ssize_t show_temp_crit_hyst(struct device *dev, struct device_attribute *attr, char *buf) ··· 186 186 return count; 187 187 } 188 188 189 + static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, 190 + char *buf) 191 + { 192 + int bitnr = to_sensor_dev_attr(attr)->index; 193 + struct lm77_data *data = lm77_update_device(dev); 194 + return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); 195 + } 196 + 189 197 static DEVICE_ATTR(temp1_input, S_IRUGO, 190 198 show_temp_input, NULL); 191 199 static DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, ··· 210 202 static DEVICE_ATTR(temp1_max_hyst, S_IRUGO, 211 203 show_temp_max_hyst, NULL); 212 204 213 - static DEVICE_ATTR(alarms, S_IRUGO, 214 - show_alarms, NULL); 205 + static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 2); 206 + static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 0); 207 + static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 1); 215 208 216 209 static int lm77_attach_adapter(struct i2c_adapter *adapter) 217 210 { ··· 229 220 &dev_attr_temp1_crit_hyst.attr, 230 221 &dev_attr_temp1_min_hyst.attr, 231 222 &dev_attr_temp1_max_hyst.attr, 232 - &dev_attr_alarms.attr, 233 - 223 + &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr, 224 + &sensor_dev_attr_temp1_min_alarm.dev_attr.attr, 225 + &sensor_dev_attr_temp1_max_alarm.dev_attr.attr, 234 226 NULL 235 227 }; 236 228
+2 -5
drivers/hwmon/lm78.c
··· 37 37 static struct platform_device *pdev; 38 38 39 39 /* Addresses to scan */ 40 - static unsigned short normal_i2c[] = { 0x20, 0x21, 0x22, 0x23, 0x24, 41 - 0x25, 0x26, 0x27, 0x28, 0x29, 42 - 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 43 - 0x2f, I2C_CLIENT_END }; 40 + static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 41 + 0x2e, 0x2f, I2C_CLIENT_END }; 44 42 static unsigned short isa_address = 0x290; 45 43 46 44 /* Insmod parameters */ ··· 168 170 .driver = { 169 171 .name = "lm78", 170 172 }, 171 - .id = I2C_DRIVERID_LM78, 172 173 .attach_adapter = lm78_attach_adapter, 173 174 .detach_client = lm78_detach_client, 174 175 };
+165 -161
drivers/hwmon/lm80.c
··· 27 27 #include <linux/jiffies.h> 28 28 #include <linux/i2c.h> 29 29 #include <linux/hwmon.h> 30 + #include <linux/hwmon-sysfs.h> 30 31 #include <linux/err.h> 31 32 #include <linux/mutex.h> 32 33 ··· 128 127 u16 alarms; /* Register encoding, combined */ 129 128 }; 130 129 131 - /* 130 + /* 132 131 * Functions declaration 133 132 */ 134 133 ··· 148 147 .driver = { 149 148 .name = "lm80", 150 149 }, 151 - .id = I2C_DRIVERID_LM80, 152 150 .attach_adapter = lm80_attach_adapter, 153 151 .detach_client = lm80_detach_client, 154 152 }; ··· 159 159 #define show_in(suffix, value) \ 160 160 static ssize_t show_in_##suffix(struct device *dev, struct device_attribute *attr, char *buf) \ 161 161 { \ 162 + int nr = to_sensor_dev_attr(attr)->index; \ 162 163 struct lm80_data *data = lm80_update_device(dev); \ 163 - return sprintf(buf, "%d\n", IN_FROM_REG(data->value)); \ 164 + return sprintf(buf, "%d\n", IN_FROM_REG(data->value[nr])); \ 164 165 } 165 - show_in(min0, in_min[0]); 166 - show_in(min1, in_min[1]); 167 - show_in(min2, in_min[2]); 168 - show_in(min3, in_min[3]); 169 - show_in(min4, in_min[4]); 170 - show_in(min5, in_min[5]); 171 - show_in(min6, in_min[6]); 172 - show_in(max0, in_max[0]); 173 - show_in(max1, in_max[1]); 174 - show_in(max2, in_max[2]); 175 - show_in(max3, in_max[3]); 176 - show_in(max4, in_max[4]); 177 - show_in(max5, in_max[5]); 178 - show_in(max6, in_max[6]); 179 - show_in(input0, in[0]); 180 - show_in(input1, in[1]); 181 - show_in(input2, in[2]); 182 - show_in(input3, in[3]); 183 - show_in(input4, in[4]); 184 - show_in(input5, in[5]); 185 - show_in(input6, in[6]); 166 + show_in(min, in_min) 167 + show_in(max, in_max) 168 + show_in(input, in) 186 169 187 170 #define set_in(suffix, value, reg) \ 188 171 static ssize_t set_in_##suffix(struct device *dev, struct device_attribute *attr, const char *buf, \ 189 172 size_t count) \ 190 173 { \ 174 + int nr = to_sensor_dev_attr(attr)->index; \ 191 175 struct i2c_client *client = to_i2c_client(dev); \ 192 176 struct lm80_data *data = i2c_get_clientdata(client); \ 193 177 long val = simple_strtol(buf, NULL, 10); \ 194 178 \ 195 179 mutex_lock(&data->update_lock);\ 196 - data->value = IN_TO_REG(val); \ 197 - lm80_write_value(client, reg, data->value); \ 180 + data->value[nr] = IN_TO_REG(val); \ 181 + lm80_write_value(client, reg(nr), data->value[nr]); \ 198 182 mutex_unlock(&data->update_lock);\ 199 183 return count; \ 200 184 } 201 - set_in(min0, in_min[0], LM80_REG_IN_MIN(0)); 202 - set_in(min1, in_min[1], LM80_REG_IN_MIN(1)); 203 - set_in(min2, in_min[2], LM80_REG_IN_MIN(2)); 204 - set_in(min3, in_min[3], LM80_REG_IN_MIN(3)); 205 - set_in(min4, in_min[4], LM80_REG_IN_MIN(4)); 206 - set_in(min5, in_min[5], LM80_REG_IN_MIN(5)); 207 - set_in(min6, in_min[6], LM80_REG_IN_MIN(6)); 208 - set_in(max0, in_max[0], LM80_REG_IN_MAX(0)); 209 - set_in(max1, in_max[1], LM80_REG_IN_MAX(1)); 210 - set_in(max2, in_max[2], LM80_REG_IN_MAX(2)); 211 - set_in(max3, in_max[3], LM80_REG_IN_MAX(3)); 212 - set_in(max4, in_max[4], LM80_REG_IN_MAX(4)); 213 - set_in(max5, in_max[5], LM80_REG_IN_MAX(5)); 214 - set_in(max6, in_max[6], LM80_REG_IN_MAX(6)); 185 + set_in(min, in_min, LM80_REG_IN_MIN) 186 + set_in(max, in_max, LM80_REG_IN_MAX) 215 187 216 - #define show_fan(suffix, value, div) \ 188 + #define show_fan(suffix, value) \ 217 189 static ssize_t show_fan_##suffix(struct device *dev, struct device_attribute *attr, char *buf) \ 218 190 { \ 191 + int nr = to_sensor_dev_attr(attr)->index; \ 219 192 struct lm80_data *data = lm80_update_device(dev); \ 220 - return sprintf(buf, "%d\n", FAN_FROM_REG(data->value, \ 221 - DIV_FROM_REG(data->div))); \ 193 + return sprintf(buf, "%d\n", FAN_FROM_REG(data->value[nr], \ 194 + DIV_FROM_REG(data->fan_div[nr]))); \ 222 195 } 223 - show_fan(min1, fan_min[0], fan_div[0]); 224 - show_fan(min2, fan_min[1], fan_div[1]); 225 - show_fan(input1, fan[0], fan_div[0]); 226 - show_fan(input2, fan[1], fan_div[1]); 196 + show_fan(min, fan_min) 197 + show_fan(input, fan) 227 198 228 - #define show_fan_div(suffix, value) \ 229 - static ssize_t show_fan_div##suffix(struct device *dev, struct device_attribute *attr, char *buf) \ 230 - { \ 231 - struct lm80_data *data = lm80_update_device(dev); \ 232 - return sprintf(buf, "%d\n", DIV_FROM_REG(data->value)); \ 199 + static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr, 200 + char *buf) 201 + { 202 + int nr = to_sensor_dev_attr(attr)->index; 203 + struct lm80_data *data = lm80_update_device(dev); 204 + return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr])); 233 205 } 234 - show_fan_div(1, fan_div[0]); 235 - show_fan_div(2, fan_div[1]); 236 206 237 - #define set_fan(suffix, value, reg, div) \ 238 - static ssize_t set_fan_##suffix(struct device *dev, struct device_attribute *attr, const char *buf, \ 239 - size_t count) \ 240 - { \ 241 - struct i2c_client *client = to_i2c_client(dev); \ 242 - struct lm80_data *data = i2c_get_clientdata(client); \ 243 - long val = simple_strtoul(buf, NULL, 10); \ 244 - \ 245 - mutex_lock(&data->update_lock);\ 246 - data->value = FAN_TO_REG(val, DIV_FROM_REG(data->div)); \ 247 - lm80_write_value(client, reg, data->value); \ 248 - mutex_unlock(&data->update_lock);\ 249 - return count; \ 207 + static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, 208 + const char *buf, size_t count) 209 + { 210 + int nr = to_sensor_dev_attr(attr)->index; 211 + struct i2c_client *client = to_i2c_client(dev); 212 + struct lm80_data *data = i2c_get_clientdata(client); 213 + long val = simple_strtoul(buf, NULL, 10); 214 + 215 + mutex_lock(&data->update_lock); 216 + data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr])); 217 + lm80_write_value(client, LM80_REG_FAN_MIN(nr + 1), data->fan_min[nr]); 218 + mutex_unlock(&data->update_lock); 219 + return count; 250 220 } 251 - set_fan(min1, fan_min[0], LM80_REG_FAN_MIN(1), fan_div[0]); 252 - set_fan(min2, fan_min[1], LM80_REG_FAN_MIN(2), fan_div[1]); 253 221 254 222 /* Note: we save and restore the fan minimum here, because its value is 255 223 determined in part by the fan divisor. This follows the principle of 256 224 least surprise; the user doesn't expect the fan minimum to change just 257 225 because the divisor changed. */ 258 - static ssize_t set_fan_div(struct device *dev, const char *buf, 259 - size_t count, int nr) 226 + static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 227 + const char *buf, size_t count) 260 228 { 229 + int nr = to_sensor_dev_attr(attr)->index; 261 230 struct i2c_client *client = to_i2c_client(dev); 262 231 struct lm80_data *data = i2c_get_clientdata(client); 263 232 unsigned long min, val = simple_strtoul(buf, NULL, 10); ··· 260 291 261 292 return count; 262 293 } 263 - 264 - #define set_fan_div(number) \ 265 - static ssize_t set_fan_div##number(struct device *dev, struct device_attribute *attr, const char *buf, \ 266 - size_t count) \ 267 - { \ 268 - return set_fan_div(dev, buf, count, number - 1); \ 269 - } 270 - set_fan_div(1); 271 - set_fan_div(2); 272 294 273 295 static ssize_t show_temp_input1(struct device *dev, struct device_attribute *attr, char *buf) 274 296 { ··· 297 337 set_temp(os_max, temp_os_max, LM80_REG_TEMP_OS_MAX); 298 338 set_temp(os_hyst, temp_os_hyst, LM80_REG_TEMP_OS_HYST); 299 339 300 - static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf) 340 + static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, 341 + char *buf) 301 342 { 302 343 struct lm80_data *data = lm80_update_device(dev); 303 344 return sprintf(buf, "%u\n", data->alarms); 304 345 } 305 346 306 - static DEVICE_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min0, set_in_min0); 307 - static DEVICE_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min1, set_in_min1); 308 - static DEVICE_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min2, set_in_min2); 309 - static DEVICE_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min3, set_in_min3); 310 - static DEVICE_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min4, set_in_min4); 311 - static DEVICE_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min5, set_in_min5); 312 - static DEVICE_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min6, set_in_min6); 313 - static DEVICE_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max0, set_in_max0); 314 - static DEVICE_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max1, set_in_max1); 315 - static DEVICE_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max2, set_in_max2); 316 - static DEVICE_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max3, set_in_max3); 317 - static DEVICE_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max4, set_in_max4); 318 - static DEVICE_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max5, set_in_max5); 319 - static DEVICE_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max6, set_in_max6); 320 - static DEVICE_ATTR(in0_input, S_IRUGO, show_in_input0, NULL); 321 - static DEVICE_ATTR(in1_input, S_IRUGO, show_in_input1, NULL); 322 - static DEVICE_ATTR(in2_input, S_IRUGO, show_in_input2, NULL); 323 - static DEVICE_ATTR(in3_input, S_IRUGO, show_in_input3, NULL); 324 - static DEVICE_ATTR(in4_input, S_IRUGO, show_in_input4, NULL); 325 - static DEVICE_ATTR(in5_input, S_IRUGO, show_in_input5, NULL); 326 - static DEVICE_ATTR(in6_input, S_IRUGO, show_in_input6, NULL); 327 - static DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min1, 328 - set_fan_min1); 329 - static DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min2, 330 - set_fan_min2); 331 - static DEVICE_ATTR(fan1_input, S_IRUGO, show_fan_input1, NULL); 332 - static DEVICE_ATTR(fan2_input, S_IRUGO, show_fan_input2, NULL); 333 - static DEVICE_ATTR(fan1_div, S_IWUSR | S_IRUGO, show_fan_div1, set_fan_div1); 334 - static DEVICE_ATTR(fan2_div, S_IWUSR | S_IRUGO, show_fan_div2, set_fan_div2); 347 + static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, 348 + char *buf) 349 + { 350 + int bitnr = to_sensor_dev_attr(attr)->index; 351 + struct lm80_data *data = lm80_update_device(dev); 352 + return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); 353 + } 354 + 355 + static SENSOR_DEVICE_ATTR(in0_min, S_IWUSR | S_IRUGO, 356 + show_in_min, set_in_min, 0); 357 + static SENSOR_DEVICE_ATTR(in1_min, S_IWUSR | S_IRUGO, 358 + show_in_min, set_in_min, 1); 359 + static SENSOR_DEVICE_ATTR(in2_min, S_IWUSR | S_IRUGO, 360 + show_in_min, set_in_min, 2); 361 + static SENSOR_DEVICE_ATTR(in3_min, S_IWUSR | S_IRUGO, 362 + show_in_min, set_in_min, 3); 363 + static SENSOR_DEVICE_ATTR(in4_min, S_IWUSR | S_IRUGO, 364 + show_in_min, set_in_min, 4); 365 + static SENSOR_DEVICE_ATTR(in5_min, S_IWUSR | S_IRUGO, 366 + show_in_min, set_in_min, 5); 367 + static SENSOR_DEVICE_ATTR(in6_min, S_IWUSR | S_IRUGO, 368 + show_in_min, set_in_min, 6); 369 + static SENSOR_DEVICE_ATTR(in0_max, S_IWUSR | S_IRUGO, 370 + show_in_max, set_in_max, 0); 371 + static SENSOR_DEVICE_ATTR(in1_max, S_IWUSR | S_IRUGO, 372 + show_in_max, set_in_max, 1); 373 + static SENSOR_DEVICE_ATTR(in2_max, S_IWUSR | S_IRUGO, 374 + show_in_max, set_in_max, 2); 375 + static SENSOR_DEVICE_ATTR(in3_max, S_IWUSR | S_IRUGO, 376 + show_in_max, set_in_max, 3); 377 + static SENSOR_DEVICE_ATTR(in4_max, S_IWUSR | S_IRUGO, 378 + show_in_max, set_in_max, 4); 379 + static SENSOR_DEVICE_ATTR(in5_max, S_IWUSR | S_IRUGO, 380 + show_in_max, set_in_max, 5); 381 + static SENSOR_DEVICE_ATTR(in6_max, S_IWUSR | S_IRUGO, 382 + show_in_max, set_in_max, 6); 383 + static SENSOR_DEVICE_ATTR(in0_input, S_IRUGO, show_in_input, NULL, 0); 384 + static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_in_input, NULL, 1); 385 + static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_in_input, NULL, 2); 386 + static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_in_input, NULL, 3); 387 + static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_in_input, NULL, 4); 388 + static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, show_in_input, NULL, 5); 389 + static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, show_in_input, NULL, 6); 390 + static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, 391 + show_fan_min, set_fan_min, 0); 392 + static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, 393 + show_fan_min, set_fan_min, 1); 394 + static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan_input, NULL, 0); 395 + static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan_input, NULL, 1); 396 + static SENSOR_DEVICE_ATTR(fan1_div, S_IWUSR | S_IRUGO, 397 + show_fan_div, set_fan_div, 0); 398 + static SENSOR_DEVICE_ATTR(fan2_div, S_IWUSR | S_IRUGO, 399 + show_fan_div, set_fan_div, 1); 335 400 static DEVICE_ATTR(temp1_input, S_IRUGO, show_temp_input1, NULL); 336 401 static DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_hot_max, 337 402 set_temp_hot_max); ··· 367 382 static DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temp_os_hyst, 368 383 set_temp_os_hyst); 369 384 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 385 + static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0); 386 + static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1); 387 + static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2); 388 + static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3); 389 + static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 4); 390 + static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 5); 391 + static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 6); 392 + static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 10); 393 + static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 11); 394 + static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 8); 395 + static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 13); 370 396 371 397 /* 372 398 * Real code ··· 391 395 } 392 396 393 397 static struct attribute *lm80_attributes[] = { 394 - &dev_attr_in0_min.attr, 395 - &dev_attr_in1_min.attr, 396 - &dev_attr_in2_min.attr, 397 - &dev_attr_in3_min.attr, 398 - &dev_attr_in4_min.attr, 399 - &dev_attr_in5_min.attr, 400 - &dev_attr_in6_min.attr, 401 - &dev_attr_in0_max.attr, 402 - &dev_attr_in1_max.attr, 403 - &dev_attr_in2_max.attr, 404 - &dev_attr_in3_max.attr, 405 - &dev_attr_in4_max.attr, 406 - &dev_attr_in5_max.attr, 407 - &dev_attr_in6_max.attr, 408 - &dev_attr_in0_input.attr, 409 - &dev_attr_in1_input.attr, 410 - &dev_attr_in2_input.attr, 411 - &dev_attr_in3_input.attr, 412 - &dev_attr_in4_input.attr, 413 - &dev_attr_in5_input.attr, 414 - &dev_attr_in6_input.attr, 415 - &dev_attr_fan1_min.attr, 416 - &dev_attr_fan2_min.attr, 417 - &dev_attr_fan1_input.attr, 418 - &dev_attr_fan2_input.attr, 419 - &dev_attr_fan1_div.attr, 420 - &dev_attr_fan2_div.attr, 398 + &sensor_dev_attr_in0_min.dev_attr.attr, 399 + &sensor_dev_attr_in1_min.dev_attr.attr, 400 + &sensor_dev_attr_in2_min.dev_attr.attr, 401 + &sensor_dev_attr_in3_min.dev_attr.attr, 402 + &sensor_dev_attr_in4_min.dev_attr.attr, 403 + &sensor_dev_attr_in5_min.dev_attr.attr, 404 + &sensor_dev_attr_in6_min.dev_attr.attr, 405 + &sensor_dev_attr_in0_max.dev_attr.attr, 406 + &sensor_dev_attr_in1_max.dev_attr.attr, 407 + &sensor_dev_attr_in2_max.dev_attr.attr, 408 + &sensor_dev_attr_in3_max.dev_attr.attr, 409 + &sensor_dev_attr_in4_max.dev_attr.attr, 410 + &sensor_dev_attr_in5_max.dev_attr.attr, 411 + &sensor_dev_attr_in6_max.dev_attr.attr, 412 + &sensor_dev_attr_in0_input.dev_attr.attr, 413 + &sensor_dev_attr_in1_input.dev_attr.attr, 414 + &sensor_dev_attr_in2_input.dev_attr.attr, 415 + &sensor_dev_attr_in3_input.dev_attr.attr, 416 + &sensor_dev_attr_in4_input.dev_attr.attr, 417 + &sensor_dev_attr_in5_input.dev_attr.attr, 418 + &sensor_dev_attr_in6_input.dev_attr.attr, 419 + &sensor_dev_attr_fan1_min.dev_attr.attr, 420 + &sensor_dev_attr_fan2_min.dev_attr.attr, 421 + &sensor_dev_attr_fan1_input.dev_attr.attr, 422 + &sensor_dev_attr_fan2_input.dev_attr.attr, 423 + &sensor_dev_attr_fan1_div.dev_attr.attr, 424 + &sensor_dev_attr_fan2_div.dev_attr.attr, 421 425 &dev_attr_temp1_input.attr, 422 426 &dev_attr_temp1_max.attr, 423 427 &dev_attr_temp1_max_hyst.attr, 424 428 &dev_attr_temp1_crit.attr, 425 429 &dev_attr_temp1_crit_hyst.attr, 426 430 &dev_attr_alarms.attr, 427 - 431 + &sensor_dev_attr_in0_alarm.dev_attr.attr, 432 + &sensor_dev_attr_in1_alarm.dev_attr.attr, 433 + &sensor_dev_attr_in2_alarm.dev_attr.attr, 434 + &sensor_dev_attr_in3_alarm.dev_attr.attr, 435 + &sensor_dev_attr_in4_alarm.dev_attr.attr, 436 + &sensor_dev_attr_in5_alarm.dev_attr.attr, 437 + &sensor_dev_attr_in6_alarm.dev_attr.attr, 438 + &sensor_dev_attr_fan1_alarm.dev_attr.attr, 439 + &sensor_dev_attr_fan2_alarm.dev_attr.attr, 440 + &sensor_dev_attr_temp1_max_alarm.dev_attr.attr, 441 + &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr, 428 442 NULL 429 443 }; 430 444 ··· 445 439 static int lm80_detect(struct i2c_adapter *adapter, int address, int kind) 446 440 { 447 441 int i, cur; 448 - struct i2c_client *new_client; 442 + struct i2c_client *client; 449 443 struct lm80_data *data; 450 444 int err = 0; 451 445 const char *name; ··· 461 455 goto exit; 462 456 } 463 457 464 - new_client = &data->client; 465 - i2c_set_clientdata(new_client, data); 466 - new_client->addr = address; 467 - new_client->adapter = adapter; 468 - new_client->driver = &lm80_driver; 469 - new_client->flags = 0; 458 + client = &data->client; 459 + i2c_set_clientdata(client, data); 460 + client->addr = address; 461 + client->adapter = adapter; 462 + client->driver = &lm80_driver; 470 463 471 464 /* Now, we do the remaining detection. It is lousy. */ 472 - if (lm80_read_value(new_client, LM80_REG_ALARM2) & 0xc0) 465 + if (lm80_read_value(client, LM80_REG_ALARM2) & 0xc0) 473 466 goto error_free; 474 467 for (i = 0x2a; i <= 0x3d; i++) { 475 - cur = i2c_smbus_read_byte_data(new_client, i); 476 - if ((i2c_smbus_read_byte_data(new_client, i + 0x40) != cur) 477 - || (i2c_smbus_read_byte_data(new_client, i + 0x80) != cur) 478 - || (i2c_smbus_read_byte_data(new_client, i + 0xc0) != cur)) 468 + cur = i2c_smbus_read_byte_data(client, i); 469 + if ((i2c_smbus_read_byte_data(client, i + 0x40) != cur) 470 + || (i2c_smbus_read_byte_data(client, i + 0x80) != cur) 471 + || (i2c_smbus_read_byte_data(client, i + 0xc0) != cur)) 479 472 goto error_free; 480 473 } 481 474 ··· 482 477 kind = lm80; 483 478 name = "lm80"; 484 479 485 - /* Fill in the remaining client fields and put it into the global list */ 486 - strlcpy(new_client->name, name, I2C_NAME_SIZE); 487 - data->valid = 0; 480 + /* Fill in the remaining client fields */ 481 + strlcpy(client->name, name, I2C_NAME_SIZE); 488 482 mutex_init(&data->update_lock); 489 483 490 484 /* Tell the I2C layer a new client has arrived */ 491 - if ((err = i2c_attach_client(new_client))) 485 + if ((err = i2c_attach_client(client))) 492 486 goto error_free; 493 487 494 488 /* Initialize the LM80 chip */ 495 - lm80_init_client(new_client); 489 + lm80_init_client(client); 496 490 497 491 /* A few vars need to be filled upon startup */ 498 - data->fan_min[0] = lm80_read_value(new_client, LM80_REG_FAN_MIN(1)); 499 - data->fan_min[1] = lm80_read_value(new_client, LM80_REG_FAN_MIN(2)); 492 + data->fan_min[0] = lm80_read_value(client, LM80_REG_FAN_MIN(1)); 493 + data->fan_min[1] = lm80_read_value(client, LM80_REG_FAN_MIN(2)); 500 494 501 495 /* Register sysfs hooks */ 502 - if ((err = sysfs_create_group(&new_client->dev.kobj, &lm80_group))) 496 + if ((err = sysfs_create_group(&client->dev.kobj, &lm80_group))) 503 497 goto error_detach; 504 498 505 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 499 + data->hwmon_dev = hwmon_device_register(&client->dev); 506 500 if (IS_ERR(data->hwmon_dev)) { 507 501 err = PTR_ERR(data->hwmon_dev); 508 502 goto error_remove; ··· 510 506 return 0; 511 507 512 508 error_remove: 513 - sysfs_remove_group(&new_client->dev.kobj, &lm80_group); 509 + sysfs_remove_group(&client->dev.kobj, &lm80_group); 514 510 error_detach: 515 - i2c_detach_client(new_client); 511 + i2c_detach_client(client); 516 512 error_free: 517 513 kfree(data); 518 514 exit:
-1
drivers/hwmon/lm83.c
··· 133 133 .driver = { 134 134 .name = "lm83", 135 135 }, 136 - .id = I2C_DRIVERID_LM83, 137 136 .attach_adapter = lm83_attach_adapter, 138 137 .detach_client = lm83_detach_client, 139 138 };
+53 -11
drivers/hwmon/lm85.c
··· 367 367 .driver = { 368 368 .name = "lm85", 369 369 }, 370 - .id = I2C_DRIVERID_LM85, 371 370 .attach_adapter = lm85_attach_adapter, 372 371 .detach_client = lm85_detach_client, 373 372 }; ··· 443 444 444 445 static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 445 446 { 446 - struct i2c_client *client = to_i2c_client(dev); 447 - struct lm85_data *data = i2c_get_clientdata(client); 448 - u32 val; 449 - 450 - val = simple_strtoul(buf, NULL, 10); 451 - data->vrm = val; 447 + struct lm85_data *data = dev_get_drvdata(dev); 448 + data->vrm = simple_strtoul(buf, NULL, 10); 452 449 return count; 453 450 } 454 451 ··· 514 519 { 515 520 int nr = to_sensor_dev_attr(attr)->index; 516 521 struct lm85_data *data = lm85_update_device(dev); 517 - int pwm_zone; 522 + int pwm_zone, enable; 518 523 519 524 pwm_zone = ZONE_FROM_REG(data->autofan[nr].config); 520 - return sprintf(buf,"%d\n", (pwm_zone != 0 && pwm_zone != -1) ); 525 + switch (pwm_zone) { 526 + case -1: /* PWM is always at 100% */ 527 + enable = 0; 528 + break; 529 + case 0: /* PWM is always at 0% */ 530 + case -2: /* PWM responds to manual control */ 531 + enable = 1; 532 + break; 533 + default: /* PWM in automatic mode */ 534 + enable = 2; 535 + } 536 + return sprintf(buf, "%d\n", enable); 537 + } 538 + 539 + static ssize_t set_pwm_enable(struct device *dev, struct device_attribute 540 + *attr, const char *buf, size_t count) 541 + { 542 + int nr = to_sensor_dev_attr(attr)->index; 543 + struct i2c_client *client = to_i2c_client(dev); 544 + struct lm85_data *data = i2c_get_clientdata(client); 545 + long val = simple_strtol(buf, NULL, 10); 546 + u8 config; 547 + 548 + switch (val) { 549 + case 0: 550 + config = 3; 551 + break; 552 + case 1: 553 + config = 7; 554 + break; 555 + case 2: 556 + /* Here we have to choose arbitrarily one of the 5 possible 557 + configurations; I go for the safest */ 558 + config = 6; 559 + break; 560 + default: 561 + return -EINVAL; 562 + } 563 + 564 + mutex_lock(&data->update_lock); 565 + data->autofan[nr].config = lm85_read_value(client, 566 + LM85_REG_AFAN_CONFIG(nr)); 567 + data->autofan[nr].config = (data->autofan[nr].config & ~0xe0) 568 + | (config << 5); 569 + lm85_write_value(client, LM85_REG_AFAN_CONFIG(nr), 570 + data->autofan[nr].config); 571 + mutex_unlock(&data->update_lock); 572 + return count; 521 573 } 522 574 523 575 #define show_pwm_reg(offset) \ 524 576 static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \ 525 577 show_pwm, set_pwm, offset - 1); \ 526 - static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO, \ 527 - show_pwm_enable, NULL, offset - 1) 578 + static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \ 579 + show_pwm_enable, set_pwm_enable, offset - 1) 528 580 529 581 show_pwm_reg(1); 530 582 show_pwm_reg(2);
+20 -9
drivers/hwmon/lm87.c
··· 5 5 * Philip Edelbrock <phil@netroedge.com> 6 6 * Stephen Rousset <stephen.rousset@rocketlogix.com> 7 7 * Dan Eaton <dan.eaton@rocketlogix.com> 8 - * Copyright (C) 2004 Jean Delvare <khali@linux-fr.org> 8 + * Copyright (C) 2004,2007 Jean Delvare <khali@linux-fr.org> 9 9 * 10 10 * Original port to Linux 2.6 by Jeff Oliver. 11 11 * ··· 36 36 * control the speed of a fan. All new chips use pulse width modulation 37 37 * instead. The LM87 is the only hardware monitoring chipset I know of 38 38 * which uses amplitude modulation. Be careful when using this feature. 39 + * 40 + * This driver also supports the ADM1024, a sensor chip made by Analog 41 + * Devices. That chip is fully compatible with the LM87. Complete 42 + * datasheet can be obtained from Analog's website at: 43 + * http://www.analog.com/en/prod/0,2877,ADM1024,00.html 39 44 * 40 45 * This program is free software; you can redistribute it and/or modify 41 46 * it under the terms of the GNU General Public License as published by ··· 79 74 * Insmod parameters 80 75 */ 81 76 82 - I2C_CLIENT_INSMOD_1(lm87); 77 + I2C_CLIENT_INSMOD_2(lm87, adm1024); 83 78 84 79 /* 85 80 * The LM87 registers ··· 171 166 .driver = { 172 167 .name = "lm87", 173 168 }, 174 - .id = I2C_DRIVERID_LM87, 175 169 .attach_adapter = lm87_attach_adapter, 176 170 .detach_client = lm87_detach_client, 177 171 }; ··· 510 506 } 511 507 static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 512 508 { 513 - struct i2c_client *client = to_i2c_client(dev); 514 - struct lm87_data *data = i2c_get_clientdata(client); 509 + struct lm87_data *data = dev_get_drvdata(dev); 515 510 data->vrm = simple_strtoul(buf, NULL, 10); 516 511 return count; 517 512 } ··· 665 662 struct i2c_client *new_client; 666 663 struct lm87_data *data; 667 664 int err = 0; 665 + static const char *names[] = { "lm87", "adm1024" }; 668 666 669 667 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 670 668 goto exit; ··· 690 686 691 687 /* Now, we do the remaining detection. */ 692 688 if (kind < 0) { 689 + u8 cid = lm87_read_value(new_client, LM87_REG_COMPANY_ID); 693 690 u8 rev = lm87_read_value(new_client, LM87_REG_REVISION); 694 691 695 - if (rev < 0x01 || rev > 0x08 696 - || (lm87_read_value(new_client, LM87_REG_CONFIG) & 0x80) 697 - || lm87_read_value(new_client, LM87_REG_COMPANY_ID) != 0x02) { 692 + if (cid == 0x02 /* National Semiconductor */ 693 + && (rev >= 0x01 && rev <= 0x08)) 694 + kind = lm87; 695 + else if (cid == 0x41 /* Analog Devices */ 696 + && (rev & 0xf0) == 0x10) 697 + kind = adm1024; 698 + 699 + if (kind < 0 700 + || (lm87_read_value(new_client, LM87_REG_CONFIG) & 0x80)) { 698 701 dev_dbg(&adapter->dev, 699 702 "LM87 detection failed at 0x%02x.\n", 700 703 address); ··· 710 699 } 711 700 712 701 /* We can fill in the remaining client fields */ 713 - strlcpy(new_client->name, "lm87", I2C_NAME_SIZE); 702 + strlcpy(new_client->name, names[kind - 1], I2C_NAME_SIZE); 714 703 data->valid = 0; 715 704 mutex_init(&data->update_lock); 716 705
+12 -13
drivers/hwmon/lm90.c
··· 204 204 .driver = { 205 205 .name = "lm90", 206 206 }, 207 - .id = I2C_DRIVERID_LM90, 208 207 .attach_adapter = lm90_attach_adapter, 209 208 .detach_client = lm90_detach_client, 210 209 }; ··· 530 531 kind = lm90; 531 532 532 533 if (kind < 0) { /* detection and identification */ 533 - u8 man_id, chip_id, reg_config1, reg_convrate; 534 + int man_id, chip_id, reg_config1, reg_convrate; 534 535 535 - if (lm90_read_reg(new_client, LM90_REG_R_MAN_ID, 536 - &man_id) < 0 537 - || lm90_read_reg(new_client, LM90_REG_R_CHIP_ID, 538 - &chip_id) < 0 539 - || lm90_read_reg(new_client, LM90_REG_R_CONFIG1, 540 - &reg_config1) < 0 541 - || lm90_read_reg(new_client, LM90_REG_R_CONVRATE, 542 - &reg_convrate) < 0) 536 + if ((man_id = i2c_smbus_read_byte_data(new_client, 537 + LM90_REG_R_MAN_ID)) < 0 538 + || (chip_id = i2c_smbus_read_byte_data(new_client, 539 + LM90_REG_R_CHIP_ID)) < 0 540 + || (reg_config1 = i2c_smbus_read_byte_data(new_client, 541 + LM90_REG_R_CONFIG1)) < 0 542 + || (reg_convrate = i2c_smbus_read_byte_data(new_client, 543 + LM90_REG_R_CONVRATE)) < 0) 543 544 goto exit_free; 544 545 545 546 if ((address == 0x4C || address == 0x4D) 546 547 && man_id == 0x01) { /* National Semiconductor */ 547 - u8 reg_config2; 548 + int reg_config2; 548 549 549 - if (lm90_read_reg(new_client, LM90_REG_R_CONFIG2, 550 - &reg_config2) < 0) 550 + if ((reg_config2 = i2c_smbus_read_byte_data(new_client, 551 + LM90_REG_R_CONFIG2)) < 0) 551 552 goto exit_free; 552 553 553 554 if ((reg_config1 & 0x2A) == 0x00
-1
drivers/hwmon/lm92.c
··· 428 428 .driver = { 429 429 .name = "lm92", 430 430 }, 431 - .id = I2C_DRIVERID_LM92, 432 431 .attach_adapter = lm92_attach_adapter, 433 432 .detach_client = lm92_detach_client, 434 433 };
+5 -1
drivers/hwmon/pc87360.c
··· 59 59 " 2: Forcibly enable all voltage and temperature channels, except in9\n" 60 60 " 3: Forcibly enable all voltage and temperature channels, including in9"); 61 61 62 + static unsigned short force_id; 63 + module_param(force_id, ushort, 0); 64 + MODULE_PARM_DESC(force_id, "Override the detected device ID"); 65 + 62 66 /* 63 67 * Super-I/O registers and operations 64 68 */ ··· 830 826 /* No superio_enter */ 831 827 832 828 /* Identify device */ 833 - val = superio_inb(sioaddr, DEVID); 829 + val = force_id ? force_id : superio_inb(sioaddr, DEVID); 834 830 switch (val) { 835 831 case 0xE1: /* PC87360 */ 836 832 case 0xE8: /* PC87363 */
+5 -1
drivers/hwmon/pc87427.c
··· 34 34 #include <linux/ioport.h> 35 35 #include <asm/io.h> 36 36 37 + static unsigned short force_id; 38 + module_param(force_id, ushort, 0); 39 + MODULE_PARM_DESC(force_id, "Override the detected device ID"); 40 + 37 41 static struct platform_device *pdev; 38 42 39 43 #define DRVNAME "pc87427" ··· 559 555 int i, err = 0; 560 556 561 557 /* Identify device */ 562 - val = superio_inb(sioaddr, SIOREG_DEVID); 558 + val = force_id ? force_id : superio_inb(sioaddr, SIOREG_DEVID); 563 559 if (val != 0xf2) { /* PC87427 */ 564 560 err = -ENODEV; 565 561 goto exit;
+5 -1
drivers/hwmon/smsc47b397.c
··· 38 38 #include <linux/mutex.h> 39 39 #include <asm/io.h> 40 40 41 + static unsigned short force_id; 42 + module_param(force_id, ushort, 0); 43 + MODULE_PARM_DESC(force_id, "Override the detected device ID"); 44 + 41 45 static struct platform_device *pdev; 42 46 43 47 #define DRVNAME "smsc47b397" ··· 337 333 u8 id, rev; 338 334 339 335 superio_enter(); 340 - id = superio_inb(SUPERIO_REG_DEVID); 336 + id = force_id ? force_id : superio_inb(SUPERIO_REG_DEVID); 341 337 342 338 if ((id != 0x6f) && (id != 0x81) && (id != 0x85)) { 343 339 superio_exit();
+5 -1
drivers/hwmon/smsc47m1.c
··· 39 39 #include <linux/sysfs.h> 40 40 #include <asm/io.h> 41 41 42 + static unsigned short force_id; 43 + module_param(force_id, ushort, 0); 44 + MODULE_PARM_DESC(force_id, "Override the detected device ID"); 45 + 42 46 static struct platform_device *pdev; 43 47 44 48 #define DRVNAME "smsc47m1" ··· 403 399 u8 val; 404 400 405 401 superio_enter(); 406 - val = superio_inb(SUPERIO_REG_DEVID); 402 + val = force_id ? force_id : superio_inb(SUPERIO_REG_DEVID); 407 403 408 404 /* 409 405 * SMSC LPC47M10x/LPC47M112/LPC47M13x (device id 0x59), LPC47M14x
+1 -2
drivers/hwmon/smsc47m192.c
··· 341 341 static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, 342 342 const char *buf, size_t count) 343 343 { 344 - struct i2c_client *client = to_i2c_client(dev); 345 - struct smsc47m192_data *data = i2c_get_clientdata(client); 344 + struct smsc47m192_data *data = dev_get_drvdata(dev); 346 345 data->vrm = simple_strtoul(buf, NULL, 10); 347 346 return count; 348 347 }
+7 -1
drivers/hwmon/vt1211.c
··· 42 42 module_param(int_mode, int, 0); 43 43 MODULE_PARM_DESC(int_mode, "Force the temperature interrupt mode"); 44 44 45 + static unsigned short force_id; 46 + module_param(force_id, ushort, 0); 47 + MODULE_PARM_DESC(force_id, "Override the detected device ID"); 48 + 45 49 static struct platform_device *pdev; 46 50 47 51 #define DRVNAME "vt1211" ··· 1284 1280 static int __init vt1211_find(int sio_cip, unsigned short *address) 1285 1281 { 1286 1282 int err = -ENODEV; 1283 + int devid; 1287 1284 1288 1285 superio_enter(sio_cip); 1289 1286 1290 - if (superio_inb(sio_cip, SIO_VT1211_DEVID) != SIO_VT1211_ID) { 1287 + devid = force_id ? force_id : superio_inb(sio_cip, SIO_VT1211_DEVID); 1288 + if (devid != SIO_VT1211_ID) { 1291 1289 goto EXIT; 1292 1290 } 1293 1291
+1 -1
drivers/hwmon/vt8231.c
··· 504 504 case 4: data->fan_div[nr] = 2; break; 505 505 case 8: data->fan_div[nr] = 3; break; 506 506 default: 507 - dev_err(dev, "fan_div value %ld not supported." 507 + dev_err(dev, "fan_div value %ld not supported. " 508 508 "Choose one of 1, 2, 4 or 8!\n", val); 509 509 mutex_unlock(&data->update_lock); 510 510 return -EINVAL;
+17 -12
drivers/hwmon/w83627ehf.c
··· 59 59 "w83627dhg", 60 60 }; 61 61 62 + static unsigned short force_id; 63 + module_param(force_id, ushort, 0); 64 + MODULE_PARM_DESC(force_id, "Override the detected device ID"); 65 + 62 66 #define DRVNAME "w83627ehf" 63 67 64 68 /* ··· 1202 1198 device_remove_file(dev, &sda_temp[i].dev_attr); 1203 1199 1204 1200 device_remove_file(dev, &dev_attr_name); 1205 - if (data->vid != 0x3f) 1206 - device_remove_file(dev, &dev_attr_cpu0_vid); 1201 + device_remove_file(dev, &dev_attr_cpu0_vid); 1207 1202 } 1208 1203 1209 1204 /* Get the monitoring functions started */ ··· 1302 1299 } 1303 1300 } 1304 1301 1305 - data->vid = superio_inb(sio_data->sioreg, SIO_REG_VID_DATA) & 0x3f; 1302 + data->vid = superio_inb(sio_data->sioreg, SIO_REG_VID_DATA); 1303 + if (sio_data->kind == w83627ehf) /* 6 VID pins only */ 1304 + data->vid &= 0x3f; 1305 + 1306 + err = device_create_file(dev, &dev_attr_cpu0_vid); 1307 + if (err) 1308 + goto exit_release; 1306 1309 } else { 1307 1310 dev_info(dev, "VID pins in output mode, CPU VID not " 1308 1311 "available\n"); 1309 - data->vid = 0x3f; 1310 1312 } 1311 1313 1312 1314 /* fan4 and fan5 share some pins with the GPIO and serial flash */ ··· 1394 1386 if (err) 1395 1387 goto exit_remove; 1396 1388 1397 - if (data->vid != 0x3f) { 1398 - err = device_create_file(dev, &dev_attr_cpu0_vid); 1399 - if (err) 1400 - goto exit_remove; 1401 - } 1402 - 1403 1389 data->hwmon_dev = hwmon_device_register(dev); 1404 1390 if (IS_ERR(data->hwmon_dev)) { 1405 1391 err = PTR_ERR(data->hwmon_dev); ··· 1447 1445 1448 1446 superio_enter(sioaddr); 1449 1447 1450 - val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8) 1451 - | superio_inb(sioaddr, SIO_REG_DEVID + 1); 1448 + if (force_id) 1449 + val = force_id; 1450 + else 1451 + val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8) 1452 + | superio_inb(sioaddr, SIO_REG_DEVID + 1); 1452 1453 switch (val & SIO_ID_MASK) { 1453 1454 case SIO_W83627EHF_ID: 1454 1455 sio_data->kind = w83627ehf;
+173 -54
drivers/hwmon/w83627hf.c
··· 75 75 module_param(init, bool, 0); 76 76 MODULE_PARM_DESC(init, "Set to zero to bypass chip initialization"); 77 77 78 + static unsigned short force_id; 79 + module_param(force_id, ushort, 0); 80 + MODULE_PARM_DESC(force_id, "Override the detected device ID"); 81 + 78 82 /* modified from kernel/include/traps.c */ 79 83 static int REG; /* The register to read/write */ 80 84 #define DEV 0x07 /* Register: Logical device select */ ··· 323 319 return (0x80 | (180000UL / (val << 8))); 324 320 } 325 321 326 - #define BEEP_MASK_FROM_REG(val) (val) 327 - #define BEEP_MASK_TO_REG(val) ((val) & 0xffffff) 328 - #define BEEP_ENABLE_TO_REG(val) ((val)?1:0) 329 - #define BEEP_ENABLE_FROM_REG(val) ((val)?1:0) 322 + #define BEEP_MASK_FROM_REG(val) ((val) & 0xff7fff) 323 + #define BEEP_MASK_TO_REG(val) ((val) & 0xff7fff) 330 324 331 325 #define DIV_FROM_REG(val) (1 << (val)) 332 326 ··· 365 363 u8 vid; /* Register encoding, combined */ 366 364 u32 alarms; /* Register encoding, combined */ 367 365 u32 beep_mask; /* Register encoding, combined */ 368 - u8 beep_enable; /* Boolean */ 369 366 u8 pwm[3]; /* Register value */ 370 367 u8 pwm_freq[3]; /* Register value */ 371 368 u16 sens[3]; /* 1 = pentium diode; 2 = 3904 diode; ··· 714 713 } 715 714 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL); 716 715 717 - #define show_beep_reg(REG, reg) \ 718 - static ssize_t show_beep_##reg (struct device *dev, struct device_attribute *attr, char *buf) \ 719 - { \ 720 - struct w83627hf_data *data = w83627hf_update_device(dev); \ 721 - return sprintf(buf,"%ld\n", \ 722 - (long)BEEP_##REG##_FROM_REG(data->beep_##reg)); \ 716 + static ssize_t 717 + show_alarm(struct device *dev, struct device_attribute *attr, char *buf) 718 + { 719 + struct w83627hf_data *data = w83627hf_update_device(dev); 720 + int bitnr = to_sensor_dev_attr(attr)->index; 721 + return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); 723 722 } 724 - show_beep_reg(ENABLE, enable) 725 - show_beep_reg(MASK, mask) 726 - 727 - #define BEEP_ENABLE 0 /* Store beep_enable */ 728 - #define BEEP_MASK 1 /* Store beep_mask */ 723 + static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0); 724 + static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1); 725 + static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2); 726 + static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3); 727 + static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8); 728 + static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 9); 729 + static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 10); 730 + static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 16); 731 + static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 17); 732 + static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6); 733 + static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7); 734 + static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11); 735 + static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4); 736 + static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5); 737 + static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13); 729 738 730 739 static ssize_t 731 - store_beep_reg(struct device *dev, const char *buf, size_t count, 732 - int update_mask) 740 + show_beep_mask(struct device *dev, struct device_attribute *attr, char *buf) 741 + { 742 + struct w83627hf_data *data = w83627hf_update_device(dev); 743 + return sprintf(buf, "%ld\n", 744 + (long)BEEP_MASK_FROM_REG(data->beep_mask)); 745 + } 746 + 747 + static ssize_t 748 + store_beep_mask(struct device *dev, struct device_attribute *attr, 749 + const char *buf, size_t count) 733 750 { 734 751 struct w83627hf_data *data = dev_get_drvdata(dev); 735 - u32 val, val2; 752 + unsigned long val; 736 753 737 754 val = simple_strtoul(buf, NULL, 10); 738 755 739 756 mutex_lock(&data->update_lock); 740 757 741 - if (update_mask == BEEP_MASK) { /* We are storing beep_mask */ 742 - data->beep_mask = BEEP_MASK_TO_REG(val); 743 - w83627hf_write_value(data, W83781D_REG_BEEP_INTS1, 744 - data->beep_mask & 0xff); 745 - w83627hf_write_value(data, W83781D_REG_BEEP_INTS3, 746 - ((data->beep_mask) >> 16) & 0xff); 747 - val2 = (data->beep_mask >> 8) & 0x7f; 748 - } else { /* We are storing beep_enable */ 749 - val2 = 750 - w83627hf_read_value(data, W83781D_REG_BEEP_INTS2) & 0x7f; 751 - data->beep_enable = BEEP_ENABLE_TO_REG(val); 752 - } 753 - 758 + /* preserve beep enable */ 759 + data->beep_mask = (data->beep_mask & 0x8000) 760 + | BEEP_MASK_TO_REG(val); 761 + w83627hf_write_value(data, W83781D_REG_BEEP_INTS1, 762 + data->beep_mask & 0xff); 763 + w83627hf_write_value(data, W83781D_REG_BEEP_INTS3, 764 + ((data->beep_mask) >> 16) & 0xff); 754 765 w83627hf_write_value(data, W83781D_REG_BEEP_INTS2, 755 - val2 | data->beep_enable << 7); 766 + (data->beep_mask >> 8) & 0xff); 756 767 757 768 mutex_unlock(&data->update_lock); 758 769 return count; 759 770 } 760 771 761 - #define sysfs_beep(REG, reg) \ 762 - static ssize_t show_regs_beep_##reg (struct device *dev, struct device_attribute *attr, char *buf) \ 763 - { \ 764 - return show_beep_##reg(dev, attr, buf); \ 765 - } \ 766 - static ssize_t \ 767 - store_regs_beep_##reg (struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \ 768 - { \ 769 - return store_beep_reg(dev, buf, count, BEEP_##REG); \ 770 - } \ 771 - static DEVICE_ATTR(beep_##reg, S_IRUGO | S_IWUSR, \ 772 - show_regs_beep_##reg, store_regs_beep_##reg); 772 + static DEVICE_ATTR(beep_mask, S_IRUGO | S_IWUSR, 773 + show_beep_mask, store_beep_mask); 773 774 774 - sysfs_beep(ENABLE, enable); 775 - sysfs_beep(MASK, mask); 775 + static ssize_t 776 + show_beep(struct device *dev, struct device_attribute *attr, char *buf) 777 + { 778 + struct w83627hf_data *data = w83627hf_update_device(dev); 779 + int bitnr = to_sensor_dev_attr(attr)->index; 780 + return sprintf(buf, "%u\n", (data->beep_mask >> bitnr) & 1); 781 + } 782 + 783 + static ssize_t 784 + store_beep(struct device *dev, struct device_attribute *attr, 785 + const char *buf, size_t count) 786 + { 787 + struct w83627hf_data *data = dev_get_drvdata(dev); 788 + int bitnr = to_sensor_dev_attr(attr)->index; 789 + unsigned long bit; 790 + u8 reg; 791 + 792 + bit = simple_strtoul(buf, NULL, 10); 793 + if (bit & ~1) 794 + return -EINVAL; 795 + 796 + mutex_lock(&data->update_lock); 797 + if (bit) 798 + data->beep_mask |= (1 << bitnr); 799 + else 800 + data->beep_mask &= ~(1 << bitnr); 801 + 802 + if (bitnr < 8) { 803 + reg = w83627hf_read_value(data, W83781D_REG_BEEP_INTS1); 804 + if (bit) 805 + reg |= (1 << bitnr); 806 + else 807 + reg &= ~(1 << bitnr); 808 + w83627hf_write_value(data, W83781D_REG_BEEP_INTS1, reg); 809 + } else if (bitnr < 16) { 810 + reg = w83627hf_read_value(data, W83781D_REG_BEEP_INTS2); 811 + if (bit) 812 + reg |= (1 << (bitnr - 8)); 813 + else 814 + reg &= ~(1 << (bitnr - 8)); 815 + w83627hf_write_value(data, W83781D_REG_BEEP_INTS2, reg); 816 + } else { 817 + reg = w83627hf_read_value(data, W83781D_REG_BEEP_INTS3); 818 + if (bit) 819 + reg |= (1 << (bitnr - 16)); 820 + else 821 + reg &= ~(1 << (bitnr - 16)); 822 + w83627hf_write_value(data, W83781D_REG_BEEP_INTS3, reg); 823 + } 824 + mutex_unlock(&data->update_lock); 825 + 826 + return count; 827 + } 828 + 829 + static SENSOR_DEVICE_ATTR(in0_beep, S_IRUGO | S_IWUSR, 830 + show_beep, store_beep, 0); 831 + static SENSOR_DEVICE_ATTR(in1_beep, S_IRUGO | S_IWUSR, 832 + show_beep, store_beep, 1); 833 + static SENSOR_DEVICE_ATTR(in2_beep, S_IRUGO | S_IWUSR, 834 + show_beep, store_beep, 2); 835 + static SENSOR_DEVICE_ATTR(in3_beep, S_IRUGO | S_IWUSR, 836 + show_beep, store_beep, 3); 837 + static SENSOR_DEVICE_ATTR(in4_beep, S_IRUGO | S_IWUSR, 838 + show_beep, store_beep, 8); 839 + static SENSOR_DEVICE_ATTR(in5_beep, S_IRUGO | S_IWUSR, 840 + show_beep, store_beep, 9); 841 + static SENSOR_DEVICE_ATTR(in6_beep, S_IRUGO | S_IWUSR, 842 + show_beep, store_beep, 10); 843 + static SENSOR_DEVICE_ATTR(in7_beep, S_IRUGO | S_IWUSR, 844 + show_beep, store_beep, 16); 845 + static SENSOR_DEVICE_ATTR(in8_beep, S_IRUGO | S_IWUSR, 846 + show_beep, store_beep, 17); 847 + static SENSOR_DEVICE_ATTR(fan1_beep, S_IRUGO | S_IWUSR, 848 + show_beep, store_beep, 6); 849 + static SENSOR_DEVICE_ATTR(fan2_beep, S_IRUGO | S_IWUSR, 850 + show_beep, store_beep, 7); 851 + static SENSOR_DEVICE_ATTR(fan3_beep, S_IRUGO | S_IWUSR, 852 + show_beep, store_beep, 11); 853 + static SENSOR_DEVICE_ATTR(temp1_beep, S_IRUGO | S_IWUSR, 854 + show_beep, store_beep, 4); 855 + static SENSOR_DEVICE_ATTR(temp2_beep, S_IRUGO | S_IWUSR, 856 + show_beep, store_beep, 5); 857 + static SENSOR_DEVICE_ATTR(temp3_beep, S_IRUGO | S_IWUSR, 858 + show_beep, store_beep, 13); 859 + static SENSOR_DEVICE_ATTR(beep_enable, S_IRUGO | S_IWUSR, 860 + show_beep, store_beep, 15); 776 861 777 862 static ssize_t 778 863 show_fan_div(struct device *dev, struct device_attribute *devattr, char *buf) ··· 1101 1014 VAL = sioaddr + 1; 1102 1015 1103 1016 superio_enter(); 1104 - val= superio_inb(DEVID); 1017 + val = force_id ? force_id : superio_inb(DEVID); 1105 1018 switch (val) { 1106 1019 case W627_DEVID: 1107 1020 sio_data->type = w83627hf; ··· 1160 1073 #define VIN_UNIT_ATTRS(_X_) \ 1161 1074 &sensor_dev_attr_in##_X_##_input.dev_attr.attr, \ 1162 1075 &sensor_dev_attr_in##_X_##_min.dev_attr.attr, \ 1163 - &sensor_dev_attr_in##_X_##_max.dev_attr.attr 1076 + &sensor_dev_attr_in##_X_##_max.dev_attr.attr, \ 1077 + &sensor_dev_attr_in##_X_##_alarm.dev_attr.attr, \ 1078 + &sensor_dev_attr_in##_X_##_beep.dev_attr.attr 1164 1079 1165 1080 #define FAN_UNIT_ATTRS(_X_) \ 1166 1081 &sensor_dev_attr_fan##_X_##_input.dev_attr.attr, \ 1167 1082 &sensor_dev_attr_fan##_X_##_min.dev_attr.attr, \ 1168 - &sensor_dev_attr_fan##_X_##_div.dev_attr.attr 1083 + &sensor_dev_attr_fan##_X_##_div.dev_attr.attr, \ 1084 + &sensor_dev_attr_fan##_X_##_alarm.dev_attr.attr, \ 1085 + &sensor_dev_attr_fan##_X_##_beep.dev_attr.attr 1169 1086 1170 1087 #define TEMP_UNIT_ATTRS(_X_) \ 1171 1088 &sensor_dev_attr_temp##_X_##_input.dev_attr.attr, \ 1172 1089 &sensor_dev_attr_temp##_X_##_max.dev_attr.attr, \ 1173 1090 &sensor_dev_attr_temp##_X_##_max_hyst.dev_attr.attr, \ 1174 - &sensor_dev_attr_temp##_X_##_type.dev_attr.attr 1091 + &sensor_dev_attr_temp##_X_##_type.dev_attr.attr, \ 1092 + &sensor_dev_attr_temp##_X_##_alarm.dev_attr.attr, \ 1093 + &sensor_dev_attr_temp##_X_##_beep.dev_attr.attr 1175 1094 1176 1095 static struct attribute *w83627hf_attributes[] = { 1177 1096 &dev_attr_in0_input.attr, 1178 1097 &dev_attr_in0_min.attr, 1179 1098 &dev_attr_in0_max.attr, 1099 + &sensor_dev_attr_in0_alarm.dev_attr.attr, 1100 + &sensor_dev_attr_in0_beep.dev_attr.attr, 1180 1101 VIN_UNIT_ATTRS(2), 1181 1102 VIN_UNIT_ATTRS(3), 1182 1103 VIN_UNIT_ATTRS(4), ··· 1198 1103 TEMP_UNIT_ATTRS(2), 1199 1104 1200 1105 &dev_attr_alarms.attr, 1201 - &dev_attr_beep_enable.attr, 1106 + &sensor_dev_attr_beep_enable.dev_attr.attr, 1202 1107 &dev_attr_beep_mask.attr, 1203 1108 1204 1109 &sensor_dev_attr_pwm1.dev_attr.attr, ··· 1288 1193 || (err = device_create_file(dev, 1289 1194 &sensor_dev_attr_in5_max.dev_attr)) 1290 1195 || (err = device_create_file(dev, 1196 + &sensor_dev_attr_in5_alarm.dev_attr)) 1197 + || (err = device_create_file(dev, 1198 + &sensor_dev_attr_in5_beep.dev_attr)) 1199 + || (err = device_create_file(dev, 1291 1200 &sensor_dev_attr_in6_input.dev_attr)) 1292 1201 || (err = device_create_file(dev, 1293 1202 &sensor_dev_attr_in6_min.dev_attr)) 1294 1203 || (err = device_create_file(dev, 1295 1204 &sensor_dev_attr_in6_max.dev_attr)) 1205 + || (err = device_create_file(dev, 1206 + &sensor_dev_attr_in6_alarm.dev_attr)) 1207 + || (err = device_create_file(dev, 1208 + &sensor_dev_attr_in6_beep.dev_attr)) 1296 1209 || (err = device_create_file(dev, 1297 1210 &sensor_dev_attr_pwm1_freq.dev_attr)) 1298 1211 || (err = device_create_file(dev, ··· 1315 1212 || (err = device_create_file(dev, 1316 1213 &sensor_dev_attr_in1_max.dev_attr)) 1317 1214 || (err = device_create_file(dev, 1215 + &sensor_dev_attr_in1_alarm.dev_attr)) 1216 + || (err = device_create_file(dev, 1217 + &sensor_dev_attr_in1_beep.dev_attr)) 1218 + || (err = device_create_file(dev, 1318 1219 &sensor_dev_attr_fan3_input.dev_attr)) 1319 1220 || (err = device_create_file(dev, 1320 1221 &sensor_dev_attr_fan3_min.dev_attr)) 1321 1222 || (err = device_create_file(dev, 1322 1223 &sensor_dev_attr_fan3_div.dev_attr)) 1323 1224 || (err = device_create_file(dev, 1225 + &sensor_dev_attr_fan3_alarm.dev_attr)) 1226 + || (err = device_create_file(dev, 1227 + &sensor_dev_attr_fan3_beep.dev_attr)) 1228 + || (err = device_create_file(dev, 1324 1229 &sensor_dev_attr_temp3_input.dev_attr)) 1325 1230 || (err = device_create_file(dev, 1326 1231 &sensor_dev_attr_temp3_max.dev_attr)) 1327 1232 || (err = device_create_file(dev, 1328 1233 &sensor_dev_attr_temp3_max_hyst.dev_attr)) 1234 + || (err = device_create_file(dev, 1235 + &sensor_dev_attr_temp3_alarm.dev_attr)) 1236 + || (err = device_create_file(dev, 1237 + &sensor_dev_attr_temp3_beep.dev_attr)) 1329 1238 || (err = device_create_file(dev, 1330 1239 &sensor_dev_attr_temp3_type.dev_attr))) 1331 1240 goto ERROR4; ··· 1626 1511 (w83627hf_read_value(data, 1627 1512 W83781D_REG_CONFIG) & 0xf7) 1628 1513 | 0x01); 1514 + 1515 + /* Enable VBAT monitoring if needed */ 1516 + tmp = w83627hf_read_value(data, W83781D_REG_VBAT); 1517 + if (!(tmp & 0x01)) 1518 + w83627hf_write_value(data, W83781D_REG_VBAT, tmp | 0x01); 1629 1519 } 1630 1520 1631 1521 static void w83627hf_update_fan_div(struct w83627hf_data *data) ··· 1723 1603 (w83627hf_read_value(data, W83781D_REG_ALARM2) << 8) | 1724 1604 (w83627hf_read_value(data, W83781D_REG_ALARM3) << 16); 1725 1605 i = w83627hf_read_value(data, W83781D_REG_BEEP_INTS2); 1726 - data->beep_enable = i >> 7; 1727 - data->beep_mask = ((i & 0x7f) << 8) | 1606 + data->beep_mask = (i << 8) | 1728 1607 w83627hf_read_value(data, W83781D_REG_BEEP_INTS1) | 1729 1608 w83627hf_read_value(data, W83781D_REG_BEEP_INTS3) << 16; 1730 1609 data->last_updated = jiffies;
+12 -37
drivers/hwmon/w83781d.c
··· 28 28 as99127f 7 3 0 3 0x31 0x12c3 yes no 29 29 as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no 30 30 w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes 31 - w83627hf 9 3 2 3 0x21 0x5ca3 yes yes(LPC) 32 31 w83782d 9 3 2-4 3 0x30 0x5ca3 yes yes 33 32 w83783s 5-6 3 2 1-2 0x40 0x5ca3 yes no 34 33 ··· 53 54 static struct platform_device *pdev; 54 55 55 56 /* Addresses to scan */ 56 - static unsigned short normal_i2c[] = { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 57 - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 58 - 0x2c, 0x2d, 0x2e, 0x2f, I2C_CLIENT_END }; 57 + static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 58 + 0x2e, 0x2f, I2C_CLIENT_END }; 59 59 static unsigned short isa_address = 0x290; 60 60 61 61 /* Insmod parameters */ 62 - I2C_CLIENT_INSMOD_5(w83781d, w83782d, w83783s, w83627hf, as99127f); 62 + I2C_CLIENT_INSMOD_4(w83781d, w83782d, w83783s, as99127f); 63 63 I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: " 64 64 "{bus, clientaddr, subclientaddr1, subclientaddr2}"); 65 65 ··· 112 114 #define W83781D_REG_ALARM1 0x41 113 115 #define W83781D_REG_ALARM2 0x42 114 116 115 - /* Real-time status (W83782D, W83783S, W83627HF) */ 117 + /* Real-time status (W83782D, W83783S) */ 116 118 #define W83782D_REG_ALARM1 0x459 117 119 #define W83782D_REG_ALARM2 0x45A 118 120 #define W83782D_REG_ALARM3 0x45B ··· 150 152 static const u8 BIT_SCFG2[] = { 0x10, 0x20, 0x40 }; 151 153 152 154 #define W83781D_DEFAULT_BETA 3435 153 - 154 - /* RT Table registers */ 155 - #define W83781D_REG_RT_IDX 0x50 156 - #define W83781D_REG_RT_VAL 0x51 157 155 158 156 /* Conversions */ 159 157 #define IN_TO_REG(val) SENSORS_LIMIT(((val) + 8) / 16, 0, 255) ··· 265 271 .driver = { 266 272 .name = "w83781d", 267 273 }, 268 - .id = I2C_DRIVERID_W83781D, 269 274 .attach_adapter = w83781d_attach_adapter, 270 275 .detach_client = w83781d_detach_client, 271 276 }; ··· 689 696 unsigned long val = simple_strtoul(buf, NULL, 10); 690 697 691 698 mutex_lock(&data->update_lock); 692 - 699 + 693 700 /* Save fan_min */ 694 701 min = FAN_FROM_REG(data->fan_min[nr], 695 702 DIV_FROM_REG(data->fan_div[nr])); ··· 956 963 client_name = "w83782d subclient"; 957 964 else if (kind == w83783s) 958 965 client_name = "w83783s subclient"; 959 - else if (kind == w83627hf) 960 - client_name = "w83627hf subclient"; 961 966 else if (kind == as99127f) 962 967 client_name = "as99127f subclient"; 963 968 ··· 995 1004 #define IN_UNIT_ATTRS(X) \ 996 1005 &sensor_dev_attr_in##X##_input.dev_attr.attr, \ 997 1006 &sensor_dev_attr_in##X##_min.dev_attr.attr, \ 998 - &sensor_dev_attr_in##X##_max.dev_attr.attr, \ 1007 + &sensor_dev_attr_in##X##_max.dev_attr.attr, \ 999 1008 &sensor_dev_attr_in##X##_alarm.dev_attr.attr, \ 1000 1009 &sensor_dev_attr_in##X##_beep.dev_attr.attr 1001 1010 ··· 1259 1268 kind = w83782d; 1260 1269 else if (val1 == 0x40 && vendid == winbond && address == 0x2d) 1261 1270 kind = w83783s; 1262 - else if (val1 == 0x21 && vendid == winbond) 1263 - kind = w83627hf; 1264 - else if (val1 == 0x31 && address >= 0x28) 1271 + else if (val1 == 0x31) 1265 1272 kind = as99127f; 1266 1273 else { 1267 1274 if (kind == 0) ··· 1277 1288 client_name = "w83782d"; 1278 1289 } else if (kind == w83783s) { 1279 1290 client_name = "w83783s"; 1280 - } else if (kind == w83627hf) { 1281 - client_name = "w83627hf"; 1282 1291 } else if (kind == as99127f) { 1283 1292 client_name = "as99127f"; 1284 1293 } ··· 1383 1396 1384 1397 reg = w83781d_read_value(data, W83781D_REG_WCHIPID); 1385 1398 switch (reg) { 1386 - case 0x21: 1387 - data->type = w83627hf; 1388 - name = "w83627hf"; 1389 - break; 1390 1399 case 0x30: 1391 1400 data->type = w83782d; 1392 1401 name = "w83782d"; ··· 1436 1453 } 1437 1454 1438 1455 /* The SMBus locks itself, usually, but nothing may access the Winbond between 1439 - bank switches. ISA access must always be locked explicitly! 1456 + bank switches. ISA access must always be locked explicitly! 1440 1457 We ignore the W83781D BUSY flag at this moment - it could lead to deadlocks, 1441 - would slow down the W83781D access and should not be necessary. 1458 + would slow down the W83781D access and should not be necessary. 1442 1459 There are some ugly typecasts here, but the good news is - they should 1443 1460 nowhere else be necessary! */ 1444 1461 static int ··· 1582 1599 int type = data->type; 1583 1600 u8 tmp; 1584 1601 1585 - if (type == w83627hf) 1586 - dev_info(dev, "The W83627HF chip is better supported by the " 1587 - "w83627hf driver, support will be dropped from the " 1588 - "w83781d driver soon\n"); 1589 - 1590 1602 if (reset && type != as99127f) { /* this resets registers we don't have 1591 1603 documentation for on the as99127f */ 1592 1604 /* Resetting the chip has been the default for a long time, ··· 1695 1717 w83781d_read_value(data, W83781D_REG_IN_MIN(i)); 1696 1718 data->in_max[i] = 1697 1719 w83781d_read_value(data, W83781D_REG_IN_MAX(i)); 1698 - if ((data->type != w83782d) 1699 - && (data->type != w83627hf) && (i == 6)) 1720 + if ((data->type != w83782d) && (i == 6)) 1700 1721 break; 1701 1722 } 1702 1723 for (i = 0; i < 3; i++) { ··· 1753 1776 data->fan_div[1] |= (i >> 4) & 0x04; 1754 1777 data->fan_div[2] |= (i >> 5) & 0x04; 1755 1778 } 1756 - if ((data->type == w83782d) || (data->type == w83627hf)) { 1779 + if (data->type == w83782d) { 1757 1780 data->alarms = w83781d_read_value(data, 1758 1781 W83782D_REG_ALARM1) 1759 1782 | (w83781d_read_value(data, ··· 1863 1886 outb_p(W83781D_REG_WCHIPID, address + W83781D_ADDR_REG_OFFSET); 1864 1887 val = inb_p(address + W83781D_DATA_REG_OFFSET); 1865 1888 if ((val & 0xfe) == 0x10 /* W83781D */ 1866 - || val == 0x30 /* W83782D */ 1867 - || val == 0x21) /* W83627HF */ 1889 + || val == 0x30) /* W83782D */ 1868 1890 found = 1; 1869 1891 1870 1892 if (found) 1871 1893 pr_info("w83781d: Found a %s chip at %#x\n", 1872 - val == 0x21 ? "W83627HF" : 1873 1894 val == 0x30 ? "W83782D" : "W83781D", (int)address); 1874 1895 1875 1896 release:
+2 -4
drivers/hwmon/w83791d.c
··· 840 840 struct device_attribute *attr, 841 841 const char *buf, size_t count) 842 842 { 843 - struct i2c_client *client = to_i2c_client(dev); 844 - struct w83791d_data *data = i2c_get_clientdata(client); 845 - unsigned long val = simple_strtoul(buf, NULL, 10); 843 + struct w83791d_data *data = dev_get_drvdata(dev); 846 844 847 845 /* No lock needed as vrm is internal to the driver 848 846 (not read from a chip register) and so is not 849 847 updated in w83791d_update_device() */ 850 - data->vrm = val; 848 + data->vrm = simple_strtoul(buf, NULL, 10); 851 849 852 850 return count; 853 851 }
+3 -10
drivers/hwmon/w83793.c
··· 131 131 #define PWM_DUTY 0 132 132 #define PWM_START 1 133 133 #define PWM_NONSTOP 2 134 + #define PWM_STOP_TIME 3 134 135 #define W83793_REG_PWM(index, nr) (((nr) == 0 ? 0xb3 : \ 135 136 (nr) == 1 ? 0x220 : 0x218) + (index)) 136 137 ··· 243 242 static ssize_t 244 243 show_vrm(struct device *dev, struct device_attribute *attr, char *buf) 245 244 { 246 - struct i2c_client *client = to_i2c_client(dev); 247 - struct w83793_data *data = i2c_get_clientdata(client); 248 - 245 + struct w83793_data *data = dev_get_drvdata(dev); 249 246 return sprintf(buf, "%d\n", data->vrm); 250 247 } 251 248 ··· 262 263 store_vrm(struct device *dev, struct device_attribute *attr, 263 264 const char *buf, size_t count) 264 265 { 265 - struct i2c_client *client = to_i2c_client(dev); 266 - struct w83793_data *data = i2c_get_clientdata(client); 267 - 266 + struct w83793_data *data = dev_get_drvdata(dev); 268 267 data->vrm = simple_strtoul(buf, NULL, 10); 269 268 return count; 270 269 } ··· 404 407 return count; 405 408 } 406 409 407 - #define PWM_DUTY 0 408 - #define PWM_START 1 409 - #define PWM_NONSTOP 2 410 - #define PWM_STOP_TIME 3 411 410 static ssize_t 412 411 show_pwm(struct device *dev, struct device_attribute *attr, char *buf) 413 412 {
-1
drivers/hwmon/w83l785ts.c
··· 96 96 .driver = { 97 97 .name = "w83l785ts", 98 98 }, 99 - .id = I2C_DRIVERID_W83L785TS, 100 99 .attach_adapter = w83l785ts_attach_adapter, 101 100 .detach_client = w83l785ts_detach_client, 102 101 };
+821
drivers/hwmon/w83l786ng.c
··· 1 + /* 2 + w83l786ng.c - Linux kernel driver for hardware monitoring 3 + Copyright (c) 2007 Kevin Lo <kevlo@kevlo.org> 4 + 5 + This program is free software; you can redistribute it and/or modify 6 + it under the terms of the GNU General Public License as published by 7 + the Free Software Foundation - version 2. 8 + 9 + This program is distributed in the hope that it will be useful, 10 + but WITHOUT ANY WARRANTY; without even the implied warranty of 11 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 + GNU General Public License for more details. 13 + 14 + You should have received a copy of the GNU General Public License 15 + along with this program; if not, write to the Free Software 16 + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 17 + 02110-1301 USA. 18 + */ 19 + 20 + /* 21 + Supports following chips: 22 + 23 + Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA 24 + w83l786ng 3 2 2 2 0x7b 0x5ca3 yes no 25 + */ 26 + 27 + #include <linux/module.h> 28 + #include <linux/init.h> 29 + #include <linux/slab.h> 30 + #include <linux/i2c.h> 31 + #include <linux/hwmon.h> 32 + #include <linux/hwmon-vid.h> 33 + #include <linux/hwmon-sysfs.h> 34 + #include <linux/err.h> 35 + #include <linux/mutex.h> 36 + 37 + /* Addresses to scan */ 38 + static unsigned short normal_i2c[] = { 0x2e, 0x2f, I2C_CLIENT_END }; 39 + 40 + /* Insmod parameters */ 41 + I2C_CLIENT_INSMOD_1(w83l786ng); 42 + 43 + static int reset; 44 + module_param(reset, bool, 0); 45 + MODULE_PARM_DESC(reset, "Set to 1 to reset chip, not recommended"); 46 + 47 + #define W83L786NG_REG_IN_MIN(nr) (0x2C + (nr) * 2) 48 + #define W83L786NG_REG_IN_MAX(nr) (0x2B + (nr) * 2) 49 + #define W83L786NG_REG_IN(nr) ((nr) + 0x20) 50 + 51 + #define W83L786NG_REG_FAN(nr) ((nr) + 0x28) 52 + #define W83L786NG_REG_FAN_MIN(nr) ((nr) + 0x3B) 53 + 54 + #define W83L786NG_REG_CONFIG 0x40 55 + #define W83L786NG_REG_ALARM1 0x41 56 + #define W83L786NG_REG_ALARM2 0x42 57 + #define W83L786NG_REG_GPIO_EN 0x47 58 + #define W83L786NG_REG_MAN_ID2 0x4C 59 + #define W83L786NG_REG_MAN_ID1 0x4D 60 + #define W83L786NG_REG_CHIP_ID 0x4E 61 + 62 + #define W83L786NG_REG_DIODE 0x53 63 + #define W83L786NG_REG_FAN_DIV 0x54 64 + #define W83L786NG_REG_FAN_CFG 0x80 65 + 66 + #define W83L786NG_REG_TOLERANCE 0x8D 67 + 68 + static const u8 W83L786NG_REG_TEMP[2][3] = { 69 + { 0x25, /* TEMP 0 in DataSheet */ 70 + 0x35, /* TEMP 0 Over in DataSheet */ 71 + 0x36 }, /* TEMP 0 Hyst in DataSheet */ 72 + { 0x26, /* TEMP 1 in DataSheet */ 73 + 0x37, /* TEMP 1 Over in DataSheet */ 74 + 0x38 } /* TEMP 1 Hyst in DataSheet */ 75 + }; 76 + 77 + static const u8 W83L786NG_PWM_MODE_SHIFT[] = {6, 7}; 78 + static const u8 W83L786NG_PWM_ENABLE_SHIFT[] = {2, 4}; 79 + 80 + /* FAN Duty Cycle, be used to control */ 81 + static const u8 W83L786NG_REG_PWM[] = {0x81, 0x87}; 82 + 83 + 84 + static inline u8 85 + FAN_TO_REG(long rpm, int div) 86 + { 87 + if (rpm == 0) 88 + return 255; 89 + rpm = SENSORS_LIMIT(rpm, 1, 1000000); 90 + return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1, 254); 91 + } 92 + 93 + #define FAN_FROM_REG(val,div) ((val) == 0 ? -1 : \ 94 + ((val) == 255 ? 0 : \ 95 + 1350000 / ((val) * (div)))) 96 + 97 + /* for temp */ 98 + #define TEMP_TO_REG(val) (SENSORS_LIMIT(((val) < 0 ? (val)+0x100*1000 \ 99 + : (val)) / 1000, 0, 0xff)) 100 + #define TEMP_FROM_REG(val) (((val) & 0x80 ? (val)-0x100 : (val)) * 1000) 101 + 102 + /* The analog voltage inputs have 8mV LSB. Since the sysfs output is 103 + in mV as would be measured on the chip input pin, need to just 104 + multiply/divide by 8 to translate from/to register values. */ 105 + #define IN_TO_REG(val) (SENSORS_LIMIT((((val) + 4) / 8), 0, 255)) 106 + #define IN_FROM_REG(val) ((val) * 8) 107 + 108 + #define DIV_FROM_REG(val) (1 << (val)) 109 + 110 + static inline u8 111 + DIV_TO_REG(long val) 112 + { 113 + int i; 114 + val = SENSORS_LIMIT(val, 1, 128) >> 1; 115 + for (i = 0; i < 7; i++) { 116 + if (val == 0) 117 + break; 118 + val >>= 1; 119 + } 120 + return ((u8) i); 121 + } 122 + 123 + struct w83l786ng_data { 124 + struct i2c_client client; 125 + struct device *hwmon_dev; 126 + struct mutex update_lock; 127 + char valid; /* !=0 if following fields are valid */ 128 + unsigned long last_updated; /* In jiffies */ 129 + unsigned long last_nonvolatile; /* In jiffies, last time we update the 130 + nonvolatile registers */ 131 + 132 + u8 in[3]; 133 + u8 in_max[3]; 134 + u8 in_min[3]; 135 + u8 fan[2]; 136 + u8 fan_div[2]; 137 + u8 fan_min[2]; 138 + u8 temp_type[2]; 139 + u8 temp[2][3]; 140 + u8 pwm[2]; 141 + u8 pwm_mode[2]; /* 0->DC variable voltage 142 + 1->PWM variable duty cycle */ 143 + 144 + u8 pwm_enable[2]; /* 1->manual 145 + 2->thermal cruise (also called SmartFan I) */ 146 + u8 tolerance[2]; 147 + }; 148 + 149 + static int w83l786ng_attach_adapter(struct i2c_adapter *adapter); 150 + static int w83l786ng_detect(struct i2c_adapter *adapter, int address, int kind); 151 + static int w83l786ng_detach_client(struct i2c_client *client); 152 + static void w83l786ng_init_client(struct i2c_client *client); 153 + static struct w83l786ng_data *w83l786ng_update_device(struct device *dev); 154 + 155 + static struct i2c_driver w83l786ng_driver = { 156 + .driver = { 157 + .name = "w83l786ng", 158 + }, 159 + .attach_adapter = w83l786ng_attach_adapter, 160 + .detach_client = w83l786ng_detach_client, 161 + }; 162 + 163 + static u8 164 + w83l786ng_read_value(struct i2c_client *client, u8 reg) 165 + { 166 + return i2c_smbus_read_byte_data(client, reg); 167 + } 168 + 169 + static int 170 + w83l786ng_write_value(struct i2c_client *client, u8 reg, u8 value) 171 + { 172 + return i2c_smbus_write_byte_data(client, reg, value); 173 + } 174 + 175 + /* following are the sysfs callback functions */ 176 + #define show_in_reg(reg) \ 177 + static ssize_t \ 178 + show_##reg(struct device *dev, struct device_attribute *attr, \ 179 + char *buf) \ 180 + { \ 181 + int nr = to_sensor_dev_attr(attr)->index; \ 182 + struct w83l786ng_data *data = w83l786ng_update_device(dev); \ 183 + return sprintf(buf,"%d\n", IN_FROM_REG(data->reg[nr])); \ 184 + } 185 + 186 + show_in_reg(in) 187 + show_in_reg(in_min) 188 + show_in_reg(in_max) 189 + 190 + #define store_in_reg(REG, reg) \ 191 + static ssize_t \ 192 + store_in_##reg (struct device *dev, struct device_attribute *attr, \ 193 + const char *buf, size_t count) \ 194 + { \ 195 + int nr = to_sensor_dev_attr(attr)->index; \ 196 + struct i2c_client *client = to_i2c_client(dev); \ 197 + struct w83l786ng_data *data = i2c_get_clientdata(client); \ 198 + unsigned long val = simple_strtoul(buf, NULL, 10); \ 199 + mutex_lock(&data->update_lock); \ 200 + data->in_##reg[nr] = IN_TO_REG(val); \ 201 + w83l786ng_write_value(client, W83L786NG_REG_IN_##REG(nr), \ 202 + data->in_##reg[nr]); \ 203 + mutex_unlock(&data->update_lock); \ 204 + return count; \ 205 + } 206 + 207 + store_in_reg(MIN, min) 208 + store_in_reg(MAX, max) 209 + 210 + static struct sensor_device_attribute sda_in_input[] = { 211 + SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0), 212 + SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1), 213 + SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2), 214 + }; 215 + 216 + static struct sensor_device_attribute sda_in_min[] = { 217 + SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0), 218 + SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1), 219 + SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2), 220 + }; 221 + 222 + static struct sensor_device_attribute sda_in_max[] = { 223 + SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0), 224 + SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1), 225 + SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2), 226 + }; 227 + 228 + #define show_fan_reg(reg) \ 229 + static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \ 230 + char *buf) \ 231 + { \ 232 + int nr = to_sensor_dev_attr(attr)->index; \ 233 + struct w83l786ng_data *data = w83l786ng_update_device(dev); \ 234 + return sprintf(buf,"%d\n", \ 235 + FAN_FROM_REG(data->fan[nr], DIV_FROM_REG(data->fan_div[nr]))); \ 236 + } 237 + 238 + show_fan_reg(fan); 239 + show_fan_reg(fan_min); 240 + 241 + static ssize_t 242 + store_fan_min(struct device *dev, struct device_attribute *attr, 243 + const char *buf, size_t count) 244 + { 245 + int nr = to_sensor_dev_attr(attr)->index; 246 + struct i2c_client *client = to_i2c_client(dev); 247 + struct w83l786ng_data *data = i2c_get_clientdata(client); 248 + u32 val; 249 + 250 + val = simple_strtoul(buf, NULL, 10); 251 + mutex_lock(&data->update_lock); 252 + data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr])); 253 + w83l786ng_write_value(client, W83L786NG_REG_FAN_MIN(nr), 254 + data->fan_min[nr]); 255 + mutex_unlock(&data->update_lock); 256 + 257 + return count; 258 + } 259 + 260 + static ssize_t 261 + show_fan_div(struct device *dev, struct device_attribute *attr, 262 + char *buf) 263 + { 264 + int nr = to_sensor_dev_attr(attr)->index; 265 + struct w83l786ng_data *data = w83l786ng_update_device(dev); 266 + return sprintf(buf, "%u\n", DIV_FROM_REG(data->fan_div[nr])); 267 + } 268 + 269 + /* Note: we save and restore the fan minimum here, because its value is 270 + determined in part by the fan divisor. This follows the principle of 271 + least surprise; the user doesn't expect the fan minimum to change just 272 + because the divisor changed. */ 273 + static ssize_t 274 + store_fan_div(struct device *dev, struct device_attribute *attr, 275 + const char *buf, size_t count) 276 + { 277 + int nr = to_sensor_dev_attr(attr)->index; 278 + struct i2c_client *client = to_i2c_client(dev); 279 + struct w83l786ng_data *data = i2c_get_clientdata(client); 280 + 281 + unsigned long min; 282 + u8 tmp_fan_div; 283 + u8 fan_div_reg; 284 + u8 keep_mask = 0; 285 + u8 new_shift = 0; 286 + 287 + /* Save fan_min */ 288 + mutex_lock(&data->update_lock); 289 + min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr])); 290 + 291 + data->fan_div[nr] = DIV_TO_REG(simple_strtoul(buf, NULL, 10)); 292 + 293 + switch (nr) { 294 + case 0: 295 + keep_mask = 0xf8; 296 + new_shift = 0; 297 + break; 298 + case 1: 299 + keep_mask = 0x8f; 300 + new_shift = 4; 301 + break; 302 + } 303 + 304 + fan_div_reg = w83l786ng_read_value(client, W83L786NG_REG_FAN_DIV) 305 + & keep_mask; 306 + 307 + tmp_fan_div = (data->fan_div[nr] << new_shift) & ~keep_mask; 308 + 309 + w83l786ng_write_value(client, W83L786NG_REG_FAN_DIV, 310 + fan_div_reg | tmp_fan_div); 311 + 312 + /* Restore fan_min */ 313 + data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr])); 314 + w83l786ng_write_value(client, W83L786NG_REG_FAN_MIN(nr), 315 + data->fan_min[nr]); 316 + mutex_unlock(&data->update_lock); 317 + 318 + return count; 319 + } 320 + 321 + static struct sensor_device_attribute sda_fan_input[] = { 322 + SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0), 323 + SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1), 324 + }; 325 + 326 + static struct sensor_device_attribute sda_fan_min[] = { 327 + SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min, 328 + store_fan_min, 0), 329 + SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min, 330 + store_fan_min, 1), 331 + }; 332 + 333 + static struct sensor_device_attribute sda_fan_div[] = { 334 + SENSOR_ATTR(fan1_div, S_IWUSR | S_IRUGO, show_fan_div, 335 + store_fan_div, 0), 336 + SENSOR_ATTR(fan2_div, S_IWUSR | S_IRUGO, show_fan_div, 337 + store_fan_div, 1), 338 + }; 339 + 340 + 341 + /* read/write the temperature, includes measured value and limits */ 342 + 343 + static ssize_t 344 + show_temp(struct device *dev, struct device_attribute *attr, char *buf) 345 + { 346 + struct sensor_device_attribute_2 *sensor_attr = 347 + to_sensor_dev_attr_2(attr); 348 + int nr = sensor_attr->nr; 349 + int index = sensor_attr->index; 350 + struct w83l786ng_data *data = w83l786ng_update_device(dev); 351 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[nr][index])); 352 + } 353 + 354 + static ssize_t 355 + store_temp(struct device *dev, struct device_attribute *attr, 356 + const char *buf, size_t count) 357 + { 358 + struct sensor_device_attribute_2 *sensor_attr = 359 + to_sensor_dev_attr_2(attr); 360 + int nr = sensor_attr->nr; 361 + int index = sensor_attr->index; 362 + struct i2c_client *client = to_i2c_client(dev); 363 + struct w83l786ng_data *data = i2c_get_clientdata(client); 364 + s32 val; 365 + 366 + val = simple_strtol(buf, NULL, 10); 367 + mutex_lock(&data->update_lock); 368 + data->temp[nr][index] = TEMP_TO_REG(val); 369 + w83l786ng_write_value(client, W83L786NG_REG_TEMP[nr][index], 370 + data->temp[nr][index]); 371 + mutex_unlock(&data->update_lock); 372 + 373 + return count; 374 + } 375 + 376 + static struct sensor_device_attribute_2 sda_temp_input[] = { 377 + SENSOR_ATTR_2(temp1_input, S_IRUGO, show_temp, NULL, 0, 0), 378 + SENSOR_ATTR_2(temp2_input, S_IRUGO, show_temp, NULL, 1, 0), 379 + }; 380 + 381 + static struct sensor_device_attribute_2 sda_temp_max[] = { 382 + SENSOR_ATTR_2(temp1_max, S_IRUGO | S_IWUSR, 383 + show_temp, store_temp, 0, 1), 384 + SENSOR_ATTR_2(temp2_max, S_IRUGO | S_IWUSR, 385 + show_temp, store_temp, 1, 1), 386 + }; 387 + 388 + static struct sensor_device_attribute_2 sda_temp_max_hyst[] = { 389 + SENSOR_ATTR_2(temp1_max_hyst, S_IRUGO | S_IWUSR, 390 + show_temp, store_temp, 0, 2), 391 + SENSOR_ATTR_2(temp2_max_hyst, S_IRUGO | S_IWUSR, 392 + show_temp, store_temp, 1, 2), 393 + }; 394 + 395 + #define show_pwm_reg(reg) \ 396 + static ssize_t show_##reg (struct device *dev, struct device_attribute *attr, \ 397 + char *buf) \ 398 + { \ 399 + struct w83l786ng_data *data = w83l786ng_update_device(dev); \ 400 + int nr = to_sensor_dev_attr(attr)->index; \ 401 + return sprintf(buf, "%d\n", data->reg[nr]); \ 402 + } 403 + 404 + show_pwm_reg(pwm_mode) 405 + show_pwm_reg(pwm_enable) 406 + show_pwm_reg(pwm) 407 + 408 + static ssize_t 409 + store_pwm_mode(struct device *dev, struct device_attribute *attr, 410 + const char *buf, size_t count) 411 + { 412 + int nr = to_sensor_dev_attr(attr)->index; 413 + struct i2c_client *client = to_i2c_client(dev); 414 + struct w83l786ng_data *data = i2c_get_clientdata(client); 415 + u32 val = simple_strtoul(buf, NULL, 10); 416 + u8 reg; 417 + 418 + if (val > 1) 419 + return -EINVAL; 420 + mutex_lock(&data->update_lock); 421 + data->pwm_mode[nr] = val; 422 + reg = w83l786ng_read_value(client, W83L786NG_REG_FAN_CFG); 423 + reg &= ~(1 << W83L786NG_PWM_MODE_SHIFT[nr]); 424 + if (!val) 425 + reg |= 1 << W83L786NG_PWM_MODE_SHIFT[nr]; 426 + w83l786ng_write_value(client, W83L786NG_REG_FAN_CFG, reg); 427 + mutex_unlock(&data->update_lock); 428 + return count; 429 + } 430 + 431 + static ssize_t 432 + store_pwm(struct device *dev, struct device_attribute *attr, 433 + const char *buf, size_t count) 434 + { 435 + int nr = to_sensor_dev_attr(attr)->index; 436 + struct i2c_client *client = to_i2c_client(dev); 437 + struct w83l786ng_data *data = i2c_get_clientdata(client); 438 + u32 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 255); 439 + 440 + mutex_lock(&data->update_lock); 441 + data->pwm[nr] = val; 442 + w83l786ng_write_value(client, W83L786NG_REG_PWM[nr], val); 443 + mutex_unlock(&data->update_lock); 444 + return count; 445 + } 446 + 447 + static ssize_t 448 + store_pwm_enable(struct device *dev, struct device_attribute *attr, 449 + const char *buf, size_t count) 450 + { 451 + int nr = to_sensor_dev_attr(attr)->index; 452 + struct i2c_client *client = to_i2c_client(dev); 453 + struct w83l786ng_data *data = i2c_get_clientdata(client); 454 + u32 val = simple_strtoul(buf, NULL, 10); 455 + 456 + u8 reg; 457 + 458 + if (!val || (val > 2)) /* only modes 1 and 2 are supported */ 459 + return -EINVAL; 460 + 461 + mutex_lock(&data->update_lock); 462 + reg = w83l786ng_read_value(client, W83L786NG_REG_FAN_CFG); 463 + data->pwm_enable[nr] = val; 464 + reg &= ~(0x02 << W83L786NG_PWM_ENABLE_SHIFT[nr]); 465 + reg |= (val - 1) << W83L786NG_PWM_ENABLE_SHIFT[nr]; 466 + w83l786ng_write_value(client, W83L786NG_REG_FAN_CFG, reg); 467 + mutex_unlock(&data->update_lock); 468 + return count; 469 + } 470 + 471 + static struct sensor_device_attribute sda_pwm[] = { 472 + SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 0), 473 + SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 1), 474 + }; 475 + 476 + static struct sensor_device_attribute sda_pwm_mode[] = { 477 + SENSOR_ATTR(pwm1_mode, S_IWUSR | S_IRUGO, show_pwm_mode, 478 + store_pwm_mode, 0), 479 + SENSOR_ATTR(pwm2_mode, S_IWUSR | S_IRUGO, show_pwm_mode, 480 + store_pwm_mode, 1), 481 + }; 482 + 483 + static struct sensor_device_attribute sda_pwm_enable[] = { 484 + SENSOR_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_enable, 485 + store_pwm_enable, 0), 486 + SENSOR_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_enable, 487 + store_pwm_enable, 1), 488 + }; 489 + 490 + /* For Smart Fan I/Thermal Cruise and Smart Fan II */ 491 + static ssize_t 492 + show_tolerance(struct device *dev, struct device_attribute *attr, char *buf) 493 + { 494 + int nr = to_sensor_dev_attr(attr)->index; 495 + struct w83l786ng_data *data = w83l786ng_update_device(dev); 496 + return sprintf(buf, "%ld\n", (long)data->tolerance[nr]); 497 + } 498 + 499 + static ssize_t 500 + store_tolerance(struct device *dev, struct device_attribute *attr, 501 + const char *buf, size_t count) 502 + { 503 + int nr = to_sensor_dev_attr(attr)->index; 504 + struct i2c_client *client = to_i2c_client(dev); 505 + struct w83l786ng_data *data = i2c_get_clientdata(client); 506 + u32 val; 507 + u8 tol_tmp, tol_mask; 508 + 509 + val = simple_strtoul(buf, NULL, 10); 510 + 511 + mutex_lock(&data->update_lock); 512 + tol_mask = w83l786ng_read_value(client, 513 + W83L786NG_REG_TOLERANCE) & ((nr == 1) ? 0x0f : 0xf0); 514 + tol_tmp = SENSORS_LIMIT(val, 0, 15); 515 + tol_tmp &= 0x0f; 516 + data->tolerance[nr] = tol_tmp; 517 + if (nr == 1) { 518 + tol_tmp <<= 4; 519 + } 520 + 521 + w83l786ng_write_value(client, W83L786NG_REG_TOLERANCE, 522 + tol_mask | tol_tmp); 523 + mutex_unlock(&data->update_lock); 524 + return count; 525 + } 526 + 527 + static struct sensor_device_attribute sda_tolerance[] = { 528 + SENSOR_ATTR(pwm1_tolerance, S_IWUSR | S_IRUGO, 529 + show_tolerance, store_tolerance, 0), 530 + SENSOR_ATTR(pwm2_tolerance, S_IWUSR | S_IRUGO, 531 + show_tolerance, store_tolerance, 1), 532 + }; 533 + 534 + 535 + #define IN_UNIT_ATTRS(X) \ 536 + &sda_in_input[X].dev_attr.attr, \ 537 + &sda_in_min[X].dev_attr.attr, \ 538 + &sda_in_max[X].dev_attr.attr 539 + 540 + #define FAN_UNIT_ATTRS(X) \ 541 + &sda_fan_input[X].dev_attr.attr, \ 542 + &sda_fan_min[X].dev_attr.attr, \ 543 + &sda_fan_div[X].dev_attr.attr 544 + 545 + #define TEMP_UNIT_ATTRS(X) \ 546 + &sda_temp_input[X].dev_attr.attr, \ 547 + &sda_temp_max[X].dev_attr.attr, \ 548 + &sda_temp_max_hyst[X].dev_attr.attr 549 + 550 + #define PWM_UNIT_ATTRS(X) \ 551 + &sda_pwm[X].dev_attr.attr, \ 552 + &sda_pwm_mode[X].dev_attr.attr, \ 553 + &sda_pwm_enable[X].dev_attr.attr 554 + 555 + #define TOLERANCE_UNIT_ATTRS(X) \ 556 + &sda_tolerance[X].dev_attr.attr 557 + 558 + static struct attribute *w83l786ng_attributes[] = { 559 + IN_UNIT_ATTRS(0), 560 + IN_UNIT_ATTRS(1), 561 + IN_UNIT_ATTRS(2), 562 + FAN_UNIT_ATTRS(0), 563 + FAN_UNIT_ATTRS(1), 564 + TEMP_UNIT_ATTRS(0), 565 + TEMP_UNIT_ATTRS(1), 566 + PWM_UNIT_ATTRS(0), 567 + PWM_UNIT_ATTRS(1), 568 + TOLERANCE_UNIT_ATTRS(0), 569 + TOLERANCE_UNIT_ATTRS(1), 570 + NULL 571 + }; 572 + 573 + static const struct attribute_group w83l786ng_group = { 574 + .attrs = w83l786ng_attributes, 575 + }; 576 + 577 + static int 578 + w83l786ng_attach_adapter(struct i2c_adapter *adapter) 579 + { 580 + if (!(adapter->class & I2C_CLASS_HWMON)) 581 + return 0; 582 + return i2c_probe(adapter, &addr_data, w83l786ng_detect); 583 + } 584 + 585 + static int 586 + w83l786ng_detect(struct i2c_adapter *adapter, int address, int kind) 587 + { 588 + struct i2c_client *client; 589 + struct device *dev; 590 + struct w83l786ng_data *data; 591 + int i, err = 0; 592 + u8 reg_tmp; 593 + 594 + if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { 595 + goto exit; 596 + } 597 + 598 + /* OK. For now, we presume we have a valid client. We now create the 599 + client structure, even though we cannot fill it completely yet. 600 + But it allows us to access w83l786ng_{read,write}_value. */ 601 + 602 + if (!(data = kzalloc(sizeof(struct w83l786ng_data), GFP_KERNEL))) { 603 + err = -ENOMEM; 604 + goto exit; 605 + } 606 + 607 + client = &data->client; 608 + dev = &client->dev; 609 + i2c_set_clientdata(client, data); 610 + client->addr = address; 611 + client->adapter = adapter; 612 + client->driver = &w83l786ng_driver; 613 + 614 + /* 615 + * Now we do the remaining detection. A negative kind means that 616 + * the driver was loaded with no force parameter (default), so we 617 + * must both detect and identify the chip (actually there is only 618 + * one possible kind of chip for now, W83L786NG). A zero kind means 619 + * that the driver was loaded with the force parameter, the detection 620 + * step shall be skipped. A positive kind means that the driver 621 + * was loaded with the force parameter and a given kind of chip is 622 + * requested, so both the detection and the identification steps 623 + * are skipped. 624 + */ 625 + if (kind < 0) { /* detection */ 626 + if (((w83l786ng_read_value(client, 627 + W83L786NG_REG_CONFIG) & 0x80) != 0x00)) { 628 + dev_dbg(&adapter->dev, 629 + "W83L786NG detection failed at 0x%02x.\n", 630 + address); 631 + goto exit_free; 632 + } 633 + } 634 + 635 + if (kind <= 0) { /* identification */ 636 + u16 man_id; 637 + u8 chip_id; 638 + 639 + man_id = (w83l786ng_read_value(client, 640 + W83L786NG_REG_MAN_ID1) << 8) + 641 + w83l786ng_read_value(client, W83L786NG_REG_MAN_ID2); 642 + chip_id = w83l786ng_read_value(client, W83L786NG_REG_CHIP_ID); 643 + 644 + if (man_id == 0x5CA3) { /* Winbond */ 645 + if (chip_id == 0x80) { /* W83L786NG */ 646 + kind = w83l786ng; 647 + } 648 + } 649 + 650 + if (kind <= 0) { /* identification failed */ 651 + dev_info(&adapter->dev, 652 + "Unsupported chip (man_id=0x%04X, " 653 + "chip_id=0x%02X).\n", man_id, chip_id); 654 + goto exit_free; 655 + } 656 + } 657 + 658 + /* Fill in the remaining client fields and put into the global list */ 659 + strlcpy(client->name, "w83l786ng", I2C_NAME_SIZE); 660 + mutex_init(&data->update_lock); 661 + 662 + /* Tell the I2C layer a new client has arrived */ 663 + if ((err = i2c_attach_client(client))) 664 + goto exit_free; 665 + 666 + /* Initialize the chip */ 667 + w83l786ng_init_client(client); 668 + 669 + /* A few vars need to be filled upon startup */ 670 + for (i = 0; i < 2; i++) { 671 + data->fan_min[i] = w83l786ng_read_value(client, 672 + W83L786NG_REG_FAN_MIN(i)); 673 + } 674 + 675 + /* Update the fan divisor */ 676 + reg_tmp = w83l786ng_read_value(client, W83L786NG_REG_FAN_DIV); 677 + data->fan_div[0] = reg_tmp & 0x07; 678 + data->fan_div[1] = (reg_tmp >> 4) & 0x07; 679 + 680 + /* Register sysfs hooks */ 681 + if ((err = sysfs_create_group(&client->dev.kobj, &w83l786ng_group))) 682 + goto exit_remove; 683 + 684 + data->hwmon_dev = hwmon_device_register(dev); 685 + if (IS_ERR(data->hwmon_dev)) { 686 + err = PTR_ERR(data->hwmon_dev); 687 + goto exit_remove; 688 + } 689 + 690 + return 0; 691 + 692 + /* Unregister sysfs hooks */ 693 + 694 + exit_remove: 695 + sysfs_remove_group(&client->dev.kobj, &w83l786ng_group); 696 + i2c_detach_client(client); 697 + exit_free: 698 + kfree(data); 699 + exit: 700 + return err; 701 + } 702 + 703 + static int 704 + w83l786ng_detach_client(struct i2c_client *client) 705 + { 706 + struct w83l786ng_data *data = i2c_get_clientdata(client); 707 + int err; 708 + 709 + hwmon_device_unregister(data->hwmon_dev); 710 + sysfs_remove_group(&client->dev.kobj, &w83l786ng_group); 711 + 712 + if ((err = i2c_detach_client(client))) 713 + return err; 714 + 715 + kfree(data); 716 + 717 + return 0; 718 + } 719 + 720 + static void 721 + w83l786ng_init_client(struct i2c_client *client) 722 + { 723 + u8 tmp; 724 + 725 + if (reset) 726 + w83l786ng_write_value(client, W83L786NG_REG_CONFIG, 0x80); 727 + 728 + /* Start monitoring */ 729 + tmp = w83l786ng_read_value(client, W83L786NG_REG_CONFIG); 730 + if (!(tmp & 0x01)) 731 + w83l786ng_write_value(client, W83L786NG_REG_CONFIG, tmp | 0x01); 732 + } 733 + 734 + static struct w83l786ng_data *w83l786ng_update_device(struct device *dev) 735 + { 736 + struct i2c_client *client = to_i2c_client(dev); 737 + struct w83l786ng_data *data = i2c_get_clientdata(client); 738 + int i, j; 739 + u8 reg_tmp, pwmcfg; 740 + 741 + mutex_lock(&data->update_lock); 742 + if (time_after(jiffies, data->last_updated + HZ + HZ / 2) 743 + || !data->valid) { 744 + dev_dbg(&client->dev, "Updating w83l786ng data.\n"); 745 + 746 + /* Update the voltages measured value and limits */ 747 + for (i = 0; i < 3; i++) { 748 + data->in[i] = w83l786ng_read_value(client, 749 + W83L786NG_REG_IN(i)); 750 + data->in_min[i] = w83l786ng_read_value(client, 751 + W83L786NG_REG_IN_MIN(i)); 752 + data->in_max[i] = w83l786ng_read_value(client, 753 + W83L786NG_REG_IN_MAX(i)); 754 + } 755 + 756 + /* Update the fan counts and limits */ 757 + for (i = 0; i < 2; i++) { 758 + data->fan[i] = w83l786ng_read_value(client, 759 + W83L786NG_REG_FAN(i)); 760 + data->fan_min[i] = w83l786ng_read_value(client, 761 + W83L786NG_REG_FAN_MIN(i)); 762 + } 763 + 764 + /* Update the fan divisor */ 765 + reg_tmp = w83l786ng_read_value(client, W83L786NG_REG_FAN_DIV); 766 + data->fan_div[0] = reg_tmp & 0x07; 767 + data->fan_div[1] = (reg_tmp >> 4) & 0x07; 768 + 769 + pwmcfg = w83l786ng_read_value(client, W83L786NG_REG_FAN_CFG); 770 + for (i = 0; i < 2; i++) { 771 + data->pwm_mode[i] = 772 + ((pwmcfg >> W83L786NG_PWM_MODE_SHIFT[i]) & 1) 773 + ? 0 : 1; 774 + data->pwm_enable[i] = 775 + ((pwmcfg >> W83L786NG_PWM_ENABLE_SHIFT[i]) & 2) + 1; 776 + data->pwm[i] = w83l786ng_read_value(client, 777 + W83L786NG_REG_PWM[i]); 778 + } 779 + 780 + 781 + /* Update the temperature sensors */ 782 + for (i = 0; i < 2; i++) { 783 + for (j = 0; j < 3; j++) { 784 + data->temp[i][j] = w83l786ng_read_value(client, 785 + W83L786NG_REG_TEMP[i][j]); 786 + } 787 + } 788 + 789 + /* Update Smart Fan I/II tolerance */ 790 + reg_tmp = w83l786ng_read_value(client, W83L786NG_REG_TOLERANCE); 791 + data->tolerance[0] = reg_tmp & 0x0f; 792 + data->tolerance[1] = (reg_tmp >> 4) & 0x0f; 793 + 794 + data->last_updated = jiffies; 795 + data->valid = 1; 796 + 797 + } 798 + 799 + mutex_unlock(&data->update_lock); 800 + 801 + return data; 802 + } 803 + 804 + static int __init 805 + sensors_w83l786ng_init(void) 806 + { 807 + return i2c_add_driver(&w83l786ng_driver); 808 + } 809 + 810 + static void __exit 811 + sensors_w83l786ng_exit(void) 812 + { 813 + i2c_del_driver(&w83l786ng_driver); 814 + } 815 + 816 + MODULE_AUTHOR("Kevin Lo"); 817 + MODULE_DESCRIPTION("w83l786ng driver"); 818 + MODULE_LICENSE("GPL"); 819 + 820 + module_init(sensors_w83l786ng_init); 821 + module_exit(sensors_w83l786ng_exit);
-1
drivers/i2c/chips/eeprom.c
··· 71 71 .driver = { 72 72 .name = "eeprom", 73 73 }, 74 - .id = I2C_DRIVERID_EEPROM, 75 74 .attach_adapter = eeprom_attach_adapter, 76 75 .detach_client = eeprom_detach_client, 77 76 };
-1
drivers/i2c/chips/pcf8574.c
··· 67 67 .driver = { 68 68 .name = "pcf8574", 69 69 }, 70 - .id = I2C_DRIVERID_PCF8574, 71 70 .attach_adapter = pcf8574_attach_adapter, 72 71 .detach_client = pcf8574_detach_client, 73 72 };
-1
drivers/i2c/chips/pcf8591.c
··· 92 92 .driver = { 93 93 .name = "pcf8591", 94 94 }, 95 - .id = I2C_DRIVERID_PCF8591, 96 95 .attach_adapter = pcf8591_attach_adapter, 97 96 .detach_client = pcf8591_detach_client, 98 97 };
+3
include/linux/dmi.h
··· 79 79 extern int dmi_get_year(int field); 80 80 extern int dmi_name_in_vendors(const char *str); 81 81 extern int dmi_available; 82 + extern int dmi_walk(void (*decode)(const struct dmi_header *)); 82 83 83 84 #else 84 85 ··· 90 89 static inline int dmi_get_year(int year) { return 0; } 91 90 static inline int dmi_name_in_vendors(const char *s) { return 0; } 92 91 #define dmi_available 0 92 + static inline int dmi_walk(void (*decode)(const struct dmi_header *)) 93 + { return -1; } 93 94 94 95 #endif 95 96
-36
include/linux/i2c-id.h
··· 96 96 97 97 #define I2C_DRIVERID_I2CDEV 900 98 98 99 - /* IDs -- Use DRIVERIDs 1000-1999 for sensors. 100 - These were originally in sensors.h in the lm_sensors package */ 101 - #define I2C_DRIVERID_LM78 1002 102 - #define I2C_DRIVERID_LM75 1003 103 - #define I2C_DRIVERID_GL518 1004 104 - #define I2C_DRIVERID_EEPROM 1005 105 - #define I2C_DRIVERID_W83781D 1006 106 - #define I2C_DRIVERID_LM80 1007 107 - #define I2C_DRIVERID_ADM1021 1008 108 - #define I2C_DRIVERID_ADM9240 1009 109 - #define I2C_DRIVERID_LTC1710 1010 110 - #define I2C_DRIVERID_BT869 1013 111 - #define I2C_DRIVERID_MAXILIFE 1014 112 - #define I2C_DRIVERID_MATORB 1015 113 - #define I2C_DRIVERID_GL520 1016 114 - #define I2C_DRIVERID_THMC50 1017 115 - #define I2C_DRIVERID_ADM1025 1020 116 - #define I2C_DRIVERID_LM87 1021 117 - #define I2C_DRIVERID_PCF8574 1022 118 - #define I2C_DRIVERID_MTP008 1023 119 - #define I2C_DRIVERID_DS1621 1024 120 - #define I2C_DRIVERID_ADM1024 1025 121 - #define I2C_DRIVERID_CH700X 1027 /* single driver for CH7003-7009 digital pc to tv encoders */ 122 - #define I2C_DRIVERID_FSCPOS 1028 123 - #define I2C_DRIVERID_FSCSCY 1029 124 - #define I2C_DRIVERID_PCF8591 1030 125 - #define I2C_DRIVERID_LM92 1033 126 - #define I2C_DRIVERID_SMARTBATT 1035 127 - #define I2C_DRIVERID_BMCSENSORS 1036 128 - #define I2C_DRIVERID_FS451 1037 129 - #define I2C_DRIVERID_LM85 1039 130 - #define I2C_DRIVERID_LM83 1040 131 - #define I2C_DRIVERID_LM90 1042 132 - #define I2C_DRIVERID_ASB100 1043 133 - #define I2C_DRIVERID_FSCHER 1046 134 - #define I2C_DRIVERID_W83L785TS 1047 135 99 #define I2C_DRIVERID_OV7670 1048 /* Omnivision 7670 camera */ 136 100 137 101 /*