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 Datasheet: No longer be available 31 32 Authors: 33 - Christophe Gauthron <chrisg@0-in.com> 34 Jean Delvare <khali@linux-fr.org> 35 36
··· 30 Datasheet: No longer be available 31 32 Authors: 33 + Christophe Gauthron 34 Jean Delvare <khali@linux-fr.org> 35 36
+2 -2
Documentation/hwmon/lm78
··· 4 Supported chips: 5 * National Semiconductor LM78 / LM78-J 6 Prefix: 'lm78' 7 - Addresses scanned: I2C 0x20 - 0x2f, ISA 0x290 (8 I/O ports) 8 Datasheet: Publicly available at the National Semiconductor website 9 http://www.national.com/ 10 * National Semiconductor LM79 11 Prefix: 'lm79' 12 - Addresses scanned: I2C 0x20 - 0x2f, ISA 0x290 (8 I/O ports) 13 Datasheet: Publicly available at the National Semiconductor website 14 http://www.national.com/ 15
··· 4 Supported chips: 5 * National Semiconductor LM78 / LM78-J 6 Prefix: 'lm78' 7 + Addresses scanned: I2C 0x28 - 0x2f, ISA 0x290 (8 I/O ports) 8 Datasheet: Publicly available at the National Semiconductor website 9 http://www.national.com/ 10 * National Semiconductor LM79 11 Prefix: 'lm79' 12 + Addresses scanned: I2C 0x28 - 0x2f, ISA 0x290 (8 I/O ports) 13 Datasheet: Publicly available at the National Semiconductor website 14 http://www.national.com/ 15
+8 -3
Documentation/hwmon/lm87
··· 4 Supported chips: 5 * National Semiconductor LM87 6 Prefix: 'lm87' 7 - Addresses scanned: I2C 0x2c - 0x2f 8 Datasheet: http://www.national.com/pf/LM/LM87.html 9 10 Authors: 11 Frodo Looijaard <frodol@dds.nl>, ··· 23 Description 24 ----------- 25 26 - This driver implements support for the National Semiconductor LM87. 27 28 The LM87 implements up to three temperature sensors, up to two fan 29 rotation speed sensors, up to seven voltage sensors, alarms, and some 30 - miscellaneous stuff. 31 32 Temperatures are measured in degrees Celsius. Each input has a high 33 and low alarm settings. A high limit produces an alarm when the value
··· 4 Supported chips: 5 * National Semiconductor LM87 6 Prefix: 'lm87' 7 + Addresses scanned: I2C 0x2c - 0x2e 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 13 14 Authors: 15 Frodo Looijaard <frodol@dds.nl>, ··· 19 Description 20 ----------- 21 22 + This driver implements support for the National Semiconductor LM87 23 + and the Analog Devices ADM1024. 24 25 The LM87 implements up to three temperature sensors, up to two fan 26 rotation speed sensors, up to seven voltage sensors, alarms, and some 27 + miscellaneous stuff. The ADM1024 is fully compatible. 28 29 Temperatures are measured in degrees Celsius. Each input has a high 30 and low alarm settings. A high limit produces an alarm when the value
+1 -1
Documentation/hwmon/userspace-tools
··· 14 15 Core set of utilities that will allow you to obtain health information, 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. 18 19 If from website: 20 Get lm-sensors from project web site. Please note, you need only userspace
··· 14 15 Core set of utilities that will allow you to obtain health information, 16 setup monitoring limits etc. You can get them on their homepage 17 + http://www.lm-sensors.org/ or as a package from your Linux distribution. 18 19 If from website: 20 Get lm-sensors from project web site. Please note, you need only userspace
+3 -2
Documentation/hwmon/w83627ehf
··· 23 24 The chips implement three temperature sensors, five fan rotation 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). 28 29 Temperatures are measured in degrees Celsius and measurement resolution is 1 30 degC for temp1 and 0.5 degC for temp2 and temp3. An alarm is triggered when
··· 23 24 The chips implement three temperature sensors, five fan rotation 25 speed sensors, ten analog voltage sensors (only nine for the 627DHG), one 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). 29 30 Temperatures are measured in degrees Celsius and measurement resolution is 1 31 degC for temp1 and 0.5 degC for temp2 and temp3. An alarm is triggered when
+1 -2
Documentation/hwmon/w83627hf
··· 73 74 For further information on this driver see the w83781d driver documentation. 75 76 - [1] http://www2.lm-sensors.nu/~lm78/cvs/browse.cgi/lm_sensors2/doc/vid 77 -
··· 73 74 For further information on this driver see the w83781d driver documentation. 75 76 + [1] http://www.lm-sensors.org/browser/lm-sensors/trunk/doc/vid
+8 -14
Documentation/hwmon/w83781d
··· 4 Supported chips: 5 * Winbond W83781D 6 Prefix: 'w83781d' 7 - Addresses scanned: I2C 0x20 - 0x2f, ISA 0x290 (8 I/O ports) 8 Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83781d.pdf 9 * Winbond W83782D 10 Prefix: 'w83782d' 11 - Addresses scanned: I2C 0x20 - 0x2f, ISA 0x290 (8 I/O ports) 12 Datasheet: http://www.winbond.com/PDF/sheet/w83782d.pdf 13 * Winbond W83783S 14 Prefix: 'w83783s' 15 Addresses scanned: I2C 0x2d 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 * Asus AS99127F 22 Prefix: 'as99127f' 23 Addresses scanned: I2C 0x28 - 0x2f ··· 46 Description 47 ----------- 48 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. 52 53 There is quite some difference between these chips, but they are similar 54 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 The Asus chips are similar to an I2C-only W83782D. 57 58 Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA 59 as99127f 7 3 0 3 0x31 0x12c3 yes no 60 as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no 61 w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes 62 - w83627hf 9 3 2 3 0x21 0x5ca3 yes yes(LPC) 63 w83782d 9 3 2-4 3 0x30 0x5ca3 yes yes 64 w83783s 5-6 3 2 1-2 0x40 0x5ca3 yes no 65 ··· 137 0x000400: in6 138 0x000800: fan3 139 0x001000: chassis 140 - 0x002000: temp3 (W83782D and W83627HF only) 141 - 0x010000: in7 (W83782D and W83627HF only) 142 - 0x020000: in8 (W83782D and W83627HF only) 143 144 If an alarm triggers, it will remain triggered until the hardware register 145 is read at least once. This means that the cause for the alarm may
··· 4 Supported chips: 5 * Winbond W83781D 6 Prefix: 'w83781d' 7 + Addresses scanned: I2C 0x28 - 0x2f, ISA 0x290 (8 I/O ports) 8 Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83781d.pdf 9 * Winbond W83782D 10 Prefix: 'w83782d' 11 + Addresses scanned: I2C 0x28 - 0x2f, ISA 0x290 (8 I/O ports) 12 Datasheet: http://www.winbond.com/PDF/sheet/w83782d.pdf 13 * Winbond W83783S 14 Prefix: 'w83783s' 15 Addresses scanned: I2C 0x2d 16 Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83783s.pdf 17 * Asus AS99127F 18 Prefix: 'as99127f' 19 Addresses scanned: I2C 0x28 - 0x2f ··· 50 Description 51 ----------- 52 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. 56 57 There is quite some difference between these chips, but they are similar 58 enough that it was sensible to put them together in one driver. 59 The Asus chips are similar to an I2C-only W83782D. 60 61 Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA 62 as99127f 7 3 0 3 0x31 0x12c3 yes no 63 as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no 64 w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes 65 w83782d 9 3 2-4 3 0x30 0x5ca3 yes yes 66 w83783s 5-6 3 2 1-2 0x40 0x5ca3 yes no 67 ··· 143 0x000400: in6 144 0x000800: fan3 145 0x001000: chassis 146 + 0x002000: temp3 (W83782D only) 147 + 0x010000: in7 (W83782D only) 148 + 0x020000: in8 (W83782D only) 149 150 If an alarm triggers, it will remain triggered until the hardware register 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 the SMBus on all IBM systems (detected using DMI data.) 96 97 For additional information, read: 98 - http://www2.lm-sensors.nu/~lm78/cvs/lm_sensors2/README.thinkpad
··· 95 the SMBus on all IBM systems (detected using DMI data.) 96 97 For additional information, read: 98 + http://www.lm-sensors.org/browser/lm-sensors/trunk/README.thinkpad
+48 -14
drivers/firmware/dmi_scan.c
··· 43 * We have to be cautious here. We have seen BIOSes with DMI pointers 44 * pointing to completely the wrong place for example 45 */ 46 - static int __init dmi_table(u32 base, int len, int num, 47 - void (*decode)(const struct dmi_header *)) 48 { 49 - u8 *buf, *data; 50 int i = 0; 51 - 52 - buf = dmi_ioremap(base, len); 53 - if (buf == NULL) 54 - return -1; 55 - 56 - data = buf; 57 58 /* 59 * Stop when we see all the items the table claimed to have ··· 69 data += 2; 70 i++; 71 } 72 - dmi_iounmap(buf, len); 73 return 0; 74 } 75 ··· 301 302 memcpy_fromio(buf, p, 15); 303 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) | 307 (buf[9] << 8) | buf[8]; 308 309 /* ··· 315 buf[14] >> 4, buf[14] & 0xF); 316 else 317 printk(KERN_INFO "DMI present.\n"); 318 - if (dmi_table(base,len, num, dmi_decode) == 0) 319 return 0; 320 } 321 return 1; ··· 499 500 return year; 501 }
··· 43 * We have to be cautious here. We have seen BIOSes with DMI pointers 44 * pointing to completely the wrong place for example 45 */ 46 + static void dmi_table(u8 *buf, int len, int num, 47 + void (*decode)(const struct dmi_header *)) 48 { 49 + u8 *data = buf; 50 int i = 0; 51 52 /* 53 * Stop when we see all the items the table claimed to have ··· 75 data += 2; 76 i++; 77 } 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); 95 return 0; 96 } 97 ··· 291 292 memcpy_fromio(buf, p, 15); 293 if ((memcmp(buf, "_DMI_", 5) == 0) && dmi_checksum(buf)) { 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) | 297 (buf[9] << 8) | buf[8]; 298 299 /* ··· 305 buf[14] >> 4, buf[14] & 0xF); 306 else 307 printk(KERN_INFO "DMI present.\n"); 308 + if (dmi_walk_early(dmi_decode) == 0) 309 return 0; 310 } 311 return 1; ··· 489 490 return year; 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 will be called lm85. 434 435 config SENSORS_LM87 436 - tristate "National Semiconductor LM87" 437 depends on I2C 438 select HWMON_VID 439 help 440 If you say yes here you get support for National Semiconductor LM87 441 - sensor chips. 442 443 This driver can also be built as a module. If so, the module 444 will be called lm87. ··· 588 This driver can also be built as a module. If so, the module 589 will be called smsc47b397. 590 591 config SENSORS_THMC50 592 tristate "Texas Instruments THMC50 / Analog Devices ADM1022" 593 depends on I2C && EXPERIMENTAL ··· 641 will be called vt8231. 642 643 config SENSORS_W83781D 644 - tristate "Winbond W83781D, W83782D, W83783S, W83627HF, Asus AS99127F" 645 depends on I2C 646 select HWMON_VID 647 help 648 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. 651 652 This driver can also be built as a module. If so, the module 653 will be called w83781d. ··· 692 693 This driver can also be built as a module. If so, the module 694 will be called w83l785ts. 695 696 config SENSORS_W83627HF 697 tristate "Winbond W83627HF, W83627THF, W83637HF, W83687THF, W83697HF"
··· 433 will be called lm85. 434 435 config SENSORS_LM87 436 + tristate "National Semiconductor LM87 and compatibles" 437 depends on I2C 438 select HWMON_VID 439 help 440 If you say yes here you get support for National Semiconductor LM87 441 + and Analog Devices ADM1024 sensor chips. 442 443 This driver can also be built as a module. If so, the module 444 will be called lm87. ··· 588 This driver can also be built as a module. If so, the module 589 will be called smsc47b397. 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 + 601 config SENSORS_THMC50 602 tristate "Texas Instruments THMC50 / Analog Devices ADM1022" 603 depends on I2C && EXPERIMENTAL ··· 631 will be called vt8231. 632 633 config SENSORS_W83781D 634 + tristate "Winbond W83781D, W83782D, W83783S, Asus AS99127F" 635 depends on I2C 636 select HWMON_VID 637 help 638 If you say yes here you get support for the Winbond W8378x series 639 + of sensor chips: the W83781D, W83782D and W83783S, and the similar 640 + Asus AS99127F. 641 642 This driver can also be built as a module. If so, the module 643 will be called w83781d. ··· 682 683 This driver can also be built as a module. If so, the module 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 696 config SENSORS_W83627HF 697 tristate "Winbond W83627HF, W83627THF, W83637HF, W83687THF, W83697HF"
+2
drivers/hwmon/Makefile
··· 22 obj-$(CONFIG_SENSORS_ADM1029) += adm1029.o 23 obj-$(CONFIG_SENSORS_ADM1031) += adm1031.o 24 obj-$(CONFIG_SENSORS_ADM9240) += adm9240.o 25 obj-$(CONFIG_SENSORS_ADT7470) += adt7470.o 26 obj-$(CONFIG_SENSORS_APPLESMC) += applesmc.o 27 obj-$(CONFIG_SENSORS_AMS) += ams/ ··· 69 obj-$(CONFIG_SENSORS_VT8231) += vt8231.o 70 obj-$(CONFIG_SENSORS_W83627EHF) += w83627ehf.o 71 obj-$(CONFIG_SENSORS_W83L785TS) += w83l785ts.o 72 73 ifeq ($(CONFIG_HWMON_DEBUG_CHIP),y) 74 EXTRA_CFLAGS += -DDEBUG
··· 22 obj-$(CONFIG_SENSORS_ADM1029) += adm1029.o 23 obj-$(CONFIG_SENSORS_ADM1031) += adm1031.o 24 obj-$(CONFIG_SENSORS_ADM9240) += adm9240.o 25 + obj-$(CONFIG_SENSORS_ADS7828) += ads7828.o 26 obj-$(CONFIG_SENSORS_ADT7470) += adt7470.o 27 obj-$(CONFIG_SENSORS_APPLESMC) += applesmc.o 28 obj-$(CONFIG_SENSORS_AMS) += ams/ ··· 68 obj-$(CONFIG_SENSORS_VT8231) += vt8231.o 69 obj-$(CONFIG_SENSORS_W83627EHF) += w83627ehf.o 70 obj-$(CONFIG_SENSORS_W83L785TS) += w83l785ts.o 71 + obj-$(CONFIG_SENSORS_W83L786NG) += w83l786ng.o 72 73 ifeq ($(CONFIG_HWMON_DEBUG_CHIP),y) 74 EXTRA_CFLAGS += -DDEBUG
+1
drivers/hwmon/abituguru3.c
··· 528 { "AUX1 Fan", 33, 2, 60, 1, 0 }, 529 { "AUX2 Fan", 35, 2, 60, 1, 0 }, 530 { "AUX3 Fan", 36, 2, 60, 1, 0 }, 531 { NULL, 0, 0, 0, 0, 0 } } 532 }, 533 { 0x001B, "unknown", {
··· 528 { "AUX1 Fan", 33, 2, 60, 1, 0 }, 529 { "AUX2 Fan", 35, 2, 60, 1, 0 }, 530 { "AUX3 Fan", 36, 2, 60, 1, 0 }, 531 + { "AUX4 Fan", 37, 2, 60, 1, 0 }, 532 { NULL, 0, 0, 0, 0, 0 } } 533 }, 534 { 0x001B, "unknown", {
-1
drivers/hwmon/adm1021.c
··· 115 .driver = { 116 .name = "adm1021", 117 }, 118 - .id = I2C_DRIVERID_ADM1021, 119 .attach_adapter = adm1021_attach_adapter, 120 .detach_client = adm1021_detach_client, 121 };
··· 115 .driver = { 116 .name = "adm1021", 117 }, 118 .attach_adapter = adm1021_attach_adapter, 119 .detach_client = adm1021_detach_client, 120 };
+213 -178
drivers/hwmon/adm1025.c
··· 51 #include <linux/jiffies.h> 52 #include <linux/i2c.h> 53 #include <linux/hwmon.h> 54 #include <linux/hwmon-vid.h> 55 #include <linux/err.h> 56 #include <linux/mutex.h> ··· 75 */ 76 77 #define ADM1025_REG_MAN_ID 0x3E 78 - #define ADM1025_REG_CHIP_ID 0x3F 79 #define ADM1025_REG_CONFIG 0x40 80 #define ADM1025_REG_STATUS1 0x41 81 #define ADM1025_REG_STATUS2 0x42 ··· 93 * The ADM1025 uses signed 8-bit values for temperatures. 94 */ 95 96 - static int in_scale[6] = { 2500, 2250, 3300, 5000, 12000, 3300 }; 97 98 #define IN_FROM_REG(reg,scale) (((reg) * (scale) + 96) / 192) 99 #define IN_TO_REG(val,scale) ((val) <= 0 ? 0 : \ ··· 123 .driver = { 124 .name = "adm1025", 125 }, 126 - .id = I2C_DRIVERID_ADM1025, 127 .attach_adapter = adm1025_attach_adapter, 128 .detach_client = adm1025_detach_client, 129 }; ··· 153 * Sysfs stuff 154 */ 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); 182 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); 202 203 #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); 236 set_in(0); 237 set_in(1); 238 set_in(2); ··· 250 set_in(4); 251 set_in(5); 252 253 #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); 286 set_temp(1); 287 set_temp(2); 288 289 - static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf) 290 { 291 struct adm1025_data *data = adm1025_update_device(dev); 292 return sprintf(buf, "%u\n", data->alarms); 293 } 294 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 295 296 - static ssize_t show_vid(struct device *dev, struct device_attribute *attr, char *buf) 297 { 298 struct adm1025_data *data = adm1025_update_device(dev); 299 return sprintf(buf, "%u\n", vid_from_reg(data->vid, data->vrm)); 300 } 301 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL); 302 303 - static ssize_t show_vrm(struct device *dev, struct device_attribute *attr, char *buf) 304 { 305 struct adm1025_data *data = dev_get_drvdata(dev); 306 return sprintf(buf, "%u\n", data->vrm); 307 } 308 - static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 309 { 310 - struct i2c_client *client = to_i2c_client(dev); 311 - struct adm1025_data *data = i2c_get_clientdata(client); 312 data->vrm = simple_strtoul(buf, NULL, 10); 313 return count; 314 } ··· 352 } 353 354 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, 376 &dev_attr_alarms.attr, 377 &dev_attr_cpu0_vid.attr, 378 &dev_attr_vrm.attr, ··· 391 .attrs = adm1025_attributes, 392 }; 393 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, 398 NULL 399 }; 400 401 - static const struct attribute_group adm1025_group_opt = { 402 - .attrs = adm1025_attributes_opt, 403 }; 404 405 /* ··· 409 */ 410 static int adm1025_detect(struct i2c_adapter *adapter, int address, int kind) 411 { 412 - struct i2c_client *new_client; 413 struct adm1025_data *data; 414 int err = 0; 415 const char *name = ""; ··· 423 goto exit; 424 } 425 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; 434 435 /* 436 * Now we do the remaining detection. A negative kind means that ··· 439 * requested, so both the detection and the identification steps 440 * are skipped. 441 */ 442 - config = i2c_smbus_read_byte_data(new_client, ADM1025_REG_CONFIG); 443 if (kind < 0) { /* detection */ 444 if ((config & 0x80) != 0x00 445 - || (i2c_smbus_read_byte_data(new_client, 446 ADM1025_REG_STATUS1) & 0xC0) != 0x00 447 - || (i2c_smbus_read_byte_data(new_client, 448 ADM1025_REG_STATUS2) & 0xBC) != 0x00) { 449 dev_dbg(&adapter->dev, 450 "ADM1025 detection failed at 0x%02x.\n", ··· 456 if (kind <= 0) { /* identification */ 457 u8 man_id, chip_id; 458 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 - 464 if (man_id == 0x41) { /* Analog Devices */ 465 if ((chip_id & 0xF0) == 0x20) { /* ADM1025/ADM1025A */ 466 kind = adm1025; ··· 486 } 487 488 /* We can fill in the remaining client fields */ 489 - strlcpy(new_client->name, name, I2C_NAME_SIZE); 490 - data->valid = 0; 491 mutex_init(&data->update_lock); 492 493 /* Tell the I2C layer a new client has arrived */ 494 - if ((err = i2c_attach_client(new_client))) 495 goto exit_free; 496 497 /* Initialize the ADM1025 chip */ 498 - adm1025_init_client(new_client); 499 500 /* Register sysfs hooks */ 501 - if ((err = sysfs_create_group(&new_client->dev.kobj, &adm1025_group))) 502 goto exit_detach; 503 504 /* Pin 11 is either in4 (+12V) or VID4 */ 505 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))) 512 goto exit_remove; 513 } 514 515 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 516 if (IS_ERR(data->hwmon_dev)) { 517 err = PTR_ERR(data->hwmon_dev); 518 goto exit_remove; ··· 516 return 0; 517 518 exit_remove: 519 - sysfs_remove_group(&new_client->dev.kobj, &adm1025_group); 520 - sysfs_remove_group(&new_client->dev.kobj, &adm1025_group_opt); 521 exit_detach: 522 - i2c_detach_client(new_client); 523 exit_free: 524 kfree(data); 525 exit: ··· 575 576 hwmon_device_unregister(data->hwmon_dev); 577 sysfs_remove_group(&client->dev.kobj, &adm1025_group); 578 - sysfs_remove_group(&client->dev.kobj, &adm1025_group_opt); 579 580 if ((err = i2c_detach_client(client))) 581 return err;
··· 51 #include <linux/jiffies.h> 52 #include <linux/i2c.h> 53 #include <linux/hwmon.h> 54 + #include <linux/hwmon-sysfs.h> 55 #include <linux/hwmon-vid.h> 56 #include <linux/err.h> 57 #include <linux/mutex.h> ··· 74 */ 75 76 #define ADM1025_REG_MAN_ID 0x3E 77 + #define ADM1025_REG_CHIP_ID 0x3F 78 #define ADM1025_REG_CONFIG 0x40 79 #define ADM1025_REG_STATUS1 0x41 80 #define ADM1025_REG_STATUS2 0x42 ··· 92 * The ADM1025 uses signed 8-bit values for temperatures. 93 */ 94 95 + static const int in_scale[6] = { 2500, 2250, 3300, 5000, 12000, 3300 }; 96 97 #define IN_FROM_REG(reg,scale) (((reg) * (scale) + 96) / 192) 98 #define IN_TO_REG(val,scale) ((val) <= 0 ? 0 : \ ··· 122 .driver = { 123 .name = "adm1025", 124 }, 125 .attach_adapter = adm1025_attach_adapter, 126 .detach_client = adm1025_detach_client, 127 }; ··· 153 * Sysfs stuff 154 */ 155 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 + } 164 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 + } 238 239 #define set_in(offset) \ 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) 246 set_in(0); 247 set_in(1); 248 set_in(2); ··· 240 set_in(4); 241 set_in(5); 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 + 275 #define set_temp(offset) \ 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) 282 set_temp(1); 283 set_temp(2); 284 285 + static ssize_t 286 + show_alarms(struct device *dev, struct device_attribute *attr, char *buf) 287 { 288 struct adm1025_data *data = adm1025_update_device(dev); 289 return sprintf(buf, "%u\n", data->alarms); 290 } 291 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 292 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) 312 { 313 struct adm1025_data *data = adm1025_update_device(dev); 314 return sprintf(buf, "%u\n", vid_from_reg(data->vid, data->vrm)); 315 } 316 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL); 317 318 + static ssize_t 319 + show_vrm(struct device *dev, struct device_attribute *attr, char *buf) 320 { 321 struct adm1025_data *data = dev_get_drvdata(dev); 322 return sprintf(buf, "%u\n", data->vrm); 323 } 324 + static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, 325 + const char *buf, size_t count) 326 { 327 + struct adm1025_data *data = dev_get_drvdata(dev); 328 data->vrm = simple_strtoul(buf, NULL, 10); 329 return count; 330 } ··· 316 } 317 318 static struct attribute *adm1025_attributes[] = { 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, 348 &dev_attr_alarms.attr, 349 &dev_attr_cpu0_vid.attr, 350 &dev_attr_vrm.attr, ··· 347 .attrs = adm1025_attributes, 348 }; 349 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, 355 NULL 356 }; 357 358 + static const struct attribute_group adm1025_group_in4 = { 359 + .attrs = adm1025_attributes_in4, 360 }; 361 362 /* ··· 364 */ 365 static int adm1025_detect(struct i2c_adapter *adapter, int address, int kind) 366 { 367 + struct i2c_client *client; 368 struct adm1025_data *data; 369 int err = 0; 370 const char *name = ""; ··· 378 goto exit; 379 } 380 381 + client = &data->client; 382 + i2c_set_clientdata(client, data); 383 + client->addr = address; 384 + client->adapter = adapter; 385 + client->driver = &adm1025_driver; 386 387 /* 388 * Now we do the remaining detection. A negative kind means that ··· 397 * requested, so both the detection and the identification steps 398 * are skipped. 399 */ 400 + config = i2c_smbus_read_byte_data(client, ADM1025_REG_CONFIG); 401 if (kind < 0) { /* detection */ 402 if ((config & 0x80) != 0x00 403 + || (i2c_smbus_read_byte_data(client, 404 ADM1025_REG_STATUS1) & 0xC0) != 0x00 405 + || (i2c_smbus_read_byte_data(client, 406 ADM1025_REG_STATUS2) & 0xBC) != 0x00) { 407 dev_dbg(&adapter->dev, 408 "ADM1025 detection failed at 0x%02x.\n", ··· 414 if (kind <= 0) { /* identification */ 415 u8 man_id, chip_id; 416 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 + 420 if (man_id == 0x41) { /* Analog Devices */ 421 if ((chip_id & 0xF0) == 0x20) { /* ADM1025/ADM1025A */ 422 kind = adm1025; ··· 446 } 447 448 /* We can fill in the remaining client fields */ 449 + strlcpy(client->name, name, I2C_NAME_SIZE); 450 mutex_init(&data->update_lock); 451 452 /* Tell the I2C layer a new client has arrived */ 453 + if ((err = i2c_attach_client(client))) 454 goto exit_free; 455 456 /* Initialize the ADM1025 chip */ 457 + adm1025_init_client(client); 458 459 /* Register sysfs hooks */ 460 + if ((err = sysfs_create_group(&client->dev.kobj, &adm1025_group))) 461 goto exit_detach; 462 463 /* Pin 11 is either in4 (+12V) or VID4 */ 464 if (!(config & 0x20)) { 465 + if ((err = sysfs_create_group(&client->dev.kobj, 466 + &adm1025_group_in4))) 467 goto exit_remove; 468 } 469 470 + data->hwmon_dev = hwmon_device_register(&client->dev); 471 if (IS_ERR(data->hwmon_dev)) { 472 err = PTR_ERR(data->hwmon_dev); 473 goto exit_remove; ··· 481 return 0; 482 483 exit_remove: 484 + sysfs_remove_group(&client->dev.kobj, &adm1025_group); 485 + sysfs_remove_group(&client->dev.kobj, &adm1025_group_in4); 486 exit_detach: 487 + i2c_detach_client(client); 488 exit_free: 489 kfree(data); 490 exit: ··· 540 541 hwmon_device_unregister(data->hwmon_dev); 542 sysfs_remove_group(&client->dev.kobj, &adm1025_group); 543 + sysfs_remove_group(&client->dev.kobj, &adm1025_group_in4); 544 545 if ((err = i2c_detach_client(client))) 546 return err;
+360 -272
drivers/hwmon/adm1026.c
··· 40 /* Insmod parameters */ 41 I2C_CLIENT_INSMOD_1(adm1026); 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 }; 45 static int gpio_output[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, 46 -1, -1, -1, -1, -1, -1, -1, -1 }; 47 static int gpio_inverted[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, ··· 49 static int gpio_normal[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, 50 -1, -1, -1, -1, -1, -1, -1, -1 }; 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 " 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 " 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 " 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"); 65 66 /* Many ADM1026 constants specified below */ 67 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 79 /* 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 92 93 /* There are 10 general analog inputs and 7 dedicated inputs 94 * They are: ··· 132 static u16 ADM1026_REG_TEMP_THERM[] = { 0x0d, 0x0e, 0x0f }; 133 static u16 ADM1026_REG_TEMP_OFFSET[] = { 0x1e, 0x6e, 0x6f }; 134 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 139 140 - #define ADM1026_REG_DAC 0x04 141 - #define ADM1026_REG_PWM 0x05 142 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 147 /* CFG_16 in REG_CFG3 */ 148 - #define ADM1026_REG_GPIO_STATUS_0_7 0x24 149 - #define ADM1026_REG_GPIO_STATUS_8_15 0x25 150 /* STATUS_16 in REG_STATUS4 */ 151 - #define ADM1026_REG_GPIO_MASK_0_7 0x1c 152 - #define ADM1026_REG_GPIO_MASK_8_15 0x1d 153 /* MASK_16 in REG_MASK4 */ 154 155 - #define ADM1026_REG_COMPANY 0x16 156 - #define ADM1026_REG_VERSTEP 0x17 157 /* 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 161 162 - #define ADM1026_REG_MASK1 0x18 163 - #define ADM1026_REG_MASK2 0x19 164 - #define ADM1026_REG_MASK3 0x1a 165 - #define ADM1026_REG_MASK4 0x1b 166 167 - #define ADM1026_REG_STATUS1 0x20 168 - #define ADM1026_REG_STATUS2 0x21 169 - #define ADM1026_REG_STATUS3 0x22 170 - #define ADM1026_REG_STATUS4 0x23 171 172 #define ADM1026_FAN_ACTIVATION_TEMP_HYST -6 173 - #define ADM1026_FAN_CONTROL_TEMP_RANGE 20 174 - #define ADM1026_PWM_MAX 255 175 176 - /* Conversions. Rounding and limit checking is only done on the TO_REG 177 * variants. Note that you should be a bit careful with which arguments 178 * these macros are called: arguments may be evaluated more than once. 179 */ ··· 189 * The values in this table are based on Table II, page 15 of the 190 * datasheet. 191 */ 192 - static int adm1026_scaling[] = { /* .001 Volts */ 193 - 2250, 2250, 2250, 2250, 2250, 2250, 194 - 1875, 1875, 1875, 1875, 3000, 3330, 195 3330, 4995, 2250, 12000, 13875 196 }; 197 #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])) 202 203 /* FAN speed is measured using 22.5kHz clock and counts for 2 pulses 204 * and we assume a 2 pulse-per-rev fan tach signal 205 * 22500 kHz * 60 (sec/min) * 2 (pulse) / 2 (pulse/rev) == 1350000 206 */ 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))) 211 #define DIV_FROM_REG(val) (1<<(val)) 212 - #define DIV_TO_REG(val) ((val)>=8 ? 3 : (val)>=4 ? 2 : (val)>=2 ? 1 : 0) 213 214 /* Temperature is reported in 1 degC increments */ 215 #define TEMP_TO_REG(val) (SENSORS_LIMIT(((val)+((val)<0 ? -500 : 500))/1000,\ 216 - -127,127)) 217 #define TEMP_FROM_REG(val) ((val) * 1000) 218 #define OFFSET_TO_REG(val) (SENSORS_LIMIT(((val)+((val)<0 ? -500 : 500))/1000,\ 219 - -127,127)) 220 #define OFFSET_FROM_REG(val) ((val) * 1000) 221 222 - #define PWM_TO_REG(val) (SENSORS_LIMIT(val,0,255)) 223 #define PWM_FROM_REG(val) (val) 224 225 #define PWM_MIN_TO_REG(val) ((val) & 0xf0) 226 #define PWM_MIN_FROM_REG(val) (((val) & 0xf0) + ((val) >> 4)) 227 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 230 * example board (Arima HDAMA) it isn't connected to the fans at all. 231 */ 232 - #define DAC_TO_REG(val) (SENSORS_LIMIT(((((val)*255)+500)/2500),0,255)) 233 #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 238 /* Chip sampling rates 239 * ··· 243 * So, we keep the config data up to date in the cache 244 * when it is written and only sample it once every 5 *minutes* 245 */ 246 - #define ADM1026_DATA_INTERVAL (1 * HZ) 247 - #define ADM1026_CONFIG_INTERVAL (5 * 60 * HZ) 248 249 /* We allow for multiple chips in a single system. 250 * ··· 261 struct adm1026_data { 262 struct i2c_client client; 263 struct device *hwmon_dev; 264 - enum chips type; 265 266 struct mutex update_lock; 267 int valid; /* !=0 if following fields are valid */ 268 unsigned long last_reading; /* In jiffies */ 269 unsigned long last_config; /* In jiffies */ 270 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 */ 286 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 */ 295 }; 296 297 static int adm1026_attach_adapter(struct i2c_adapter *adapter); ··· 300 static int adm1026_read_value(struct i2c_client *client, u8 reg); 301 static int adm1026_write_value(struct i2c_client *client, u8 reg, int value); 302 static void adm1026_print_gpio(struct i2c_client *client); 303 - static void adm1026_fixup_gpio(struct i2c_client *client); 304 static struct adm1026_data *adm1026_update_device(struct device *dev); 305 static void adm1026_init_client(struct i2c_client *client); 306 ··· 310 .name = "adm1026", 311 }, 312 .attach_adapter = adm1026_attach_adapter, 313 - .detach_client = adm1026_detach_client, 314 }; 315 316 static int adm1026_attach_adapter(struct i2c_adapter *adapter) ··· 354 int value, i; 355 struct adm1026_data *data = i2c_get_clientdata(client); 356 357 - dev_dbg(&client->dev, "Initializing device\n"); 358 /* Read chip config */ 359 data->config1 = adm1026_read_value(client, ADM1026_REG_CONFIG1); 360 data->config2 = adm1026_read_value(client, ADM1026_REG_CONFIG2); ··· 383 "and temp limits enabled.\n"); 384 } 385 386 - value = data->config3; 387 if (data->config3 & CFG3_GPIO16_ENABLE) { 388 dev_dbg(&client->dev, "GPIO16 enabled. THERM " 389 "pin disabled.\n"); ··· 424 * configured, we don't want to mess with them. 425 * If they weren't, the default is 100% PWM, no 426 * control and will suffice until 'sensors -s' 427 - * can be run by the user. We DO set the default 428 * value for pwm1.auto_pwm_min to its maximum 429 * so that enabling automatic pwm fan control 430 - * without first setting a value for pwm1.auto_pwm_min 431 * will not result in potentially dangerous fan speed decrease. 432 */ 433 data->pwm1.auto_pwm_min=255; ··· 451 static void adm1026_print_gpio(struct i2c_client *client) 452 { 453 struct adm1026_data *data = i2c_get_clientdata(client); 454 - int i; 455 456 dev_dbg(&client->dev, "GPIO config is:"); 457 for (i = 0;i <= 7;++i) { ··· 475 data->gpio_config[16] & 0x02 ? "" : "!", 476 data->gpio_config[16] & 0x01 ? "OUT" : "IN"); 477 } else { 478 - /* GPIO16 is THERM */ 479 dev_dbg(&client->dev, "\tTHERM\n"); 480 } 481 } ··· 483 static void adm1026_fixup_gpio(struct i2c_client *client) 484 { 485 struct adm1026_data *data = i2c_get_clientdata(client); 486 - int i; 487 - int value; 488 489 /* Make the changes requested. */ 490 /* We may need to unlock/stop monitoring or soft-reset the ··· 514 } 515 } 516 517 - /* Inverted */ 518 for (i = 0;i <= 16;++i) { 519 if (gpio_inverted[i] >= 0 && gpio_inverted[i] <= 16) { 520 data->gpio_config[gpio_inverted[i]] &= ~ 0x02; 521 } 522 } 523 524 - /* Normal overrides inverted */ 525 for (i = 0;i <= 16;++i) { 526 if (gpio_normal[i] >= 0 && gpio_normal[i] <= 16) { 527 data->gpio_config[gpio_normal[i]] |= 0x02; ··· 567 if (!data->valid 568 || time_after(jiffies, data->last_reading + ADM1026_DATA_INTERVAL)) { 569 /* Things that change quickly */ 570 - dev_dbg(&client->dev,"Reading sensor values\n"); 571 for (i = 0;i <= 16;++i) { 572 data->in[i] = 573 adm1026_read_value(client, ADM1026_REG_IN[i]); ··· 580 581 for (i = 0;i <= 2;++i) { 582 /* NOTE: temp[] is s8 and we assume 2's complement 583 - * "conversion" in the assignment */ 584 data->temp[i] = 585 adm1026_read_value(client, ADM1026_REG_TEMP[i]); 586 } 587 588 - data->pwm1.pwm = adm1026_read_value(client, 589 ADM1026_REG_PWM); 590 - data->analog_out = adm1026_read_value(client, 591 ADM1026_REG_DAC); 592 /* GPIO16 is MSbit of alarms, move it to gpio */ 593 alarms = adm1026_read_value(client, ADM1026_REG_STATUS4); 594 - gpio = alarms & 0x80 ? 0x0100 : 0; /* GPIO16 */ 595 alarms &= 0x7f; 596 alarms <<= 8; 597 alarms |= adm1026_read_value(client, ADM1026_REG_STATUS3); ··· 602 data->alarms = alarms; 603 604 /* Read the GPIO values */ 605 - gpio |= adm1026_read_value(client, 606 ADM1026_REG_GPIO_STATUS_8_15); 607 gpio <<= 8; 608 - gpio |= adm1026_read_value(client, 609 ADM1026_REG_GPIO_STATUS_0_7); 610 data->gpio = gpio; 611 612 data->last_reading = jiffies; 613 - }; /* last_reading */ 614 615 if (!data->valid || 616 time_after(jiffies, data->last_config + ADM1026_CONFIG_INTERVAL)) { 617 /* Things that don't change often */ 618 dev_dbg(&client->dev, "Reading config values\n"); 619 for (i = 0;i <= 16;++i) { 620 - data->in_min[i] = adm1026_read_value(client, 621 ADM1026_REG_IN_MIN[i]); 622 - data->in_max[i] = adm1026_read_value(client, 623 ADM1026_REG_IN_MAX[i]); 624 } 625 ··· 627 | (adm1026_read_value(client, ADM1026_REG_FAN_DIV_4_7) 628 << 8); 629 for (i = 0;i <= 7;++i) { 630 - data->fan_min[i] = adm1026_read_value(client, 631 ADM1026_REG_FAN_MIN(i)); 632 data->fan_div[i] = DIV_FROM_REG(value & 0x03); 633 value >>= 2; 634 } 635 636 for (i = 0; i <= 2; ++i) { 637 - /* NOTE: temp_xxx[] are s8 and we assume 2's 638 * complement "conversion" in the assignment 639 */ 640 - data->temp_min[i] = adm1026_read_value(client, 641 ADM1026_REG_TEMP_MIN[i]); 642 - data->temp_max[i] = adm1026_read_value(client, 643 ADM1026_REG_TEMP_MAX[i]); 644 - data->temp_tmin[i] = adm1026_read_value(client, 645 ADM1026_REG_TEMP_TMIN[i]); 646 - data->temp_crit[i] = adm1026_read_value(client, 647 ADM1026_REG_TEMP_THERM[i]); 648 - data->temp_offset[i] = adm1026_read_value(client, 649 ADM1026_REG_TEMP_OFFSET[i]); 650 } 651 652 /* 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; 656 alarms |= adm1026_read_value(client, ADM1026_REG_MASK3); 657 alarms <<= 8; 658 alarms |= adm1026_read_value(client, ADM1026_REG_MASK2); ··· 661 data->alarm_mask = alarms; 662 663 /* Read the GPIO values */ 664 - gpio |= adm1026_read_value(client, 665 ADM1026_REG_GPIO_MASK_8_15); 666 gpio <<= 8; 667 gpio |= adm1026_read_value(client, ADM1026_REG_GPIO_MASK_0_7); 668 data->gpio_mask = gpio; 669 670 /* Read various values from CONFIG1 */ 671 - data->config1 = adm1026_read_value(client, 672 ADM1026_REG_CONFIG1); 673 if (data->config1 & CFG1_PWM_AFC) { 674 data->pwm1.enable = 2; 675 - data->pwm1.auto_pwm_min = 676 PWM_MIN_FROM_REG(data->pwm1.pwm); 677 } 678 /* Read the GPIO config */ 679 - data->config2 = adm1026_read_value(client, 680 ADM1026_REG_CONFIG2); 681 - data->config3 = adm1026_read_value(client, 682 ADM1026_REG_CONFIG3); 683 data->gpio_config[16] = (data->config3 >> 6) & 0x03; 684 ··· 693 } 694 695 data->last_config = jiffies; 696 - }; /* last_config */ 697 698 dev_dbg(&client->dev, "Setting VID from GPIO11-15.\n"); 699 data->vid = (data->gpio >> 11) & 0x1f; ··· 708 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 709 int nr = sensor_attr->index; 710 struct adm1026_data *data = adm1026_update_device(dev); 711 - return sprintf(buf,"%d\n", INS_FROM_REG(nr, data->in[nr])); 712 } 713 static ssize_t show_in_min(struct device *dev, struct device_attribute *attr, 714 char *buf) 715 { 716 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 717 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 } 721 static ssize_t set_in_min(struct device *dev, struct device_attribute *attr, 722 const char *buf, size_t count) ··· 731 data->in_min[nr] = INS_TO_REG(nr, val); 732 adm1026_write_value(client, ADM1026_REG_IN_MIN[nr], data->in_min[nr]); 733 mutex_unlock(&data->update_lock); 734 - return count; 735 } 736 static ssize_t show_in_max(struct device *dev, struct device_attribute *attr, 737 char *buf) ··· 739 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 740 int nr = sensor_attr->index; 741 struct adm1026_data *data = adm1026_update_device(dev); 742 - return sprintf(buf,"%d\n", INS_FROM_REG(nr, data->in_max[nr])); 743 } 744 static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, 745 const char *buf, size_t count) ··· 786 static ssize_t show_in16(struct device *dev, struct device_attribute *attr, char *buf) 787 { 788 struct adm1026_data *data = adm1026_update_device(dev); 789 - return sprintf(buf,"%d\n", INS_FROM_REG(16, data->in[16]) - 790 NEG12_OFFSET); 791 } 792 static ssize_t show_in16_min(struct device *dev, struct device_attribute *attr, char *buf) 793 { 794 - struct adm1026_data *data = adm1026_update_device(dev); 795 - return sprintf(buf,"%d\n", INS_FROM_REG(16, data->in_min[16]) 796 - NEG12_OFFSET); 797 } 798 static ssize_t set_in16_min(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) ··· 805 data->in_min[16] = INS_TO_REG(16, val + NEG12_OFFSET); 806 adm1026_write_value(client, ADM1026_REG_IN_MIN[16], data->in_min[16]); 807 mutex_unlock(&data->update_lock); 808 - return count; 809 } 810 static ssize_t show_in16_max(struct device *dev, struct device_attribute *attr, char *buf) 811 { 812 struct adm1026_data *data = adm1026_update_device(dev); 813 - return sprintf(buf,"%d\n", INS_FROM_REG(16, data->in_max[16]) 814 - NEG12_OFFSET); 815 } 816 static ssize_t set_in16_max(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) ··· 841 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 842 int nr = sensor_attr->index; 843 struct adm1026_data *data = adm1026_update_device(dev); 844 - return sprintf(buf,"%d\n", FAN_FROM_REG(data->fan[nr], 845 data->fan_div[nr])); 846 } 847 static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr, ··· 850 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 851 int nr = sensor_attr->index; 852 struct adm1026_data *data = adm1026_update_device(dev); 853 - return sprintf(buf,"%d\n", FAN_FROM_REG(data->fan_min[nr], 854 data->fan_div[nr])); 855 } 856 static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, ··· 870 return count; 871 } 872 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, \ 877 show_fan_min, set_fan_min, offset - 1); 878 879 fan_offset(1); ··· 890 { 891 struct i2c_client *client = to_i2c_client(dev); 892 struct adm1026_data *data = i2c_get_clientdata(client); 893 - int new_min; 894 - int new_div = data->fan_div[fan]; 895 896 /* 0 and 0xff are special. Don't adjust them */ 897 if (data->fan_min[fan] == 0 || data->fan_min[fan] == 0xff) { ··· 911 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 912 int nr = sensor_attr->index; 913 struct adm1026_data *data = adm1026_update_device(dev); 914 - return sprintf(buf,"%d\n", data->fan_div[nr]); 915 } 916 static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 917 const char *buf, size_t count) ··· 920 int nr = sensor_attr->index; 921 struct i2c_client *client = to_i2c_client(dev); 922 struct adm1026_data *data = i2c_get_clientdata(client); 923 - int val,orig_div,new_div,shift; 924 925 val = simple_strtol(buf, NULL, 10); 926 - new_div = DIV_TO_REG(val); 927 if (new_div == 0) { 928 return -EINVAL; 929 } ··· 944 } 945 946 if (data->fan_div[nr] != orig_div) { 947 - fixup_fan_min(dev,nr,orig_div); 948 } 949 mutex_unlock(&data->update_lock); 950 return count; 951 } 952 953 - #define fan_offset_div(offset) \ 954 - static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \ 955 show_fan_div, set_fan_div, offset - 1); 956 957 fan_offset_div(1); ··· 970 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 971 int nr = sensor_attr->index; 972 struct adm1026_data *data = adm1026_update_device(dev); 973 - return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp[nr])); 974 } 975 static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr, 976 char *buf) ··· 978 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 979 int nr = sensor_attr->index; 980 struct adm1026_data *data = adm1026_update_device(dev); 981 - return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_min[nr])); 982 } 983 static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr, 984 const char *buf, size_t count) ··· 1002 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1003 int nr = sensor_attr->index; 1004 struct adm1026_data *data = adm1026_update_device(dev); 1005 - return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_max[nr])); 1006 } 1007 static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, 1008 const char *buf, size_t count) ··· 1022 } 1023 1024 #define temp_reg(offset) \ 1025 - static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp, \ 1026 NULL, offset - 1); \ 1027 static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \ 1028 show_temp_min, set_temp_min, offset - 1); \ ··· 1040 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1041 int nr = sensor_attr->index; 1042 struct adm1026_data *data = adm1026_update_device(dev); 1043 - return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_offset[nr])); 1044 } 1045 static ssize_t set_temp_offset(struct device *dev, 1046 struct device_attribute *attr, const char *buf, ··· 1074 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1075 int nr = sensor_attr->index; 1076 struct adm1026_data *data = adm1026_update_device(dev); 1077 - return sprintf(buf,"%d\n", TEMP_FROM_REG( 1078 ADM1026_FAN_ACTIVATION_TEMP_HYST + data->temp_tmin[nr])); 1079 } 1080 static ssize_t show_temp_auto_point2_temp(struct device *dev, ··· 1083 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1084 int nr = sensor_attr->index; 1085 struct adm1026_data *data = adm1026_update_device(dev); 1086 - return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_tmin[nr] + 1087 ADM1026_FAN_CONTROL_TEMP_RANGE)); 1088 } 1089 static ssize_t show_temp_auto_point1_temp(struct device *dev, ··· 1092 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1093 int nr = sensor_attr->index; 1094 struct adm1026_data *data = adm1026_update_device(dev); 1095 - return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_tmin[nr])); 1096 } 1097 static ssize_t set_temp_auto_point1_temp(struct device *dev, 1098 struct device_attribute *attr, const char *buf, size_t count) ··· 1111 return count; 1112 } 1113 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, \ 1121 show_temp_auto_point2_temp, NULL, offset - 1); 1122 1123 temp_auto_point(1); ··· 1128 struct device_attribute *attr, char *buf) 1129 { 1130 struct adm1026_data *data = adm1026_update_device(dev); 1131 - return sprintf(buf,"%d\n", (data->config1 & CFG1_THERM_HOT) >> 4); 1132 } 1133 static ssize_t set_temp_crit_enable(struct device *dev, 1134 struct device_attribute *attr, const char *buf, size_t count) ··· 1140 if ((val == 1) || (val==0)) { 1141 mutex_lock(&data->update_lock); 1142 data->config1 = (data->config1 & ~CFG1_THERM_HOT) | (val << 4); 1143 - adm1026_write_value(client, ADM1026_REG_CONFIG1, 1144 data->config1); 1145 mutex_unlock(&data->update_lock); 1146 } ··· 1161 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1162 int nr = sensor_attr->index; 1163 struct adm1026_data *data = adm1026_update_device(dev); 1164 - return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_crit[nr])); 1165 } 1166 static ssize_t set_temp_crit(struct device *dev, struct device_attribute *attr, 1167 const char *buf, size_t count) ··· 1191 static ssize_t show_analog_out_reg(struct device *dev, struct device_attribute *attr, char *buf) 1192 { 1193 struct adm1026_data *data = adm1026_update_device(dev); 1194 - return sprintf(buf,"%d\n", DAC_FROM_REG(data->analog_out)); 1195 } 1196 static ssize_t set_analog_out_reg(struct device *dev, struct device_attribute *attr, const char *buf, 1197 size_t count) ··· 1207 return count; 1208 } 1209 1210 - static DEVICE_ATTR(analog_out, S_IRUGO | S_IWUSR, show_analog_out_reg, 1211 set_analog_out_reg); 1212 1213 static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr, char *buf) 1214 { 1215 struct adm1026_data *data = adm1026_update_device(dev); 1216 - return sprintf(buf,"%d\n", vid_from_reg(data->vid & 0x3f, data->vrm)); 1217 } 1218 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL); 1219 1220 static ssize_t show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf) 1221 { 1222 struct adm1026_data *data = dev_get_drvdata(dev); 1223 - return sprintf(buf,"%d\n", data->vrm); 1224 } 1225 static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, 1226 size_t count) 1227 { 1228 - struct i2c_client *client = to_i2c_client(dev); 1229 - struct adm1026_data *data = i2c_get_clientdata(client); 1230 1231 data->vrm = simple_strtol(buf, NULL, 10); 1232 return count; ··· 1236 static ssize_t show_alarms_reg(struct device *dev, struct device_attribute *attr, char *buf) 1237 { 1238 struct adm1026_data *data = adm1026_update_device(dev); 1239 - return sprintf(buf, "%ld\n", (long) (data->alarms)); 1240 } 1241 1242 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL); 1243 1244 static ssize_t show_alarm_mask(struct device *dev, struct device_attribute *attr, char *buf) 1245 { 1246 struct adm1026_data *data = adm1026_update_device(dev); 1247 - return sprintf(buf,"%ld\n", data->alarm_mask); 1248 } 1249 static ssize_t set_alarm_mask(struct device *dev, struct device_attribute *attr, const char *buf, 1250 size_t count) ··· 1317 static ssize_t show_gpio(struct device *dev, struct device_attribute *attr, char *buf) 1318 { 1319 struct adm1026_data *data = adm1026_update_device(dev); 1320 - return sprintf(buf,"%ld\n", data->gpio); 1321 } 1322 static ssize_t set_gpio(struct device *dev, struct device_attribute *attr, const char *buf, 1323 size_t count) ··· 1325 struct i2c_client *client = to_i2c_client(dev); 1326 struct adm1026_data *data = i2c_get_clientdata(client); 1327 int val = simple_strtol(buf, NULL, 10); 1328 - long gpio; 1329 1330 mutex_lock(&data->update_lock); 1331 data->gpio = val & 0x1ffff; 1332 gpio = data->gpio; 1333 - adm1026_write_value(client, ADM1026_REG_GPIO_STATUS_0_7,gpio & 0xff); 1334 gpio >>= 8; 1335 - adm1026_write_value(client, ADM1026_REG_GPIO_STATUS_8_15,gpio & 0xff); 1336 gpio = ((gpio >> 1) & 0x80) | (data->alarms >> 24 & 0x7f); 1337 - adm1026_write_value(client, ADM1026_REG_STATUS4,gpio & 0xff); 1338 mutex_unlock(&data->update_lock); 1339 return count; 1340 } ··· 1345 static ssize_t show_gpio_mask(struct device *dev, struct device_attribute *attr, char *buf) 1346 { 1347 struct adm1026_data *data = adm1026_update_device(dev); 1348 - return sprintf(buf,"%ld\n", data->gpio_mask); 1349 } 1350 static ssize_t set_gpio_mask(struct device *dev, struct device_attribute *attr, const char *buf, 1351 size_t count) ··· 1353 struct i2c_client *client = to_i2c_client(dev); 1354 struct adm1026_data *data = i2c_get_clientdata(client); 1355 int val = simple_strtol(buf, NULL, 10); 1356 - long mask; 1357 1358 mutex_lock(&data->update_lock); 1359 data->gpio_mask = val & 0x1ffff; 1360 mask = data->gpio_mask; 1361 - adm1026_write_value(client, ADM1026_REG_GPIO_MASK_0_7,mask & 0xff); 1362 mask >>= 8; 1363 - adm1026_write_value(client, ADM1026_REG_GPIO_MASK_8_15,mask & 0xff); 1364 mask = ((mask >> 1) & 0x80) | (data->alarm_mask >> 24 & 0x7f); 1365 - adm1026_write_value(client, ADM1026_REG_MASK1,mask & 0xff); 1366 mutex_unlock(&data->update_lock); 1367 return count; 1368 } ··· 1372 static ssize_t show_pwm_reg(struct device *dev, struct device_attribute *attr, char *buf) 1373 { 1374 struct adm1026_data *data = adm1026_update_device(dev); 1375 - return sprintf(buf,"%d\n", PWM_FROM_REG(data->pwm1.pwm)); 1376 } 1377 static ssize_t set_pwm_reg(struct device *dev, struct device_attribute *attr, const char *buf, 1378 size_t count) ··· 1393 static ssize_t show_auto_pwm_min(struct device *dev, struct device_attribute *attr, char *buf) 1394 { 1395 struct adm1026_data *data = adm1026_update_device(dev); 1396 - return sprintf(buf,"%d\n", data->pwm1.auto_pwm_min); 1397 } 1398 static ssize_t set_auto_pwm_min(struct device *dev, struct device_attribute *attr, const char *buf, 1399 size_t count) ··· 1403 int val = simple_strtol(buf, NULL, 10); 1404 1405 mutex_lock(&data->update_lock); 1406 - data->pwm1.auto_pwm_min = SENSORS_LIMIT(val,0,255); 1407 if (data->pwm1.enable == 2) { /* apply immediately */ 1408 data->pwm1.pwm = PWM_TO_REG((data->pwm1.pwm & 0x0f) | 1409 - PWM_MIN_TO_REG(data->pwm1.auto_pwm_min)); 1410 adm1026_write_value(client, ADM1026_REG_PWM, data->pwm1.pwm); 1411 } 1412 mutex_unlock(&data->update_lock); ··· 1414 } 1415 static ssize_t show_auto_pwm_max(struct device *dev, struct device_attribute *attr, char *buf) 1416 { 1417 - return sprintf(buf,"%d\n", ADM1026_PWM_MAX); 1418 } 1419 static ssize_t show_pwm_enable(struct device *dev, struct device_attribute *attr, char *buf) 1420 { 1421 struct adm1026_data *data = adm1026_update_device(dev); 1422 - return sprintf(buf,"%d\n", data->pwm1.enable); 1423 } 1424 static ssize_t set_pwm_enable(struct device *dev, struct device_attribute *attr, const char *buf, 1425 size_t count) ··· 1427 struct i2c_client *client = to_i2c_client(dev); 1428 struct adm1026_data *data = i2c_get_clientdata(client); 1429 int val = simple_strtol(buf, NULL, 10); 1430 - int old_enable; 1431 1432 if ((val >= 0) && (val < 3)) { 1433 mutex_lock(&data->update_lock); ··· 1437 | ((val == 2) ? CFG1_PWM_AFC : 0); 1438 adm1026_write_value(client, ADM1026_REG_CONFIG1, 1439 data->config1); 1440 - if (val == 2) { /* apply pwm1_auto_pwm_min to pwm1 */ 1441 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, 1444 data->pwm1.pwm); 1445 } else if (!((old_enable == 1) && (val == 1))) { 1446 /* set pwm to safe value */ 1447 data->pwm1.pwm = 255; 1448 - adm1026_write_value(client, ADM1026_REG_PWM, 1449 data->pwm1.pwm); 1450 } 1451 mutex_unlock(&data->update_lock); ··· 1454 } 1455 1456 /* 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, 1461 set_pwm_enable); 1462 - static DEVICE_ATTR(pwm2_enable, S_IRUGO | S_IWUSR, show_pwm_enable, 1463 set_pwm_enable); 1464 - static DEVICE_ATTR(pwm3_enable, S_IRUGO | S_IWUSR, show_pwm_enable, 1465 set_pwm_enable); 1466 - static DEVICE_ATTR(temp1_auto_point1_pwm, S_IRUGO | S_IWUSR, 1467 show_auto_pwm_min, set_auto_pwm_min); 1468 - static DEVICE_ATTR(temp2_auto_point1_pwm, S_IRUGO | S_IWUSR, 1469 show_auto_pwm_min, set_auto_pwm_min); 1470 - static DEVICE_ATTR(temp3_auto_point1_pwm, S_IRUGO | S_IWUSR, 1471 show_auto_pwm_min, set_auto_pwm_min); 1472 1473 static DEVICE_ATTR(temp1_auto_point2_pwm, S_IRUGO, show_auto_pwm_max, NULL); ··· 1478 &sensor_dev_attr_in0_input.dev_attr.attr, 1479 &sensor_dev_attr_in0_max.dev_attr.attr, 1480 &sensor_dev_attr_in0_min.dev_attr.attr, 1481 &sensor_dev_attr_in1_input.dev_attr.attr, 1482 &sensor_dev_attr_in1_max.dev_attr.attr, 1483 &sensor_dev_attr_in1_min.dev_attr.attr, 1484 &sensor_dev_attr_in2_input.dev_attr.attr, 1485 &sensor_dev_attr_in2_max.dev_attr.attr, 1486 &sensor_dev_attr_in2_min.dev_attr.attr, 1487 &sensor_dev_attr_in3_input.dev_attr.attr, 1488 &sensor_dev_attr_in3_max.dev_attr.attr, 1489 &sensor_dev_attr_in3_min.dev_attr.attr, 1490 &sensor_dev_attr_in4_input.dev_attr.attr, 1491 &sensor_dev_attr_in4_max.dev_attr.attr, 1492 &sensor_dev_attr_in4_min.dev_attr.attr, 1493 &sensor_dev_attr_in5_input.dev_attr.attr, 1494 &sensor_dev_attr_in5_max.dev_attr.attr, 1495 &sensor_dev_attr_in5_min.dev_attr.attr, 1496 &sensor_dev_attr_in6_input.dev_attr.attr, 1497 &sensor_dev_attr_in6_max.dev_attr.attr, 1498 &sensor_dev_attr_in6_min.dev_attr.attr, 1499 &sensor_dev_attr_in7_input.dev_attr.attr, 1500 &sensor_dev_attr_in7_max.dev_attr.attr, 1501 &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, 1508 &sensor_dev_attr_in10_input.dev_attr.attr, 1509 &sensor_dev_attr_in10_max.dev_attr.attr, 1510 &sensor_dev_attr_in10_min.dev_attr.attr, 1511 &sensor_dev_attr_in11_input.dev_attr.attr, 1512 &sensor_dev_attr_in11_max.dev_attr.attr, 1513 &sensor_dev_attr_in11_min.dev_attr.attr, 1514 &sensor_dev_attr_in12_input.dev_attr.attr, 1515 &sensor_dev_attr_in12_max.dev_attr.attr, 1516 &sensor_dev_attr_in12_min.dev_attr.attr, 1517 &sensor_dev_attr_in13_input.dev_attr.attr, 1518 &sensor_dev_attr_in13_max.dev_attr.attr, 1519 &sensor_dev_attr_in13_min.dev_attr.attr, 1520 &sensor_dev_attr_in14_input.dev_attr.attr, 1521 &sensor_dev_attr_in14_max.dev_attr.attr, 1522 &sensor_dev_attr_in14_min.dev_attr.attr, 1523 &sensor_dev_attr_in15_input.dev_attr.attr, 1524 &sensor_dev_attr_in15_max.dev_attr.attr, 1525 &sensor_dev_attr_in15_min.dev_attr.attr, 1526 &sensor_dev_attr_in16_input.dev_attr.attr, 1527 &sensor_dev_attr_in16_max.dev_attr.attr, 1528 &sensor_dev_attr_in16_min.dev_attr.attr, 1529 &sensor_dev_attr_fan1_input.dev_attr.attr, 1530 &sensor_dev_attr_fan1_div.dev_attr.attr, 1531 &sensor_dev_attr_fan1_min.dev_attr.attr, 1532 &sensor_dev_attr_fan2_input.dev_attr.attr, 1533 &sensor_dev_attr_fan2_div.dev_attr.attr, 1534 &sensor_dev_attr_fan2_min.dev_attr.attr, 1535 &sensor_dev_attr_fan3_input.dev_attr.attr, 1536 &sensor_dev_attr_fan3_div.dev_attr.attr, 1537 &sensor_dev_attr_fan3_min.dev_attr.attr, 1538 &sensor_dev_attr_fan4_input.dev_attr.attr, 1539 &sensor_dev_attr_fan4_div.dev_attr.attr, 1540 &sensor_dev_attr_fan4_min.dev_attr.attr, 1541 &sensor_dev_attr_fan5_input.dev_attr.attr, 1542 &sensor_dev_attr_fan5_div.dev_attr.attr, 1543 &sensor_dev_attr_fan5_min.dev_attr.attr, 1544 &sensor_dev_attr_fan6_input.dev_attr.attr, 1545 &sensor_dev_attr_fan6_div.dev_attr.attr, 1546 &sensor_dev_attr_fan6_min.dev_attr.attr, 1547 &sensor_dev_attr_fan7_input.dev_attr.attr, 1548 &sensor_dev_attr_fan7_div.dev_attr.attr, 1549 &sensor_dev_attr_fan7_min.dev_attr.attr, 1550 &sensor_dev_attr_fan8_input.dev_attr.attr, 1551 &sensor_dev_attr_fan8_div.dev_attr.attr, 1552 &sensor_dev_attr_fan8_min.dev_attr.attr, 1553 &sensor_dev_attr_temp1_input.dev_attr.attr, 1554 &sensor_dev_attr_temp1_max.dev_attr.attr, 1555 &sensor_dev_attr_temp1_min.dev_attr.attr, 1556 &sensor_dev_attr_temp2_input.dev_attr.attr, 1557 &sensor_dev_attr_temp2_max.dev_attr.attr, 1558 &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, 1562 &sensor_dev_attr_temp1_offset.dev_attr.attr, 1563 &sensor_dev_attr_temp2_offset.dev_attr.attr, 1564 - &sensor_dev_attr_temp3_offset.dev_attr.attr, 1565 &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr, 1566 &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr, 1567 - &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr, 1568 &sensor_dev_attr_temp1_auto_point1_temp_hyst.dev_attr.attr, 1569 &sensor_dev_attr_temp2_auto_point1_temp_hyst.dev_attr.attr, 1570 - &sensor_dev_attr_temp3_auto_point1_temp_hyst.dev_attr.attr, 1571 &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr, 1572 &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr, 1573 - &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr, 1574 &sensor_dev_attr_temp1_crit.dev_attr.attr, 1575 &sensor_dev_attr_temp2_crit.dev_attr.attr, 1576 - &sensor_dev_attr_temp3_crit.dev_attr.attr, 1577 &dev_attr_temp1_crit_enable.attr, 1578 &dev_attr_temp2_crit_enable.attr, 1579 - &dev_attr_temp3_crit_enable.attr, 1580 &dev_attr_cpu0_vid.attr, 1581 &dev_attr_vrm.attr, 1582 &dev_attr_alarms.attr, ··· 1601 &dev_attr_pwm3_enable.attr, 1602 &dev_attr_temp1_auto_point1_pwm.attr, 1603 &dev_attr_temp2_auto_point1_pwm.attr, 1604 - &dev_attr_temp3_auto_point1_pwm.attr, 1605 &dev_attr_temp1_auto_point2_pwm.attr, 1606 &dev_attr_temp2_auto_point2_pwm.attr, 1607 - &dev_attr_temp3_auto_point2_pwm.attr, 1608 &dev_attr_analog_out.attr, 1609 NULL 1610 }; ··· 1611 .attrs = adm1026_attributes, 1612 }; 1613 1614 static int adm1026_detect(struct i2c_adapter *adapter, int address, 1615 int kind) 1616 { 1617 int company, verstep; 1618 - struct i2c_client *new_client; 1619 struct adm1026_data *data; 1620 int err = 0; 1621 const char *type_name = ""; ··· 1668 goto exit; 1669 } 1670 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; 1677 1678 /* Now, we do the remaining detection. */ 1679 1680 - company = adm1026_read_value(new_client, ADM1026_REG_COMPANY); 1681 - verstep = adm1026_read_value(new_client, ADM1026_REG_VERSTEP); 1682 1683 - dev_dbg(&new_client->dev, "Detecting device at %d,0x%02x with" 1684 " COMPANY: 0x%02x and VERSTEP: 0x%02x\n", 1685 - i2c_adapter_id(new_client->adapter), new_client->addr, 1686 company, verstep); 1687 1688 /* If auto-detecting, Determine the chip type. */ 1689 if (kind <= 0) { 1690 - dev_dbg(&new_client->dev, "Autodetecting device at %d,0x%02x " 1691 "...\n", i2c_adapter_id(adapter), address); 1692 if (company == ADM1026_COMPANY_ANALOG_DEV 1693 && verstep == ADM1026_VERSTEP_ADM1026) { ··· 1702 verstep); 1703 kind = any_chip; 1704 } else { 1705 - dev_dbg(&new_client->dev, ": Autodetection " 1706 "failed\n"); 1707 /* Not an ADM1026 ... */ 1708 - if (kind == 0) { /* User used force=x,y */ 1709 dev_err(&adapter->dev, "Generic ADM1026 not " 1710 "found at %d,0x%02x. Try " 1711 "force_adm1026.\n", 1712 i2c_adapter_id(adapter), address); 1713 } 1714 - err = 0; 1715 goto exitfree; 1716 } 1717 } ··· 1729 err = -EFAULT; 1730 goto exitfree; 1731 } 1732 - strlcpy(new_client->name, type_name, I2C_NAME_SIZE); 1733 1734 /* Fill in the remaining client fields */ 1735 - data->type = kind; 1736 - data->valid = 0; 1737 mutex_init(&data->update_lock); 1738 1739 /* Tell the I2C layer a new client has arrived */ 1740 - if ((err = i2c_attach_client(new_client))) 1741 goto exitfree; 1742 1743 /* Set the VRM version */ 1744 data->vrm = vid_which_vrm(); 1745 1746 /* Initialize the ADM1026 chip */ 1747 - adm1026_init_client(new_client); 1748 1749 /* Register sysfs hooks */ 1750 - if ((err = sysfs_create_group(&new_client->dev.kobj, &adm1026_group))) 1751 goto exitdetach; 1752 1753 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 1754 if (IS_ERR(data->hwmon_dev)) { 1755 err = PTR_ERR(data->hwmon_dev); 1756 goto exitremove; ··· 1766 1767 /* Error out and cleanup code */ 1768 exitremove: 1769 - sysfs_remove_group(&new_client->dev.kobj, &adm1026_group); 1770 exitdetach: 1771 - i2c_detach_client(new_client); 1772 exitfree: 1773 kfree(data); 1774 exit: ··· 1784 struct adm1026_data *data = i2c_get_clientdata(client); 1785 hwmon_device_unregister(data->hwmon_dev); 1786 sysfs_remove_group(&client->dev.kobj, &adm1026_group); 1787 i2c_detach_client(client); 1788 kfree(data); 1789 return 0; ··· 1798 return i2c_add_driver(&adm1026_driver); 1799 } 1800 1801 - static void __exit sm_adm1026_exit(void) 1802 { 1803 i2c_del_driver(&adm1026_driver); 1804 } 1805 1806 MODULE_LICENSE("GPL"); 1807 MODULE_AUTHOR("Philip Pokorny <ppokorny@penguincomputing.com>, " 1808 - "Justin Thiessen <jthiessen@penguincomputing.com>"); 1809 MODULE_DESCRIPTION("ADM1026 driver"); 1810 1811 module_init(sm_adm1026_init);
··· 40 /* Insmod parameters */ 41 I2C_CLIENT_INSMOD_1(adm1026); 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 }; 45 static int gpio_output[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, 46 -1, -1, -1, -1, -1, -1, -1, -1 }; 47 static int gpio_inverted[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, ··· 49 static int gpio_normal[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, 50 -1, -1, -1, -1, -1, -1, -1, -1 }; 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 " 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 " 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 " 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"); 65 66 /* Many ADM1026 constants specified below */ 67 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 + 79 + #define ADM1026_REG_CONFIG2 0x01 80 /* CONFIG2 controls FAN0/GPIO0 through FAN7/GPIO7 */ 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 95 96 /* There are 10 general analog inputs and 7 dedicated inputs 97 * They are: ··· 129 static u16 ADM1026_REG_TEMP_THERM[] = { 0x0d, 0x0e, 0x0f }; 130 static u16 ADM1026_REG_TEMP_OFFSET[] = { 0x1e, 0x6e, 0x6f }; 131 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 136 137 + #define ADM1026_REG_DAC 0x04 138 + #define ADM1026_REG_PWM 0x05 139 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 144 /* CFG_16 in REG_CFG3 */ 145 + #define ADM1026_REG_GPIO_STATUS_0_7 0x24 146 + #define ADM1026_REG_GPIO_STATUS_8_15 0x25 147 /* STATUS_16 in REG_STATUS4 */ 148 + #define ADM1026_REG_GPIO_MASK_0_7 0x1c 149 + #define ADM1026_REG_GPIO_MASK_8_15 0x1d 150 /* MASK_16 in REG_MASK4 */ 151 152 + #define ADM1026_REG_COMPANY 0x16 153 + #define ADM1026_REG_VERSTEP 0x17 154 /* These are the recognized values for the above regs */ 155 + #define ADM1026_COMPANY_ANALOG_DEV 0x41 156 + #define ADM1026_VERSTEP_GENERIC 0x40 157 + #define ADM1026_VERSTEP_ADM1026 0x44 158 159 + #define ADM1026_REG_MASK1 0x18 160 + #define ADM1026_REG_MASK2 0x19 161 + #define ADM1026_REG_MASK3 0x1a 162 + #define ADM1026_REG_MASK4 0x1b 163 164 + #define ADM1026_REG_STATUS1 0x20 165 + #define ADM1026_REG_STATUS2 0x21 166 + #define ADM1026_REG_STATUS3 0x22 167 + #define ADM1026_REG_STATUS4 0x23 168 169 #define ADM1026_FAN_ACTIVATION_TEMP_HYST -6 170 + #define ADM1026_FAN_CONTROL_TEMP_RANGE 20 171 + #define ADM1026_PWM_MAX 255 172 173 + /* Conversions. Rounding and limit checking is only done on the TO_REG 174 * variants. Note that you should be a bit careful with which arguments 175 * these macros are called: arguments may be evaluated more than once. 176 */ ··· 186 * The values in this table are based on Table II, page 15 of the 187 * datasheet. 188 */ 189 + static int adm1026_scaling[] = { /* .001 Volts */ 190 + 2250, 2250, 2250, 2250, 2250, 2250, 191 + 1875, 1875, 1875, 1875, 3000, 3330, 192 3330, 4995, 2250, 12000, 13875 193 }; 194 #define NEG12_OFFSET 16000 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])) 199 200 /* FAN speed is measured using 22.5kHz clock and counts for 2 pulses 201 * and we assume a 2 pulse-per-rev fan tach signal 202 * 22500 kHz * 60 (sec/min) * 2 (pulse) / 2 (pulse/rev) == 1350000 203 */ 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))) 208 #define DIV_FROM_REG(val) (1<<(val)) 209 + #define DIV_TO_REG(val) ((val) >= 8 ? 3 : (val) >= 4 ? 2 : (val) >= 2 ? 1 : 0) 210 211 /* Temperature is reported in 1 degC increments */ 212 #define TEMP_TO_REG(val) (SENSORS_LIMIT(((val)+((val)<0 ? -500 : 500))/1000,\ 213 + -127, 127)) 214 #define TEMP_FROM_REG(val) ((val) * 1000) 215 #define OFFSET_TO_REG(val) (SENSORS_LIMIT(((val)+((val)<0 ? -500 : 500))/1000,\ 216 + -127, 127)) 217 #define OFFSET_FROM_REG(val) ((val) * 1000) 218 219 + #define PWM_TO_REG(val) (SENSORS_LIMIT(val, 0, 255)) 220 #define PWM_FROM_REG(val) (val) 221 222 #define PWM_MIN_TO_REG(val) ((val) & 0xf0) 223 #define PWM_MIN_FROM_REG(val) (((val) & 0xf0) + ((val) >> 4)) 224 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 227 * example board (Arima HDAMA) it isn't connected to the fans at all. 228 */ 229 + #define DAC_TO_REG(val) (SENSORS_LIMIT(((((val)*255)+500)/2500), 0, 255)) 230 #define DAC_FROM_REG(val) (((val)*2500)/255) 231 232 /* Chip sampling rates 233 * ··· 243 * So, we keep the config data up to date in the cache 244 * when it is written and only sample it once every 5 *minutes* 245 */ 246 + #define ADM1026_DATA_INTERVAL (1 * HZ) 247 + #define ADM1026_CONFIG_INTERVAL (5 * 60 * HZ) 248 249 /* We allow for multiple chips in a single system. 250 * ··· 261 struct adm1026_data { 262 struct i2c_client client; 263 struct device *hwmon_dev; 264 265 struct mutex update_lock; 266 int valid; /* !=0 if following fields are valid */ 267 unsigned long last_reading; /* In jiffies */ 268 unsigned long last_config; /* In jiffies */ 269 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 */ 285 u8 analog_out; /* Register value (DAC) */ 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 */ 294 }; 295 296 static int adm1026_attach_adapter(struct i2c_adapter *adapter); ··· 301 static int adm1026_read_value(struct i2c_client *client, u8 reg); 302 static int adm1026_write_value(struct i2c_client *client, u8 reg, int value); 303 static void adm1026_print_gpio(struct i2c_client *client); 304 + static void adm1026_fixup_gpio(struct i2c_client *client); 305 static struct adm1026_data *adm1026_update_device(struct device *dev); 306 static void adm1026_init_client(struct i2c_client *client); 307 ··· 311 .name = "adm1026", 312 }, 313 .attach_adapter = adm1026_attach_adapter, 314 + .detach_client = adm1026_detach_client, 315 }; 316 317 static int adm1026_attach_adapter(struct i2c_adapter *adapter) ··· 355 int value, i; 356 struct adm1026_data *data = i2c_get_clientdata(client); 357 358 + dev_dbg(&client->dev, "Initializing device\n"); 359 /* Read chip config */ 360 data->config1 = adm1026_read_value(client, ADM1026_REG_CONFIG1); 361 data->config2 = adm1026_read_value(client, ADM1026_REG_CONFIG2); ··· 384 "and temp limits enabled.\n"); 385 } 386 387 if (data->config3 & CFG3_GPIO16_ENABLE) { 388 dev_dbg(&client->dev, "GPIO16 enabled. THERM " 389 "pin disabled.\n"); ··· 426 * configured, we don't want to mess with them. 427 * If they weren't, the default is 100% PWM, no 428 * control and will suffice until 'sensors -s' 429 + * can be run by the user. We DO set the default 430 * value for pwm1.auto_pwm_min to its maximum 431 * so that enabling automatic pwm fan control 432 + * without first setting a value for pwm1.auto_pwm_min 433 * will not result in potentially dangerous fan speed decrease. 434 */ 435 data->pwm1.auto_pwm_min=255; ··· 453 static void adm1026_print_gpio(struct i2c_client *client) 454 { 455 struct adm1026_data *data = i2c_get_clientdata(client); 456 + int i; 457 458 dev_dbg(&client->dev, "GPIO config is:"); 459 for (i = 0;i <= 7;++i) { ··· 477 data->gpio_config[16] & 0x02 ? "" : "!", 478 data->gpio_config[16] & 0x01 ? "OUT" : "IN"); 479 } else { 480 + /* GPIO16 is THERM */ 481 dev_dbg(&client->dev, "\tTHERM\n"); 482 } 483 } ··· 485 static void adm1026_fixup_gpio(struct i2c_client *client) 486 { 487 struct adm1026_data *data = i2c_get_clientdata(client); 488 + int i; 489 + int value; 490 491 /* Make the changes requested. */ 492 /* We may need to unlock/stop monitoring or soft-reset the ··· 516 } 517 } 518 519 + /* Inverted */ 520 for (i = 0;i <= 16;++i) { 521 if (gpio_inverted[i] >= 0 && gpio_inverted[i] <= 16) { 522 data->gpio_config[gpio_inverted[i]] &= ~ 0x02; 523 } 524 } 525 526 + /* Normal overrides inverted */ 527 for (i = 0;i <= 16;++i) { 528 if (gpio_normal[i] >= 0 && gpio_normal[i] <= 16) { 529 data->gpio_config[gpio_normal[i]] |= 0x02; ··· 569 if (!data->valid 570 || time_after(jiffies, data->last_reading + ADM1026_DATA_INTERVAL)) { 571 /* Things that change quickly */ 572 + dev_dbg(&client->dev, "Reading sensor values\n"); 573 for (i = 0;i <= 16;++i) { 574 data->in[i] = 575 adm1026_read_value(client, ADM1026_REG_IN[i]); ··· 582 583 for (i = 0;i <= 2;++i) { 584 /* NOTE: temp[] is s8 and we assume 2's complement 585 + * "conversion" in the assignment */ 586 data->temp[i] = 587 adm1026_read_value(client, ADM1026_REG_TEMP[i]); 588 } 589 590 + data->pwm1.pwm = adm1026_read_value(client, 591 ADM1026_REG_PWM); 592 + data->analog_out = adm1026_read_value(client, 593 ADM1026_REG_DAC); 594 /* GPIO16 is MSbit of alarms, move it to gpio */ 595 alarms = adm1026_read_value(client, ADM1026_REG_STATUS4); 596 + gpio = alarms & 0x80 ? 0x0100 : 0; /* GPIO16 */ 597 alarms &= 0x7f; 598 alarms <<= 8; 599 alarms |= adm1026_read_value(client, ADM1026_REG_STATUS3); ··· 604 data->alarms = alarms; 605 606 /* Read the GPIO values */ 607 + gpio |= adm1026_read_value(client, 608 ADM1026_REG_GPIO_STATUS_8_15); 609 gpio <<= 8; 610 + gpio |= adm1026_read_value(client, 611 ADM1026_REG_GPIO_STATUS_0_7); 612 data->gpio = gpio; 613 614 data->last_reading = jiffies; 615 + }; /* last_reading */ 616 617 if (!data->valid || 618 time_after(jiffies, data->last_config + ADM1026_CONFIG_INTERVAL)) { 619 /* Things that don't change often */ 620 dev_dbg(&client->dev, "Reading config values\n"); 621 for (i = 0;i <= 16;++i) { 622 + data->in_min[i] = adm1026_read_value(client, 623 ADM1026_REG_IN_MIN[i]); 624 + data->in_max[i] = adm1026_read_value(client, 625 ADM1026_REG_IN_MAX[i]); 626 } 627 ··· 629 | (adm1026_read_value(client, ADM1026_REG_FAN_DIV_4_7) 630 << 8); 631 for (i = 0;i <= 7;++i) { 632 + data->fan_min[i] = adm1026_read_value(client, 633 ADM1026_REG_FAN_MIN(i)); 634 data->fan_div[i] = DIV_FROM_REG(value & 0x03); 635 value >>= 2; 636 } 637 638 for (i = 0; i <= 2; ++i) { 639 + /* NOTE: temp_xxx[] are s8 and we assume 2's 640 * complement "conversion" in the assignment 641 */ 642 + data->temp_min[i] = adm1026_read_value(client, 643 ADM1026_REG_TEMP_MIN[i]); 644 + data->temp_max[i] = adm1026_read_value(client, 645 ADM1026_REG_TEMP_MAX[i]); 646 + data->temp_tmin[i] = adm1026_read_value(client, 647 ADM1026_REG_TEMP_TMIN[i]); 648 + data->temp_crit[i] = adm1026_read_value(client, 649 ADM1026_REG_TEMP_THERM[i]); 650 + data->temp_offset[i] = adm1026_read_value(client, 651 ADM1026_REG_TEMP_OFFSET[i]); 652 } 653 654 /* Read the STATUS/alarm masks */ 655 + alarms = adm1026_read_value(client, ADM1026_REG_MASK4); 656 + gpio = alarms & 0x80 ? 0x0100 : 0; /* GPIO16 */ 657 + alarms = (alarms & 0x7f) << 8; 658 alarms |= adm1026_read_value(client, ADM1026_REG_MASK3); 659 alarms <<= 8; 660 alarms |= adm1026_read_value(client, ADM1026_REG_MASK2); ··· 663 data->alarm_mask = alarms; 664 665 /* Read the GPIO values */ 666 + gpio |= adm1026_read_value(client, 667 ADM1026_REG_GPIO_MASK_8_15); 668 gpio <<= 8; 669 gpio |= adm1026_read_value(client, ADM1026_REG_GPIO_MASK_0_7); 670 data->gpio_mask = gpio; 671 672 /* Read various values from CONFIG1 */ 673 + data->config1 = adm1026_read_value(client, 674 ADM1026_REG_CONFIG1); 675 if (data->config1 & CFG1_PWM_AFC) { 676 data->pwm1.enable = 2; 677 + data->pwm1.auto_pwm_min = 678 PWM_MIN_FROM_REG(data->pwm1.pwm); 679 } 680 /* Read the GPIO config */ 681 + data->config2 = adm1026_read_value(client, 682 ADM1026_REG_CONFIG2); 683 + data->config3 = adm1026_read_value(client, 684 ADM1026_REG_CONFIG3); 685 data->gpio_config[16] = (data->config3 >> 6) & 0x03; 686 ··· 695 } 696 697 data->last_config = jiffies; 698 + }; /* last_config */ 699 700 dev_dbg(&client->dev, "Setting VID from GPIO11-15.\n"); 701 data->vid = (data->gpio >> 11) & 0x1f; ··· 710 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 711 int nr = sensor_attr->index; 712 struct adm1026_data *data = adm1026_update_device(dev); 713 + return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in[nr])); 714 } 715 static ssize_t show_in_min(struct device *dev, struct device_attribute *attr, 716 char *buf) 717 { 718 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 719 int nr = sensor_attr->index; 720 + struct adm1026_data *data = adm1026_update_device(dev); 721 + return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_min[nr])); 722 } 723 static ssize_t set_in_min(struct device *dev, struct device_attribute *attr, 724 const char *buf, size_t count) ··· 733 data->in_min[nr] = INS_TO_REG(nr, val); 734 adm1026_write_value(client, ADM1026_REG_IN_MIN[nr], data->in_min[nr]); 735 mutex_unlock(&data->update_lock); 736 + return count; 737 } 738 static ssize_t show_in_max(struct device *dev, struct device_attribute *attr, 739 char *buf) ··· 741 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 742 int nr = sensor_attr->index; 743 struct adm1026_data *data = adm1026_update_device(dev); 744 + return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_max[nr])); 745 } 746 static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, 747 const char *buf, size_t count) ··· 788 static ssize_t show_in16(struct device *dev, struct device_attribute *attr, char *buf) 789 { 790 struct adm1026_data *data = adm1026_update_device(dev); 791 + return sprintf(buf, "%d\n", INS_FROM_REG(16, data->in[16]) - 792 NEG12_OFFSET); 793 } 794 static ssize_t show_in16_min(struct device *dev, struct device_attribute *attr, char *buf) 795 { 796 + struct adm1026_data *data = adm1026_update_device(dev); 797 + return sprintf(buf, "%d\n", INS_FROM_REG(16, data->in_min[16]) 798 - NEG12_OFFSET); 799 } 800 static ssize_t set_in16_min(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) ··· 807 data->in_min[16] = INS_TO_REG(16, val + NEG12_OFFSET); 808 adm1026_write_value(client, ADM1026_REG_IN_MIN[16], data->in_min[16]); 809 mutex_unlock(&data->update_lock); 810 + return count; 811 } 812 static ssize_t show_in16_max(struct device *dev, struct device_attribute *attr, char *buf) 813 { 814 struct adm1026_data *data = adm1026_update_device(dev); 815 + return sprintf(buf, "%d\n", INS_FROM_REG(16, data->in_max[16]) 816 - NEG12_OFFSET); 817 } 818 static ssize_t set_in16_max(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) ··· 843 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 844 int nr = sensor_attr->index; 845 struct adm1026_data *data = adm1026_update_device(dev); 846 + return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr], 847 data->fan_div[nr])); 848 } 849 static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr, ··· 852 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 853 int nr = sensor_attr->index; 854 struct adm1026_data *data = adm1026_update_device(dev); 855 + return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr], 856 data->fan_div[nr])); 857 } 858 static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, ··· 872 return count; 873 } 874 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, \ 879 show_fan_min, set_fan_min, offset - 1); 880 881 fan_offset(1); ··· 892 { 893 struct i2c_client *client = to_i2c_client(dev); 894 struct adm1026_data *data = i2c_get_clientdata(client); 895 + int new_min; 896 + int new_div = data->fan_div[fan]; 897 898 /* 0 and 0xff are special. Don't adjust them */ 899 if (data->fan_min[fan] == 0 || data->fan_min[fan] == 0xff) { ··· 913 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 914 int nr = sensor_attr->index; 915 struct adm1026_data *data = adm1026_update_device(dev); 916 + return sprintf(buf, "%d\n", data->fan_div[nr]); 917 } 918 static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 919 const char *buf, size_t count) ··· 922 int nr = sensor_attr->index; 923 struct i2c_client *client = to_i2c_client(dev); 924 struct adm1026_data *data = i2c_get_clientdata(client); 925 + int val, orig_div, new_div, shift; 926 927 val = simple_strtol(buf, NULL, 10); 928 + new_div = DIV_TO_REG(val); 929 if (new_div == 0) { 930 return -EINVAL; 931 } ··· 946 } 947 948 if (data->fan_div[nr] != orig_div) { 949 + fixup_fan_min(dev, nr, orig_div); 950 } 951 mutex_unlock(&data->update_lock); 952 return count; 953 } 954 955 + #define fan_offset_div(offset) \ 956 + static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \ 957 show_fan_div, set_fan_div, offset - 1); 958 959 fan_offset_div(1); ··· 972 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 973 int nr = sensor_attr->index; 974 struct adm1026_data *data = adm1026_update_device(dev); 975 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[nr])); 976 } 977 static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr, 978 char *buf) ··· 980 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 981 int nr = sensor_attr->index; 982 struct adm1026_data *data = adm1026_update_device(dev); 983 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr])); 984 } 985 static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr, 986 const char *buf, size_t count) ··· 1004 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1005 int nr = sensor_attr->index; 1006 struct adm1026_data *data = adm1026_update_device(dev); 1007 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr])); 1008 } 1009 static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, 1010 const char *buf, size_t count) ··· 1024 } 1025 1026 #define temp_reg(offset) \ 1027 + static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp, \ 1028 NULL, offset - 1); \ 1029 static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \ 1030 show_temp_min, set_temp_min, offset - 1); \ ··· 1042 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1043 int nr = sensor_attr->index; 1044 struct adm1026_data *data = adm1026_update_device(dev); 1045 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_offset[nr])); 1046 } 1047 static ssize_t set_temp_offset(struct device *dev, 1048 struct device_attribute *attr, const char *buf, ··· 1076 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1077 int nr = sensor_attr->index; 1078 struct adm1026_data *data = adm1026_update_device(dev); 1079 + return sprintf(buf, "%d\n", TEMP_FROM_REG( 1080 ADM1026_FAN_ACTIVATION_TEMP_HYST + data->temp_tmin[nr])); 1081 } 1082 static ssize_t show_temp_auto_point2_temp(struct device *dev, ··· 1085 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1086 int nr = sensor_attr->index; 1087 struct adm1026_data *data = adm1026_update_device(dev); 1088 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_tmin[nr] + 1089 ADM1026_FAN_CONTROL_TEMP_RANGE)); 1090 } 1091 static ssize_t show_temp_auto_point1_temp(struct device *dev, ··· 1094 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1095 int nr = sensor_attr->index; 1096 struct adm1026_data *data = adm1026_update_device(dev); 1097 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_tmin[nr])); 1098 } 1099 static ssize_t set_temp_auto_point1_temp(struct device *dev, 1100 struct device_attribute *attr, const char *buf, size_t count) ··· 1113 return count; 1114 } 1115 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, \ 1123 show_temp_auto_point2_temp, NULL, offset - 1); 1124 1125 temp_auto_point(1); ··· 1130 struct device_attribute *attr, char *buf) 1131 { 1132 struct adm1026_data *data = adm1026_update_device(dev); 1133 + return sprintf(buf, "%d\n", (data->config1 & CFG1_THERM_HOT) >> 4); 1134 } 1135 static ssize_t set_temp_crit_enable(struct device *dev, 1136 struct device_attribute *attr, const char *buf, size_t count) ··· 1142 if ((val == 1) || (val==0)) { 1143 mutex_lock(&data->update_lock); 1144 data->config1 = (data->config1 & ~CFG1_THERM_HOT) | (val << 4); 1145 + adm1026_write_value(client, ADM1026_REG_CONFIG1, 1146 data->config1); 1147 mutex_unlock(&data->update_lock); 1148 } ··· 1163 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1164 int nr = sensor_attr->index; 1165 struct adm1026_data *data = adm1026_update_device(dev); 1166 + return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit[nr])); 1167 } 1168 static ssize_t set_temp_crit(struct device *dev, struct device_attribute *attr, 1169 const char *buf, size_t count) ··· 1193 static ssize_t show_analog_out_reg(struct device *dev, struct device_attribute *attr, char *buf) 1194 { 1195 struct adm1026_data *data = adm1026_update_device(dev); 1196 + return sprintf(buf, "%d\n", DAC_FROM_REG(data->analog_out)); 1197 } 1198 static ssize_t set_analog_out_reg(struct device *dev, struct device_attribute *attr, const char *buf, 1199 size_t count) ··· 1209 return count; 1210 } 1211 1212 + static DEVICE_ATTR(analog_out, S_IRUGO | S_IWUSR, show_analog_out_reg, 1213 set_analog_out_reg); 1214 1215 static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr, char *buf) 1216 { 1217 struct adm1026_data *data = adm1026_update_device(dev); 1218 + return sprintf(buf, "%d\n", vid_from_reg(data->vid & 0x3f, data->vrm)); 1219 } 1220 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL); 1221 1222 static ssize_t show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf) 1223 { 1224 struct adm1026_data *data = dev_get_drvdata(dev); 1225 + return sprintf(buf, "%d\n", data->vrm); 1226 } 1227 static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, 1228 size_t count) 1229 { 1230 + struct adm1026_data *data = dev_get_drvdata(dev); 1231 1232 data->vrm = simple_strtol(buf, NULL, 10); 1233 return count; ··· 1239 static ssize_t show_alarms_reg(struct device *dev, struct device_attribute *attr, char *buf) 1240 { 1241 struct adm1026_data *data = adm1026_update_device(dev); 1242 + return sprintf(buf, "%ld\n", data->alarms); 1243 } 1244 1245 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL); 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 + 1284 static ssize_t show_alarm_mask(struct device *dev, struct device_attribute *attr, char *buf) 1285 { 1286 struct adm1026_data *data = adm1026_update_device(dev); 1287 + return sprintf(buf, "%ld\n", data->alarm_mask); 1288 } 1289 static ssize_t set_alarm_mask(struct device *dev, struct device_attribute *attr, const char *buf, 1290 size_t count) ··· 1283 static ssize_t show_gpio(struct device *dev, struct device_attribute *attr, char *buf) 1284 { 1285 struct adm1026_data *data = adm1026_update_device(dev); 1286 + return sprintf(buf, "%ld\n", data->gpio); 1287 } 1288 static ssize_t set_gpio(struct device *dev, struct device_attribute *attr, const char *buf, 1289 size_t count) ··· 1291 struct i2c_client *client = to_i2c_client(dev); 1292 struct adm1026_data *data = i2c_get_clientdata(client); 1293 int val = simple_strtol(buf, NULL, 10); 1294 + long gpio; 1295 1296 mutex_lock(&data->update_lock); 1297 data->gpio = val & 0x1ffff; 1298 gpio = data->gpio; 1299 + adm1026_write_value(client, ADM1026_REG_GPIO_STATUS_0_7, gpio & 0xff); 1300 gpio >>= 8; 1301 + adm1026_write_value(client, ADM1026_REG_GPIO_STATUS_8_15, gpio & 0xff); 1302 gpio = ((gpio >> 1) & 0x80) | (data->alarms >> 24 & 0x7f); 1303 + adm1026_write_value(client, ADM1026_REG_STATUS4, gpio & 0xff); 1304 mutex_unlock(&data->update_lock); 1305 return count; 1306 } ··· 1311 static ssize_t show_gpio_mask(struct device *dev, struct device_attribute *attr, char *buf) 1312 { 1313 struct adm1026_data *data = adm1026_update_device(dev); 1314 + return sprintf(buf, "%ld\n", data->gpio_mask); 1315 } 1316 static ssize_t set_gpio_mask(struct device *dev, struct device_attribute *attr, const char *buf, 1317 size_t count) ··· 1319 struct i2c_client *client = to_i2c_client(dev); 1320 struct adm1026_data *data = i2c_get_clientdata(client); 1321 int val = simple_strtol(buf, NULL, 10); 1322 + long mask; 1323 1324 mutex_lock(&data->update_lock); 1325 data->gpio_mask = val & 0x1ffff; 1326 mask = data->gpio_mask; 1327 + adm1026_write_value(client, ADM1026_REG_GPIO_MASK_0_7, mask & 0xff); 1328 mask >>= 8; 1329 + adm1026_write_value(client, ADM1026_REG_GPIO_MASK_8_15, mask & 0xff); 1330 mask = ((mask >> 1) & 0x80) | (data->alarm_mask >> 24 & 0x7f); 1331 + adm1026_write_value(client, ADM1026_REG_MASK1, mask & 0xff); 1332 mutex_unlock(&data->update_lock); 1333 return count; 1334 } ··· 1338 static ssize_t show_pwm_reg(struct device *dev, struct device_attribute *attr, char *buf) 1339 { 1340 struct adm1026_data *data = adm1026_update_device(dev); 1341 + return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm1.pwm)); 1342 } 1343 static ssize_t set_pwm_reg(struct device *dev, struct device_attribute *attr, const char *buf, 1344 size_t count) ··· 1359 static ssize_t show_auto_pwm_min(struct device *dev, struct device_attribute *attr, char *buf) 1360 { 1361 struct adm1026_data *data = adm1026_update_device(dev); 1362 + return sprintf(buf, "%d\n", data->pwm1.auto_pwm_min); 1363 } 1364 static ssize_t set_auto_pwm_min(struct device *dev, struct device_attribute *attr, const char *buf, 1365 size_t count) ··· 1369 int val = simple_strtol(buf, NULL, 10); 1370 1371 mutex_lock(&data->update_lock); 1372 + data->pwm1.auto_pwm_min = SENSORS_LIMIT(val, 0, 255); 1373 if (data->pwm1.enable == 2) { /* apply immediately */ 1374 data->pwm1.pwm = PWM_TO_REG((data->pwm1.pwm & 0x0f) | 1375 + PWM_MIN_TO_REG(data->pwm1.auto_pwm_min)); 1376 adm1026_write_value(client, ADM1026_REG_PWM, data->pwm1.pwm); 1377 } 1378 mutex_unlock(&data->update_lock); ··· 1380 } 1381 static ssize_t show_auto_pwm_max(struct device *dev, struct device_attribute *attr, char *buf) 1382 { 1383 + return sprintf(buf, "%d\n", ADM1026_PWM_MAX); 1384 } 1385 static ssize_t show_pwm_enable(struct device *dev, struct device_attribute *attr, char *buf) 1386 { 1387 struct adm1026_data *data = adm1026_update_device(dev); 1388 + return sprintf(buf, "%d\n", data->pwm1.enable); 1389 } 1390 static ssize_t set_pwm_enable(struct device *dev, struct device_attribute *attr, const char *buf, 1391 size_t count) ··· 1393 struct i2c_client *client = to_i2c_client(dev); 1394 struct adm1026_data *data = i2c_get_clientdata(client); 1395 int val = simple_strtol(buf, NULL, 10); 1396 + int old_enable; 1397 1398 if ((val >= 0) && (val < 3)) { 1399 mutex_lock(&data->update_lock); ··· 1403 | ((val == 2) ? CFG1_PWM_AFC : 0); 1404 adm1026_write_value(client, ADM1026_REG_CONFIG1, 1405 data->config1); 1406 + if (val == 2) { /* apply pwm1_auto_pwm_min to pwm1 */ 1407 data->pwm1.pwm = PWM_TO_REG((data->pwm1.pwm & 0x0f) | 1408 + PWM_MIN_TO_REG(data->pwm1.auto_pwm_min)); 1409 + adm1026_write_value(client, ADM1026_REG_PWM, 1410 data->pwm1.pwm); 1411 } else if (!((old_enable == 1) && (val == 1))) { 1412 /* set pwm to safe value */ 1413 data->pwm1.pwm = 255; 1414 + adm1026_write_value(client, ADM1026_REG_PWM, 1415 data->pwm1.pwm); 1416 } 1417 mutex_unlock(&data->update_lock); ··· 1420 } 1421 1422 /* enable PWM fan control */ 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, 1427 set_pwm_enable); 1428 + static DEVICE_ATTR(pwm2_enable, S_IRUGO | S_IWUSR, show_pwm_enable, 1429 set_pwm_enable); 1430 + static DEVICE_ATTR(pwm3_enable, S_IRUGO | S_IWUSR, show_pwm_enable, 1431 set_pwm_enable); 1432 + static DEVICE_ATTR(temp1_auto_point1_pwm, S_IRUGO | S_IWUSR, 1433 show_auto_pwm_min, set_auto_pwm_min); 1434 + static DEVICE_ATTR(temp2_auto_point1_pwm, S_IRUGO | S_IWUSR, 1435 show_auto_pwm_min, set_auto_pwm_min); 1436 + static DEVICE_ATTR(temp3_auto_point1_pwm, S_IRUGO | S_IWUSR, 1437 show_auto_pwm_min, set_auto_pwm_min); 1438 1439 static DEVICE_ATTR(temp1_auto_point2_pwm, S_IRUGO, show_auto_pwm_max, NULL); ··· 1444 &sensor_dev_attr_in0_input.dev_attr.attr, 1445 &sensor_dev_attr_in0_max.dev_attr.attr, 1446 &sensor_dev_attr_in0_min.dev_attr.attr, 1447 + &sensor_dev_attr_in0_alarm.dev_attr.attr, 1448 &sensor_dev_attr_in1_input.dev_attr.attr, 1449 &sensor_dev_attr_in1_max.dev_attr.attr, 1450 &sensor_dev_attr_in1_min.dev_attr.attr, 1451 + &sensor_dev_attr_in1_alarm.dev_attr.attr, 1452 &sensor_dev_attr_in2_input.dev_attr.attr, 1453 &sensor_dev_attr_in2_max.dev_attr.attr, 1454 &sensor_dev_attr_in2_min.dev_attr.attr, 1455 + &sensor_dev_attr_in2_alarm.dev_attr.attr, 1456 &sensor_dev_attr_in3_input.dev_attr.attr, 1457 &sensor_dev_attr_in3_max.dev_attr.attr, 1458 &sensor_dev_attr_in3_min.dev_attr.attr, 1459 + &sensor_dev_attr_in3_alarm.dev_attr.attr, 1460 &sensor_dev_attr_in4_input.dev_attr.attr, 1461 &sensor_dev_attr_in4_max.dev_attr.attr, 1462 &sensor_dev_attr_in4_min.dev_attr.attr, 1463 + &sensor_dev_attr_in4_alarm.dev_attr.attr, 1464 &sensor_dev_attr_in5_input.dev_attr.attr, 1465 &sensor_dev_attr_in5_max.dev_attr.attr, 1466 &sensor_dev_attr_in5_min.dev_attr.attr, 1467 + &sensor_dev_attr_in5_alarm.dev_attr.attr, 1468 &sensor_dev_attr_in6_input.dev_attr.attr, 1469 &sensor_dev_attr_in6_max.dev_attr.attr, 1470 &sensor_dev_attr_in6_min.dev_attr.attr, 1471 + &sensor_dev_attr_in6_alarm.dev_attr.attr, 1472 &sensor_dev_attr_in7_input.dev_attr.attr, 1473 &sensor_dev_attr_in7_max.dev_attr.attr, 1474 &sensor_dev_attr_in7_min.dev_attr.attr, 1475 + &sensor_dev_attr_in7_alarm.dev_attr.attr, 1476 &sensor_dev_attr_in10_input.dev_attr.attr, 1477 &sensor_dev_attr_in10_max.dev_attr.attr, 1478 &sensor_dev_attr_in10_min.dev_attr.attr, 1479 + &sensor_dev_attr_in10_alarm.dev_attr.attr, 1480 &sensor_dev_attr_in11_input.dev_attr.attr, 1481 &sensor_dev_attr_in11_max.dev_attr.attr, 1482 &sensor_dev_attr_in11_min.dev_attr.attr, 1483 + &sensor_dev_attr_in11_alarm.dev_attr.attr, 1484 &sensor_dev_attr_in12_input.dev_attr.attr, 1485 &sensor_dev_attr_in12_max.dev_attr.attr, 1486 &sensor_dev_attr_in12_min.dev_attr.attr, 1487 + &sensor_dev_attr_in12_alarm.dev_attr.attr, 1488 &sensor_dev_attr_in13_input.dev_attr.attr, 1489 &sensor_dev_attr_in13_max.dev_attr.attr, 1490 &sensor_dev_attr_in13_min.dev_attr.attr, 1491 + &sensor_dev_attr_in13_alarm.dev_attr.attr, 1492 &sensor_dev_attr_in14_input.dev_attr.attr, 1493 &sensor_dev_attr_in14_max.dev_attr.attr, 1494 &sensor_dev_attr_in14_min.dev_attr.attr, 1495 + &sensor_dev_attr_in14_alarm.dev_attr.attr, 1496 &sensor_dev_attr_in15_input.dev_attr.attr, 1497 &sensor_dev_attr_in15_max.dev_attr.attr, 1498 &sensor_dev_attr_in15_min.dev_attr.attr, 1499 + &sensor_dev_attr_in15_alarm.dev_attr.attr, 1500 &sensor_dev_attr_in16_input.dev_attr.attr, 1501 &sensor_dev_attr_in16_max.dev_attr.attr, 1502 &sensor_dev_attr_in16_min.dev_attr.attr, 1503 + &sensor_dev_attr_in16_alarm.dev_attr.attr, 1504 &sensor_dev_attr_fan1_input.dev_attr.attr, 1505 &sensor_dev_attr_fan1_div.dev_attr.attr, 1506 &sensor_dev_attr_fan1_min.dev_attr.attr, 1507 + &sensor_dev_attr_fan1_alarm.dev_attr.attr, 1508 &sensor_dev_attr_fan2_input.dev_attr.attr, 1509 &sensor_dev_attr_fan2_div.dev_attr.attr, 1510 &sensor_dev_attr_fan2_min.dev_attr.attr, 1511 + &sensor_dev_attr_fan2_alarm.dev_attr.attr, 1512 &sensor_dev_attr_fan3_input.dev_attr.attr, 1513 &sensor_dev_attr_fan3_div.dev_attr.attr, 1514 &sensor_dev_attr_fan3_min.dev_attr.attr, 1515 + &sensor_dev_attr_fan3_alarm.dev_attr.attr, 1516 &sensor_dev_attr_fan4_input.dev_attr.attr, 1517 &sensor_dev_attr_fan4_div.dev_attr.attr, 1518 &sensor_dev_attr_fan4_min.dev_attr.attr, 1519 + &sensor_dev_attr_fan4_alarm.dev_attr.attr, 1520 &sensor_dev_attr_fan5_input.dev_attr.attr, 1521 &sensor_dev_attr_fan5_div.dev_attr.attr, 1522 &sensor_dev_attr_fan5_min.dev_attr.attr, 1523 + &sensor_dev_attr_fan5_alarm.dev_attr.attr, 1524 &sensor_dev_attr_fan6_input.dev_attr.attr, 1525 &sensor_dev_attr_fan6_div.dev_attr.attr, 1526 &sensor_dev_attr_fan6_min.dev_attr.attr, 1527 + &sensor_dev_attr_fan6_alarm.dev_attr.attr, 1528 &sensor_dev_attr_fan7_input.dev_attr.attr, 1529 &sensor_dev_attr_fan7_div.dev_attr.attr, 1530 &sensor_dev_attr_fan7_min.dev_attr.attr, 1531 + &sensor_dev_attr_fan7_alarm.dev_attr.attr, 1532 &sensor_dev_attr_fan8_input.dev_attr.attr, 1533 &sensor_dev_attr_fan8_div.dev_attr.attr, 1534 &sensor_dev_attr_fan8_min.dev_attr.attr, 1535 + &sensor_dev_attr_fan8_alarm.dev_attr.attr, 1536 &sensor_dev_attr_temp1_input.dev_attr.attr, 1537 &sensor_dev_attr_temp1_max.dev_attr.attr, 1538 &sensor_dev_attr_temp1_min.dev_attr.attr, 1539 + &sensor_dev_attr_temp1_alarm.dev_attr.attr, 1540 &sensor_dev_attr_temp2_input.dev_attr.attr, 1541 &sensor_dev_attr_temp2_max.dev_attr.attr, 1542 &sensor_dev_attr_temp2_min.dev_attr.attr, 1543 + &sensor_dev_attr_temp2_alarm.dev_attr.attr, 1544 &sensor_dev_attr_temp1_offset.dev_attr.attr, 1545 &sensor_dev_attr_temp2_offset.dev_attr.attr, 1546 &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr, 1547 &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr, 1548 &sensor_dev_attr_temp1_auto_point1_temp_hyst.dev_attr.attr, 1549 &sensor_dev_attr_temp2_auto_point1_temp_hyst.dev_attr.attr, 1550 &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr, 1551 &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr, 1552 &sensor_dev_attr_temp1_crit.dev_attr.attr, 1553 &sensor_dev_attr_temp2_crit.dev_attr.attr, 1554 &dev_attr_temp1_crit_enable.attr, 1555 &dev_attr_temp2_crit_enable.attr, 1556 &dev_attr_cpu0_vid.attr, 1557 &dev_attr_vrm.attr, 1558 &dev_attr_alarms.attr, ··· 1557 &dev_attr_pwm3_enable.attr, 1558 &dev_attr_temp1_auto_point1_pwm.attr, 1559 &dev_attr_temp2_auto_point1_pwm.attr, 1560 &dev_attr_temp1_auto_point2_pwm.attr, 1561 &dev_attr_temp2_auto_point2_pwm.attr, 1562 &dev_attr_analog_out.attr, 1563 NULL 1564 }; ··· 1569 .attrs = adm1026_attributes, 1570 }; 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 + 1606 static int adm1026_detect(struct i2c_adapter *adapter, int address, 1607 int kind) 1608 { 1609 int company, verstep; 1610 + struct i2c_client *client; 1611 struct adm1026_data *data; 1612 int err = 0; 1613 const char *type_name = ""; ··· 1592 goto exit; 1593 } 1594 1595 + client = &data->client; 1596 + i2c_set_clientdata(client, data); 1597 + client->addr = address; 1598 + client->adapter = adapter; 1599 + client->driver = &adm1026_driver; 1600 1601 /* Now, we do the remaining detection. */ 1602 1603 + company = adm1026_read_value(client, ADM1026_REG_COMPANY); 1604 + verstep = adm1026_read_value(client, ADM1026_REG_VERSTEP); 1605 1606 + dev_dbg(&client->dev, "Detecting device at %d,0x%02x with" 1607 " COMPANY: 0x%02x and VERSTEP: 0x%02x\n", 1608 + i2c_adapter_id(client->adapter), client->addr, 1609 company, verstep); 1610 1611 /* If auto-detecting, Determine the chip type. */ 1612 if (kind <= 0) { 1613 + dev_dbg(&client->dev, "Autodetecting device at %d,0x%02x " 1614 "...\n", i2c_adapter_id(adapter), address); 1615 if (company == ADM1026_COMPANY_ANALOG_DEV 1616 && verstep == ADM1026_VERSTEP_ADM1026) { ··· 1627 verstep); 1628 kind = any_chip; 1629 } else { 1630 + dev_dbg(&client->dev, ": Autodetection " 1631 "failed\n"); 1632 /* Not an ADM1026 ... */ 1633 + if (kind == 0) { /* User used force=x,y */ 1634 dev_err(&adapter->dev, "Generic ADM1026 not " 1635 "found at %d,0x%02x. Try " 1636 "force_adm1026.\n", 1637 i2c_adapter_id(adapter), address); 1638 } 1639 goto exitfree; 1640 } 1641 } ··· 1655 err = -EFAULT; 1656 goto exitfree; 1657 } 1658 + strlcpy(client->name, type_name, I2C_NAME_SIZE); 1659 1660 /* Fill in the remaining client fields */ 1661 mutex_init(&data->update_lock); 1662 1663 /* Tell the I2C layer a new client has arrived */ 1664 + if ((err = i2c_attach_client(client))) 1665 goto exitfree; 1666 1667 /* Set the VRM version */ 1668 data->vrm = vid_which_vrm(); 1669 1670 /* Initialize the ADM1026 chip */ 1671 + adm1026_init_client(client); 1672 1673 /* Register sysfs hooks */ 1674 + if ((err = sysfs_create_group(&client->dev.kobj, &adm1026_group))) 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; 1684 1685 + data->hwmon_dev = hwmon_device_register(&client->dev); 1686 if (IS_ERR(data->hwmon_dev)) { 1687 err = PTR_ERR(data->hwmon_dev); 1688 goto exitremove; ··· 1686 1687 /* Error out and cleanup code */ 1688 exitremove: 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); 1694 exitdetach: 1695 + i2c_detach_client(client); 1696 exitfree: 1697 kfree(data); 1698 exit: ··· 1700 struct adm1026_data *data = i2c_get_clientdata(client); 1701 hwmon_device_unregister(data->hwmon_dev); 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); 1707 i2c_detach_client(client); 1708 kfree(data); 1709 return 0; ··· 1710 return i2c_add_driver(&adm1026_driver); 1711 } 1712 1713 + static void __exit sm_adm1026_exit(void) 1714 { 1715 i2c_del_driver(&adm1026_driver); 1716 } 1717 1718 MODULE_LICENSE("GPL"); 1719 MODULE_AUTHOR("Philip Pokorny <ppokorny@penguincomputing.com>, " 1720 + "Justin Thiessen <jthiessen@penguincomputing.com>"); 1721 MODULE_DESCRIPTION("ADM1026 driver"); 1722 1723 module_init(sm_adm1026_init);
+242 -259
drivers/hwmon/adm1031.c
··· 5 Supports adm1030 / adm1031 6 Copyright (C) 2004 Alexandre d'Alton <alex@alexdalton.org> 7 Reworked by Jean Delvare <khali@linux-fr.org> 8 - 9 This program is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 2 of the License, or ··· 27 #include <linux/jiffies.h> 28 #include <linux/i2c.h> 29 #include <linux/hwmon.h> 30 #include <linux/err.h> 31 #include <linux/mutex.h> 32 33 /* Following macros takes channel parameter starting from 0 to 2 */ 34 #define ADM1031_REG_FAN_SPEED(nr) (0x08 + (nr)) 35 - #define ADM1031_REG_FAN_DIV(nr) (0x20 + (nr)) 36 #define ADM1031_REG_PWM (0x22) 37 #define ADM1031_REG_FAN_MIN(nr) (0x10 + (nr)) 38 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)) 42 43 - #define ADM1031_REG_TEMP(nr) (0xa + (nr)) 44 #define ADM1031_REG_AUTO_TEMP(nr) (0x24 + (nr)) 45 46 #define ADM1031_REG_STATUS(nr) (0x2 + (nr)) 47 48 - #define ADM1031_REG_CONF1 0x0 49 - #define ADM1031_REG_CONF2 0x1 50 - #define ADM1031_REG_EXT_TEMP 0x6 51 52 #define ADM1031_CONF1_MONITOR_ENABLE 0x01 /* Monitoring enable */ 53 #define ADM1031_CONF1_PWM_INVERT 0x08 /* PWM Invert */ ··· 79 /* The chan_select_table contains the possible configurations for 80 * auto fan control. 81 */ 82 - auto_chan_table_t *chan_select_table; 83 u16 alarm; 84 u8 conf1; 85 u8 conf2; ··· 182 #define GET_FAN_AUTO_BITFIELD(data, idx) \ 183 (*(data)->chan_select_table)[FAN_CHAN_FROM_REG((data)->conf1)][idx%2] 184 185 - /* The tables below contains the possible values for the auto fan 186 * control bitfields. the index in the table is the register value. 187 * MSb is the auto fan control enable bit, so the four first entries 188 * in the table disables auto fan control when both bitfields are zero. 189 */ 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 */ }, 196 }; 197 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}, 204 }; 205 206 /* That function checks if a bitfield is valid and returns the other bitfield ··· 229 break; 230 } else if (val == (*data->chan_select_table)[i][chan] && 231 first_match == -1) { 232 - /* Save the first match in case of an exact match has not been 233 - * found 234 */ 235 first_match = i; 236 } ··· 246 return 0; 247 } 248 249 - static ssize_t show_fan_auto_channel(struct device *dev, char *buf, int nr) 250 { 251 struct adm1031_data *data = adm1031_update_device(dev); 252 return sprintf(buf, "%d\n", GET_FAN_AUTO_BITFIELD(data, nr)); 253 } 254 255 static ssize_t 256 - set_fan_auto_channel(struct device *dev, const char *buf, size_t count, int nr) 257 { 258 struct i2c_client *client = to_i2c_client(dev); 259 struct adm1031_data *data = i2c_get_clientdata(client); 260 int val = simple_strtol(buf, NULL, 10); 261 u8 reg; 262 int ret; ··· 269 old_fan_mode = data->conf1; 270 271 mutex_lock(&data->update_lock); 272 - 273 if ((ret = get_fan_auto_nearest(data, nr, val, data->conf1, &reg))) { 274 mutex_unlock(&data->update_lock); 275 return ret; 276 } 277 - if (((data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1)) & ADM1031_CONF1_AUTO_MODE) ^ 278 (old_fan_mode & ADM1031_CONF1_AUTO_MODE)) { 279 if (data->conf1 & ADM1031_CONF1_AUTO_MODE){ 280 - /* Switch to Auto Fan Mode 281 - * Save PWM registers 282 * Set PWM registers to 33% Both */ 283 data->old_pwm[0] = data->pwm[0]; 284 data->old_pwm[1] = data->pwm[1]; ··· 289 data->pwm[0] = data->old_pwm[0]; 290 data->pwm[1] = data->old_pwm[1]; 291 /* Restore PWM registers */ 292 - adm1031_write_value(client, ADM1031_REG_PWM, 293 data->pwm[0] | (data->pwm[1] << 4)); 294 } 295 } ··· 299 return count; 300 } 301 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); 318 319 /* Auto Temps */ 320 - static ssize_t show_auto_temp_off(struct device *dev, char *buf, int nr) 321 { 322 struct adm1031_data *data = adm1031_update_device(dev); 323 - return sprintf(buf, "%d\n", 324 AUTO_TEMP_OFF_FROM_REG(data->auto_temp[nr])); 325 } 326 - static ssize_t show_auto_temp_min(struct device *dev, char *buf, int nr) 327 { 328 struct adm1031_data *data = adm1031_update_device(dev); 329 return sprintf(buf, "%d\n", 330 AUTO_TEMP_MIN_FROM_REG(data->auto_temp[nr])); 331 } 332 static ssize_t 333 - set_auto_temp_min(struct device *dev, const char *buf, size_t count, int nr) 334 { 335 struct i2c_client *client = to_i2c_client(dev); 336 struct adm1031_data *data = i2c_get_clientdata(client); 337 int val = simple_strtol(buf, NULL, 10); 338 339 mutex_lock(&data->update_lock); ··· 337 mutex_unlock(&data->update_lock); 338 return count; 339 } 340 - static ssize_t show_auto_temp_max(struct device *dev, char *buf, int nr) 341 { 342 struct adm1031_data *data = adm1031_update_device(dev); 343 return sprintf(buf, "%d\n", 344 AUTO_TEMP_MAX_FROM_REG(data->auto_temp[nr])); 345 } 346 static ssize_t 347 - set_auto_temp_max(struct device *dev, const char *buf, size_t count, int nr) 348 { 349 struct i2c_client *client = to_i2c_client(dev); 350 struct adm1031_data *data = i2c_get_clientdata(client); 351 int val = simple_strtol(buf, NULL, 10); 352 353 mutex_lock(&data->update_lock); ··· 362 return count; 363 } 364 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) 394 395 auto_temp_reg(1); 396 auto_temp_reg(2); 397 auto_temp_reg(3); 398 399 /* pwm */ 400 - static ssize_t show_pwm(struct device *dev, char *buf, int nr) 401 { 402 struct adm1031_data *data = adm1031_update_device(dev); 403 return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm[nr])); 404 } 405 - static ssize_t 406 - set_pwm(struct device *dev, const char *buf, size_t count, int nr) 407 { 408 struct i2c_client *client = to_i2c_client(dev); 409 struct adm1031_data *data = i2c_get_clientdata(client); 410 int val = simple_strtol(buf, NULL, 10); 411 int reg; 412 413 mutex_lock(&data->update_lock); 414 - if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) && 415 (((val>>4) & 0xf) != 5)) { 416 /* In automatic mode, the only PWM accepted is 33% */ 417 mutex_unlock(&data->update_lock); ··· 407 return count; 408 } 409 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 426 /* Fans */ 427 ··· 447 AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[0]) 448 || data->temp[1] >= 449 AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[1]) 450 - || (data->chip_type == adm1031 451 && data->temp[2] >= 452 AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[2])); 453 break; ··· 459 } 460 461 462 - static ssize_t show_fan(struct device *dev, char *buf, int nr) 463 { 464 struct adm1031_data *data = adm1031_update_device(dev); 465 int value; 466 ··· 471 return sprintf(buf, "%d\n", value); 472 } 473 474 - static ssize_t show_fan_div(struct device *dev, char *buf, int nr) 475 { 476 struct adm1031_data *data = adm1031_update_device(dev); 477 return sprintf(buf, "%d\n", FAN_DIV_FROM_REG(data->fan_div[nr])); 478 } 479 - static ssize_t show_fan_min(struct device *dev, char *buf, int nr) 480 { 481 struct adm1031_data *data = adm1031_update_device(dev); 482 return sprintf(buf, "%d\n", 483 FAN_FROM_REG(data->fan_min[nr], 484 FAN_DIV_FROM_REG(data->fan_div[nr]))); 485 } 486 - static ssize_t 487 - set_fan_min(struct device *dev, const char *buf, size_t count, int nr) 488 { 489 struct i2c_client *client = to_i2c_client(dev); 490 struct adm1031_data *data = i2c_get_clientdata(client); 491 int val = simple_strtol(buf, NULL, 10); 492 493 mutex_lock(&data->update_lock); 494 if (val) { 495 - data->fan_min[nr] = 496 FAN_TO_REG(val, FAN_DIV_FROM_REG(data->fan_div[nr])); 497 } else { 498 data->fan_min[nr] = 0xff; ··· 506 mutex_unlock(&data->update_lock); 507 return count; 508 } 509 - static ssize_t 510 - set_fan_div(struct device *dev, const char *buf, size_t count, int nr) 511 { 512 struct i2c_client *client = to_i2c_client(dev); 513 struct adm1031_data *data = i2c_get_clientdata(client); 514 int val = simple_strtol(buf, NULL, 10); 515 u8 tmp; 516 int old_div; ··· 519 520 tmp = val == 8 ? 0xc0 : 521 val == 4 ? 0x80 : 522 - val == 2 ? 0x40 : 523 - val == 1 ? 0x00 : 524 0xff; 525 if (tmp == 0xff) 526 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 537 - adm1031_write_value(client, ADM1031_REG_FAN_DIV(nr), 538 data->fan_div[nr]); 539 - adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr), 540 data->fan_min[nr]); 541 mutex_unlock(&data->update_lock); 542 return count; 543 } 544 545 #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) 576 577 fan_offset(1); 578 fan_offset(2); 579 580 581 /* Temps */ 582 - static ssize_t show_temp(struct device *dev, char *buf, int nr) 583 { 584 struct adm1031_data *data = adm1031_update_device(dev); 585 int ext; 586 ext = nr == 0 ? ··· 573 (((data->ext_temp[nr] >> ((nr - 1) * 3)) & 7)); 574 return sprintf(buf, "%d\n", TEMP_FROM_REG_EXT(data->temp[nr], ext)); 575 } 576 - static ssize_t show_temp_min(struct device *dev, char *buf, int nr) 577 { 578 struct adm1031_data *data = adm1031_update_device(dev); 579 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr])); 580 } 581 - static ssize_t show_temp_max(struct device *dev, char *buf, int nr) 582 { 583 struct adm1031_data *data = adm1031_update_device(dev); 584 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr])); 585 } 586 - static ssize_t show_temp_crit(struct device *dev, char *buf, int nr) 587 { 588 struct adm1031_data *data = adm1031_update_device(dev); 589 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit[nr])); 590 } 591 - static ssize_t 592 - set_temp_min(struct device *dev, const char *buf, size_t count, int nr) 593 { 594 struct i2c_client *client = to_i2c_client(dev); 595 struct adm1031_data *data = i2c_get_clientdata(client); 596 int val; 597 598 val = simple_strtol(buf, NULL, 10); ··· 611 mutex_unlock(&data->update_lock); 612 return count; 613 } 614 - static ssize_t 615 - set_temp_max(struct device *dev, const char *buf, size_t count, int nr) 616 { 617 struct i2c_client *client = to_i2c_client(dev); 618 struct adm1031_data *data = i2c_get_clientdata(client); 619 int val; 620 621 val = simple_strtol(buf, NULL, 10); ··· 628 mutex_unlock(&data->update_lock); 629 return count; 630 } 631 - static ssize_t 632 - set_temp_crit(struct device *dev, const char *buf, size_t count, int nr) 633 { 634 struct i2c_client *client = to_i2c_client(dev); 635 struct adm1031_data *data = i2c_get_clientdata(client); 636 int val; 637 638 val = simple_strtol(buf, NULL, 10); ··· 646 return count; 647 } 648 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) 689 690 temp_reg(1); 691 temp_reg(2); ··· 669 670 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 671 672 673 static int adm1031_attach_adapter(struct i2c_adapter *adapter) 674 { ··· 701 } 702 703 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, 717 718 - &dev_attr_auto_temp1_off.attr, 719 - &dev_attr_auto_temp1_min.attr, 720 - &dev_attr_auto_temp1_max.attr, 721 722 - &dev_attr_auto_temp2_off.attr, 723 - &dev_attr_auto_temp2_min.attr, 724 - &dev_attr_auto_temp2_max.attr, 725 726 - &dev_attr_auto_fan1_min_pwm.attr, 727 728 &dev_attr_alarms.attr, 729 ··· 744 }; 745 746 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, 760 NULL 761 }; 762 ··· 773 /* This function is called by i2c_probe */ 774 static int adm1031_detect(struct i2c_adapter *adapter, int address, int kind) 775 { 776 - struct i2c_client *new_client; 777 struct adm1031_data *data; 778 int err = 0; 779 const char *name = ""; ··· 786 goto exit; 787 } 788 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; 795 796 if (kind < 0) { 797 int id, co; 798 - id = i2c_smbus_read_byte_data(new_client, 0x3d); 799 - co = i2c_smbus_read_byte_data(new_client, 0x3e); 800 801 if (!((id == 0x31 || id == 0x30) && co == 0x41)) 802 goto exit_free; ··· 816 } 817 data->chip_type = kind; 818 819 - strlcpy(new_client->name, name, I2C_NAME_SIZE); 820 - data->valid = 0; 821 mutex_init(&data->update_lock); 822 823 /* Tell the I2C layer a new client has arrived */ 824 - if ((err = i2c_attach_client(new_client))) 825 goto exit_free; 826 827 /* Initialize the ADM1031 chip */ 828 - adm1031_init_client(new_client); 829 830 /* Register sysfs hooks */ 831 - if ((err = sysfs_create_group(&new_client->dev.kobj, &adm1031_group))) 832 goto exit_detach; 833 834 if (kind == adm1031) { 835 - if ((err = sysfs_create_group(&new_client->dev.kobj, 836 &adm1031_group_opt))) 837 goto exit_remove; 838 } 839 840 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 841 if (IS_ERR(data->hwmon_dev)) { 842 err = PTR_ERR(data->hwmon_dev); 843 goto exit_remove; ··· 845 return 0; 846 847 exit_remove: 848 - sysfs_remove_group(&new_client->dev.kobj, &adm1031_group); 849 - sysfs_remove_group(&new_client->dev.kobj, &adm1031_group_opt); 850 exit_detach: 851 - i2c_detach_client(new_client); 852 exit_free: 853 kfree(data); 854 exit: ··· 880 if (data->chip_type == adm1031) { 881 mask |= (ADM1031_CONF2_PWM2_ENABLE | 882 ADM1031_CONF2_TACH2_ENABLE); 883 - } 884 /* Initialize the ADM1031 chip (enables fan speed reading ) */ 885 read_val = adm1031_read_value(client, ADM1031_REG_CONF2); 886 if ((read_val | mask) != read_val) { ··· 959 if (data->chip_type == adm1030) { 960 data->alarm &= 0xc0ff; 961 } 962 - 963 for (chan=0; chan<(data->chip_type == adm1030 ? 1 : 2); chan++) { 964 data->fan_div[chan] = 965 adm1031_read_value(client, ADM1031_REG_FAN_DIV(chan)); ··· 968 data->fan[chan] = 969 adm1031_read_value(client, ADM1031_REG_FAN_SPEED(chan)); 970 data->pwm[chan] = 971 - 0xf & (adm1031_read_value(client, ADM1031_REG_PWM) >> 972 (4*chan)); 973 } 974 data->last_updated = jiffies;
··· 5 Supports adm1030 / adm1031 6 Copyright (C) 2004 Alexandre d'Alton <alex@alexdalton.org> 7 Reworked by Jean Delvare <khali@linux-fr.org> 8 + 9 This program is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 2 of the License, or ··· 27 #include <linux/jiffies.h> 28 #include <linux/i2c.h> 29 #include <linux/hwmon.h> 30 + #include <linux/hwmon-sysfs.h> 31 #include <linux/err.h> 32 #include <linux/mutex.h> 33 34 /* Following macros takes channel parameter starting from 0 to 2 */ 35 #define ADM1031_REG_FAN_SPEED(nr) (0x08 + (nr)) 36 + #define ADM1031_REG_FAN_DIV(nr) (0x20 + (nr)) 37 #define ADM1031_REG_PWM (0x22) 38 #define ADM1031_REG_FAN_MIN(nr) (0x10 + (nr)) 39 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)) 43 44 + #define ADM1031_REG_TEMP(nr) (0x0a + (nr)) 45 #define ADM1031_REG_AUTO_TEMP(nr) (0x24 + (nr)) 46 47 #define ADM1031_REG_STATUS(nr) (0x2 + (nr)) 48 49 + #define ADM1031_REG_CONF1 0x00 50 + #define ADM1031_REG_CONF2 0x01 51 + #define ADM1031_REG_EXT_TEMP 0x06 52 53 #define ADM1031_CONF1_MONITOR_ENABLE 0x01 /* Monitoring enable */ 54 #define ADM1031_CONF1_PWM_INVERT 0x08 /* PWM Invert */ ··· 78 /* The chan_select_table contains the possible configurations for 79 * auto fan control. 80 */ 81 + const auto_chan_table_t *chan_select_table; 82 u16 alarm; 83 u8 conf1; 84 u8 conf2; ··· 181 #define GET_FAN_AUTO_BITFIELD(data, idx) \ 182 (*(data)->chan_select_table)[FAN_CHAN_FROM_REG((data)->conf1)][idx%2] 183 184 + /* The tables below contains the possible values for the auto fan 185 * control bitfields. the index in the table is the register value. 186 * MSb is the auto fan control enable bit, so the four first entries 187 * in the table disables auto fan control when both bitfields are zero. 188 */ 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 */ }, 195 }; 196 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 }, 203 }; 204 205 /* That function checks if a bitfield is valid and returns the other bitfield ··· 228 break; 229 } else if (val == (*data->chan_select_table)[i][chan] && 230 first_match == -1) { 231 + /* Save the first match in case of an exact match has 232 + * not been found 233 */ 234 first_match = i; 235 } ··· 245 return 0; 246 } 247 248 + static ssize_t show_fan_auto_channel(struct device *dev, 249 + struct device_attribute *attr, char *buf) 250 { 251 + int nr = to_sensor_dev_attr(attr)->index; 252 struct adm1031_data *data = adm1031_update_device(dev); 253 return sprintf(buf, "%d\n", GET_FAN_AUTO_BITFIELD(data, nr)); 254 } 255 256 static ssize_t 257 + set_fan_auto_channel(struct device *dev, struct device_attribute *attr, 258 + const char *buf, size_t count) 259 { 260 struct i2c_client *client = to_i2c_client(dev); 261 struct adm1031_data *data = i2c_get_clientdata(client); 262 + int nr = to_sensor_dev_attr(attr)->index; 263 int val = simple_strtol(buf, NULL, 10); 264 u8 reg; 265 int ret; ··· 264 old_fan_mode = data->conf1; 265 266 mutex_lock(&data->update_lock); 267 + 268 if ((ret = get_fan_auto_nearest(data, nr, val, data->conf1, &reg))) { 269 mutex_unlock(&data->update_lock); 270 return ret; 271 } 272 + data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1); 273 + if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) ^ 274 (old_fan_mode & ADM1031_CONF1_AUTO_MODE)) { 275 if (data->conf1 & ADM1031_CONF1_AUTO_MODE){ 276 + /* Switch to Auto Fan Mode 277 + * Save PWM registers 278 * Set PWM registers to 33% Both */ 279 data->old_pwm[0] = data->pwm[0]; 280 data->old_pwm[1] = data->pwm[1]; ··· 283 data->pwm[0] = data->old_pwm[0]; 284 data->pwm[1] = data->old_pwm[1]; 285 /* Restore PWM registers */ 286 + adm1031_write_value(client, ADM1031_REG_PWM, 287 data->pwm[0] | (data->pwm[1] << 4)); 288 } 289 } ··· 293 return count; 294 } 295 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); 300 301 /* Auto Temps */ 302 + static ssize_t show_auto_temp_off(struct device *dev, 303 + struct device_attribute *attr, char *buf) 304 { 305 + int nr = to_sensor_dev_attr(attr)->index; 306 struct adm1031_data *data = adm1031_update_device(dev); 307 + return sprintf(buf, "%d\n", 308 AUTO_TEMP_OFF_FROM_REG(data->auto_temp[nr])); 309 } 310 + static ssize_t show_auto_temp_min(struct device *dev, 311 + struct device_attribute *attr, char *buf) 312 { 313 + int nr = to_sensor_dev_attr(attr)->index; 314 struct adm1031_data *data = adm1031_update_device(dev); 315 return sprintf(buf, "%d\n", 316 AUTO_TEMP_MIN_FROM_REG(data->auto_temp[nr])); 317 } 318 static ssize_t 319 + set_auto_temp_min(struct device *dev, struct device_attribute *attr, 320 + const char *buf, size_t count) 321 { 322 struct i2c_client *client = to_i2c_client(dev); 323 struct adm1031_data *data = i2c_get_clientdata(client); 324 + int nr = to_sensor_dev_attr(attr)->index; 325 int val = simple_strtol(buf, NULL, 10); 326 327 mutex_lock(&data->update_lock); ··· 337 mutex_unlock(&data->update_lock); 338 return count; 339 } 340 + static ssize_t show_auto_temp_max(struct device *dev, 341 + struct device_attribute *attr, char *buf) 342 { 343 + int nr = to_sensor_dev_attr(attr)->index; 344 struct adm1031_data *data = adm1031_update_device(dev); 345 return sprintf(buf, "%d\n", 346 AUTO_TEMP_MAX_FROM_REG(data->auto_temp[nr])); 347 } 348 static ssize_t 349 + set_auto_temp_max(struct device *dev, struct device_attribute *attr, 350 + const char *buf, size_t count) 351 { 352 struct i2c_client *client = to_i2c_client(dev); 353 struct adm1031_data *data = i2c_get_clientdata(client); 354 + int nr = to_sensor_dev_attr(attr)->index; 355 int val = simple_strtol(buf, NULL, 10); 356 357 mutex_lock(&data->update_lock); ··· 358 return count; 359 } 360 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) 368 369 auto_temp_reg(1); 370 auto_temp_reg(2); 371 auto_temp_reg(3); 372 373 /* pwm */ 374 + static ssize_t show_pwm(struct device *dev, 375 + struct device_attribute *attr, char *buf) 376 { 377 + int nr = to_sensor_dev_attr(attr)->index; 378 struct adm1031_data *data = adm1031_update_device(dev); 379 return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm[nr])); 380 } 381 + static ssize_t set_pwm(struct device *dev, struct device_attribute *attr, 382 + const char *buf, size_t count) 383 { 384 struct i2c_client *client = to_i2c_client(dev); 385 struct adm1031_data *data = i2c_get_clientdata(client); 386 + int nr = to_sensor_dev_attr(attr)->index; 387 int val = simple_strtol(buf, NULL, 10); 388 int reg; 389 390 mutex_lock(&data->update_lock); 391 + if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) && 392 (((val>>4) & 0xf) != 5)) { 393 /* In automatic mode, the only PWM accepted is 33% */ 394 mutex_unlock(&data->update_lock); ··· 422 return count; 423 } 424 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); 431 432 /* Fans */ 433 ··· 471 AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[0]) 472 || data->temp[1] >= 473 AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[1]) 474 + || (data->chip_type == adm1031 475 && data->temp[2] >= 476 AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[2])); 477 break; ··· 483 } 484 485 486 + static ssize_t show_fan(struct device *dev, 487 + struct device_attribute *attr, char *buf) 488 { 489 + int nr = to_sensor_dev_attr(attr)->index; 490 struct adm1031_data *data = adm1031_update_device(dev); 491 int value; 492 ··· 493 return sprintf(buf, "%d\n", value); 494 } 495 496 + static ssize_t show_fan_div(struct device *dev, 497 + struct device_attribute *attr, char *buf) 498 { 499 + int nr = to_sensor_dev_attr(attr)->index; 500 struct adm1031_data *data = adm1031_update_device(dev); 501 return sprintf(buf, "%d\n", FAN_DIV_FROM_REG(data->fan_div[nr])); 502 } 503 + static ssize_t show_fan_min(struct device *dev, 504 + struct device_attribute *attr, char *buf) 505 { 506 + int nr = to_sensor_dev_attr(attr)->index; 507 struct adm1031_data *data = adm1031_update_device(dev); 508 return sprintf(buf, "%d\n", 509 FAN_FROM_REG(data->fan_min[nr], 510 FAN_DIV_FROM_REG(data->fan_div[nr]))); 511 } 512 + static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, 513 + const char *buf, size_t count) 514 { 515 struct i2c_client *client = to_i2c_client(dev); 516 struct adm1031_data *data = i2c_get_clientdata(client); 517 + int nr = to_sensor_dev_attr(attr)->index; 518 int val = simple_strtol(buf, NULL, 10); 519 520 mutex_lock(&data->update_lock); 521 if (val) { 522 + data->fan_min[nr] = 523 FAN_TO_REG(val, FAN_DIV_FROM_REG(data->fan_div[nr])); 524 } else { 525 data->fan_min[nr] = 0xff; ··· 523 mutex_unlock(&data->update_lock); 524 return count; 525 } 526 + static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 527 + const char *buf, size_t count) 528 { 529 struct i2c_client *client = to_i2c_client(dev); 530 struct adm1031_data *data = i2c_get_clientdata(client); 531 + int nr = to_sensor_dev_attr(attr)->index; 532 int val = simple_strtol(buf, NULL, 10); 533 u8 tmp; 534 int old_div; ··· 535 536 tmp = val == 8 ? 0xc0 : 537 val == 4 ? 0x80 : 538 + val == 2 ? 0x40 : 539 + val == 1 ? 0x00 : 540 0xff; 541 if (tmp == 0xff) 542 return -EINVAL; 543 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), 558 data->fan_div[nr]); 559 + adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr), 560 data->fan_min[nr]); 561 + 562 + /* Invalidate the cache: fan speed is no longer valid */ 563 + data->valid = 0; 564 mutex_unlock(&data->update_lock); 565 return count; 566 } 567 568 #define fan_offset(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) 575 576 fan_offset(1); 577 fan_offset(2); 578 579 580 /* Temps */ 581 + static ssize_t show_temp(struct device *dev, 582 + struct device_attribute *attr, char *buf) 583 { 584 + int nr = to_sensor_dev_attr(attr)->index; 585 struct adm1031_data *data = adm1031_update_device(dev); 586 int ext; 587 ext = nr == 0 ? ··· 604 (((data->ext_temp[nr] >> ((nr - 1) * 3)) & 7)); 605 return sprintf(buf, "%d\n", TEMP_FROM_REG_EXT(data->temp[nr], ext)); 606 } 607 + static ssize_t show_temp_min(struct device *dev, 608 + struct device_attribute *attr, char *buf) 609 { 610 + int nr = to_sensor_dev_attr(attr)->index; 611 struct adm1031_data *data = adm1031_update_device(dev); 612 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr])); 613 } 614 + static ssize_t show_temp_max(struct device *dev, 615 + struct device_attribute *attr, char *buf) 616 { 617 + int nr = to_sensor_dev_attr(attr)->index; 618 struct adm1031_data *data = adm1031_update_device(dev); 619 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr])); 620 } 621 + static ssize_t show_temp_crit(struct device *dev, 622 + struct device_attribute *attr, char *buf) 623 { 624 + int nr = to_sensor_dev_attr(attr)->index; 625 struct adm1031_data *data = adm1031_update_device(dev); 626 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit[nr])); 627 } 628 + static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr, 629 + const char *buf, size_t count) 630 { 631 struct i2c_client *client = to_i2c_client(dev); 632 struct adm1031_data *data = i2c_get_clientdata(client); 633 + int nr = to_sensor_dev_attr(attr)->index; 634 int val; 635 636 val = simple_strtol(buf, NULL, 10); ··· 635 mutex_unlock(&data->update_lock); 636 return count; 637 } 638 + static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, 639 + const char *buf, size_t count) 640 { 641 struct i2c_client *client = to_i2c_client(dev); 642 struct adm1031_data *data = i2c_get_clientdata(client); 643 + int nr = to_sensor_dev_attr(attr)->index; 644 int val; 645 646 val = simple_strtol(buf, NULL, 10); ··· 651 mutex_unlock(&data->update_lock); 652 return count; 653 } 654 + static ssize_t set_temp_crit(struct device *dev, struct device_attribute *attr, 655 + const char *buf, size_t count) 656 { 657 struct i2c_client *client = to_i2c_client(dev); 658 struct adm1031_data *data = i2c_get_clientdata(client); 659 + int nr = to_sensor_dev_attr(attr)->index; 660 int val; 661 662 val = simple_strtol(buf, NULL, 10); ··· 668 return count; 669 } 670 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) 680 681 temp_reg(1); 682 temp_reg(2); ··· 722 723 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 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); 748 749 static int adm1031_attach_adapter(struct i2c_adapter *adapter) 750 { ··· 731 } 732 733 static struct attribute *adm1031_attributes[] = { 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, 756 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, 760 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, 764 765 + &sensor_dev_attr_auto_fan1_min_pwm.dev_attr.attr, 766 767 &dev_attr_alarms.attr, 768 ··· 765 }; 766 767 static struct attribute *adm1031_attributes_opt[] = { 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, 787 NULL 788 }; 789 ··· 788 /* This function is called by i2c_probe */ 789 static int adm1031_detect(struct i2c_adapter *adapter, int address, int kind) 790 { 791 + struct i2c_client *client; 792 struct adm1031_data *data; 793 int err = 0; 794 const char *name = ""; ··· 801 goto exit; 802 } 803 804 + client = &data->client; 805 + i2c_set_clientdata(client, data); 806 + client->addr = address; 807 + client->adapter = adapter; 808 + client->driver = &adm1031_driver; 809 810 if (kind < 0) { 811 int id, co; 812 + id = i2c_smbus_read_byte_data(client, 0x3d); 813 + co = i2c_smbus_read_byte_data(client, 0x3e); 814 815 if (!((id == 0x31 || id == 0x30) && co == 0x41)) 816 goto exit_free; ··· 832 } 833 data->chip_type = kind; 834 835 + strlcpy(client->name, name, I2C_NAME_SIZE); 836 mutex_init(&data->update_lock); 837 838 /* Tell the I2C layer a new client has arrived */ 839 + if ((err = i2c_attach_client(client))) 840 goto exit_free; 841 842 /* Initialize the ADM1031 chip */ 843 + adm1031_init_client(client); 844 845 /* Register sysfs hooks */ 846 + if ((err = sysfs_create_group(&client->dev.kobj, &adm1031_group))) 847 goto exit_detach; 848 849 if (kind == adm1031) { 850 + if ((err = sysfs_create_group(&client->dev.kobj, 851 &adm1031_group_opt))) 852 goto exit_remove; 853 } 854 855 + data->hwmon_dev = hwmon_device_register(&client->dev); 856 if (IS_ERR(data->hwmon_dev)) { 857 err = PTR_ERR(data->hwmon_dev); 858 goto exit_remove; ··· 862 return 0; 863 864 exit_remove: 865 + sysfs_remove_group(&client->dev.kobj, &adm1031_group); 866 + sysfs_remove_group(&client->dev.kobj, &adm1031_group_opt); 867 exit_detach: 868 + i2c_detach_client(client); 869 exit_free: 870 kfree(data); 871 exit: ··· 897 if (data->chip_type == adm1031) { 898 mask |= (ADM1031_CONF2_PWM2_ENABLE | 899 ADM1031_CONF2_TACH2_ENABLE); 900 + } 901 /* Initialize the ADM1031 chip (enables fan speed reading ) */ 902 read_val = adm1031_read_value(client, ADM1031_REG_CONF2); 903 if ((read_val | mask) != read_val) { ··· 976 if (data->chip_type == adm1030) { 977 data->alarm &= 0xc0ff; 978 } 979 + 980 for (chan=0; chan<(data->chip_type == adm1030 ? 1 : 2); chan++) { 981 data->fan_div[chan] = 982 adm1031_read_value(client, ADM1031_REG_FAN_DIV(chan)); ··· 985 data->fan[chan] = 986 adm1031_read_value(client, ADM1031_REG_FAN_SPEED(chan)); 987 data->pwm[chan] = 988 + 0xf & (adm1031_read_value(client, ADM1031_REG_PWM) >> 989 (4*chan)); 990 } 991 data->last_updated = jiffies;
+26 -1
drivers/hwmon/adm9240.c
··· 141 .driver = { 142 .name = "adm9240", 143 }, 144 - .id = I2C_DRIVERID_ADM9240, 145 .attach_adapter = adm9240_attach_adapter, 146 .detach_client = adm9240_detach_client, 147 }; ··· 414 } 415 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 416 417 /* vid */ 418 static ssize_t show_vid(struct device *dev, 419 struct device_attribute *attr, char *buf) ··· 485 &sensor_dev_attr_in0_input.dev_attr.attr, 486 &sensor_dev_attr_in0_min.dev_attr.attr, 487 &sensor_dev_attr_in0_max.dev_attr.attr, 488 &sensor_dev_attr_in1_input.dev_attr.attr, 489 &sensor_dev_attr_in1_min.dev_attr.attr, 490 &sensor_dev_attr_in1_max.dev_attr.attr, 491 &sensor_dev_attr_in2_input.dev_attr.attr, 492 &sensor_dev_attr_in2_min.dev_attr.attr, 493 &sensor_dev_attr_in2_max.dev_attr.attr, 494 &sensor_dev_attr_in3_input.dev_attr.attr, 495 &sensor_dev_attr_in3_min.dev_attr.attr, 496 &sensor_dev_attr_in3_max.dev_attr.attr, 497 &sensor_dev_attr_in4_input.dev_attr.attr, 498 &sensor_dev_attr_in4_min.dev_attr.attr, 499 &sensor_dev_attr_in4_max.dev_attr.attr, 500 &sensor_dev_attr_in5_input.dev_attr.attr, 501 &sensor_dev_attr_in5_min.dev_attr.attr, 502 &sensor_dev_attr_in5_max.dev_attr.attr, 503 &dev_attr_temp1_input.attr, 504 &sensor_dev_attr_temp1_max.dev_attr.attr, 505 &sensor_dev_attr_temp1_max_hyst.dev_attr.attr, 506 &sensor_dev_attr_fan1_input.dev_attr.attr, 507 &sensor_dev_attr_fan1_div.dev_attr.attr, 508 &sensor_dev_attr_fan1_min.dev_attr.attr, 509 &sensor_dev_attr_fan2_input.dev_attr.attr, 510 &sensor_dev_attr_fan2_div.dev_attr.attr, 511 &sensor_dev_attr_fan2_min.dev_attr.attr, 512 &dev_attr_alarms.attr, 513 &dev_attr_aout_output.attr, 514 &dev_attr_chassis_clear.attr,
··· 141 .driver = { 142 .name = "adm9240", 143 }, 144 .attach_adapter = adm9240_attach_adapter, 145 .detach_client = adm9240_detach_client, 146 }; ··· 415 } 416 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 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 + 435 /* vid */ 436 static ssize_t show_vid(struct device *dev, 437 struct device_attribute *attr, char *buf) ··· 469 &sensor_dev_attr_in0_input.dev_attr.attr, 470 &sensor_dev_attr_in0_min.dev_attr.attr, 471 &sensor_dev_attr_in0_max.dev_attr.attr, 472 + &sensor_dev_attr_in0_alarm.dev_attr.attr, 473 &sensor_dev_attr_in1_input.dev_attr.attr, 474 &sensor_dev_attr_in1_min.dev_attr.attr, 475 &sensor_dev_attr_in1_max.dev_attr.attr, 476 + &sensor_dev_attr_in1_alarm.dev_attr.attr, 477 &sensor_dev_attr_in2_input.dev_attr.attr, 478 &sensor_dev_attr_in2_min.dev_attr.attr, 479 &sensor_dev_attr_in2_max.dev_attr.attr, 480 + &sensor_dev_attr_in2_alarm.dev_attr.attr, 481 &sensor_dev_attr_in3_input.dev_attr.attr, 482 &sensor_dev_attr_in3_min.dev_attr.attr, 483 &sensor_dev_attr_in3_max.dev_attr.attr, 484 + &sensor_dev_attr_in3_alarm.dev_attr.attr, 485 &sensor_dev_attr_in4_input.dev_attr.attr, 486 &sensor_dev_attr_in4_min.dev_attr.attr, 487 &sensor_dev_attr_in4_max.dev_attr.attr, 488 + &sensor_dev_attr_in4_alarm.dev_attr.attr, 489 &sensor_dev_attr_in5_input.dev_attr.attr, 490 &sensor_dev_attr_in5_min.dev_attr.attr, 491 &sensor_dev_attr_in5_max.dev_attr.attr, 492 + &sensor_dev_attr_in5_alarm.dev_attr.attr, 493 &dev_attr_temp1_input.attr, 494 &sensor_dev_attr_temp1_max.dev_attr.attr, 495 &sensor_dev_attr_temp1_max_hyst.dev_attr.attr, 496 + &sensor_dev_attr_temp1_alarm.dev_attr.attr, 497 &sensor_dev_attr_fan1_input.dev_attr.attr, 498 &sensor_dev_attr_fan1_div.dev_attr.attr, 499 &sensor_dev_attr_fan1_min.dev_attr.attr, 500 + &sensor_dev_attr_fan1_alarm.dev_attr.attr, 501 &sensor_dev_attr_fan2_input.dev_attr.attr, 502 &sensor_dev_attr_fan2_div.dev_attr.attr, 503 &sensor_dev_attr_fan2_min.dev_attr.attr, 504 + &sensor_dev_attr_fan2_alarm.dev_attr.attr, 505 &dev_attr_alarms.attr, 506 &dev_attr_aout_output.attr, 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 #define ADT7470_REG_CFG 0x40 49 #define ADT7470_FSPD_MASK 0x04 50 #define ADT7470_REG_ALARM1 0x41 51 #define ADT7470_REG_ALARM2 0x42 52 #define ADT7470_REG_TEMP_LIMITS_BASE_ADDR 0x44 53 #define ADT7470_REG_TEMP_LIMITS_MAX_ADDR 0x57 54 #define ADT7470_REG_FAN_MIN_BASE_ADDR 0x58 ··· 112 #define ADT7470_REG_PWM_AUTO_TEMP(x) (ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR + \ 113 ((x) / 2)) 114 115 #define ADT7470_VENDOR 0x41 116 #define ADT7470_DEVICE 0x70 117 /* datasheet only mentions a revision 2 */ ··· 130 131 /* sleep 1s while gathering temperature data */ 132 #define TEMP_COLLECTION_TIME 1000 133 - 134 - #define power_of_2(x) (((x) & ((x) - 1)) == 0) 135 136 /* datasheet says to divide this number by the fan reading to get fan rpm */ 137 #define FAN_PERIOD_TO_RPM(x) ((90000 * 60) / (x)) ··· 153 u16 fan[ADT7470_FAN_COUNT]; 154 u16 fan_min[ADT7470_FAN_COUNT]; 155 u16 fan_max[ADT7470_FAN_COUNT]; 156 - u16 alarms, alarms_mask; 157 u8 force_pwm_max; 158 u8 pwm[ADT7470_PWM_COUNT]; 159 u8 pwm_max[ADT7470_PWM_COUNT]; ··· 278 else 279 data->force_pwm_max = 0; 280 281 - data->alarms = adt7470_read_word_data(client, ADT7470_REG_ALARM1); 282 data->alarms_mask = adt7470_read_word_data(client, 283 ADT7470_REG_ALARM1_MASK); 284 ··· 389 return sprintf(buf, "%d\n", 1000 * data->temp[attr->index]); 390 } 391 392 - static ssize_t show_alarms(struct device *dev, 393 struct device_attribute *devattr, 394 char *buf) 395 { 396 - struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 397 struct adt7470_data *data = adt7470_update_device(dev); 398 399 - if (attr->index) 400 - return sprintf(buf, "%x\n", data->alarms); 401 - else 402 - return sprintf(buf, "%x\n", data->alarms_mask); 403 } 404 405 static ssize_t show_fan_max(struct device *dev, ··· 692 { 693 if (input == ADT7470_PWM_ALL_TEMPS) 694 return 0; 695 - if (input < 1 || !power_of_2(input)) 696 return -EINVAL; 697 return ilog2(input) + 1; 698 } ··· 730 return count; 731 } 732 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); 735 736 static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max, 737 set_temp_max, 0); ··· 798 static SENSOR_DEVICE_ATTR(temp9_input, S_IRUGO, show_temp, NULL, 8); 799 static SENSOR_DEVICE_ATTR(temp10_input, S_IRUGO, show_temp, NULL, 9); 800 801 static SENSOR_DEVICE_ATTR(fan1_max, S_IWUSR | S_IRUGO, show_fan_max, 802 set_fan_max, 0); 803 static SENSOR_DEVICE_ATTR(fan2_max, S_IWUSR | S_IRUGO, show_fan_max, ··· 841 static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1); 842 static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2); 843 static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3); 844 845 static SENSOR_DEVICE_ATTR(force_pwm_max, S_IWUSR | S_IRUGO, 846 show_force_pwm_max, set_force_pwm_max, 0); ··· 915 916 static struct attribute *adt7470_attr[] = 917 { 918 - &sensor_dev_attr_alarms.dev_attr.attr, 919 - &sensor_dev_attr_alarm_mask.dev_attr.attr, 920 &sensor_dev_attr_temp1_max.dev_attr.attr, 921 &sensor_dev_attr_temp2_max.dev_attr.attr, 922 &sensor_dev_attr_temp3_max.dev_attr.attr, ··· 946 &sensor_dev_attr_temp8_input.dev_attr.attr, 947 &sensor_dev_attr_temp9_input.dev_attr.attr, 948 &sensor_dev_attr_temp10_input.dev_attr.attr, 949 &sensor_dev_attr_fan1_max.dev_attr.attr, 950 &sensor_dev_attr_fan2_max.dev_attr.attr, 951 &sensor_dev_attr_fan3_max.dev_attr.attr, ··· 968 &sensor_dev_attr_fan2_input.dev_attr.attr, 969 &sensor_dev_attr_fan3_input.dev_attr.attr, 970 &sensor_dev_attr_fan4_input.dev_attr.attr, 971 &sensor_dev_attr_force_pwm_max.dev_attr.attr, 972 &sensor_dev_attr_pwm1.dev_attr.attr, 973 &sensor_dev_attr_pwm2.dev_attr.attr,
··· 48 #define ADT7470_REG_CFG 0x40 49 #define ADT7470_FSPD_MASK 0x04 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 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 67 #define ADT7470_REG_TEMP_LIMITS_BASE_ADDR 0x44 68 #define ADT7470_REG_TEMP_LIMITS_MAX_ADDR 0x57 69 #define ADT7470_REG_FAN_MIN_BASE_ADDR 0x58 ··· 97 #define ADT7470_REG_PWM_AUTO_TEMP(x) (ADT7470_REG_PWM_AUTO_TEMP_BASE_ADDR + \ 98 ((x) / 2)) 99 100 + #define ALARM2(x) ((x) << 8) 101 + 102 #define ADT7470_VENDOR 0x41 103 #define ADT7470_DEVICE 0x70 104 /* datasheet only mentions a revision 2 */ ··· 113 114 /* sleep 1s while gathering temperature data */ 115 #define TEMP_COLLECTION_TIME 1000 116 117 /* datasheet says to divide this number by the fan reading to get fan rpm */ 118 #define FAN_PERIOD_TO_RPM(x) ((90000 * 60) / (x)) ··· 138 u16 fan[ADT7470_FAN_COUNT]; 139 u16 fan_min[ADT7470_FAN_COUNT]; 140 u16 fan_max[ADT7470_FAN_COUNT]; 141 + u16 alarm; 142 + u16 alarms_mask; 143 u8 force_pwm_max; 144 u8 pwm[ADT7470_PWM_COUNT]; 145 u8 pwm_max[ADT7470_PWM_COUNT]; ··· 262 else 263 data->force_pwm_max = 0; 264 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)); 269 data->alarms_mask = adt7470_read_word_data(client, 270 ADT7470_REG_ALARM1_MASK); 271 ··· 370 return sprintf(buf, "%d\n", 1000 * data->temp[attr->index]); 371 } 372 373 + static ssize_t show_alarm_mask(struct device *dev, 374 struct device_attribute *devattr, 375 char *buf) 376 { 377 struct adt7470_data *data = adt7470_update_device(dev); 378 379 + return sprintf(buf, "%x\n", data->alarms_mask); 380 } 381 382 static ssize_t show_fan_max(struct device *dev, ··· 677 { 678 if (input == ADT7470_PWM_ALL_TEMPS) 679 return 0; 680 + if (input < 1 || !is_power_of_2(input)) 681 return -EINVAL; 682 return ilog2(input) + 1; 683 } ··· 715 return count; 716 } 717 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); 732 733 static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max, 734 set_temp_max, 0); ··· 771 static SENSOR_DEVICE_ATTR(temp9_input, S_IRUGO, show_temp, NULL, 8); 772 static SENSOR_DEVICE_ATTR(temp10_input, S_IRUGO, show_temp, NULL, 9); 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 + 795 static SENSOR_DEVICE_ATTR(fan1_max, S_IWUSR | S_IRUGO, show_fan_max, 796 set_fan_max, 0); 797 static SENSOR_DEVICE_ATTR(fan2_max, S_IWUSR | S_IRUGO, show_fan_max, ··· 793 static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1); 794 static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2); 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)); 805 806 static SENSOR_DEVICE_ATTR(force_pwm_max, S_IWUSR | S_IRUGO, 807 show_force_pwm_max, set_force_pwm_max, 0); ··· 858 859 static struct attribute *adt7470_attr[] = 860 { 861 + &dev_attr_alarm_mask.attr, 862 &sensor_dev_attr_temp1_max.dev_attr.attr, 863 &sensor_dev_attr_temp2_max.dev_attr.attr, 864 &sensor_dev_attr_temp3_max.dev_attr.attr, ··· 890 &sensor_dev_attr_temp8_input.dev_attr.attr, 891 &sensor_dev_attr_temp9_input.dev_attr.attr, 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, 903 &sensor_dev_attr_fan1_max.dev_attr.attr, 904 &sensor_dev_attr_fan2_max.dev_attr.attr, 905 &sensor_dev_attr_fan3_max.dev_attr.attr, ··· 902 &sensor_dev_attr_fan2_input.dev_attr.attr, 903 &sensor_dev_attr_fan3_input.dev_attr.attr, 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, 909 &sensor_dev_attr_force_pwm_max.dev_attr.attr, 910 &sensor_dev_attr_pwm1.dev_attr.attr, 911 &sensor_dev_attr_pwm2.dev_attr.attr,
+181 -210
drivers/hwmon/asb100.c
··· 40 #include <linux/slab.h> 41 #include <linux/i2c.h> 42 #include <linux/hwmon.h> 43 #include <linux/hwmon-vid.h> 44 #include <linux/err.h> 45 #include <linux/init.h> 46 #include <linux/jiffies.h> 47 #include <linux/mutex.h> 48 #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 56 /* I2C addresses to scan */ 57 static unsigned short normal_i2c[] = { 0x2d, I2C_CLIENT_END }; ··· 216 .driver = { 217 .name = "asb100", 218 }, 219 - .id = I2C_DRIVERID_ASB100, 220 .attach_adapter = asb100_attach_adapter, 221 .detach_client = asb100_detach_client, 222 }; 223 224 /* 7 Voltages */ 225 #define show_in_reg(reg) \ 226 - static ssize_t show_##reg (struct device *dev, char *buf, int nr) \ 227 { \ 228 struct asb100_data *data = asb100_update_device(dev); \ 229 return sprintf(buf, "%d\n", IN_FROM_REG(data->reg[nr])); \ 230 } ··· 235 show_in_reg(in_max) 236 237 #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) \ 240 { \ 241 struct i2c_client *client = to_i2c_client(dev); \ 242 struct asb100_data *data = i2c_get_clientdata(client); \ 243 unsigned long val = simple_strtoul(buf, NULL, 10); \ ··· 255 set_in_reg(MAX, max) 256 257 #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); 289 290 sysfs_in(0); 291 sysfs_in(1); ··· 271 sysfs_in(6); 272 273 /* 3 Fans */ 274 - static ssize_t show_fan(struct device *dev, char *buf, int nr) 275 { 276 struct asb100_data *data = asb100_update_device(dev); 277 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr], 278 DIV_FROM_REG(data->fan_div[nr]))); 279 } 280 281 - static ssize_t show_fan_min(struct device *dev, char *buf, int nr) 282 { 283 struct asb100_data *data = asb100_update_device(dev); 284 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr], 285 DIV_FROM_REG(data->fan_div[nr]))); 286 } 287 288 - static ssize_t show_fan_div(struct device *dev, char *buf, int nr) 289 { 290 struct asb100_data *data = asb100_update_device(dev); 291 return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr])); 292 } 293 294 - static ssize_t set_fan_min(struct device *dev, const char *buf, 295 - size_t count, int nr) 296 { 297 struct i2c_client *client = to_i2c_client(dev); 298 struct asb100_data *data = i2c_get_clientdata(client); 299 u32 val = simple_strtoul(buf, NULL, 10); ··· 316 determined in part by the fan divisor. This follows the principle of 317 least surprise; the user doesn't expect the fan minimum to change just 318 because the divisor changed. */ 319 - static ssize_t set_fan_div(struct device *dev, const char *buf, 320 - size_t count, int nr) 321 { 322 struct i2c_client *client = to_i2c_client(dev); 323 struct asb100_data *data = i2c_get_clientdata(client); 324 unsigned long min; 325 unsigned long val = simple_strtoul(buf, NULL, 10); 326 int reg; 327 - 328 mutex_lock(&data->update_lock); 329 330 min = FAN_FROM_REG(data->fan_min[nr], 331 DIV_FROM_REG(data->fan_div[nr])); 332 data->fan_div[nr] = DIV_TO_REG(val); 333 334 - switch(nr) { 335 case 0: /* fan 1 */ 336 reg = asb100_read_value(client, ASB100_REG_VID_FANDIV); 337 reg = (reg & 0xcf) | (data->fan_div[0] << 4); ··· 362 } 363 364 #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); 393 394 sysfs_fan(1); 395 sysfs_fan(2); ··· 388 } 389 return ret; 390 } 391 - 392 #define show_temp_reg(reg) \ 393 - static ssize_t show_##reg(struct device *dev, char *buf, int nr) \ 394 { \ 395 struct asb100_data *data = asb100_update_device(dev); \ 396 return sprintf_temp_from_reg(data->reg[nr], buf, nr); \ 397 } ··· 403 show_temp_reg(temp_hyst); 404 405 #define set_temp_reg(REG, reg) \ 406 - static ssize_t set_##reg(struct device *dev, const char *buf, \ 407 - size_t count, int nr) \ 408 { \ 409 struct i2c_client *client = to_i2c_client(dev); \ 410 struct asb100_data *data = i2c_get_clientdata(client); \ 411 long val = simple_strtol(buf, NULL, 10); \ ··· 430 set_temp_reg(HYST, temp_hyst); 431 432 #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); 460 461 sysfs_temp(1); 462 sysfs_temp(2); ··· 443 sysfs_temp(4); 444 445 /* VID */ 446 - static ssize_t show_vid(struct device *dev, struct device_attribute *attr, char *buf) 447 { 448 struct asb100_data *data = asb100_update_device(dev); 449 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm)); ··· 453 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL); 454 455 /* VRM */ 456 - static ssize_t show_vrm(struct device *dev, struct device_attribute *attr, char *buf) 457 { 458 struct asb100_data *data = dev_get_drvdata(dev); 459 return sprintf(buf, "%d\n", data->vrm); 460 } 461 462 - static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 463 { 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; 468 return count; 469 } 470 471 /* Alarms */ 472 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm, set_vrm); 473 474 - static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf) 475 { 476 struct asb100_data *data = asb100_update_device(dev); 477 return sprintf(buf, "%u\n", data->alarms); ··· 480 481 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 482 483 /* 1 PWM */ 484 - static ssize_t show_pwm1(struct device *dev, struct device_attribute *attr, char *buf) 485 { 486 struct asb100_data *data = asb100_update_device(dev); 487 return sprintf(buf, "%d\n", ASB100_PWM_FROM_REG(data->pwm & 0x0f)); 488 } 489 490 - static ssize_t set_pwm1(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 491 { 492 struct i2c_client *client = to_i2c_client(dev); 493 struct asb100_data *data = i2c_get_clientdata(client); ··· 522 return count; 523 } 524 525 - static ssize_t show_pwm_enable1(struct device *dev, struct device_attribute *attr, char *buf) 526 { 527 struct asb100_data *data = asb100_update_device(dev); 528 return sprintf(buf, "%d\n", (data->pwm & 0x80) ? 1 : 0); 529 } 530 531 - static ssize_t set_pwm_enable1(struct device *dev, struct device_attribute *attr, const char *buf, 532 - size_t count) 533 { 534 struct i2c_client *client = to_i2c_client(dev); 535 struct asb100_data *data = i2c_get_clientdata(client); ··· 549 show_pwm_enable1, set_pwm_enable1); 550 551 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, 573 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, 583 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, 596 597 &dev_attr_cpu0_vid.attr, 598 &dev_attr_vrm.attr, ··· 632 } 633 634 static int asb100_detect_subclients(struct i2c_adapter *adapter, int address, 635 - int kind, struct i2c_client *new_client) 636 { 637 int i, id, err; 638 - struct asb100_data *data = i2c_get_clientdata(new_client); 639 640 data->lm75[0] = kzalloc(sizeof(struct i2c_client), GFP_KERNEL); 641 if (!(data->lm75[0])) { ··· 655 for (i = 2; i <= 3; i++) { 656 if (force_subclients[i] < 0x48 || 657 force_subclients[i] > 0x4f) { 658 - dev_err(&new_client->dev, "invalid subclient " 659 "address %d; must be 0x48-0x4f\n", 660 force_subclients[i]); 661 err = -ENODEV; 662 goto ERROR_SC_2; 663 } 664 } 665 - asb100_write_value(new_client, ASB100_REG_I2C_SUBADDR, 666 (force_subclients[2] & 0x07) | 667 - ((force_subclients[3] & 0x07) <<4)); 668 data->lm75[0]->addr = force_subclients[2]; 669 data->lm75[1]->addr = force_subclients[3]; 670 } else { 671 - int val = asb100_read_value(new_client, ASB100_REG_I2C_SUBADDR); 672 data->lm75[0]->addr = 0x48 + (val & 0x07); 673 data->lm75[1]->addr = 0x48 + ((val >> 4) & 0x07); 674 } 675 676 - if(data->lm75[0]->addr == data->lm75[1]->addr) { 677 - dev_err(&new_client->dev, "duplicate addresses 0x%x " 678 "for subclients\n", data->lm75[0]->addr); 679 err = -ENODEV; 680 goto ERROR_SC_2; ··· 684 i2c_set_clientdata(data->lm75[i], NULL); 685 data->lm75[i]->adapter = adapter; 686 data->lm75[i]->driver = &asb100_driver; 687 - data->lm75[i]->flags = 0; 688 strlcpy(data->lm75[i]->name, "asb100 subclient", I2C_NAME_SIZE); 689 } 690 691 if ((err = i2c_attach_client(data->lm75[0]))) { 692 - dev_err(&new_client->dev, "subclient %d registration " 693 "at address 0x%x failed.\n", i, data->lm75[0]->addr); 694 goto ERROR_SC_2; 695 } 696 697 if ((err = i2c_attach_client(data->lm75[1]))) { 698 - dev_err(&new_client->dev, "subclient %d registration " 699 "at address 0x%x failed.\n", i, data->lm75[1]->addr); 700 goto ERROR_SC_3; 701 } ··· 715 static int asb100_detect(struct i2c_adapter *adapter, int address, int kind) 716 { 717 int err; 718 - struct i2c_client *new_client; 719 struct asb100_data *data; 720 721 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { ··· 735 goto ERROR0; 736 } 737 738 - new_client = &data->client; 739 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; 745 746 /* Now, we do the remaining detection. */ 747 ··· 750 bank. */ 751 if (kind < 0) { 752 753 - int val1 = asb100_read_value(new_client, ASB100_REG_BANK); 754 - int val2 = asb100_read_value(new_client, ASB100_REG_CHIPMAN); 755 756 /* If we're in bank 0 */ 757 - if ( (!(val1 & 0x07)) && 758 /* Check for ASB100 ID (low byte) */ 759 - ( ((!(val1 & 0x80)) && (val2 != 0x94)) || 760 /* Check for ASB100 ID (high byte ) */ 761 - ((val1 & 0x80) && (val2 != 0x06)) ) ) { 762 pr_debug("asb100.o: detect failed, " 763 "bad chip id 0x%02x!\n", val2); 764 err = -ENODEV; ··· 769 770 /* We have either had a force parameter, or we have already detected 771 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); 774 775 /* Determine the chip type. */ 776 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); 779 780 if ((val1 == 0x31) && (val2 == 0x06)) 781 kind = asb100; 782 else { 783 if (kind == 0) 784 - dev_warn(&new_client->dev, "ignoring " 785 "'force' parameter for unknown chip " 786 "at adapter %d, address 0x%02x.\n", 787 i2c_adapter_id(adapter), address); ··· 791 } 792 793 /* Fill in remaining client fields and put it into the global list */ 794 - strlcpy(new_client->name, "asb100", I2C_NAME_SIZE); 795 data->type = kind; 796 - 797 - data->valid = 0; 798 mutex_init(&data->update_lock); 799 800 /* Tell the I2C layer a new client has arrived */ 801 - if ((err = i2c_attach_client(new_client))) 802 goto ERROR1; 803 804 /* Attach secondary lm75 clients */ 805 if ((err = asb100_detect_subclients(adapter, address, kind, 806 - new_client))) 807 goto ERROR2; 808 809 /* Initialize the chip */ 810 - asb100_init_client(new_client); 811 812 /* 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)); 816 817 /* Register sysfs hooks */ 818 - if ((err = sysfs_create_group(&new_client->dev.kobj, &asb100_group))) 819 goto ERROR3; 820 821 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 822 if (IS_ERR(data->hwmon_dev)) { 823 err = PTR_ERR(data->hwmon_dev); 824 goto ERROR4; ··· 825 return 0; 826 827 ERROR4: 828 - sysfs_remove_group(&new_client->dev.kobj, &asb100_group); 829 ERROR3: 830 i2c_detach_client(data->lm75[1]); 831 i2c_detach_client(data->lm75[0]); 832 kfree(data->lm75[1]); 833 kfree(data->lm75[0]); 834 ERROR2: 835 - i2c_detach_client(new_client); 836 ERROR1: 837 kfree(data); 838 ERROR0: ··· 888 /* convert from ISA to LM75 I2C addresses */ 889 switch (reg & 0xff) { 890 case 0x50: /* TEMP */ 891 - res = swab16(i2c_smbus_read_word_data (cl, 0)); 892 break; 893 case 0x52: /* CONFIG */ 894 res = i2c_smbus_read_byte_data(cl, 1); 895 break; 896 case 0x53: /* HYST */ 897 - res = swab16(i2c_smbus_read_word_data (cl, 2)); 898 break; 899 case 0x55: /* MAX */ 900 default: 901 - res = swab16(i2c_smbus_read_word_data (cl, 3)); 902 break; 903 } 904 } ··· 961 vid = vid_from_reg(vid, data->vrm); 962 963 /* Start monitoring */ 964 - asb100_write_value(client, ASB100_REG_CONFIG, 965 (asb100_read_value(client, ASB100_REG_CONFIG) & 0xf7) | 0x01); 966 } 967 ··· 1050 1051 module_init(asb100_init); 1052 module_exit(asb100_exit); 1053 -
··· 40 #include <linux/slab.h> 41 #include <linux/i2c.h> 42 #include <linux/hwmon.h> 43 + #include <linux/hwmon-sysfs.h> 44 #include <linux/hwmon-vid.h> 45 #include <linux/err.h> 46 #include <linux/init.h> 47 #include <linux/jiffies.h> 48 #include <linux/mutex.h> 49 #include "lm75.h" 50 51 /* I2C addresses to scan */ 52 static unsigned short normal_i2c[] = { 0x2d, I2C_CLIENT_END }; ··· 221 .driver = { 222 .name = "asb100", 223 }, 224 .attach_adapter = asb100_attach_adapter, 225 .detach_client = asb100_detach_client, 226 }; 227 228 /* 7 Voltages */ 229 #define show_in_reg(reg) \ 230 + static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \ 231 + char *buf) \ 232 { \ 233 + int nr = to_sensor_dev_attr(attr)->index; \ 234 struct asb100_data *data = asb100_update_device(dev); \ 235 return sprintf(buf, "%d\n", IN_FROM_REG(data->reg[nr])); \ 236 } ··· 239 show_in_reg(in_max) 240 241 #define set_in_reg(REG, reg) \ 242 + static ssize_t set_in_##reg(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 asb100_data *data = i2c_get_clientdata(client); \ 248 unsigned long val = simple_strtoul(buf, NULL, 10); \ ··· 258 set_in_reg(MAX, max) 259 260 #define sysfs_in(offset) \ 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) 267 268 sysfs_in(0); 269 sysfs_in(1); ··· 299 sysfs_in(6); 300 301 /* 3 Fans */ 302 + static ssize_t show_fan(struct device *dev, struct device_attribute *attr, 303 + char *buf) 304 { 305 + int nr = to_sensor_dev_attr(attr)->index; 306 struct asb100_data *data = asb100_update_device(dev); 307 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr], 308 DIV_FROM_REG(data->fan_div[nr]))); 309 } 310 311 + static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr, 312 + char *buf) 313 { 314 + int nr = to_sensor_dev_attr(attr)->index; 315 struct asb100_data *data = asb100_update_device(dev); 316 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr], 317 DIV_FROM_REG(data->fan_div[nr]))); 318 } 319 320 + static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr, 321 + char *buf) 322 { 323 + int nr = to_sensor_dev_attr(attr)->index; 324 struct asb100_data *data = asb100_update_device(dev); 325 return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr])); 326 } 327 328 + static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, 329 + const char *buf, size_t count) 330 { 331 + int nr = to_sensor_dev_attr(attr)->index; 332 struct i2c_client *client = to_i2c_client(dev); 333 struct asb100_data *data = i2c_get_clientdata(client); 334 u32 val = simple_strtoul(buf, NULL, 10); ··· 337 determined in part by the fan divisor. This follows the principle of 338 least surprise; the user doesn't expect the fan minimum to change just 339 because the divisor changed. */ 340 + static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 341 + const char *buf, size_t count) 342 { 343 + int nr = to_sensor_dev_attr(attr)->index; 344 struct i2c_client *client = to_i2c_client(dev); 345 struct asb100_data *data = i2c_get_clientdata(client); 346 unsigned long min; 347 unsigned long val = simple_strtoul(buf, NULL, 10); 348 int reg; 349 + 350 mutex_lock(&data->update_lock); 351 352 min = FAN_FROM_REG(data->fan_min[nr], 353 DIV_FROM_REG(data->fan_div[nr])); 354 data->fan_div[nr] = DIV_TO_REG(val); 355 356 + switch (nr) { 357 case 0: /* fan 1 */ 358 reg = asb100_read_value(client, ASB100_REG_VID_FANDIV); 359 reg = (reg & 0xcf) | (data->fan_div[0] << 4); ··· 382 } 383 384 #define sysfs_fan(offset) \ 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) 391 392 sysfs_fan(1); 393 sysfs_fan(2); ··· 430 } 431 return ret; 432 } 433 + 434 #define show_temp_reg(reg) \ 435 + static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \ 436 + char *buf) \ 437 { \ 438 + int nr = to_sensor_dev_attr(attr)->index; \ 439 struct asb100_data *data = asb100_update_device(dev); \ 440 return sprintf_temp_from_reg(data->reg[nr], buf, nr); \ 441 } ··· 443 show_temp_reg(temp_hyst); 444 445 #define set_temp_reg(REG, reg) \ 446 + static ssize_t set_##reg(struct device *dev, struct device_attribute *attr, \ 447 + const char *buf, size_t count) \ 448 { \ 449 + int nr = to_sensor_dev_attr(attr)->index; \ 450 struct i2c_client *client = to_i2c_client(dev); \ 451 struct asb100_data *data = i2c_get_clientdata(client); \ 452 long val = simple_strtol(buf, NULL, 10); \ ··· 469 set_temp_reg(HYST, temp_hyst); 470 471 #define sysfs_temp(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) 478 479 sysfs_temp(1); 480 sysfs_temp(2); ··· 503 sysfs_temp(4); 504 505 /* VID */ 506 + static ssize_t show_vid(struct device *dev, struct device_attribute *attr, 507 + char *buf) 508 { 509 struct asb100_data *data = asb100_update_device(dev); 510 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm)); ··· 512 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL); 513 514 /* VRM */ 515 + static ssize_t show_vrm(struct device *dev, struct device_attribute *attr, 516 + char *buf) 517 { 518 struct asb100_data *data = dev_get_drvdata(dev); 519 return sprintf(buf, "%d\n", data->vrm); 520 } 521 522 + static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, 523 + const char *buf, size_t count) 524 { 525 + struct asb100_data *data = dev_get_drvdata(dev); 526 + data->vrm = simple_strtoul(buf, NULL, 10); 527 return count; 528 } 529 530 /* Alarms */ 531 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm, set_vrm); 532 533 + static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, 534 + char *buf) 535 { 536 struct asb100_data *data = asb100_update_device(dev); 537 return sprintf(buf, "%u\n", data->alarms); ··· 538 539 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 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 + 560 /* 1 PWM */ 561 + static ssize_t show_pwm1(struct device *dev, struct device_attribute *attr, 562 + char *buf) 563 { 564 struct asb100_data *data = asb100_update_device(dev); 565 return sprintf(buf, "%d\n", ASB100_PWM_FROM_REG(data->pwm & 0x0f)); 566 } 567 568 + static ssize_t set_pwm1(struct device *dev, struct device_attribute *attr, 569 + const char *buf, size_t count) 570 { 571 struct i2c_client *client = to_i2c_client(dev); 572 struct asb100_data *data = i2c_get_clientdata(client); ··· 559 return count; 560 } 561 562 + static ssize_t show_pwm_enable1(struct device *dev, 563 + struct device_attribute *attr, char *buf) 564 { 565 struct asb100_data *data = asb100_update_device(dev); 566 return sprintf(buf, "%d\n", (data->pwm & 0x80) ? 1 : 0); 567 } 568 569 + static ssize_t set_pwm_enable1(struct device *dev, 570 + struct device_attribute *attr, const char *buf, size_t count) 571 { 572 struct i2c_client *client = to_i2c_client(dev); 573 struct asb100_data *data = i2c_get_clientdata(client); ··· 585 show_pwm_enable1, set_pwm_enable1); 586 587 static struct attribute *asb100_attributes[] = { 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, 609 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, 619 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, 644 645 &dev_attr_cpu0_vid.attr, 646 &dev_attr_vrm.attr, ··· 656 } 657 658 static int asb100_detect_subclients(struct i2c_adapter *adapter, int address, 659 + int kind, struct i2c_client *client) 660 { 661 int i, id, err; 662 + struct asb100_data *data = i2c_get_clientdata(client); 663 664 data->lm75[0] = kzalloc(sizeof(struct i2c_client), GFP_KERNEL); 665 if (!(data->lm75[0])) { ··· 679 for (i = 2; i <= 3; i++) { 680 if (force_subclients[i] < 0x48 || 681 force_subclients[i] > 0x4f) { 682 + dev_err(&client->dev, "invalid subclient " 683 "address %d; must be 0x48-0x4f\n", 684 force_subclients[i]); 685 err = -ENODEV; 686 goto ERROR_SC_2; 687 } 688 } 689 + asb100_write_value(client, ASB100_REG_I2C_SUBADDR, 690 (force_subclients[2] & 0x07) | 691 + ((force_subclients[3] & 0x07) << 4)); 692 data->lm75[0]->addr = force_subclients[2]; 693 data->lm75[1]->addr = force_subclients[3]; 694 } else { 695 + int val = asb100_read_value(client, ASB100_REG_I2C_SUBADDR); 696 data->lm75[0]->addr = 0x48 + (val & 0x07); 697 data->lm75[1]->addr = 0x48 + ((val >> 4) & 0x07); 698 } 699 700 + if (data->lm75[0]->addr == data->lm75[1]->addr) { 701 + dev_err(&client->dev, "duplicate addresses 0x%x " 702 "for subclients\n", data->lm75[0]->addr); 703 err = -ENODEV; 704 goto ERROR_SC_2; ··· 708 i2c_set_clientdata(data->lm75[i], NULL); 709 data->lm75[i]->adapter = adapter; 710 data->lm75[i]->driver = &asb100_driver; 711 strlcpy(data->lm75[i]->name, "asb100 subclient", I2C_NAME_SIZE); 712 } 713 714 if ((err = i2c_attach_client(data->lm75[0]))) { 715 + dev_err(&client->dev, "subclient %d registration " 716 "at address 0x%x failed.\n", i, data->lm75[0]->addr); 717 goto ERROR_SC_2; 718 } 719 720 if ((err = i2c_attach_client(data->lm75[1]))) { 721 + dev_err(&client->dev, "subclient %d registration " 722 "at address 0x%x failed.\n", i, data->lm75[1]->addr); 723 goto ERROR_SC_3; 724 } ··· 740 static int asb100_detect(struct i2c_adapter *adapter, int address, int kind) 741 { 742 int err; 743 + struct i2c_client *client; 744 struct asb100_data *data; 745 746 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { ··· 760 goto ERROR0; 761 } 762 763 + client = &data->client; 764 mutex_init(&data->lock); 765 + i2c_set_clientdata(client, data); 766 + client->addr = address; 767 + client->adapter = adapter; 768 + client->driver = &asb100_driver; 769 770 /* Now, we do the remaining detection. */ 771 ··· 776 bank. */ 777 if (kind < 0) { 778 779 + int val1 = asb100_read_value(client, ASB100_REG_BANK); 780 + int val2 = asb100_read_value(client, ASB100_REG_CHIPMAN); 781 782 /* If we're in bank 0 */ 783 + if ((!(val1 & 0x07)) && 784 /* Check for ASB100 ID (low byte) */ 785 + (((!(val1 & 0x80)) && (val2 != 0x94)) || 786 /* Check for ASB100 ID (high byte ) */ 787 + ((val1 & 0x80) && (val2 != 0x06)))) { 788 pr_debug("asb100.o: detect failed, " 789 "bad chip id 0x%02x!\n", val2); 790 err = -ENODEV; ··· 795 796 /* We have either had a force parameter, or we have already detected 797 Winbond. Put it now into bank 0 and Vendor ID High Byte */ 798 + asb100_write_value(client, ASB100_REG_BANK, 799 + (asb100_read_value(client, ASB100_REG_BANK) & 0x78) | 0x80); 800 801 /* Determine the chip type. */ 802 if (kind <= 0) { 803 + int val1 = asb100_read_value(client, ASB100_REG_WCHIPID); 804 + int val2 = asb100_read_value(client, ASB100_REG_CHIPMAN); 805 806 if ((val1 == 0x31) && (val2 == 0x06)) 807 kind = asb100; 808 else { 809 if (kind == 0) 810 + dev_warn(&client->dev, "ignoring " 811 "'force' parameter for unknown chip " 812 "at adapter %d, address 0x%02x.\n", 813 i2c_adapter_id(adapter), address); ··· 817 } 818 819 /* Fill in remaining client fields and put it into the global list */ 820 + strlcpy(client->name, "asb100", I2C_NAME_SIZE); 821 data->type = kind; 822 mutex_init(&data->update_lock); 823 824 /* Tell the I2C layer a new client has arrived */ 825 + if ((err = i2c_attach_client(client))) 826 goto ERROR1; 827 828 /* Attach secondary lm75 clients */ 829 if ((err = asb100_detect_subclients(adapter, address, kind, 830 + client))) 831 goto ERROR2; 832 833 /* Initialize the chip */ 834 + asb100_init_client(client); 835 836 /* A few vars need to be filled upon startup */ 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)); 840 841 /* Register sysfs hooks */ 842 + if ((err = sysfs_create_group(&client->dev.kobj, &asb100_group))) 843 goto ERROR3; 844 845 + data->hwmon_dev = hwmon_device_register(&client->dev); 846 if (IS_ERR(data->hwmon_dev)) { 847 err = PTR_ERR(data->hwmon_dev); 848 goto ERROR4; ··· 853 return 0; 854 855 ERROR4: 856 + sysfs_remove_group(&client->dev.kobj, &asb100_group); 857 ERROR3: 858 i2c_detach_client(data->lm75[1]); 859 i2c_detach_client(data->lm75[0]); 860 kfree(data->lm75[1]); 861 kfree(data->lm75[0]); 862 ERROR2: 863 + i2c_detach_client(client); 864 ERROR1: 865 kfree(data); 866 ERROR0: ··· 916 /* convert from ISA to LM75 I2C addresses */ 917 switch (reg & 0xff) { 918 case 0x50: /* TEMP */ 919 + res = swab16(i2c_smbus_read_word_data(cl, 0)); 920 break; 921 case 0x52: /* CONFIG */ 922 res = i2c_smbus_read_byte_data(cl, 1); 923 break; 924 case 0x53: /* HYST */ 925 + res = swab16(i2c_smbus_read_word_data(cl, 2)); 926 break; 927 case 0x55: /* MAX */ 928 default: 929 + res = swab16(i2c_smbus_read_word_data(cl, 3)); 930 break; 931 } 932 } ··· 989 vid = vid_from_reg(vid, data->vrm); 990 991 /* Start monitoring */ 992 + asb100_write_value(client, ASB100_REG_CONFIG, 993 (asb100_read_value(client, ASB100_REG_CONFIG) & 0xf7) | 0x01); 994 } 995 ··· 1078 1079 module_init(asb100_init); 1080 module_exit(asb100_exit);
+17 -6
drivers/hwmon/dme1737.c
··· 44 module_param(force_start, bool, 0); 45 MODULE_PARM_DESC(force_start, "Force the chip to start monitoring inputs"); 46 47 /* Addresses to scan */ 48 static unsigned short normal_i2c[] = {0x2c, 0x2d, 0x2e, I2C_CLIENT_END}; 49 ··· 283 /* Fan input RPM */ 284 static inline int FAN_FROM_REG(int reg, int tpc) 285 { 286 - return (reg == 0 || reg == 0xffff) ? 0 : 287 - (tpc == 0) ? 90000 * 60 / reg : tpc * reg; 288 } 289 290 static inline int FAN_TO_REG(int val, int tpc) 291 { 292 - return SENSORS_LIMIT((tpc == 0) ? 90000 * 60 / val : val / tpc, 293 - 0, 0xffff); 294 } 295 296 /* Fan TPC (tach pulse count) ··· 2030 2031 /* Check device ID 2032 * The DME1737 can return either 0x78 or 0x77 as its device ID. */ 2033 - reg = dme1737_sio_inb(sio_cip, 0x20); 2034 if (!(reg == 0x77 || reg == 0x78)) { 2035 err = -ENODEV; 2036 goto exit; ··· 2202 /* Check device ID 2203 * We currently know about SCH3112 (0x7c), SCH3114 (0x7d), and 2204 * SCH3116 (0x7f). */ 2205 - reg = dme1737_sio_inb(sio_cip, 0x20); 2206 if (!(reg == 0x7c || reg == 0x7d || reg == 0x7f)) { 2207 err = -ENODEV; 2208 goto exit;
··· 44 module_param(force_start, bool, 0); 45 MODULE_PARM_DESC(force_start, "Force the chip to start monitoring inputs"); 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 + 51 /* Addresses to scan */ 52 static unsigned short normal_i2c[] = {0x2c, 0x2d, 0x2e, I2C_CLIENT_END}; 53 ··· 279 /* Fan input RPM */ 280 static inline int FAN_FROM_REG(int reg, int tpc) 281 { 282 + if (tpc) { 283 + return tpc * reg; 284 + } else { 285 + return (reg == 0 || reg == 0xffff) ? 0 : 90000 * 60 / reg; 286 + } 287 } 288 289 static inline int FAN_TO_REG(int val, int tpc) 290 { 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 + } 297 } 298 299 /* Fan TPC (tach pulse count) ··· 2019 2020 /* Check device ID 2021 * The DME1737 can return either 0x78 or 0x77 as its device ID. */ 2022 + reg = force_id ? force_id : dme1737_sio_inb(sio_cip, 0x20); 2023 if (!(reg == 0x77 || reg == 0x78)) { 2024 err = -ENODEV; 2025 goto exit; ··· 2191 /* Check device ID 2192 * We currently know about SCH3112 (0x7c), SCH3114 (0x7d), and 2193 * SCH3116 (0x7f). */ 2194 + reg = force_id ? force_id : dme1737_sio_inb(sio_cip, 0x20); 2195 if (!(reg == 0x7c || reg == 0x7d || reg == 0x7f)) { 2196 err = -ENODEV; 2197 goto exit;
-1
drivers/hwmon/ds1621.c
··· 94 .driver = { 95 .name = "ds1621", 96 }, 97 - .id = I2C_DRIVERID_DS1621, 98 .attach_adapter = ds1621_attach_adapter, 99 .detach_client = ds1621_detach_client, 100 };
··· 94 .driver = { 95 .name = "ds1621", 96 }, 97 .attach_adapter = ds1621_attach_adapter, 98 .detach_client = ds1621_detach_client, 99 };
+5 -1
drivers/hwmon/f71805f.c
··· 41 #include <linux/ioport.h> 42 #include <asm/io.h> 43 44 static struct platform_device *pdev; 45 46 #define DRVNAME "f71805f" ··· 1501 if (devid != SIO_FINTEK_ID) 1502 goto exit; 1503 1504 - devid = superio_inw(sioaddr, SIO_REG_DEVID); 1505 switch (devid) { 1506 case SIO_F71805F_ID: 1507 sio_data->kind = f71805f;
··· 41 #include <linux/ioport.h> 42 #include <asm/io.h> 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 + 48 static struct platform_device *pdev; 49 50 #define DRVNAME "f71805f" ··· 1497 if (devid != SIO_FINTEK_ID) 1498 goto exit; 1499 1500 + devid = force_id ? force_id : superio_inw(sioaddr, SIO_REG_DEVID); 1501 switch (devid) { 1502 case SIO_F71805F_ID: 1503 sio_data->kind = f71805f;
+5 -1
drivers/hwmon/f71882fg.c
··· 74 75 #define FAN_MIN_DETECT 366 /* Lowest detectable fanspeed */ 76 77 static struct platform_device *f71882fg_pdev = NULL; 78 79 /* Super-I/O Function prototypes */ ··· 847 goto exit; 848 } 849 850 - devid = superio_inw(sioaddr, SIO_REG_DEVID); 851 if (devid != SIO_F71882_ID) { 852 printk(KERN_INFO DRVNAME ": Unsupported Fintek device\n"); 853 goto exit;
··· 74 75 #define FAN_MIN_DETECT 366 /* Lowest detectable fanspeed */ 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 + 81 static struct platform_device *f71882fg_pdev = NULL; 82 83 /* Super-I/O Function prototypes */ ··· 843 goto exit; 844 } 845 846 + devid = force_id ? force_id : superio_inw(sioaddr, SIO_REG_DEVID); 847 if (devid != SIO_F71882_ID) { 848 printk(KERN_INFO DRVNAME ": Unsupported Fintek device\n"); 849 goto exit;
-1
drivers/hwmon/fscher.c
··· 123 .driver = { 124 .name = "fscher", 125 }, 126 - .id = I2C_DRIVERID_FSCHER, 127 .attach_adapter = fscher_attach_adapter, 128 .detach_client = fscher_detach_client, 129 };
··· 123 .driver = { 124 .name = "fscher", 125 }, 126 .attach_adapter = fscher_attach_adapter, 127 .detach_client = fscher_detach_client, 128 };
+90 -4
drivers/hwmon/fschmd.c
··· 41 #include <linux/err.h> 42 #include <linux/mutex.h> 43 #include <linux/sysfs.h> 44 45 /* Addresses to scan */ 46 static unsigned short normal_i2c[] = { 0x73, I2C_CLIENT_END }; ··· 134 { 0x71, 0x81, 0x91 }, /* her */ 135 { 0x71, 0xd1, 0x81, 0x91 }, /* scy */ 136 { 0x71, 0x81, 0x91 }, /* hrc */ 137 - { 0x71, 0x81, 0x91, 0xd1, 0xe1 }, /* hmd */ 138 }; 139 140 /* temperature high limit registers, FSC does not document these. Proven to be ··· 147 { 0x76, 0x86, 0x96 }, /* her */ 148 { 0x76, 0xd6, 0x86, 0x96 }, /* scy */ 149 { 0x76, 0x86, 0x96 }, /* hrc */ 150 - { 0x76, 0x86, 0x96, 0xd6, 0xe6 }, /* hmd */ 151 }; 152 153 /* These were found through experimenting with an fscher, currently they are ··· 211 u8 fan_ripple[6]; /* divider for rps */ 212 }; 213 214 /* 215 * Sysfs attr show / store functions 216 */ ··· 229 int index = to_sensor_dev_attr(devattr)->index; 230 struct fschmd_data *data = fschmd_update_device(dev); 231 232 - return sprintf(buf, "%d\n", (data->volt[index] * 233 - max_reading[index] + 128) / 255); 234 } 235 236 ··· 538 * Real code 539 */ 540 541 static int fschmd_detect(struct i2c_adapter *adapter, int address, int kind) 542 { 543 struct i2c_client *client; ··· 659 data->temp_max[0] = 70 + 128; 660 data->temp_max[1] = 50 + 128; 661 data->temp_max[2] = 50 + 128; 662 } 663 664 /* i2c kind goes from 1-5, we want from 0-4 to address arrays */
··· 41 #include <linux/err.h> 42 #include <linux/mutex.h> 43 #include <linux/sysfs.h> 44 + #include <linux/dmi.h> 45 46 /* Addresses to scan */ 47 static unsigned short normal_i2c[] = { 0x73, I2C_CLIENT_END }; ··· 133 { 0x71, 0x81, 0x91 }, /* her */ 134 { 0x71, 0xd1, 0x81, 0x91 }, /* scy */ 135 { 0x71, 0x81, 0x91 }, /* hrc */ 136 + { 0x71, 0x81, 0x91, 0xd1, 0xe1 }, /* hmd */ 137 }; 138 139 /* temperature high limit registers, FSC does not document these. Proven to be ··· 146 { 0x76, 0x86, 0x96 }, /* her */ 147 { 0x76, 0xd6, 0x86, 0x96 }, /* scy */ 148 { 0x76, 0x86, 0x96 }, /* hrc */ 149 + { 0x76, 0x86, 0x96, 0xd6, 0xe6 }, /* hmd */ 150 }; 151 152 /* These were found through experimenting with an fscher, currently they are ··· 210 u8 fan_ripple[6]; /* divider for rps */ 211 }; 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 + 220 /* 221 * Sysfs attr show / store functions 222 */ ··· 221 int index = to_sensor_dev_attr(devattr)->index; 222 struct fschmd_data *data = fschmd_update_device(dev); 223 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); 231 } 232 233 ··· 525 * Real code 526 */ 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 + 590 static int fschmd_detect(struct i2c_adapter *adapter, int address, int kind) 591 { 592 struct i2c_client *client; ··· 584 data->temp_max[0] = 70 + 128; 585 data->temp_max[1] = 50 + 128; 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 + } 598 } 599 600 /* i2c kind goes from 1-5, we want from 0-4 to address arrays */
-1
drivers/hwmon/fscpos.c
··· 105 .driver = { 106 .name = "fscpos", 107 }, 108 - .id = I2C_DRIVERID_FSCPOS, 109 .attach_adapter = fscpos_attach_adapter, 110 .detach_client = fscpos_detach_client, 111 };
··· 105 .driver = { 106 .name = "fscpos", 107 }, 108 .attach_adapter = fscpos_attach_adapter, 109 .detach_client = fscpos_detach_client, 110 };
+181 -88
drivers/hwmon/gl518sm.c
··· 30 * We did not keep that part of the original driver in the Linux 2.6 31 * version, since it was making the driver significantly more complex 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 */ 38 39 #include <linux/module.h> ··· 38 #include <linux/jiffies.h> 39 #include <linux/i2c.h> 40 #include <linux/hwmon.h> 41 #include <linux/err.h> 42 #include <linux/mutex.h> 43 #include <linux/sysfs.h> ··· 96 long rpmdiv; 97 if (rpm == 0) 98 return 0; 99 - rpmdiv = SENSORS_LIMIT(rpm, 1, 1920000) * div; 100 - return SENSORS_LIMIT((960000 + rpmdiv / 2) / rpmdiv, 1, 255); 101 } 102 - #define FAN_FROM_REG(val,div) ((val)==0 ? 0 : (960000/((val)*(div)))) 103 104 #define IN_TO_REG(val) (SENSORS_LIMIT((((val)+9)/19),0,255)) 105 #define IN_FROM_REG(val) ((val)*19) ··· 107 #define VDD_TO_REG(val) (SENSORS_LIMIT((((val)*4+47)/95),0,255)) 108 #define VDD_FROM_REG(val) (((val)*95+2)/4) 109 110 - #define DIV_TO_REG(val) ((val)==4?2:(val)==2?1:(val)==1?0:3) 111 #define DIV_FROM_REG(val) (1 << (val)) 112 113 #define BEEP_MASK_TO_REG(val) ((val) & 0x7f & data->alarm_mask) ··· 125 u8 voltage_in[4]; /* Register values; [0] = VDD */ 126 u8 voltage_min[4]; /* Register values; [0] = VDD */ 127 u8 voltage_max[4]; /* Register values; [0] = VDD */ 128 - u8 iter_voltage_in[4]; /* Register values; [0] = VDD */ 129 u8 fan_in[2]; 130 u8 fan_min[2]; 131 u8 fan_div[2]; /* Register encoding, shifted right */ ··· 133 u8 temp_max; /* Register values */ 134 u8 temp_hyst; /* Register values */ 135 u8 alarms; /* Register value */ 136 - u8 alarm_mask; /* Register value */ 137 u8 beep_mask; /* Register value */ 138 u8 beep_enable; /* Boolean */ 139 }; ··· 151 .driver = { 152 .name = "gl518sm", 153 }, 154 - .id = I2C_DRIVERID_GL518, 155 .attach_adapter = gl518_attach_adapter, 156 .detach_client = gl518_detach_client, 157 }; ··· 166 return sprintf(buf, "%d\n", type##_FROM_REG(data->value)); \ 167 } 168 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 show(TEMP, temp_input1, temp_in); 178 show(TEMP, temp_max1, temp_max); 179 show(TEMP, temp_hyst1, temp_hyst); 180 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 show(VDD, in_input0, voltage_in[0]); 188 show(IN, in_input1, voltage_in[1]); 189 show(IN, in_input2, voltage_in[2]); ··· 185 show(RAW, alarms, alarms); 186 show(BOOL, beep_enable, beep_enable); 187 show(BEEP_MASK, beep_mask, beep_mask); 188 189 #define set(type, suffix, value, reg) \ 190 static ssize_t set_##suffix(struct device *dev, struct device_attribute *attr, const char *buf, \ ··· 253 set(TEMP, temp_max1, temp_max, GL518_REG_TEMP_MAX); 254 set(TEMP, temp_hyst1, temp_hyst, GL518_REG_TEMP_HYST); 255 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 set_low(VDD, in_min0, voltage_min[0], GL518_REG_VDD_LIMIT); 259 set_low(IN, in_min1, voltage_min[1], GL518_REG_VIN1_LIMIT); 260 set_low(IN, in_min2, voltage_min[2], GL518_REG_VIN2_LIMIT); ··· 264 set_bits(BOOL, beep_enable, beep_enable, GL518_REG_CONF, 0x04, 2); 265 set(BEEP_MASK, beep_mask, beep_mask, GL518_REG_ALARM); 266 267 - static ssize_t set_fan_min1(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 268 { 269 struct i2c_client *client = to_i2c_client(dev); 270 struct gl518_data *data = i2c_get_clientdata(client); 271 int regvalue; 272 unsigned long val = simple_strtoul(buf, NULL, 10); 273 274 mutex_lock(&data->update_lock); 275 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); 279 gl518_write_value(client, GL518_REG_FAN_LIMIT, regvalue); 280 281 data->beep_mask = gl518_read_value(client, GL518_REG_ALARM); 282 - if (data->fan_min[0] == 0) 283 - data->alarm_mask &= ~0x20; 284 else 285 - data->alarm_mask |= 0x20; 286 data->beep_mask &= data->alarm_mask; 287 gl518_write_value(client, GL518_REG_ALARM, data->beep_mask); 288 ··· 292 return count; 293 } 294 295 - static ssize_t set_fan_min2(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 296 { 297 struct i2c_client *client = to_i2c_client(dev); 298 struct gl518_data *data = i2c_get_clientdata(client); 299 int regvalue; 300 unsigned long val = simple_strtoul(buf, NULL, 10); 301 302 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 - 317 mutex_unlock(&data->update_lock); 318 return count; 319 } ··· 327 static DEVICE_ATTR(temp1_max_hyst, S_IWUSR|S_IRUGO, 328 show_temp_hyst1, set_temp_hyst1); 329 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); 336 static DEVICE_ATTR(in0_input, S_IRUGO, show_in_input0, NULL); 337 static DEVICE_ATTR(in1_input, S_IRUGO, show_in_input1, NULL); 338 static DEVICE_ATTR(in2_input, S_IRUGO, show_in_input2, NULL); ··· 355 static DEVICE_ATTR(beep_mask, S_IWUSR|S_IRUGO, 356 show_beep_mask, set_beep_mask); 357 358 static struct attribute *gl518_attributes[] = { 359 - &dev_attr_in0_input.attr, 360 - &dev_attr_in1_input.attr, 361 - &dev_attr_in2_input.attr, 362 &dev_attr_in3_input.attr, 363 &dev_attr_in0_min.attr, 364 &dev_attr_in1_min.attr, ··· 420 &dev_attr_in1_max.attr, 421 &dev_attr_in2_max.attr, 422 &dev_attr_in3_max.attr, 423 424 &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, 431 432 &dev_attr_temp1_input.attr, 433 &dev_attr_temp1_max.attr, 434 &dev_attr_temp1_max_hyst.attr, 435 436 &dev_attr_alarms.attr, 437 &dev_attr_beep_enable.attr, ··· 455 456 static const struct attribute_group gl518_group = { 457 .attrs = gl518_attributes, 458 }; 459 460 /* ··· 482 static int gl518_detect(struct i2c_adapter *adapter, int address, int kind) 483 { 484 int i; 485 - struct i2c_client *new_client; 486 struct gl518_data *data; 487 int err = 0; 488 ··· 499 goto exit; 500 } 501 502 - new_client = &data->client; 503 - i2c_set_clientdata(new_client, data); 504 505 - new_client->addr = address; 506 - new_client->adapter = adapter; 507 - new_client->driver = &gl518_driver; 508 - new_client->flags = 0; 509 510 /* Now, we do the remaining detection. */ 511 512 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)) 515 goto exit_free; 516 } 517 518 /* Determine the chip type. */ 519 if (kind <= 0) { 520 - i = gl518_read_value(new_client, GL518_REG_REVISION); 521 if (i == 0x00) { 522 kind = gl518sm_r00; 523 } else if (i == 0x80) { ··· 532 } 533 534 /* Fill in the remaining client fields */ 535 - strlcpy(new_client->name, "gl518sm", I2C_NAME_SIZE); 536 data->type = kind; 537 - data->valid = 0; 538 mutex_init(&data->update_lock); 539 540 /* Tell the I2C layer a new client has arrived */ 541 - if ((err = i2c_attach_client(new_client))) 542 goto exit_free; 543 544 /* Initialize the GL518SM chip */ 545 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); 548 549 /* Register sysfs hooks */ 550 - if ((err = sysfs_create_group(&new_client->dev.kobj, &gl518_group))) 551 goto exit_detach; 552 553 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 554 if (IS_ERR(data->hwmon_dev)) { 555 err = PTR_ERR(data->hwmon_dev); 556 goto exit_remove_files; ··· 561 return 0; 562 563 exit_remove_files: 564 - sysfs_remove_group(&new_client->dev.kobj, &gl518_group); 565 exit_detach: 566 - i2c_detach_client(new_client); 567 exit_free: 568 kfree(data); 569 exit: ··· 598 599 hwmon_device_unregister(data->hwmon_dev); 600 sysfs_remove_group(&client->dev.kobj, &gl518_group); 601 602 if ((err = i2c_detach_client(client))) 603 return err; ··· 608 return 0; 609 } 610 611 - /* Registers 0x07 to 0x0c are word-sized, others are byte-sized 612 GL518 uses a high-byte first convention, which is exactly opposite to 613 - the usual practice. */ 614 static int gl518_read_value(struct i2c_client *client, u8 reg) 615 { 616 if ((reg >= 0x07) && (reg <= 0x0c)) ··· 619 return i2c_smbus_read_byte_data(client, reg); 620 } 621 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 static int gl518_write_value(struct i2c_client *client, u8 reg, u16 value) 626 { 627 if ((reg >= 0x07) && (reg <= 0x0c))
··· 30 * We did not keep that part of the original driver in the Linux 2.6 31 * version, since it was making the driver significantly more complex 32 * with no real benefit. 33 */ 34 35 #include <linux/module.h> ··· 42 #include <linux/jiffies.h> 43 #include <linux/i2c.h> 44 #include <linux/hwmon.h> 45 + #include <linux/hwmon-sysfs.h> 46 #include <linux/err.h> 47 #include <linux/mutex.h> 48 #include <linux/sysfs.h> ··· 99 long rpmdiv; 100 if (rpm == 0) 101 return 0; 102 + rpmdiv = SENSORS_LIMIT(rpm, 1, 960000) * div; 103 + return SENSORS_LIMIT((480000 + rpmdiv / 2) / rpmdiv, 1, 255); 104 } 105 + #define FAN_FROM_REG(val,div) ((val)==0 ? 0 : (480000/((val)*(div)))) 106 107 #define IN_TO_REG(val) (SENSORS_LIMIT((((val)+9)/19),0,255)) 108 #define IN_FROM_REG(val) ((val)*19) ··· 110 #define VDD_TO_REG(val) (SENSORS_LIMIT((((val)*4+47)/95),0,255)) 111 #define VDD_FROM_REG(val) (((val)*95+2)/4) 112 113 #define DIV_FROM_REG(val) (1 << (val)) 114 115 #define BEEP_MASK_TO_REG(val) ((val) & 0x7f & data->alarm_mask) ··· 129 u8 voltage_in[4]; /* Register values; [0] = VDD */ 130 u8 voltage_min[4]; /* Register values; [0] = VDD */ 131 u8 voltage_max[4]; /* Register values; [0] = VDD */ 132 u8 fan_in[2]; 133 u8 fan_min[2]; 134 u8 fan_div[2]; /* Register encoding, shifted right */ ··· 138 u8 temp_max; /* Register values */ 139 u8 temp_hyst; /* Register values */ 140 u8 alarms; /* Register value */ 141 + u8 alarm_mask; 142 u8 beep_mask; /* Register value */ 143 u8 beep_enable; /* Boolean */ 144 }; ··· 156 .driver = { 157 .name = "gl518sm", 158 }, 159 .attach_adapter = gl518_attach_adapter, 160 .detach_client = gl518_detach_client, 161 }; ··· 172 return sprintf(buf, "%d\n", type##_FROM_REG(data->value)); \ 173 } 174 175 show(TEMP, temp_input1, temp_in); 176 show(TEMP, temp_max1, temp_max); 177 show(TEMP, temp_hyst1, temp_hyst); 178 show(BOOL, fan_auto1, fan_auto1); 179 show(VDD, in_input0, voltage_in[0]); 180 show(IN, in_input1, voltage_in[1]); 181 show(IN, in_input2, voltage_in[2]); ··· 205 show(RAW, alarms, alarms); 206 show(BOOL, beep_enable, beep_enable); 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 + } 234 235 #define set(type, suffix, value, reg) \ 236 static ssize_t set_##suffix(struct device *dev, struct device_attribute *attr, const char *buf, \ ··· 247 set(TEMP, temp_max1, temp_max, GL518_REG_TEMP_MAX); 248 set(TEMP, temp_hyst1, temp_hyst, GL518_REG_TEMP_HYST); 249 set_bits(BOOL, fan_auto1, fan_auto1, GL518_REG_MISC, 0x08, 3); 250 set_low(VDD, in_min0, voltage_min[0], GL518_REG_VDD_LIMIT); 251 set_low(IN, in_min1, voltage_min[1], GL518_REG_VIN1_LIMIT); 252 set_low(IN, in_min2, voltage_min[2], GL518_REG_VIN2_LIMIT); ··· 260 set_bits(BOOL, beep_enable, beep_enable, GL518_REG_CONF, 0x04, 2); 261 set(BEEP_MASK, beep_mask, beep_mask, GL518_REG_ALARM); 262 263 + static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, 264 + const char *buf, size_t count) 265 { 266 struct i2c_client *client = to_i2c_client(dev); 267 struct gl518_data *data = i2c_get_clientdata(client); 268 + int nr = to_sensor_dev_attr(attr)->index; 269 int regvalue; 270 unsigned long val = simple_strtoul(buf, NULL, 10); 271 272 mutex_lock(&data->update_lock); 273 regvalue = gl518_read_value(client, GL518_REG_FAN_LIMIT); 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))); 277 gl518_write_value(client, GL518_REG_FAN_LIMIT, regvalue); 278 279 data->beep_mask = gl518_read_value(client, GL518_REG_ALARM); 280 + if (data->fan_min[nr] == 0) 281 + data->alarm_mask &= ~(0x20 << nr); 282 else 283 + data->alarm_mask |= (0x20 << nr); 284 data->beep_mask &= data->alarm_mask; 285 gl518_write_value(client, GL518_REG_ALARM, data->beep_mask); 286 ··· 286 return count; 287 } 288 289 + static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 290 + const char *buf, size_t count) 291 { 292 struct i2c_client *client = to_i2c_client(dev); 293 struct gl518_data *data = i2c_get_clientdata(client); 294 + int nr = to_sensor_dev_attr(attr)->index; 295 int regvalue; 296 unsigned long val = simple_strtoul(buf, NULL, 10); 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 + 309 mutex_lock(&data->update_lock); 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); 315 mutex_unlock(&data->update_lock); 316 return count; 317 } ··· 317 static DEVICE_ATTR(temp1_max_hyst, S_IWUSR|S_IRUGO, 318 show_temp_hyst1, set_temp_hyst1); 319 static DEVICE_ATTR(fan1_auto, S_IWUSR|S_IRUGO, show_fan_auto1, set_fan_auto1); 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); 330 static DEVICE_ATTR(in0_input, S_IRUGO, show_in_input0, NULL); 331 static DEVICE_ATTR(in1_input, S_IRUGO, show_in_input1, NULL); 332 static DEVICE_ATTR(in2_input, S_IRUGO, show_in_input2, NULL); ··· 341 static DEVICE_ATTR(beep_mask, S_IWUSR|S_IRUGO, 342 show_beep_mask, set_beep_mask); 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 + 399 static struct attribute *gl518_attributes[] = { 400 &dev_attr_in3_input.attr, 401 &dev_attr_in0_min.attr, 402 &dev_attr_in1_min.attr, ··· 354 &dev_attr_in1_max.attr, 355 &dev_attr_in2_max.attr, 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, 365 366 &dev_attr_fan1_auto.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, 377 378 &dev_attr_temp1_input.attr, 379 &dev_attr_temp1_max.attr, 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, 383 384 &dev_attr_alarms.attr, 385 &dev_attr_beep_enable.attr, ··· 375 376 static const struct attribute_group gl518_group = { 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, 389 }; 390 391 /* ··· 391 static int gl518_detect(struct i2c_adapter *adapter, int address, int kind) 392 { 393 int i; 394 + struct i2c_client *client; 395 struct gl518_data *data; 396 int err = 0; 397 ··· 408 goto exit; 409 } 410 411 + client = &data->client; 412 + i2c_set_clientdata(client, data); 413 414 + client->addr = address; 415 + client->adapter = adapter; 416 + client->driver = &gl518_driver; 417 418 /* Now, we do the remaining detection. */ 419 420 if (kind < 0) { 421 + if ((gl518_read_value(client, GL518_REG_CHIP_ID) != 0x80) 422 + || (gl518_read_value(client, GL518_REG_CONF) & 0x80)) 423 goto exit_free; 424 } 425 426 /* Determine the chip type. */ 427 if (kind <= 0) { 428 + i = gl518_read_value(client, GL518_REG_REVISION); 429 if (i == 0x00) { 430 kind = gl518sm_r00; 431 } else if (i == 0x80) { ··· 442 } 443 444 /* Fill in the remaining client fields */ 445 + strlcpy(client->name, "gl518sm", I2C_NAME_SIZE); 446 data->type = kind; 447 mutex_init(&data->update_lock); 448 449 /* Tell the I2C layer a new client has arrived */ 450 + if ((err = i2c_attach_client(client))) 451 goto exit_free; 452 453 /* Initialize the GL518SM chip */ 454 data->alarm_mask = 0xff; 455 + gl518_init_client(client); 456 457 /* Register sysfs hooks */ 458 + if ((err = sysfs_create_group(&client->dev.kobj, &gl518_group))) 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; 464 465 + data->hwmon_dev = hwmon_device_register(&client->dev); 466 if (IS_ERR(data->hwmon_dev)) { 467 err = PTR_ERR(data->hwmon_dev); 468 goto exit_remove_files; ··· 469 return 0; 470 471 exit_remove_files: 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); 475 exit_detach: 476 + i2c_detach_client(client); 477 exit_free: 478 kfree(data); 479 exit: ··· 504 505 hwmon_device_unregister(data->hwmon_dev); 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); 509 510 if ((err = i2c_detach_client(client))) 511 return err; ··· 512 return 0; 513 } 514 515 + /* Registers 0x07 to 0x0c are word-sized, others are byte-sized 516 GL518 uses a high-byte first convention, which is exactly opposite to 517 + the SMBus standard. */ 518 static int gl518_read_value(struct i2c_client *client, u8 reg) 519 { 520 if ((reg >= 0x07) && (reg <= 0x0c)) ··· 523 return i2c_smbus_read_byte_data(client, reg); 524 } 525 526 static int gl518_write_value(struct i2c_client *client, u8 reg, u16 value) 527 { 528 if ((reg >= 0x07) && (reg <= 0x0c))
+386 -256
drivers/hwmon/gl520sm.c
··· 27 #include <linux/jiffies.h> 28 #include <linux/i2c.h> 29 #include <linux/hwmon.h> 30 #include <linux/hwmon-vid.h> 31 #include <linux/err.h> 32 #include <linux/mutex.h> ··· 44 /* Insmod parameters */ 45 I2C_CLIENT_INSMOD_1(gl520sm); 46 47 - /* Many GL520 constants specified below 48 One of the inputs can be configured as either temp or voltage. 49 - That's why _TEMP2 and _IN4 access the same register 50 */ 51 52 /* The GL520 registers */ ··· 57 58 #define GL520_REG_VID_INPUT 0x02 59 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 64 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 91 92 #define GL520_REG_FAN_INPUT 0x07 93 #define GL520_REG_FAN_MIN 0x08 ··· 92 .driver = { 93 .name = "gl520sm", 94 }, 95 - .id = I2C_DRIVERID_GL520, 96 .attach_adapter = gl520_attach_adapter, 97 .detach_client = gl520_detach_client, 98 }; ··· 127 * Sysfs stuff 128 */ 129 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) 214 { 215 return sprintf(buf, "%u\n", vid_from_reg(data->vid, data->vrm)); 216 } 217 218 #define VDD_FROM_REG(val) (((val)*95+2)/4) 219 #define VDD_TO_REG(val) (SENSORS_LIMIT((((val)*4+47)/95),0,255)) ··· 141 #define IN_FROM_REG(val) ((val)*19) 142 #define IN_TO_REG(val) (SENSORS_LIMIT((((val)+9)/19),0,255)) 143 144 - static ssize_t get_in_input(struct gl520_data *data, char *buf, int n) 145 { 146 u8 r = data->in_input[n]; 147 148 if (n == 0) ··· 154 return sprintf(buf, "%d\n", IN_FROM_REG(r)); 155 } 156 157 - static ssize_t get_in_min(struct gl520_data *data, char *buf, int n) 158 { 159 u8 r = data->in_min[n]; 160 161 if (n == 0) ··· 167 return sprintf(buf, "%d\n", IN_FROM_REG(r)); 168 } 169 170 - static ssize_t get_in_max(struct gl520_data *data, char *buf, int n) 171 { 172 u8 r = data->in_max[n]; 173 174 if (n == 0) ··· 180 return sprintf(buf, "%d\n", IN_FROM_REG(r)); 181 } 182 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) 184 { 185 long v = simple_strtol(buf, NULL, 10); 186 u8 r; 187 ··· 199 data->in_min[n] = r; 200 201 if (n < 4) 202 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0xff) | r); 203 else 204 - gl520_write_value(client, reg, r); 205 206 mutex_unlock(&data->update_lock); 207 return count; 208 } 209 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) 211 { 212 long v = simple_strtol(buf, NULL, 10); 213 u8 r; 214 ··· 228 data->in_max[n] = r; 229 230 if (n < 4) 231 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0xff00) | (r << 8)); 232 else 233 - gl520_write_value(client, reg, r); 234 235 mutex_unlock(&data->update_lock); 236 return count; 237 } 238 239 #define DIV_FROM_REG(val) (1 << (val)) 240 #define FAN_FROM_REG(val,div) ((val)==0 ? 0 : (480000/((val) << (div)))) 241 #define FAN_TO_REG(val,div) ((val)<=0?0:SENSORS_LIMIT((480000 + ((val) << ((div)-1))) / ((val) << (div)), 1, 255)); 242 243 - static ssize_t get_fan_input(struct gl520_data *data, char *buf, int n) 244 { 245 - return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_input[n - 1], data->fan_div[n - 1])); 246 } 247 248 - static ssize_t get_fan_min(struct gl520_data *data, char *buf, int n) 249 { 250 - return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[n - 1], data->fan_div[n - 1])); 251 } 252 253 - static ssize_t get_fan_div(struct gl520_data *data, char *buf, int n) 254 { 255 - return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[n - 1])); 256 } 257 258 - static ssize_t get_fan_off(struct gl520_data *data, char *buf, int n) 259 { 260 return sprintf(buf, "%d\n", data->fan_off); 261 } 262 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) 264 { 265 unsigned long v = simple_strtoul(buf, NULL, 10); 266 u8 r; 267 268 mutex_lock(&data->update_lock); 269 - r = FAN_TO_REG(v, data->fan_div[n - 1]); 270 - data->fan_min[n - 1] = r; 271 272 - if (n == 1) 273 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0xff00) | (r << 8)); 274 else 275 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0xff) | r); 276 277 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; 280 else 281 - data->alarm_mask |= (n == 1) ? 0x20 : 0x40; 282 data->beep_mask &= data->alarm_mask; 283 gl520_write_value(client, GL520_REG_BEEP_MASK, data->beep_mask); 284 ··· 338 return count; 339 } 340 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) 342 { 343 unsigned long v = simple_strtoul(buf, NULL, 10); 344 u8 r; 345 ··· 358 } 359 360 mutex_lock(&data->update_lock); 361 - data->fan_div[n - 1] = r; 362 363 - if (n == 1) 364 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0xc0) | (r << 6)); 365 else 366 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0x30) | (r << 4)); 367 368 mutex_unlock(&data->update_lock); 369 return count; 370 } 371 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) 373 { 374 u8 r = simple_strtoul(buf, NULL, 10)?1:0; 375 376 mutex_lock(&data->update_lock); 377 data->fan_off = r; 378 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0x0c) | (r << 2)); 379 mutex_unlock(&data->update_lock); 380 return count; 381 } 382 383 #define TEMP_FROM_REG(val) (((val) - 130) * 1000) 384 #define TEMP_TO_REG(val) (SENSORS_LIMIT(((((val)<0?(val)-500:(val)+500) / 1000)+130),0,255)) 385 386 - static ssize_t get_temp_input(struct gl520_data *data, char *buf, int n) 387 { 388 - return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_input[n - 1])); 389 } 390 391 - static ssize_t get_temp_max(struct gl520_data *data, char *buf, int n) 392 { 393 - return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[n - 1])); 394 } 395 396 - static ssize_t get_temp_max_hyst(struct gl520_data *data, char *buf, int n) 397 { 398 - return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max_hyst[n - 1])); 399 } 400 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) 402 { 403 long v = simple_strtol(buf, NULL, 10); 404 405 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]); 408 mutex_unlock(&data->update_lock); 409 return count; 410 } 411 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) 413 { 414 long v = simple_strtol(buf, NULL, 10); 415 416 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]); 419 mutex_unlock(&data->update_lock); 420 return count; 421 } 422 423 - static ssize_t get_alarms(struct gl520_data *data, char *buf, int n) 424 { 425 return sprintf(buf, "%d\n", data->alarms); 426 } 427 428 - static ssize_t get_beep_enable(struct gl520_data *data, char *buf, int n) 429 { 430 return sprintf(buf, "%d\n", data->beep_enable); 431 } 432 433 - static ssize_t get_beep_mask(struct gl520_data *data, char *buf, int n) 434 { 435 return sprintf(buf, "%d\n", data->beep_mask); 436 } 437 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) 439 { 440 u8 r = simple_strtoul(buf, NULL, 10)?0:1; 441 442 mutex_lock(&data->update_lock); 443 data->beep_enable = !r; 444 - gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0x04) | (r << 2)); 445 mutex_unlock(&data->update_lock); 446 return count; 447 } 448 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) 450 { 451 u8 r = simple_strtoul(buf, NULL, 10); 452 - 453 mutex_lock(&data->update_lock); 454 r &= data->alarm_mask; 455 data->beep_mask = r; 456 - gl520_write_value(client, reg, r); 457 mutex_unlock(&data->update_lock); 458 return count; 459 } 460 461 static struct attribute *gl520_attributes[] = { 462 &dev_attr_cpu0_vid.attr, 463 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, 476 477 - &dev_attr_fan1_input.attr, 478 - &dev_attr_fan1_min.attr, 479 - &dev_attr_fan1_div.attr, 480 &dev_attr_fan1_off.attr, 481 - &dev_attr_fan2_input.attr, 482 - &dev_attr_fan2_min.attr, 483 - &dev_attr_fan2_div.attr, 484 485 - &dev_attr_temp1_input.attr, 486 - &dev_attr_temp1_max.attr, 487 - &dev_attr_temp1_max_hyst.attr, 488 489 &dev_attr_alarms.attr, 490 &dev_attr_beep_enable.attr, ··· 646 }; 647 648 static struct attribute *gl520_attributes_opt[] = { 649 - &dev_attr_in4_input.attr, 650 - &dev_attr_in4_min.attr, 651 - &dev_attr_in4_max.attr, 652 653 - &dev_attr_temp2_input.attr, 654 - &dev_attr_temp2_max.attr, 655 - &dev_attr_temp2_max_hyst.attr, 656 NULL 657 }; 658 ··· 678 679 static int gl520_detect(struct i2c_adapter *adapter, int address, int kind) 680 { 681 - struct i2c_client *new_client; 682 struct gl520_data *data; 683 int err = 0; 684 ··· 695 goto exit; 696 } 697 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; 704 705 /* Determine the chip type. */ 706 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"); 711 goto exit_free; 712 } 713 } 714 715 /* Fill in the remaining client fields */ 716 - strlcpy(new_client->name, "gl520sm", I2C_NAME_SIZE); 717 - data->valid = 0; 718 mutex_init(&data->update_lock); 719 720 /* Tell the I2C layer a new client has arrived */ 721 - if ((err = i2c_attach_client(new_client))) 722 goto exit_free; 723 724 /* Initialize the GL520SM chip */ 725 - gl520_init_client(new_client); 726 727 /* Register sysfs hooks */ 728 - if ((err = sysfs_create_group(&new_client->dev.kobj, &gl520_group))) 729 goto exit_detach; 730 731 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))) 738 goto exit_remove_files; 739 } 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))) 746 goto exit_remove_files; 747 } 748 749 750 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 751 if (IS_ERR(data->hwmon_dev)) { 752 err = PTR_ERR(data->hwmon_dev); 753 goto exit_remove_files; ··· 762 return 0; 763 764 exit_remove_files: 765 - sysfs_remove_group(&new_client->dev.kobj, &gl520_group); 766 - sysfs_remove_group(&new_client->dev.kobj, &gl520_group_opt); 767 exit_detach: 768 - i2c_detach_client(new_client); 769 exit_free: 770 kfree(data); 771 exit: ··· 828 } 829 830 831 - /* Registers 0x07 to 0x0c are word-sized, others are byte-sized 832 GL520 uses a high-byte first convention */ 833 static int gl520_read_value(struct i2c_client *client, u8 reg) 834 { ··· 851 { 852 struct i2c_client *client = to_i2c_client(dev); 853 struct gl520_data *data = i2c_get_clientdata(client); 854 - int val; 855 856 mutex_lock(&data->update_lock); 857 ··· 863 data->beep_mask = gl520_read_value(client, GL520_REG_BEEP_MASK); 864 data->vid = gl520_read_value(client, GL520_REG_VID_INPUT) & 0x1f; 865 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; 878 879 val = gl520_read_value(client, GL520_REG_FAN_INPUT); 880 data->fan_input[0] = (val >> 8) & 0xff; ··· 879 data->fan_min[0] = (val >> 8) & 0xff; 880 data->fan_min[1] = val & 0xff; 881 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); 885 886 val = gl520_read_value(client, GL520_REG_FAN_DIV); 887 data->fan_div[0] = (val >> 6) & 0x03; ··· 896 val = gl520_read_value(client, GL520_REG_CONF); 897 data->beep_enable = !((val >> 2) & 1); 898 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 /* Temp1 and Vin4 are the same input */ 905 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); 909 } 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); 913 } 914 915 data->last_updated = jiffies;
··· 27 #include <linux/jiffies.h> 28 #include <linux/i2c.h> 29 #include <linux/hwmon.h> 30 + #include <linux/hwmon-sysfs.h> 31 #include <linux/hwmon-vid.h> 32 #include <linux/err.h> 33 #include <linux/mutex.h> ··· 43 /* Insmod parameters */ 44 I2C_CLIENT_INSMOD_1(gl520sm); 45 46 + /* Many GL520 constants specified below 47 One of the inputs can be configured as either temp or voltage. 48 + That's why _TEMP2 and _IN4 access the same register 49 */ 50 51 /* The GL520 registers */ ··· 56 57 #define GL520_REG_VID_INPUT 0x02 58 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 }; 63 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 }; 67 68 #define GL520_REG_FAN_INPUT 0x07 69 #define GL520_REG_FAN_MIN 0x08 ··· 114 .driver = { 115 .name = "gl520sm", 116 }, 117 .attach_adapter = gl520_attach_adapter, 118 .detach_client = gl520_detach_client, 119 }; ··· 150 * Sysfs stuff 151 */ 152 153 + static ssize_t get_cpu_vid(struct device *dev, struct device_attribute *attr, 154 + char *buf) 155 { 156 + struct gl520_data *data = gl520_update_device(dev); 157 return sprintf(buf, "%u\n", vid_from_reg(data->vid, data->vrm)); 158 } 159 + static DEVICE_ATTR(cpu0_vid, S_IRUGO, get_cpu_vid, NULL); 160 161 #define VDD_FROM_REG(val) (((val)*95+2)/4) 162 #define VDD_TO_REG(val) (SENSORS_LIMIT((((val)*4+47)/95),0,255)) ··· 244 #define IN_FROM_REG(val) ((val)*19) 245 #define IN_TO_REG(val) (SENSORS_LIMIT((((val)+9)/19),0,255)) 246 247 + static ssize_t get_in_input(struct device *dev, struct device_attribute *attr, 248 + char *buf) 249 { 250 + int n = to_sensor_dev_attr(attr)->index; 251 + struct gl520_data *data = gl520_update_device(dev); 252 u8 r = data->in_input[n]; 253 254 if (n == 0) ··· 254 return sprintf(buf, "%d\n", IN_FROM_REG(r)); 255 } 256 257 + static ssize_t get_in_min(struct device *dev, struct device_attribute *attr, 258 + char *buf) 259 { 260 + int n = to_sensor_dev_attr(attr)->index; 261 + struct gl520_data *data = gl520_update_device(dev); 262 u8 r = data->in_min[n]; 263 264 if (n == 0) ··· 264 return sprintf(buf, "%d\n", IN_FROM_REG(r)); 265 } 266 267 + static ssize_t get_in_max(struct device *dev, struct device_attribute *attr, 268 + char *buf) 269 { 270 + int n = to_sensor_dev_attr(attr)->index; 271 + struct gl520_data *data = gl520_update_device(dev); 272 u8 r = data->in_max[n]; 273 274 if (n == 0) ··· 274 return sprintf(buf, "%d\n", IN_FROM_REG(r)); 275 } 276 277 + static ssize_t set_in_min(struct device *dev, struct device_attribute *attr, 278 + const char *buf, size_t count) 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; 283 long v = simple_strtol(buf, NULL, 10); 284 u8 r; 285 ··· 289 data->in_min[n] = r; 290 291 if (n < 4) 292 + gl520_write_value(client, GL520_REG_IN_MIN[n], 293 + (gl520_read_value(client, GL520_REG_IN_MIN[n]) 294 + & ~0xff) | r); 295 else 296 + gl520_write_value(client, GL520_REG_IN_MIN[n], r); 297 298 mutex_unlock(&data->update_lock); 299 return count; 300 } 301 302 + static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, 303 + const char *buf, size_t count) 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; 308 long v = simple_strtol(buf, NULL, 10); 309 u8 r; 310 ··· 312 data->in_max[n] = r; 313 314 if (n < 4) 315 + gl520_write_value(client, GL520_REG_IN_MAX[n], 316 + (gl520_read_value(client, GL520_REG_IN_MAX[n]) 317 + & ~0xff00) | (r << 8)); 318 else 319 + gl520_write_value(client, GL520_REG_IN_MAX[n], r); 320 321 mutex_unlock(&data->update_lock); 322 return count; 323 } 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 + 351 #define DIV_FROM_REG(val) (1 << (val)) 352 #define FAN_FROM_REG(val,div) ((val)==0 ? 0 : (480000/((val) << (div)))) 353 #define FAN_TO_REG(val,div) ((val)<=0?0:SENSORS_LIMIT((480000 + ((val) << ((div)-1))) / ((val) << (div)), 1, 255)); 354 355 + static ssize_t get_fan_input(struct device *dev, struct device_attribute *attr, 356 + char *buf) 357 { 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])); 363 } 364 365 + static ssize_t get_fan_min(struct device *dev, struct device_attribute *attr, 366 + char *buf) 367 { 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])); 373 } 374 375 + static ssize_t get_fan_div(struct device *dev, struct device_attribute *attr, 376 + char *buf) 377 { 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])); 382 } 383 384 + static ssize_t get_fan_off(struct device *dev, struct device_attribute *attr, 385 + char *buf) 386 { 387 + struct gl520_data *data = gl520_update_device(dev); 388 return sprintf(buf, "%d\n", data->fan_off); 389 } 390 391 + static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, 392 + const char *buf, size_t count) 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; 397 unsigned long v = simple_strtoul(buf, NULL, 10); 398 u8 r; 399 400 mutex_lock(&data->update_lock); 401 + r = FAN_TO_REG(v, data->fan_div[n]); 402 + data->fan_min[n] = r; 403 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)); 408 else 409 + gl520_write_value(client, GL520_REG_FAN_MIN, 410 + (gl520_read_value(client, GL520_REG_FAN_MIN) 411 + & ~0xff) | r); 412 413 data->beep_mask = gl520_read_value(client, GL520_REG_BEEP_MASK); 414 + if (data->fan_min[n] == 0) 415 + data->alarm_mask &= (n == 0) ? ~0x20 : ~0x40; 416 else 417 + data->alarm_mask |= (n == 0) ? 0x20 : 0x40; 418 data->beep_mask &= data->alarm_mask; 419 gl520_write_value(client, GL520_REG_BEEP_MASK, data->beep_mask); 420 ··· 370 return count; 371 } 372 373 + static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 374 + const char *buf, size_t count) 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; 379 unsigned long v = simple_strtoul(buf, NULL, 10); 380 u8 r; 381 ··· 386 } 387 388 mutex_lock(&data->update_lock); 389 + data->fan_div[n] = r; 390 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)); 395 else 396 + gl520_write_value(client, GL520_REG_FAN_DIV, 397 + (gl520_read_value(client, GL520_REG_FAN_DIV) 398 + & ~0x30) | (r << 4)); 399 400 mutex_unlock(&data->update_lock); 401 return count; 402 } 403 404 + static ssize_t set_fan_off(struct device *dev, struct device_attribute *attr, 405 + const char *buf, size_t count) 406 { 407 + struct i2c_client *client = to_i2c_client(dev); 408 + struct gl520_data *data = i2c_get_clientdata(client); 409 u8 r = simple_strtoul(buf, NULL, 10)?1:0; 410 411 mutex_lock(&data->update_lock); 412 data->fan_off = r; 413 + gl520_write_value(client, GL520_REG_FAN_OFF, 414 + (gl520_read_value(client, GL520_REG_FAN_OFF) 415 + & ~0x0c) | (r << 2)); 416 mutex_unlock(&data->update_lock); 417 return count; 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); 432 433 #define TEMP_FROM_REG(val) (((val) - 130) * 1000) 434 #define TEMP_TO_REG(val) (SENSORS_LIMIT(((((val)<0?(val)-500:(val)+500) / 1000)+130),0,255)) 435 436 + static ssize_t get_temp_input(struct device *dev, struct device_attribute *attr, 437 + char *buf) 438 { 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])); 443 } 444 445 + static ssize_t get_temp_max(struct device *dev, struct device_attribute *attr, 446 + char *buf) 447 { 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])); 452 } 453 454 + static ssize_t get_temp_max_hyst(struct device *dev, struct device_attribute 455 + *attr, char *buf) 456 { 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])); 461 } 462 463 + static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, 464 + const char *buf, size_t count) 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; 469 long v = simple_strtol(buf, NULL, 10); 470 471 mutex_lock(&data->update_lock); 472 + data->temp_max[n] = TEMP_TO_REG(v); 473 + gl520_write_value(client, GL520_REG_TEMP_MAX[n], data->temp_max[n]); 474 mutex_unlock(&data->update_lock); 475 return count; 476 } 477 478 + static ssize_t set_temp_max_hyst(struct device *dev, struct device_attribute 479 + *attr, const char *buf, size_t count) 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; 484 long v = simple_strtol(buf, NULL, 10); 485 486 mutex_lock(&data->update_lock); 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]); 490 mutex_unlock(&data->update_lock); 491 return count; 492 } 493 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) 507 { 508 + struct gl520_data *data = gl520_update_device(dev); 509 return sprintf(buf, "%d\n", data->alarms); 510 } 511 512 + static ssize_t get_beep_enable(struct device *dev, struct device_attribute 513 + *attr, char *buf) 514 { 515 + struct gl520_data *data = gl520_update_device(dev); 516 return sprintf(buf, "%d\n", data->beep_enable); 517 } 518 519 + static ssize_t get_beep_mask(struct device *dev, struct device_attribute *attr, 520 + char *buf) 521 { 522 + struct gl520_data *data = gl520_update_device(dev); 523 return sprintf(buf, "%d\n", data->beep_mask); 524 } 525 526 + static ssize_t set_beep_enable(struct device *dev, struct device_attribute 527 + *attr, const char *buf, size_t count) 528 { 529 + struct i2c_client *client = to_i2c_client(dev); 530 + struct gl520_data *data = i2c_get_clientdata(client); 531 u8 r = simple_strtoul(buf, NULL, 10)?0:1; 532 533 mutex_lock(&data->update_lock); 534 data->beep_enable = !r; 535 + gl520_write_value(client, GL520_REG_BEEP_ENABLE, 536 + (gl520_read_value(client, GL520_REG_BEEP_ENABLE) 537 + & ~0x04) | (r << 2)); 538 mutex_unlock(&data->update_lock); 539 return count; 540 } 541 542 + static ssize_t set_beep_mask(struct device *dev, struct device_attribute *attr, 543 + const char *buf, size_t count) 544 { 545 + struct i2c_client *client = to_i2c_client(dev); 546 + struct gl520_data *data = i2c_get_clientdata(client); 547 u8 r = simple_strtoul(buf, NULL, 10); 548 + 549 mutex_lock(&data->update_lock); 550 r &= data->alarm_mask; 551 data->beep_mask = r; 552 + gl520_write_value(client, GL520_REG_BEEP_MASK, r); 553 mutex_unlock(&data->update_lock); 554 return count; 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); 623 624 static struct attribute *gl520_attributes[] = { 625 &dev_attr_cpu0_vid.attr, 626 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, 647 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, 653 &dev_attr_fan1_off.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, 659 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, 665 666 &dev_attr_alarms.attr, 667 &dev_attr_beep_enable.attr, ··· 525 }; 526 527 static struct attribute *gl520_attributes_opt[] = { 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, 533 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, 539 NULL 540 }; 541 ··· 553 554 static int gl520_detect(struct i2c_adapter *adapter, int address, int kind) 555 { 556 + struct i2c_client *client; 557 struct gl520_data *data; 558 int err = 0; 559 ··· 570 goto exit; 571 } 572 573 + client = &data->client; 574 + i2c_set_clientdata(client, data); 575 + client->addr = address; 576 + client->adapter = adapter; 577 + client->driver = &gl520_driver; 578 579 /* Determine the chip type. */ 580 if (kind < 0) { 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"); 585 goto exit_free; 586 } 587 } 588 589 /* Fill in the remaining client fields */ 590 + strlcpy(client->name, "gl520sm", I2C_NAME_SIZE); 591 mutex_init(&data->update_lock); 592 593 /* Tell the I2C layer a new client has arrived */ 594 + if ((err = i2c_attach_client(client))) 595 goto exit_free; 596 597 /* Initialize the GL520SM chip */ 598 + gl520_init_client(client); 599 600 /* Register sysfs hooks */ 601 + if ((err = sysfs_create_group(&client->dev.kobj, &gl520_group))) 602 goto exit_detach; 603 604 if (data->two_temps) { 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))) 615 goto exit_remove_files; 616 } else { 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))) 627 goto exit_remove_files; 628 } 629 630 631 + data->hwmon_dev = hwmon_device_register(&client->dev); 632 if (IS_ERR(data->hwmon_dev)) { 633 err = PTR_ERR(data->hwmon_dev); 634 goto exit_remove_files; ··· 631 return 0; 632 633 exit_remove_files: 634 + sysfs_remove_group(&client->dev.kobj, &gl520_group); 635 + sysfs_remove_group(&client->dev.kobj, &gl520_group_opt); 636 exit_detach: 637 + i2c_detach_client(client); 638 exit_free: 639 kfree(data); 640 exit: ··· 697 } 698 699 700 + /* Registers 0x07 to 0x0c are word-sized, others are byte-sized 701 GL520 uses a high-byte first convention */ 702 static int gl520_read_value(struct i2c_client *client, u8 reg) 703 { ··· 720 { 721 struct i2c_client *client = to_i2c_client(dev); 722 struct gl520_data *data = i2c_get_clientdata(client); 723 + int val, i; 724 725 mutex_lock(&data->update_lock); 726 ··· 732 data->beep_mask = gl520_read_value(client, GL520_REG_BEEP_MASK); 733 data->vid = gl520_read_value(client, GL520_REG_VID_INPUT) & 0x1f; 734 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 + } 742 743 val = gl520_read_value(client, GL520_REG_FAN_INPUT); 744 data->fan_input[0] = (val >> 8) & 0xff; ··· 753 data->fan_min[0] = (val >> 8) & 0xff; 754 data->fan_min[1] = val & 0xff; 755 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]); 762 763 val = gl520_read_value(client, GL520_REG_FAN_DIV); 764 data->fan_div[0] = (val >> 6) & 0x03; ··· 767 val = gl520_read_value(client, GL520_REG_CONF); 768 data->beep_enable = !((val >> 2) & 1); 769 770 /* Temp1 and Vin4 are the same input */ 771 if (data->two_temps) { 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]); 778 } else { 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]); 785 } 786 787 data->last_updated = jiffies;
+76 -12
drivers/hwmon/it87.c
··· 17 IT8726F Super I/O chip w/LPC interface 18 Sis950 A clone of the IT8705F 19 20 - Copyright (C) 2001 Chris Gauthron <chrisg@0-in.com> 21 - Copyright (C) 2005-2006 Jean Delvare <khali@linux-fr.org> 22 23 This program is free software; you can redistribute it and/or modify 24 it under the terms of the GNU General Public License as published by ··· 51 #define DRVNAME "it87" 52 53 enum chips { it87, it8712, it8716, it8718 }; 54 55 static struct platform_device *pdev; 56 ··· 780 } 781 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 782 783 static ssize_t 784 show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf) 785 { ··· 865 &sensor_dev_attr_in5_max.dev_attr.attr, 866 &sensor_dev_attr_in6_max.dev_attr.attr, 867 &sensor_dev_attr_in7_max.dev_attr.attr, 868 869 &sensor_dev_attr_temp1_input.dev_attr.attr, 870 &sensor_dev_attr_temp2_input.dev_attr.attr, ··· 886 &sensor_dev_attr_temp1_type.dev_attr.attr, 887 &sensor_dev_attr_temp2_type.dev_attr.attr, 888 &sensor_dev_attr_temp3_type.dev_attr.attr, 889 890 &dev_attr_alarms.attr, 891 &dev_attr_name.attr, ··· 921 &sensor_dev_attr_fan3_min.dev_attr.attr, 922 &sensor_dev_attr_fan3_div.dev_attr.attr, 923 924 &sensor_dev_attr_pwm1_enable.dev_attr.attr, 925 &sensor_dev_attr_pwm2_enable.dev_attr.attr, 926 &sensor_dev_attr_pwm3_enable.dev_attr.attr, 927 &sensor_dev_attr_pwm1.dev_attr.attr, 928 &sensor_dev_attr_pwm2.dev_attr.attr, 929 &sensor_dev_attr_pwm3.dev_attr.attr, 930 931 &dev_attr_vrm.attr, 932 &dev_attr_cpu0_vid.attr, ··· 954 u16 chip_type; 955 956 superio_enter(); 957 - chip_type = superio_inw(DEVID); 958 959 switch (chip_type) { 960 case IT8705F_DEVID: ··· 1075 if ((err = device_create_file(dev, 1076 &sensor_dev_attr_fan1_input16.dev_attr)) 1077 || (err = device_create_file(dev, 1078 - &sensor_dev_attr_fan1_min16.dev_attr))) 1079 goto ERROR4; 1080 } 1081 if (data->has_fan & (1 << 1)) { 1082 if ((err = device_create_file(dev, 1083 &sensor_dev_attr_fan2_input16.dev_attr)) 1084 || (err = device_create_file(dev, 1085 - &sensor_dev_attr_fan2_min16.dev_attr))) 1086 goto ERROR4; 1087 } 1088 if (data->has_fan & (1 << 2)) { 1089 if ((err = device_create_file(dev, 1090 &sensor_dev_attr_fan3_input16.dev_attr)) 1091 || (err = device_create_file(dev, 1092 - &sensor_dev_attr_fan3_min16.dev_attr))) 1093 goto ERROR4; 1094 } 1095 if (data->has_fan & (1 << 3)) { 1096 if ((err = device_create_file(dev, 1097 &sensor_dev_attr_fan4_input16.dev_attr)) 1098 || (err = device_create_file(dev, 1099 - &sensor_dev_attr_fan4_min16.dev_attr))) 1100 goto ERROR4; 1101 } 1102 if (data->has_fan & (1 << 4)) { 1103 if ((err = device_create_file(dev, 1104 &sensor_dev_attr_fan5_input16.dev_attr)) 1105 || (err = device_create_file(dev, 1106 - &sensor_dev_attr_fan5_min16.dev_attr))) 1107 goto ERROR4; 1108 } 1109 } else { ··· 1124 || (err = device_create_file(dev, 1125 &sensor_dev_attr_fan1_min.dev_attr)) 1126 || (err = device_create_file(dev, 1127 - &sensor_dev_attr_fan1_div.dev_attr))) 1128 goto ERROR4; 1129 } 1130 if (data->has_fan & (1 << 1)) { ··· 1135 || (err = device_create_file(dev, 1136 &sensor_dev_attr_fan2_min.dev_attr)) 1137 || (err = device_create_file(dev, 1138 - &sensor_dev_attr_fan2_div.dev_attr))) 1139 goto ERROR4; 1140 } 1141 if (data->has_fan & (1 << 2)) { ··· 1146 || (err = device_create_file(dev, 1147 &sensor_dev_attr_fan3_min.dev_attr)) 1148 || (err = device_create_file(dev, 1149 - &sensor_dev_attr_fan3_div.dev_attr))) 1150 goto ERROR4; 1151 } 1152 } ··· 1552 } 1553 1554 1555 - MODULE_AUTHOR("Chris Gauthron <chrisg@0-in.com>, " 1556 "Jean Delvare <khali@linux-fr.org>"); 1557 MODULE_DESCRIPTION("IT8705F/8712F/8716F/8718F/8726F, SiS950 driver"); 1558 module_param(update_vbat, bool, 0);
··· 17 IT8726F Super I/O chip w/LPC interface 18 Sis950 A clone of the IT8705F 19 20 + Copyright (C) 2001 Chris Gauthron 21 + Copyright (C) 2005-2007 Jean Delvare <khali@linux-fr.org> 22 23 This program is free software; you can redistribute it and/or modify 24 it under the terms of the GNU General Public License as published by ··· 51 #define DRVNAME "it87" 52 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"); 58 59 static struct platform_device *pdev; 60 ··· 776 } 777 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 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 + 803 static ssize_t 804 show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf) 805 { ··· 837 &sensor_dev_attr_in5_max.dev_attr.attr, 838 &sensor_dev_attr_in6_max.dev_attr.attr, 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, 848 849 &sensor_dev_attr_temp1_input.dev_attr.attr, 850 &sensor_dev_attr_temp2_input.dev_attr.attr, ··· 850 &sensor_dev_attr_temp1_type.dev_attr.attr, 851 &sensor_dev_attr_temp2_type.dev_attr.attr, 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, 856 857 &dev_attr_alarms.attr, 858 &dev_attr_name.attr, ··· 882 &sensor_dev_attr_fan3_min.dev_attr.attr, 883 &sensor_dev_attr_fan3_div.dev_attr.attr, 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 + 891 &sensor_dev_attr_pwm1_enable.dev_attr.attr, 892 &sensor_dev_attr_pwm2_enable.dev_attr.attr, 893 &sensor_dev_attr_pwm3_enable.dev_attr.attr, 894 &sensor_dev_attr_pwm1.dev_attr.attr, 895 &sensor_dev_attr_pwm2.dev_attr.attr, 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, 900 901 &dev_attr_vrm.attr, 902 &dev_attr_cpu0_vid.attr, ··· 906 u16 chip_type; 907 908 superio_enter(); 909 + chip_type = force_id ? force_id : superio_inw(DEVID); 910 911 switch (chip_type) { 912 case IT8705F_DEVID: ··· 1027 if ((err = device_create_file(dev, 1028 &sensor_dev_attr_fan1_input16.dev_attr)) 1029 || (err = device_create_file(dev, 1030 + &sensor_dev_attr_fan1_min16.dev_attr)) 1031 + || (err = device_create_file(dev, 1032 + &sensor_dev_attr_fan1_alarm.dev_attr))) 1033 goto ERROR4; 1034 } 1035 if (data->has_fan & (1 << 1)) { 1036 if ((err = device_create_file(dev, 1037 &sensor_dev_attr_fan2_input16.dev_attr)) 1038 || (err = device_create_file(dev, 1039 + &sensor_dev_attr_fan2_min16.dev_attr)) 1040 + || (err = device_create_file(dev, 1041 + &sensor_dev_attr_fan2_alarm.dev_attr))) 1042 goto ERROR4; 1043 } 1044 if (data->has_fan & (1 << 2)) { 1045 if ((err = device_create_file(dev, 1046 &sensor_dev_attr_fan3_input16.dev_attr)) 1047 || (err = device_create_file(dev, 1048 + &sensor_dev_attr_fan3_min16.dev_attr)) 1049 + || (err = device_create_file(dev, 1050 + &sensor_dev_attr_fan3_alarm.dev_attr))) 1051 goto ERROR4; 1052 } 1053 if (data->has_fan & (1 << 3)) { 1054 if ((err = device_create_file(dev, 1055 &sensor_dev_attr_fan4_input16.dev_attr)) 1056 || (err = device_create_file(dev, 1057 + &sensor_dev_attr_fan4_min16.dev_attr)) 1058 + || (err = device_create_file(dev, 1059 + &sensor_dev_attr_fan4_alarm.dev_attr))) 1060 goto ERROR4; 1061 } 1062 if (data->has_fan & (1 << 4)) { 1063 if ((err = device_create_file(dev, 1064 &sensor_dev_attr_fan5_input16.dev_attr)) 1065 || (err = device_create_file(dev, 1066 + &sensor_dev_attr_fan5_min16.dev_attr)) 1067 + || (err = device_create_file(dev, 1068 + &sensor_dev_attr_fan5_alarm.dev_attr))) 1069 goto ERROR4; 1070 } 1071 } else { ··· 1066 || (err = device_create_file(dev, 1067 &sensor_dev_attr_fan1_min.dev_attr)) 1068 || (err = device_create_file(dev, 1069 + &sensor_dev_attr_fan1_div.dev_attr)) 1070 + || (err = device_create_file(dev, 1071 + &sensor_dev_attr_fan1_alarm.dev_attr))) 1072 goto ERROR4; 1073 } 1074 if (data->has_fan & (1 << 1)) { ··· 1075 || (err = device_create_file(dev, 1076 &sensor_dev_attr_fan2_min.dev_attr)) 1077 || (err = device_create_file(dev, 1078 + &sensor_dev_attr_fan2_div.dev_attr)) 1079 + || (err = device_create_file(dev, 1080 + &sensor_dev_attr_fan2_alarm.dev_attr))) 1081 goto ERROR4; 1082 } 1083 if (data->has_fan & (1 << 2)) { ··· 1084 || (err = device_create_file(dev, 1085 &sensor_dev_attr_fan3_min.dev_attr)) 1086 || (err = device_create_file(dev, 1087 + &sensor_dev_attr_fan3_div.dev_attr)) 1088 + || (err = device_create_file(dev, 1089 + &sensor_dev_attr_fan3_alarm.dev_attr))) 1090 goto ERROR4; 1091 } 1092 } ··· 1488 } 1489 1490 1491 + MODULE_AUTHOR("Chris Gauthron, " 1492 "Jean Delvare <khali@linux-fr.org>"); 1493 MODULE_DESCRIPTION("IT8705F/8712F/8716F/8718F/8726F, SiS950 driver"); 1494 module_param(update_vbat, bool, 0);
-1
drivers/hwmon/lm75.c
··· 74 .driver = { 75 .name = "lm75", 76 }, 77 - .id = I2C_DRIVERID_LM75, 78 .attach_adapter = lm75_attach_adapter, 79 .detach_client = lm75_detach_client, 80 };
··· 74 .driver = { 75 .name = "lm75", 76 }, 77 .attach_adapter = lm75_attach_adapter, 78 .detach_client = lm75_detach_client, 79 };
+15 -5
drivers/hwmon/lm77.c
··· 31 #include <linux/jiffies.h> 32 #include <linux/i2c.h> 33 #include <linux/hwmon.h> 34 #include <linux/err.h> 35 #include <linux/mutex.h> 36 ··· 114 show(temp_crit); 115 show(temp_min); 116 show(temp_max); 117 - show(alarms); 118 119 /* read routines for hysteresis values */ 120 static ssize_t show_temp_crit_hyst(struct device *dev, struct device_attribute *attr, char *buf) ··· 186 return count; 187 } 188 189 static DEVICE_ATTR(temp1_input, S_IRUGO, 190 show_temp_input, NULL); 191 static DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, ··· 210 static DEVICE_ATTR(temp1_max_hyst, S_IRUGO, 211 show_temp_max_hyst, NULL); 212 213 - static DEVICE_ATTR(alarms, S_IRUGO, 214 - show_alarms, NULL); 215 216 static int lm77_attach_adapter(struct i2c_adapter *adapter) 217 { ··· 229 &dev_attr_temp1_crit_hyst.attr, 230 &dev_attr_temp1_min_hyst.attr, 231 &dev_attr_temp1_max_hyst.attr, 232 - &dev_attr_alarms.attr, 233 - 234 NULL 235 }; 236
··· 31 #include <linux/jiffies.h> 32 #include <linux/i2c.h> 33 #include <linux/hwmon.h> 34 + #include <linux/hwmon-sysfs.h> 35 #include <linux/err.h> 36 #include <linux/mutex.h> 37 ··· 113 show(temp_crit); 114 show(temp_min); 115 show(temp_max); 116 117 /* read routines for hysteresis values */ 118 static ssize_t show_temp_crit_hyst(struct device *dev, struct device_attribute *attr, char *buf) ··· 186 return count; 187 } 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 + 197 static DEVICE_ATTR(temp1_input, S_IRUGO, 198 show_temp_input, NULL); 199 static DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, ··· 202 static DEVICE_ATTR(temp1_max_hyst, S_IRUGO, 203 show_temp_max_hyst, NULL); 204 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); 208 209 static int lm77_attach_adapter(struct i2c_adapter *adapter) 210 { ··· 220 &dev_attr_temp1_crit_hyst.attr, 221 &dev_attr_temp1_min_hyst.attr, 222 &dev_attr_temp1_max_hyst.attr, 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, 226 NULL 227 }; 228
+2 -5
drivers/hwmon/lm78.c
··· 37 static struct platform_device *pdev; 38 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 }; 44 static unsigned short isa_address = 0x290; 45 46 /* Insmod parameters */ ··· 168 .driver = { 169 .name = "lm78", 170 }, 171 - .id = I2C_DRIVERID_LM78, 172 .attach_adapter = lm78_attach_adapter, 173 .detach_client = lm78_detach_client, 174 };
··· 37 static struct platform_device *pdev; 38 39 /* Addresses to scan */ 40 + static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 41 + 0x2e, 0x2f, I2C_CLIENT_END }; 42 static unsigned short isa_address = 0x290; 43 44 /* Insmod parameters */ ··· 170 .driver = { 171 .name = "lm78", 172 }, 173 .attach_adapter = lm78_attach_adapter, 174 .detach_client = lm78_detach_client, 175 };
+165 -161
drivers/hwmon/lm80.c
··· 27 #include <linux/jiffies.h> 28 #include <linux/i2c.h> 29 #include <linux/hwmon.h> 30 #include <linux/err.h> 31 #include <linux/mutex.h> 32 ··· 128 u16 alarms; /* Register encoding, combined */ 129 }; 130 131 - /* 132 * Functions declaration 133 */ 134 ··· 148 .driver = { 149 .name = "lm80", 150 }, 151 - .id = I2C_DRIVERID_LM80, 152 .attach_adapter = lm80_attach_adapter, 153 .detach_client = lm80_detach_client, 154 }; ··· 159 #define show_in(suffix, value) \ 160 static ssize_t show_in_##suffix(struct device *dev, struct device_attribute *attr, char *buf) \ 161 { \ 162 struct lm80_data *data = lm80_update_device(dev); \ 163 - return sprintf(buf, "%d\n", IN_FROM_REG(data->value)); \ 164 } 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]); 186 187 #define set_in(suffix, value, reg) \ 188 static ssize_t set_in_##suffix(struct device *dev, struct device_attribute *attr, const char *buf, \ 189 size_t count) \ 190 { \ 191 struct i2c_client *client = to_i2c_client(dev); \ 192 struct lm80_data *data = i2c_get_clientdata(client); \ 193 long val = simple_strtol(buf, NULL, 10); \ 194 \ 195 mutex_lock(&data->update_lock);\ 196 - data->value = IN_TO_REG(val); \ 197 - lm80_write_value(client, reg, data->value); \ 198 mutex_unlock(&data->update_lock);\ 199 return count; \ 200 } 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)); 215 216 - #define show_fan(suffix, value, div) \ 217 static ssize_t show_fan_##suffix(struct device *dev, struct device_attribute *attr, char *buf) \ 218 { \ 219 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))); \ 222 } 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]); 227 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)); \ 233 } 234 - show_fan_div(1, fan_div[0]); 235 - show_fan_div(2, fan_div[1]); 236 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; \ 250 } 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 254 /* Note: we save and restore the fan minimum here, because its value is 255 determined in part by the fan divisor. This follows the principle of 256 least surprise; the user doesn't expect the fan minimum to change just 257 because the divisor changed. */ 258 - static ssize_t set_fan_div(struct device *dev, const char *buf, 259 - size_t count, int nr) 260 { 261 struct i2c_client *client = to_i2c_client(dev); 262 struct lm80_data *data = i2c_get_clientdata(client); 263 unsigned long min, val = simple_strtoul(buf, NULL, 10); ··· 260 261 return count; 262 } 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 273 static ssize_t show_temp_input1(struct device *dev, struct device_attribute *attr, char *buf) 274 { ··· 297 set_temp(os_max, temp_os_max, LM80_REG_TEMP_OS_MAX); 298 set_temp(os_hyst, temp_os_hyst, LM80_REG_TEMP_OS_HYST); 299 300 - static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf) 301 { 302 struct lm80_data *data = lm80_update_device(dev); 303 return sprintf(buf, "%u\n", data->alarms); 304 } 305 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); 335 static DEVICE_ATTR(temp1_input, S_IRUGO, show_temp_input1, NULL); 336 static DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_hot_max, 337 set_temp_hot_max); ··· 367 static DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temp_os_hyst, 368 set_temp_os_hyst); 369 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 370 371 /* 372 * Real code ··· 391 } 392 393 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, 421 &dev_attr_temp1_input.attr, 422 &dev_attr_temp1_max.attr, 423 &dev_attr_temp1_max_hyst.attr, 424 &dev_attr_temp1_crit.attr, 425 &dev_attr_temp1_crit_hyst.attr, 426 &dev_attr_alarms.attr, 427 - 428 NULL 429 }; 430 ··· 445 static int lm80_detect(struct i2c_adapter *adapter, int address, int kind) 446 { 447 int i, cur; 448 - struct i2c_client *new_client; 449 struct lm80_data *data; 450 int err = 0; 451 const char *name; ··· 461 goto exit; 462 } 463 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; 470 471 /* Now, we do the remaining detection. It is lousy. */ 472 - if (lm80_read_value(new_client, LM80_REG_ALARM2) & 0xc0) 473 goto error_free; 474 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)) 479 goto error_free; 480 } 481 ··· 482 kind = lm80; 483 name = "lm80"; 484 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; 488 mutex_init(&data->update_lock); 489 490 /* Tell the I2C layer a new client has arrived */ 491 - if ((err = i2c_attach_client(new_client))) 492 goto error_free; 493 494 /* Initialize the LM80 chip */ 495 - lm80_init_client(new_client); 496 497 /* 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)); 500 501 /* Register sysfs hooks */ 502 - if ((err = sysfs_create_group(&new_client->dev.kobj, &lm80_group))) 503 goto error_detach; 504 505 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 506 if (IS_ERR(data->hwmon_dev)) { 507 err = PTR_ERR(data->hwmon_dev); 508 goto error_remove; ··· 510 return 0; 511 512 error_remove: 513 - sysfs_remove_group(&new_client->dev.kobj, &lm80_group); 514 error_detach: 515 - i2c_detach_client(new_client); 516 error_free: 517 kfree(data); 518 exit:
··· 27 #include <linux/jiffies.h> 28 #include <linux/i2c.h> 29 #include <linux/hwmon.h> 30 + #include <linux/hwmon-sysfs.h> 31 #include <linux/err.h> 32 #include <linux/mutex.h> 33 ··· 127 u16 alarms; /* Register encoding, combined */ 128 }; 129 130 + /* 131 * Functions declaration 132 */ 133 ··· 147 .driver = { 148 .name = "lm80", 149 }, 150 .attach_adapter = lm80_attach_adapter, 151 .detach_client = lm80_detach_client, 152 }; ··· 159 #define show_in(suffix, value) \ 160 static ssize_t show_in_##suffix(struct device *dev, struct device_attribute *attr, char *buf) \ 161 { \ 162 + int nr = to_sensor_dev_attr(attr)->index; \ 163 struct lm80_data *data = lm80_update_device(dev); \ 164 + return sprintf(buf, "%d\n", IN_FROM_REG(data->value[nr])); \ 165 } 166 + show_in(min, in_min) 167 + show_in(max, in_max) 168 + show_in(input, in) 169 170 #define set_in(suffix, value, reg) \ 171 static ssize_t set_in_##suffix(struct device *dev, struct device_attribute *attr, const char *buf, \ 172 size_t count) \ 173 { \ 174 + int nr = to_sensor_dev_attr(attr)->index; \ 175 struct i2c_client *client = to_i2c_client(dev); \ 176 struct lm80_data *data = i2c_get_clientdata(client); \ 177 long val = simple_strtol(buf, NULL, 10); \ 178 \ 179 mutex_lock(&data->update_lock);\ 180 + data->value[nr] = IN_TO_REG(val); \ 181 + lm80_write_value(client, reg(nr), data->value[nr]); \ 182 mutex_unlock(&data->update_lock);\ 183 return count; \ 184 } 185 + set_in(min, in_min, LM80_REG_IN_MIN) 186 + set_in(max, in_max, LM80_REG_IN_MAX) 187 188 + #define show_fan(suffix, value) \ 189 static ssize_t show_fan_##suffix(struct device *dev, struct device_attribute *attr, char *buf) \ 190 { \ 191 + int nr = to_sensor_dev_attr(attr)->index; \ 192 struct lm80_data *data = lm80_update_device(dev); \ 193 + return sprintf(buf, "%d\n", FAN_FROM_REG(data->value[nr], \ 194 + DIV_FROM_REG(data->fan_div[nr]))); \ 195 } 196 + show_fan(min, fan_min) 197 + show_fan(input, fan) 198 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])); 205 } 206 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; 220 } 221 222 /* Note: we save and restore the fan minimum here, because its value is 223 determined in part by the fan divisor. This follows the principle of 224 least surprise; the user doesn't expect the fan minimum to change just 225 because the divisor changed. */ 226 + static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 227 + const char *buf, size_t count) 228 { 229 + int nr = to_sensor_dev_attr(attr)->index; 230 struct i2c_client *client = to_i2c_client(dev); 231 struct lm80_data *data = i2c_get_clientdata(client); 232 unsigned long min, val = simple_strtoul(buf, NULL, 10); ··· 291 292 return count; 293 } 294 295 static ssize_t show_temp_input1(struct device *dev, struct device_attribute *attr, char *buf) 296 { ··· 337 set_temp(os_max, temp_os_max, LM80_REG_TEMP_OS_MAX); 338 set_temp(os_hyst, temp_os_hyst, LM80_REG_TEMP_OS_HYST); 339 340 + static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, 341 + char *buf) 342 { 343 struct lm80_data *data = lm80_update_device(dev); 344 return sprintf(buf, "%u\n", data->alarms); 345 } 346 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); 400 static DEVICE_ATTR(temp1_input, S_IRUGO, show_temp_input1, NULL); 401 static DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_hot_max, 402 set_temp_hot_max); ··· 382 static DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temp_os_hyst, 383 set_temp_os_hyst); 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); 396 397 /* 398 * Real code ··· 395 } 396 397 static struct attribute *lm80_attributes[] = { 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, 425 &dev_attr_temp1_input.attr, 426 &dev_attr_temp1_max.attr, 427 &dev_attr_temp1_max_hyst.attr, 428 &dev_attr_temp1_crit.attr, 429 &dev_attr_temp1_crit_hyst.attr, 430 &dev_attr_alarms.attr, 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, 442 NULL 443 }; 444 ··· 439 static int lm80_detect(struct i2c_adapter *adapter, int address, int kind) 440 { 441 int i, cur; 442 + struct i2c_client *client; 443 struct lm80_data *data; 444 int err = 0; 445 const char *name; ··· 455 goto exit; 456 } 457 458 + client = &data->client; 459 + i2c_set_clientdata(client, data); 460 + client->addr = address; 461 + client->adapter = adapter; 462 + client->driver = &lm80_driver; 463 464 /* Now, we do the remaining detection. It is lousy. */ 465 + if (lm80_read_value(client, LM80_REG_ALARM2) & 0xc0) 466 goto error_free; 467 for (i = 0x2a; i <= 0x3d; i++) { 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)) 472 goto error_free; 473 } 474 ··· 477 kind = lm80; 478 name = "lm80"; 479 480 + /* Fill in the remaining client fields */ 481 + strlcpy(client->name, name, I2C_NAME_SIZE); 482 mutex_init(&data->update_lock); 483 484 /* Tell the I2C layer a new client has arrived */ 485 + if ((err = i2c_attach_client(client))) 486 goto error_free; 487 488 /* Initialize the LM80 chip */ 489 + lm80_init_client(client); 490 491 /* A few vars need to be filled upon startup */ 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)); 494 495 /* Register sysfs hooks */ 496 + if ((err = sysfs_create_group(&client->dev.kobj, &lm80_group))) 497 goto error_detach; 498 499 + data->hwmon_dev = hwmon_device_register(&client->dev); 500 if (IS_ERR(data->hwmon_dev)) { 501 err = PTR_ERR(data->hwmon_dev); 502 goto error_remove; ··· 506 return 0; 507 508 error_remove: 509 + sysfs_remove_group(&client->dev.kobj, &lm80_group); 510 error_detach: 511 + i2c_detach_client(client); 512 error_free: 513 kfree(data); 514 exit:
-1
drivers/hwmon/lm83.c
··· 133 .driver = { 134 .name = "lm83", 135 }, 136 - .id = I2C_DRIVERID_LM83, 137 .attach_adapter = lm83_attach_adapter, 138 .detach_client = lm83_detach_client, 139 };
··· 133 .driver = { 134 .name = "lm83", 135 }, 136 .attach_adapter = lm83_attach_adapter, 137 .detach_client = lm83_detach_client, 138 };
+53 -11
drivers/hwmon/lm85.c
··· 367 .driver = { 368 .name = "lm85", 369 }, 370 - .id = I2C_DRIVERID_LM85, 371 .attach_adapter = lm85_attach_adapter, 372 .detach_client = lm85_detach_client, 373 }; ··· 443 444 static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 445 { 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; 452 return count; 453 } 454 ··· 514 { 515 int nr = to_sensor_dev_attr(attr)->index; 516 struct lm85_data *data = lm85_update_device(dev); 517 - int pwm_zone; 518 519 pwm_zone = ZONE_FROM_REG(data->autofan[nr].config); 520 - return sprintf(buf,"%d\n", (pwm_zone != 0 && pwm_zone != -1) ); 521 } 522 523 #define show_pwm_reg(offset) \ 524 static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \ 525 show_pwm, set_pwm, offset - 1); \ 526 - static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO, \ 527 - show_pwm_enable, NULL, offset - 1) 528 529 show_pwm_reg(1); 530 show_pwm_reg(2);
··· 367 .driver = { 368 .name = "lm85", 369 }, 370 .attach_adapter = lm85_attach_adapter, 371 .detach_client = lm85_detach_client, 372 }; ··· 444 445 static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 446 { 447 + struct lm85_data *data = dev_get_drvdata(dev); 448 + data->vrm = simple_strtoul(buf, NULL, 10); 449 return count; 450 } 451 ··· 519 { 520 int nr = to_sensor_dev_attr(attr)->index; 521 struct lm85_data *data = lm85_update_device(dev); 522 + int pwm_zone, enable; 523 524 pwm_zone = ZONE_FROM_REG(data->autofan[nr].config); 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; 573 } 574 575 #define show_pwm_reg(offset) \ 576 static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \ 577 show_pwm, set_pwm, offset - 1); \ 578 + static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \ 579 + show_pwm_enable, set_pwm_enable, offset - 1) 580 581 show_pwm_reg(1); 582 show_pwm_reg(2);
+20 -9
drivers/hwmon/lm87.c
··· 5 * Philip Edelbrock <phil@netroedge.com> 6 * Stephen Rousset <stephen.rousset@rocketlogix.com> 7 * Dan Eaton <dan.eaton@rocketlogix.com> 8 - * Copyright (C) 2004 Jean Delvare <khali@linux-fr.org> 9 * 10 * Original port to Linux 2.6 by Jeff Oliver. 11 * ··· 36 * control the speed of a fan. All new chips use pulse width modulation 37 * instead. The LM87 is the only hardware monitoring chipset I know of 38 * which uses amplitude modulation. Be careful when using this feature. 39 * 40 * This program is free software; you can redistribute it and/or modify 41 * it under the terms of the GNU General Public License as published by ··· 79 * Insmod parameters 80 */ 81 82 - I2C_CLIENT_INSMOD_1(lm87); 83 84 /* 85 * The LM87 registers ··· 171 .driver = { 172 .name = "lm87", 173 }, 174 - .id = I2C_DRIVERID_LM87, 175 .attach_adapter = lm87_attach_adapter, 176 .detach_client = lm87_detach_client, 177 }; ··· 510 } 511 static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 512 { 513 - struct i2c_client *client = to_i2c_client(dev); 514 - struct lm87_data *data = i2c_get_clientdata(client); 515 data->vrm = simple_strtoul(buf, NULL, 10); 516 return count; 517 } ··· 665 struct i2c_client *new_client; 666 struct lm87_data *data; 667 int err = 0; 668 669 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 670 goto exit; ··· 690 691 /* Now, we do the remaining detection. */ 692 if (kind < 0) { 693 u8 rev = lm87_read_value(new_client, LM87_REG_REVISION); 694 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) { 698 dev_dbg(&adapter->dev, 699 "LM87 detection failed at 0x%02x.\n", 700 address); ··· 710 } 711 712 /* We can fill in the remaining client fields */ 713 - strlcpy(new_client->name, "lm87", I2C_NAME_SIZE); 714 data->valid = 0; 715 mutex_init(&data->update_lock); 716
··· 5 * Philip Edelbrock <phil@netroedge.com> 6 * Stephen Rousset <stephen.rousset@rocketlogix.com> 7 * Dan Eaton <dan.eaton@rocketlogix.com> 8 + * Copyright (C) 2004,2007 Jean Delvare <khali@linux-fr.org> 9 * 10 * Original port to Linux 2.6 by Jeff Oliver. 11 * ··· 36 * control the speed of a fan. All new chips use pulse width modulation 37 * instead. The LM87 is the only hardware monitoring chipset I know of 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 44 * 45 * This program is free software; you can redistribute it and/or modify 46 * it under the terms of the GNU General Public License as published by ··· 74 * Insmod parameters 75 */ 76 77 + I2C_CLIENT_INSMOD_2(lm87, adm1024); 78 79 /* 80 * The LM87 registers ··· 166 .driver = { 167 .name = "lm87", 168 }, 169 .attach_adapter = lm87_attach_adapter, 170 .detach_client = lm87_detach_client, 171 }; ··· 506 } 507 static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 508 { 509 + struct lm87_data *data = dev_get_drvdata(dev); 510 data->vrm = simple_strtoul(buf, NULL, 10); 511 return count; 512 } ··· 662 struct i2c_client *new_client; 663 struct lm87_data *data; 664 int err = 0; 665 + static const char *names[] = { "lm87", "adm1024" }; 666 667 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 668 goto exit; ··· 686 687 /* Now, we do the remaining detection. */ 688 if (kind < 0) { 689 + u8 cid = lm87_read_value(new_client, LM87_REG_COMPANY_ID); 690 u8 rev = lm87_read_value(new_client, LM87_REG_REVISION); 691 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)) { 701 dev_dbg(&adapter->dev, 702 "LM87 detection failed at 0x%02x.\n", 703 address); ··· 699 } 700 701 /* We can fill in the remaining client fields */ 702 + strlcpy(new_client->name, names[kind - 1], I2C_NAME_SIZE); 703 data->valid = 0; 704 mutex_init(&data->update_lock); 705
+12 -13
drivers/hwmon/lm90.c
··· 204 .driver = { 205 .name = "lm90", 206 }, 207 - .id = I2C_DRIVERID_LM90, 208 .attach_adapter = lm90_attach_adapter, 209 .detach_client = lm90_detach_client, 210 }; ··· 530 kind = lm90; 531 532 if (kind < 0) { /* detection and identification */ 533 - u8 man_id, chip_id, reg_config1, reg_convrate; 534 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) 543 goto exit_free; 544 545 if ((address == 0x4C || address == 0x4D) 546 && man_id == 0x01) { /* National Semiconductor */ 547 - u8 reg_config2; 548 549 - if (lm90_read_reg(new_client, LM90_REG_R_CONFIG2, 550 - &reg_config2) < 0) 551 goto exit_free; 552 553 if ((reg_config1 & 0x2A) == 0x00
··· 204 .driver = { 205 .name = "lm90", 206 }, 207 .attach_adapter = lm90_attach_adapter, 208 .detach_client = lm90_detach_client, 209 }; ··· 531 kind = lm90; 532 533 if (kind < 0) { /* detection and identification */ 534 + int man_id, chip_id, reg_config1, reg_convrate; 535 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) 544 goto exit_free; 545 546 if ((address == 0x4C || address == 0x4D) 547 && man_id == 0x01) { /* National Semiconductor */ 548 + int reg_config2; 549 550 + if ((reg_config2 = i2c_smbus_read_byte_data(new_client, 551 + LM90_REG_R_CONFIG2)) < 0) 552 goto exit_free; 553 554 if ((reg_config1 & 0x2A) == 0x00
-1
drivers/hwmon/lm92.c
··· 428 .driver = { 429 .name = "lm92", 430 }, 431 - .id = I2C_DRIVERID_LM92, 432 .attach_adapter = lm92_attach_adapter, 433 .detach_client = lm92_detach_client, 434 };
··· 428 .driver = { 429 .name = "lm92", 430 }, 431 .attach_adapter = lm92_attach_adapter, 432 .detach_client = lm92_detach_client, 433 };
+5 -1
drivers/hwmon/pc87360.c
··· 59 " 2: Forcibly enable all voltage and temperature channels, except in9\n" 60 " 3: Forcibly enable all voltage and temperature channels, including in9"); 61 62 /* 63 * Super-I/O registers and operations 64 */ ··· 830 /* No superio_enter */ 831 832 /* Identify device */ 833 - val = superio_inb(sioaddr, DEVID); 834 switch (val) { 835 case 0xE1: /* PC87360 */ 836 case 0xE8: /* PC87363 */
··· 59 " 2: Forcibly enable all voltage and temperature channels, except in9\n" 60 " 3: Forcibly enable all voltage and temperature channels, including in9"); 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 + 66 /* 67 * Super-I/O registers and operations 68 */ ··· 826 /* No superio_enter */ 827 828 /* Identify device */ 829 + val = force_id ? force_id : superio_inb(sioaddr, DEVID); 830 switch (val) { 831 case 0xE1: /* PC87360 */ 832 case 0xE8: /* PC87363 */
+5 -1
drivers/hwmon/pc87427.c
··· 34 #include <linux/ioport.h> 35 #include <asm/io.h> 36 37 static struct platform_device *pdev; 38 39 #define DRVNAME "pc87427" ··· 559 int i, err = 0; 560 561 /* Identify device */ 562 - val = superio_inb(sioaddr, SIOREG_DEVID); 563 if (val != 0xf2) { /* PC87427 */ 564 err = -ENODEV; 565 goto exit;
··· 34 #include <linux/ioport.h> 35 #include <asm/io.h> 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 + 41 static struct platform_device *pdev; 42 43 #define DRVNAME "pc87427" ··· 555 int i, err = 0; 556 557 /* Identify device */ 558 + val = force_id ? force_id : superio_inb(sioaddr, SIOREG_DEVID); 559 if (val != 0xf2) { /* PC87427 */ 560 err = -ENODEV; 561 goto exit;
+5 -1
drivers/hwmon/smsc47b397.c
··· 38 #include <linux/mutex.h> 39 #include <asm/io.h> 40 41 static struct platform_device *pdev; 42 43 #define DRVNAME "smsc47b397" ··· 337 u8 id, rev; 338 339 superio_enter(); 340 - id = superio_inb(SUPERIO_REG_DEVID); 341 342 if ((id != 0x6f) && (id != 0x81) && (id != 0x85)) { 343 superio_exit();
··· 38 #include <linux/mutex.h> 39 #include <asm/io.h> 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 + 45 static struct platform_device *pdev; 46 47 #define DRVNAME "smsc47b397" ··· 333 u8 id, rev; 334 335 superio_enter(); 336 + id = force_id ? force_id : superio_inb(SUPERIO_REG_DEVID); 337 338 if ((id != 0x6f) && (id != 0x81) && (id != 0x85)) { 339 superio_exit();
+5 -1
drivers/hwmon/smsc47m1.c
··· 39 #include <linux/sysfs.h> 40 #include <asm/io.h> 41 42 static struct platform_device *pdev; 43 44 #define DRVNAME "smsc47m1" ··· 403 u8 val; 404 405 superio_enter(); 406 - val = superio_inb(SUPERIO_REG_DEVID); 407 408 /* 409 * SMSC LPC47M10x/LPC47M112/LPC47M13x (device id 0x59), LPC47M14x
··· 39 #include <linux/sysfs.h> 40 #include <asm/io.h> 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 + 46 static struct platform_device *pdev; 47 48 #define DRVNAME "smsc47m1" ··· 399 u8 val; 400 401 superio_enter(); 402 + val = force_id ? force_id : superio_inb(SUPERIO_REG_DEVID); 403 404 /* 405 * SMSC LPC47M10x/LPC47M112/LPC47M13x (device id 0x59), LPC47M14x
+1 -2
drivers/hwmon/smsc47m192.c
··· 341 static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, 342 const char *buf, size_t count) 343 { 344 - struct i2c_client *client = to_i2c_client(dev); 345 - struct smsc47m192_data *data = i2c_get_clientdata(client); 346 data->vrm = simple_strtoul(buf, NULL, 10); 347 return count; 348 }
··· 341 static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, 342 const char *buf, size_t count) 343 { 344 + struct smsc47m192_data *data = dev_get_drvdata(dev); 345 data->vrm = simple_strtoul(buf, NULL, 10); 346 return count; 347 }
+7 -1
drivers/hwmon/vt1211.c
··· 42 module_param(int_mode, int, 0); 43 MODULE_PARM_DESC(int_mode, "Force the temperature interrupt mode"); 44 45 static struct platform_device *pdev; 46 47 #define DRVNAME "vt1211" ··· 1284 static int __init vt1211_find(int sio_cip, unsigned short *address) 1285 { 1286 int err = -ENODEV; 1287 1288 superio_enter(sio_cip); 1289 1290 - if (superio_inb(sio_cip, SIO_VT1211_DEVID) != SIO_VT1211_ID) { 1291 goto EXIT; 1292 } 1293
··· 42 module_param(int_mode, int, 0); 43 MODULE_PARM_DESC(int_mode, "Force the temperature interrupt mode"); 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 + 49 static struct platform_device *pdev; 50 51 #define DRVNAME "vt1211" ··· 1280 static int __init vt1211_find(int sio_cip, unsigned short *address) 1281 { 1282 int err = -ENODEV; 1283 + int devid; 1284 1285 superio_enter(sio_cip); 1286 1287 + devid = force_id ? force_id : superio_inb(sio_cip, SIO_VT1211_DEVID); 1288 + if (devid != SIO_VT1211_ID) { 1289 goto EXIT; 1290 } 1291
+1 -1
drivers/hwmon/vt8231.c
··· 504 case 4: data->fan_div[nr] = 2; break; 505 case 8: data->fan_div[nr] = 3; break; 506 default: 507 - dev_err(dev, "fan_div value %ld not supported." 508 "Choose one of 1, 2, 4 or 8!\n", val); 509 mutex_unlock(&data->update_lock); 510 return -EINVAL;
··· 504 case 4: data->fan_div[nr] = 2; break; 505 case 8: data->fan_div[nr] = 3; break; 506 default: 507 + dev_err(dev, "fan_div value %ld not supported. " 508 "Choose one of 1, 2, 4 or 8!\n", val); 509 mutex_unlock(&data->update_lock); 510 return -EINVAL;
+17 -12
drivers/hwmon/w83627ehf.c
··· 59 "w83627dhg", 60 }; 61 62 #define DRVNAME "w83627ehf" 63 64 /* ··· 1202 device_remove_file(dev, &sda_temp[i].dev_attr); 1203 1204 device_remove_file(dev, &dev_attr_name); 1205 - if (data->vid != 0x3f) 1206 - device_remove_file(dev, &dev_attr_cpu0_vid); 1207 } 1208 1209 /* Get the monitoring functions started */ ··· 1302 } 1303 } 1304 1305 - data->vid = superio_inb(sio_data->sioreg, SIO_REG_VID_DATA) & 0x3f; 1306 } else { 1307 dev_info(dev, "VID pins in output mode, CPU VID not " 1308 "available\n"); 1309 - data->vid = 0x3f; 1310 } 1311 1312 /* fan4 and fan5 share some pins with the GPIO and serial flash */ ··· 1394 if (err) 1395 goto exit_remove; 1396 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 data->hwmon_dev = hwmon_device_register(dev); 1404 if (IS_ERR(data->hwmon_dev)) { 1405 err = PTR_ERR(data->hwmon_dev); ··· 1447 1448 superio_enter(sioaddr); 1449 1450 - val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8) 1451 - | superio_inb(sioaddr, SIO_REG_DEVID + 1); 1452 switch (val & SIO_ID_MASK) { 1453 case SIO_W83627EHF_ID: 1454 sio_data->kind = w83627ehf;
··· 59 "w83627dhg", 60 }; 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 + 66 #define DRVNAME "w83627ehf" 67 68 /* ··· 1198 device_remove_file(dev, &sda_temp[i].dev_attr); 1199 1200 device_remove_file(dev, &dev_attr_name); 1201 + device_remove_file(dev, &dev_attr_cpu0_vid); 1202 } 1203 1204 /* Get the monitoring functions started */ ··· 1299 } 1300 } 1301 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; 1309 } else { 1310 dev_info(dev, "VID pins in output mode, CPU VID not " 1311 "available\n"); 1312 } 1313 1314 /* fan4 and fan5 share some pins with the GPIO and serial flash */ ··· 1386 if (err) 1387 goto exit_remove; 1388 1389 data->hwmon_dev = hwmon_device_register(dev); 1390 if (IS_ERR(data->hwmon_dev)) { 1391 err = PTR_ERR(data->hwmon_dev); ··· 1445 1446 superio_enter(sioaddr); 1447 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); 1453 switch (val & SIO_ID_MASK) { 1454 case SIO_W83627EHF_ID: 1455 sio_data->kind = w83627ehf;
+173 -54
drivers/hwmon/w83627hf.c
··· 75 module_param(init, bool, 0); 76 MODULE_PARM_DESC(init, "Set to zero to bypass chip initialization"); 77 78 /* modified from kernel/include/traps.c */ 79 static int REG; /* The register to read/write */ 80 #define DEV 0x07 /* Register: Logical device select */ ··· 323 return (0x80 | (180000UL / (val << 8))); 324 } 325 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) 330 331 #define DIV_FROM_REG(val) (1 << (val)) 332 ··· 365 u8 vid; /* Register encoding, combined */ 366 u32 alarms; /* Register encoding, combined */ 367 u32 beep_mask; /* Register encoding, combined */ 368 - u8 beep_enable; /* Boolean */ 369 u8 pwm[3]; /* Register value */ 370 u8 pwm_freq[3]; /* Register value */ 371 u16 sens[3]; /* 1 = pentium diode; 2 = 3904 diode; ··· 714 } 715 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL); 716 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)); \ 723 } 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 */ 729 730 static ssize_t 731 - store_beep_reg(struct device *dev, const char *buf, size_t count, 732 - int update_mask) 733 { 734 struct w83627hf_data *data = dev_get_drvdata(dev); 735 - u32 val, val2; 736 737 val = simple_strtoul(buf, NULL, 10); 738 739 mutex_lock(&data->update_lock); 740 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 - 754 w83627hf_write_value(data, W83781D_REG_BEEP_INTS2, 755 - val2 | data->beep_enable << 7); 756 757 mutex_unlock(&data->update_lock); 758 return count; 759 } 760 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); 773 774 - sysfs_beep(ENABLE, enable); 775 - sysfs_beep(MASK, mask); 776 777 static ssize_t 778 show_fan_div(struct device *dev, struct device_attribute *devattr, char *buf) ··· 1101 VAL = sioaddr + 1; 1102 1103 superio_enter(); 1104 - val= superio_inb(DEVID); 1105 switch (val) { 1106 case W627_DEVID: 1107 sio_data->type = w83627hf; ··· 1160 #define VIN_UNIT_ATTRS(_X_) \ 1161 &sensor_dev_attr_in##_X_##_input.dev_attr.attr, \ 1162 &sensor_dev_attr_in##_X_##_min.dev_attr.attr, \ 1163 - &sensor_dev_attr_in##_X_##_max.dev_attr.attr 1164 1165 #define FAN_UNIT_ATTRS(_X_) \ 1166 &sensor_dev_attr_fan##_X_##_input.dev_attr.attr, \ 1167 &sensor_dev_attr_fan##_X_##_min.dev_attr.attr, \ 1168 - &sensor_dev_attr_fan##_X_##_div.dev_attr.attr 1169 1170 #define TEMP_UNIT_ATTRS(_X_) \ 1171 &sensor_dev_attr_temp##_X_##_input.dev_attr.attr, \ 1172 &sensor_dev_attr_temp##_X_##_max.dev_attr.attr, \ 1173 &sensor_dev_attr_temp##_X_##_max_hyst.dev_attr.attr, \ 1174 - &sensor_dev_attr_temp##_X_##_type.dev_attr.attr 1175 1176 static struct attribute *w83627hf_attributes[] = { 1177 &dev_attr_in0_input.attr, 1178 &dev_attr_in0_min.attr, 1179 &dev_attr_in0_max.attr, 1180 VIN_UNIT_ATTRS(2), 1181 VIN_UNIT_ATTRS(3), 1182 VIN_UNIT_ATTRS(4), ··· 1198 TEMP_UNIT_ATTRS(2), 1199 1200 &dev_attr_alarms.attr, 1201 - &dev_attr_beep_enable.attr, 1202 &dev_attr_beep_mask.attr, 1203 1204 &sensor_dev_attr_pwm1.dev_attr.attr, ··· 1288 || (err = device_create_file(dev, 1289 &sensor_dev_attr_in5_max.dev_attr)) 1290 || (err = device_create_file(dev, 1291 &sensor_dev_attr_in6_input.dev_attr)) 1292 || (err = device_create_file(dev, 1293 &sensor_dev_attr_in6_min.dev_attr)) 1294 || (err = device_create_file(dev, 1295 &sensor_dev_attr_in6_max.dev_attr)) 1296 || (err = device_create_file(dev, 1297 &sensor_dev_attr_pwm1_freq.dev_attr)) 1298 || (err = device_create_file(dev, ··· 1315 || (err = device_create_file(dev, 1316 &sensor_dev_attr_in1_max.dev_attr)) 1317 || (err = device_create_file(dev, 1318 &sensor_dev_attr_fan3_input.dev_attr)) 1319 || (err = device_create_file(dev, 1320 &sensor_dev_attr_fan3_min.dev_attr)) 1321 || (err = device_create_file(dev, 1322 &sensor_dev_attr_fan3_div.dev_attr)) 1323 || (err = device_create_file(dev, 1324 &sensor_dev_attr_temp3_input.dev_attr)) 1325 || (err = device_create_file(dev, 1326 &sensor_dev_attr_temp3_max.dev_attr)) 1327 || (err = device_create_file(dev, 1328 &sensor_dev_attr_temp3_max_hyst.dev_attr)) 1329 || (err = device_create_file(dev, 1330 &sensor_dev_attr_temp3_type.dev_attr))) 1331 goto ERROR4; ··· 1626 (w83627hf_read_value(data, 1627 W83781D_REG_CONFIG) & 0xf7) 1628 | 0x01); 1629 } 1630 1631 static void w83627hf_update_fan_div(struct w83627hf_data *data) ··· 1723 (w83627hf_read_value(data, W83781D_REG_ALARM2) << 8) | 1724 (w83627hf_read_value(data, W83781D_REG_ALARM3) << 16); 1725 i = w83627hf_read_value(data, W83781D_REG_BEEP_INTS2); 1726 - data->beep_enable = i >> 7; 1727 - data->beep_mask = ((i & 0x7f) << 8) | 1728 w83627hf_read_value(data, W83781D_REG_BEEP_INTS1) | 1729 w83627hf_read_value(data, W83781D_REG_BEEP_INTS3) << 16; 1730 data->last_updated = jiffies;
··· 75 module_param(init, bool, 0); 76 MODULE_PARM_DESC(init, "Set to zero to bypass chip initialization"); 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 + 82 /* modified from kernel/include/traps.c */ 83 static int REG; /* The register to read/write */ 84 #define DEV 0x07 /* Register: Logical device select */ ··· 319 return (0x80 | (180000UL / (val << 8))); 320 } 321 322 + #define BEEP_MASK_FROM_REG(val) ((val) & 0xff7fff) 323 + #define BEEP_MASK_TO_REG(val) ((val) & 0xff7fff) 324 325 #define DIV_FROM_REG(val) (1 << (val)) 326 ··· 363 u8 vid; /* Register encoding, combined */ 364 u32 alarms; /* Register encoding, combined */ 365 u32 beep_mask; /* Register encoding, combined */ 366 u8 pwm[3]; /* Register value */ 367 u8 pwm_freq[3]; /* Register value */ 368 u16 sens[3]; /* 1 = pentium diode; 2 = 3904 diode; ··· 713 } 714 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL); 715 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); 722 } 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); 738 739 static ssize_t 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) 750 { 751 struct w83627hf_data *data = dev_get_drvdata(dev); 752 + unsigned long val; 753 754 val = simple_strtoul(buf, NULL, 10); 755 756 mutex_lock(&data->update_lock); 757 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); 765 w83627hf_write_value(data, W83781D_REG_BEEP_INTS2, 766 + (data->beep_mask >> 8) & 0xff); 767 768 mutex_unlock(&data->update_lock); 769 return count; 770 } 771 772 + static DEVICE_ATTR(beep_mask, S_IRUGO | S_IWUSR, 773 + show_beep_mask, store_beep_mask); 774 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); 861 862 static ssize_t 863 show_fan_div(struct device *dev, struct device_attribute *devattr, char *buf) ··· 1014 VAL = sioaddr + 1; 1015 1016 superio_enter(); 1017 + val = force_id ? force_id : superio_inb(DEVID); 1018 switch (val) { 1019 case W627_DEVID: 1020 sio_data->type = w83627hf; ··· 1073 #define VIN_UNIT_ATTRS(_X_) \ 1074 &sensor_dev_attr_in##_X_##_input.dev_attr.attr, \ 1075 &sensor_dev_attr_in##_X_##_min.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 1079 1080 #define FAN_UNIT_ATTRS(_X_) \ 1081 &sensor_dev_attr_fan##_X_##_input.dev_attr.attr, \ 1082 &sensor_dev_attr_fan##_X_##_min.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 1086 1087 #define TEMP_UNIT_ATTRS(_X_) \ 1088 &sensor_dev_attr_temp##_X_##_input.dev_attr.attr, \ 1089 &sensor_dev_attr_temp##_X_##_max.dev_attr.attr, \ 1090 &sensor_dev_attr_temp##_X_##_max_hyst.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 1094 1095 static struct attribute *w83627hf_attributes[] = { 1096 &dev_attr_in0_input.attr, 1097 &dev_attr_in0_min.attr, 1098 &dev_attr_in0_max.attr, 1099 + &sensor_dev_attr_in0_alarm.dev_attr.attr, 1100 + &sensor_dev_attr_in0_beep.dev_attr.attr, 1101 VIN_UNIT_ATTRS(2), 1102 VIN_UNIT_ATTRS(3), 1103 VIN_UNIT_ATTRS(4), ··· 1103 TEMP_UNIT_ATTRS(2), 1104 1105 &dev_attr_alarms.attr, 1106 + &sensor_dev_attr_beep_enable.dev_attr.attr, 1107 &dev_attr_beep_mask.attr, 1108 1109 &sensor_dev_attr_pwm1.dev_attr.attr, ··· 1193 || (err = device_create_file(dev, 1194 &sensor_dev_attr_in5_max.dev_attr)) 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, 1200 &sensor_dev_attr_in6_input.dev_attr)) 1201 || (err = device_create_file(dev, 1202 &sensor_dev_attr_in6_min.dev_attr)) 1203 || (err = device_create_file(dev, 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)) 1209 || (err = device_create_file(dev, 1210 &sensor_dev_attr_pwm1_freq.dev_attr)) 1211 || (err = device_create_file(dev, ··· 1212 || (err = device_create_file(dev, 1213 &sensor_dev_attr_in1_max.dev_attr)) 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, 1219 &sensor_dev_attr_fan3_input.dev_attr)) 1220 || (err = device_create_file(dev, 1221 &sensor_dev_attr_fan3_min.dev_attr)) 1222 || (err = device_create_file(dev, 1223 &sensor_dev_attr_fan3_div.dev_attr)) 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, 1229 &sensor_dev_attr_temp3_input.dev_attr)) 1230 || (err = device_create_file(dev, 1231 &sensor_dev_attr_temp3_max.dev_attr)) 1232 || (err = device_create_file(dev, 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)) 1238 || (err = device_create_file(dev, 1239 &sensor_dev_attr_temp3_type.dev_attr))) 1240 goto ERROR4; ··· 1511 (w83627hf_read_value(data, 1512 W83781D_REG_CONFIG) & 0xf7) 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); 1519 } 1520 1521 static void w83627hf_update_fan_div(struct w83627hf_data *data) ··· 1603 (w83627hf_read_value(data, W83781D_REG_ALARM2) << 8) | 1604 (w83627hf_read_value(data, W83781D_REG_ALARM3) << 16); 1605 i = w83627hf_read_value(data, W83781D_REG_BEEP_INTS2); 1606 + data->beep_mask = (i << 8) | 1607 w83627hf_read_value(data, W83781D_REG_BEEP_INTS1) | 1608 w83627hf_read_value(data, W83781D_REG_BEEP_INTS3) << 16; 1609 data->last_updated = jiffies;
+12 -37
drivers/hwmon/w83781d.c
··· 28 as99127f 7 3 0 3 0x31 0x12c3 yes no 29 as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no 30 w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes 31 - w83627hf 9 3 2 3 0x21 0x5ca3 yes yes(LPC) 32 w83782d 9 3 2-4 3 0x30 0x5ca3 yes yes 33 w83783s 5-6 3 2 1-2 0x40 0x5ca3 yes no 34 ··· 53 static struct platform_device *pdev; 54 55 /* 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 }; 59 static unsigned short isa_address = 0x290; 60 61 /* Insmod parameters */ 62 - I2C_CLIENT_INSMOD_5(w83781d, w83782d, w83783s, w83627hf, as99127f); 63 I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: " 64 "{bus, clientaddr, subclientaddr1, subclientaddr2}"); 65 ··· 112 #define W83781D_REG_ALARM1 0x41 113 #define W83781D_REG_ALARM2 0x42 114 115 - /* Real-time status (W83782D, W83783S, W83627HF) */ 116 #define W83782D_REG_ALARM1 0x459 117 #define W83782D_REG_ALARM2 0x45A 118 #define W83782D_REG_ALARM3 0x45B ··· 150 static const u8 BIT_SCFG2[] = { 0x10, 0x20, 0x40 }; 151 152 #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 158 /* Conversions */ 159 #define IN_TO_REG(val) SENSORS_LIMIT(((val) + 8) / 16, 0, 255) ··· 265 .driver = { 266 .name = "w83781d", 267 }, 268 - .id = I2C_DRIVERID_W83781D, 269 .attach_adapter = w83781d_attach_adapter, 270 .detach_client = w83781d_detach_client, 271 }; ··· 689 unsigned long val = simple_strtoul(buf, NULL, 10); 690 691 mutex_lock(&data->update_lock); 692 - 693 /* Save fan_min */ 694 min = FAN_FROM_REG(data->fan_min[nr], 695 DIV_FROM_REG(data->fan_div[nr])); ··· 956 client_name = "w83782d subclient"; 957 else if (kind == w83783s) 958 client_name = "w83783s subclient"; 959 - else if (kind == w83627hf) 960 - client_name = "w83627hf subclient"; 961 else if (kind == as99127f) 962 client_name = "as99127f subclient"; 963 ··· 995 #define IN_UNIT_ATTRS(X) \ 996 &sensor_dev_attr_in##X##_input.dev_attr.attr, \ 997 &sensor_dev_attr_in##X##_min.dev_attr.attr, \ 998 - &sensor_dev_attr_in##X##_max.dev_attr.attr, \ 999 &sensor_dev_attr_in##X##_alarm.dev_attr.attr, \ 1000 &sensor_dev_attr_in##X##_beep.dev_attr.attr 1001 ··· 1259 kind = w83782d; 1260 else if (val1 == 0x40 && vendid == winbond && address == 0x2d) 1261 kind = w83783s; 1262 - else if (val1 == 0x21 && vendid == winbond) 1263 - kind = w83627hf; 1264 - else if (val1 == 0x31 && address >= 0x28) 1265 kind = as99127f; 1266 else { 1267 if (kind == 0) ··· 1277 client_name = "w83782d"; 1278 } else if (kind == w83783s) { 1279 client_name = "w83783s"; 1280 - } else if (kind == w83627hf) { 1281 - client_name = "w83627hf"; 1282 } else if (kind == as99127f) { 1283 client_name = "as99127f"; 1284 } ··· 1383 1384 reg = w83781d_read_value(data, W83781D_REG_WCHIPID); 1385 switch (reg) { 1386 - case 0x21: 1387 - data->type = w83627hf; 1388 - name = "w83627hf"; 1389 - break; 1390 case 0x30: 1391 data->type = w83782d; 1392 name = "w83782d"; ··· 1436 } 1437 1438 /* The SMBus locks itself, usually, but nothing may access the Winbond between 1439 - bank switches. ISA access must always be locked explicitly! 1440 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. 1442 There are some ugly typecasts here, but the good news is - they should 1443 nowhere else be necessary! */ 1444 static int ··· 1582 int type = data->type; 1583 u8 tmp; 1584 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 if (reset && type != as99127f) { /* this resets registers we don't have 1591 documentation for on the as99127f */ 1592 /* Resetting the chip has been the default for a long time, ··· 1695 w83781d_read_value(data, W83781D_REG_IN_MIN(i)); 1696 data->in_max[i] = 1697 w83781d_read_value(data, W83781D_REG_IN_MAX(i)); 1698 - if ((data->type != w83782d) 1699 - && (data->type != w83627hf) && (i == 6)) 1700 break; 1701 } 1702 for (i = 0; i < 3; i++) { ··· 1753 data->fan_div[1] |= (i >> 4) & 0x04; 1754 data->fan_div[2] |= (i >> 5) & 0x04; 1755 } 1756 - if ((data->type == w83782d) || (data->type == w83627hf)) { 1757 data->alarms = w83781d_read_value(data, 1758 W83782D_REG_ALARM1) 1759 | (w83781d_read_value(data, ··· 1863 outb_p(W83781D_REG_WCHIPID, address + W83781D_ADDR_REG_OFFSET); 1864 val = inb_p(address + W83781D_DATA_REG_OFFSET); 1865 if ((val & 0xfe) == 0x10 /* W83781D */ 1866 - || val == 0x30 /* W83782D */ 1867 - || val == 0x21) /* W83627HF */ 1868 found = 1; 1869 1870 if (found) 1871 pr_info("w83781d: Found a %s chip at %#x\n", 1872 - val == 0x21 ? "W83627HF" : 1873 val == 0x30 ? "W83782D" : "W83781D", (int)address); 1874 1875 release:
··· 28 as99127f 7 3 0 3 0x31 0x12c3 yes no 29 as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no 30 w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes 31 w83782d 9 3 2-4 3 0x30 0x5ca3 yes yes 32 w83783s 5-6 3 2 1-2 0x40 0x5ca3 yes no 33 ··· 54 static struct platform_device *pdev; 55 56 /* Addresses to scan */ 57 + static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 58 + 0x2e, 0x2f, I2C_CLIENT_END }; 59 static unsigned short isa_address = 0x290; 60 61 /* Insmod parameters */ 62 + I2C_CLIENT_INSMOD_4(w83781d, w83782d, w83783s, as99127f); 63 I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: " 64 "{bus, clientaddr, subclientaddr1, subclientaddr2}"); 65 ··· 114 #define W83781D_REG_ALARM1 0x41 115 #define W83781D_REG_ALARM2 0x42 116 117 + /* Real-time status (W83782D, W83783S) */ 118 #define W83782D_REG_ALARM1 0x459 119 #define W83782D_REG_ALARM2 0x45A 120 #define W83782D_REG_ALARM3 0x45B ··· 152 static const u8 BIT_SCFG2[] = { 0x10, 0x20, 0x40 }; 153 154 #define W83781D_DEFAULT_BETA 3435 155 156 /* Conversions */ 157 #define IN_TO_REG(val) SENSORS_LIMIT(((val) + 8) / 16, 0, 255) ··· 271 .driver = { 272 .name = "w83781d", 273 }, 274 .attach_adapter = w83781d_attach_adapter, 275 .detach_client = w83781d_detach_client, 276 }; ··· 696 unsigned long val = simple_strtoul(buf, NULL, 10); 697 698 mutex_lock(&data->update_lock); 699 + 700 /* Save fan_min */ 701 min = FAN_FROM_REG(data->fan_min[nr], 702 DIV_FROM_REG(data->fan_div[nr])); ··· 963 client_name = "w83782d subclient"; 964 else if (kind == w83783s) 965 client_name = "w83783s subclient"; 966 else if (kind == as99127f) 967 client_name = "as99127f subclient"; 968 ··· 1004 #define IN_UNIT_ATTRS(X) \ 1005 &sensor_dev_attr_in##X##_input.dev_attr.attr, \ 1006 &sensor_dev_attr_in##X##_min.dev_attr.attr, \ 1007 + &sensor_dev_attr_in##X##_max.dev_attr.attr, \ 1008 &sensor_dev_attr_in##X##_alarm.dev_attr.attr, \ 1009 &sensor_dev_attr_in##X##_beep.dev_attr.attr 1010 ··· 1268 kind = w83782d; 1269 else if (val1 == 0x40 && vendid == winbond && address == 0x2d) 1270 kind = w83783s; 1271 + else if (val1 == 0x31) 1272 kind = as99127f; 1273 else { 1274 if (kind == 0) ··· 1288 client_name = "w83782d"; 1289 } else if (kind == w83783s) { 1290 client_name = "w83783s"; 1291 } else if (kind == as99127f) { 1292 client_name = "as99127f"; 1293 } ··· 1396 1397 reg = w83781d_read_value(data, W83781D_REG_WCHIPID); 1398 switch (reg) { 1399 case 0x30: 1400 data->type = w83782d; 1401 name = "w83782d"; ··· 1453 } 1454 1455 /* The SMBus locks itself, usually, but nothing may access the Winbond between 1456 + bank switches. ISA access must always be locked explicitly! 1457 We ignore the W83781D BUSY flag at this moment - it could lead to deadlocks, 1458 + would slow down the W83781D access and should not be necessary. 1459 There are some ugly typecasts here, but the good news is - they should 1460 nowhere else be necessary! */ 1461 static int ··· 1599 int type = data->type; 1600 u8 tmp; 1601 1602 if (reset && type != as99127f) { /* this resets registers we don't have 1603 documentation for on the as99127f */ 1604 /* Resetting the chip has been the default for a long time, ··· 1717 w83781d_read_value(data, W83781D_REG_IN_MIN(i)); 1718 data->in_max[i] = 1719 w83781d_read_value(data, W83781D_REG_IN_MAX(i)); 1720 + if ((data->type != w83782d) && (i == 6)) 1721 break; 1722 } 1723 for (i = 0; i < 3; i++) { ··· 1776 data->fan_div[1] |= (i >> 4) & 0x04; 1777 data->fan_div[2] |= (i >> 5) & 0x04; 1778 } 1779 + if (data->type == w83782d) { 1780 data->alarms = w83781d_read_value(data, 1781 W83782D_REG_ALARM1) 1782 | (w83781d_read_value(data, ··· 1886 outb_p(W83781D_REG_WCHIPID, address + W83781D_ADDR_REG_OFFSET); 1887 val = inb_p(address + W83781D_DATA_REG_OFFSET); 1888 if ((val & 0xfe) == 0x10 /* W83781D */ 1889 + || val == 0x30) /* W83782D */ 1890 found = 1; 1891 1892 if (found) 1893 pr_info("w83781d: Found a %s chip at %#x\n", 1894 val == 0x30 ? "W83782D" : "W83781D", (int)address); 1895 1896 release:
+2 -4
drivers/hwmon/w83791d.c
··· 840 struct device_attribute *attr, 841 const char *buf, size_t count) 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); 846 847 /* No lock needed as vrm is internal to the driver 848 (not read from a chip register) and so is not 849 updated in w83791d_update_device() */ 850 - data->vrm = val; 851 852 return count; 853 }
··· 840 struct device_attribute *attr, 841 const char *buf, size_t count) 842 { 843 + struct w83791d_data *data = dev_get_drvdata(dev); 844 845 /* No lock needed as vrm is internal to the driver 846 (not read from a chip register) and so is not 847 updated in w83791d_update_device() */ 848 + data->vrm = simple_strtoul(buf, NULL, 10); 849 850 return count; 851 }
+3 -10
drivers/hwmon/w83793.c
··· 131 #define PWM_DUTY 0 132 #define PWM_START 1 133 #define PWM_NONSTOP 2 134 #define W83793_REG_PWM(index, nr) (((nr) == 0 ? 0xb3 : \ 135 (nr) == 1 ? 0x220 : 0x218) + (index)) 136 ··· 243 static ssize_t 244 show_vrm(struct device *dev, struct device_attribute *attr, char *buf) 245 { 246 - struct i2c_client *client = to_i2c_client(dev); 247 - struct w83793_data *data = i2c_get_clientdata(client); 248 - 249 return sprintf(buf, "%d\n", data->vrm); 250 } 251 ··· 262 store_vrm(struct device *dev, struct device_attribute *attr, 263 const char *buf, size_t count) 264 { 265 - struct i2c_client *client = to_i2c_client(dev); 266 - struct w83793_data *data = i2c_get_clientdata(client); 267 - 268 data->vrm = simple_strtoul(buf, NULL, 10); 269 return count; 270 } ··· 404 return count; 405 } 406 407 - #define PWM_DUTY 0 408 - #define PWM_START 1 409 - #define PWM_NONSTOP 2 410 - #define PWM_STOP_TIME 3 411 static ssize_t 412 show_pwm(struct device *dev, struct device_attribute *attr, char *buf) 413 {
··· 131 #define PWM_DUTY 0 132 #define PWM_START 1 133 #define PWM_NONSTOP 2 134 + #define PWM_STOP_TIME 3 135 #define W83793_REG_PWM(index, nr) (((nr) == 0 ? 0xb3 : \ 136 (nr) == 1 ? 0x220 : 0x218) + (index)) 137 ··· 242 static ssize_t 243 show_vrm(struct device *dev, struct device_attribute *attr, char *buf) 244 { 245 + struct w83793_data *data = dev_get_drvdata(dev); 246 return sprintf(buf, "%d\n", data->vrm); 247 } 248 ··· 263 store_vrm(struct device *dev, struct device_attribute *attr, 264 const char *buf, size_t count) 265 { 266 + struct w83793_data *data = dev_get_drvdata(dev); 267 data->vrm = simple_strtoul(buf, NULL, 10); 268 return count; 269 } ··· 407 return count; 408 } 409 410 static ssize_t 411 show_pwm(struct device *dev, struct device_attribute *attr, char *buf) 412 {
-1
drivers/hwmon/w83l785ts.c
··· 96 .driver = { 97 .name = "w83l785ts", 98 }, 99 - .id = I2C_DRIVERID_W83L785TS, 100 .attach_adapter = w83l785ts_attach_adapter, 101 .detach_client = w83l785ts_detach_client, 102 };
··· 96 .driver = { 97 .name = "w83l785ts", 98 }, 99 .attach_adapter = w83l785ts_attach_adapter, 100 .detach_client = w83l785ts_detach_client, 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 .driver = { 72 .name = "eeprom", 73 }, 74 - .id = I2C_DRIVERID_EEPROM, 75 .attach_adapter = eeprom_attach_adapter, 76 .detach_client = eeprom_detach_client, 77 };
··· 71 .driver = { 72 .name = "eeprom", 73 }, 74 .attach_adapter = eeprom_attach_adapter, 75 .detach_client = eeprom_detach_client, 76 };
-1
drivers/i2c/chips/pcf8574.c
··· 67 .driver = { 68 .name = "pcf8574", 69 }, 70 - .id = I2C_DRIVERID_PCF8574, 71 .attach_adapter = pcf8574_attach_adapter, 72 .detach_client = pcf8574_detach_client, 73 };
··· 67 .driver = { 68 .name = "pcf8574", 69 }, 70 .attach_adapter = pcf8574_attach_adapter, 71 .detach_client = pcf8574_detach_client, 72 };
-1
drivers/i2c/chips/pcf8591.c
··· 92 .driver = { 93 .name = "pcf8591", 94 }, 95 - .id = I2C_DRIVERID_PCF8591, 96 .attach_adapter = pcf8591_attach_adapter, 97 .detach_client = pcf8591_detach_client, 98 };
··· 92 .driver = { 93 .name = "pcf8591", 94 }, 95 .attach_adapter = pcf8591_attach_adapter, 96 .detach_client = pcf8591_detach_client, 97 };
+3
include/linux/dmi.h
··· 79 extern int dmi_get_year(int field); 80 extern int dmi_name_in_vendors(const char *str); 81 extern int dmi_available; 82 83 #else 84 ··· 90 static inline int dmi_get_year(int year) { return 0; } 91 static inline int dmi_name_in_vendors(const char *s) { return 0; } 92 #define dmi_available 0 93 94 #endif 95
··· 79 extern int dmi_get_year(int field); 80 extern int dmi_name_in_vendors(const char *str); 81 extern int dmi_available; 82 + extern int dmi_walk(void (*decode)(const struct dmi_header *)); 83 84 #else 85 ··· 89 static inline int dmi_get_year(int year) { return 0; } 90 static inline int dmi_name_in_vendors(const char *s) { return 0; } 91 #define dmi_available 0 92 + static inline int dmi_walk(void (*decode)(const struct dmi_header *)) 93 + { return -1; } 94 95 #endif 96
-36
include/linux/i2c-id.h
··· 96 97 #define I2C_DRIVERID_I2CDEV 900 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 #define I2C_DRIVERID_OV7670 1048 /* Omnivision 7670 camera */ 136 137 /*
··· 96 97 #define I2C_DRIVERID_I2CDEV 900 98 99 #define I2C_DRIVERID_OV7670 1048 /* Omnivision 7670 camera */ 100 101 /*