Commit | Line | Data |
---|---|---|
9873964d CS |
1 | Kernel driver w83791d |
2 | ===================== | |
3 | ||
4 | Supported chips: | |
ce09cfb6 | 5 | |
9873964d | 6 | * Winbond W83791D |
ce09cfb6 | 7 | |
9873964d | 8 | Prefix: 'w83791d' |
ce09cfb6 | 9 | |
9873964d | 10 | Addresses scanned: I2C 0x2c - 0x2f |
ce09cfb6 | 11 | |
125751cb | 12 | Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/W83791D_W83791Gb.pdf |
9873964d CS |
13 | |
14 | Author: Charles Spirakis <bezaur@gmail.com> | |
15 | ||
16 | This driver was derived from the w83781d.c and w83792d.c source files. | |
17 | ||
18 | Credits: | |
ce09cfb6 | 19 | |
9873964d | 20 | w83781d.c: |
ce09cfb6 MCC |
21 | |
22 | - Frodo Looijaard <frodol@dds.nl>, | |
23 | - Philip Edelbrock <phil@netroedge.com>, | |
24 | - Mark Studebaker <mdsxyz123@yahoo.com> | |
25 | ||
9873964d | 26 | w83792d.c: |
ce09cfb6 MCC |
27 | |
28 | - Shane Huang (Winbond), | |
29 | - Rudolf Marek <r.marek@assembler.cz> | |
9873964d | 30 | |
125751cb | 31 | Additional contributors: |
ce09cfb6 MCC |
32 | |
33 | - Sven Anders <anders@anduras.de> | |
34 | - Marc Hulsman <m.hulsman@tudelft.nl> | |
125751cb | 35 | |
9873964d CS |
36 | Module Parameters |
37 | ----------------- | |
38 | ||
39 | * init boolean | |
ce09cfb6 MCC |
40 | (default 0) |
41 | ||
42 | Use 'init=1' to have the driver do extra software initializations. | |
43 | The default behavior is to do the minimum initialization possible | |
44 | and depend on the BIOS to properly setup the chip. If you know you | |
45 | have a w83791d and you're having problems, try init=1 before trying | |
46 | reset=1. | |
9873964d CS |
47 | |
48 | * reset boolean | |
ce09cfb6 MCC |
49 | (default 0) |
50 | ||
51 | Use 'reset=1' to reset the chip (via index 0x40, bit 7). The default | |
52 | behavior is no chip reset to preserve BIOS settings. | |
9873964d CS |
53 | |
54 | * force_subclients=bus,caddr,saddr,saddr | |
ce09cfb6 MCC |
55 | This is used to force the i2c addresses for subclients of |
56 | a certain chip. Example usage is `force_subclients=0,0x2f,0x4a,0x4b` | |
57 | to force the subclients of chip 0x2f on bus 0 to i2c addresses | |
58 | 0x4a and 0x4b. | |
9873964d CS |
59 | |
60 | ||
61 | Description | |
62 | ----------- | |
63 | ||
125751cb CS |
64 | This driver implements support for the Winbond W83791D chip. The W83791G |
65 | chip appears to be the same as the W83791D but is lead free. | |
9873964d CS |
66 | |
67 | Detection of the chip can sometimes be foiled because it can be in an | |
68 | internal state that allows no clean access (Bank with ID register is not | |
69 | currently selected). If you know the address of the chip, use a 'force' | |
70 | parameter; this will put it into a more well-behaved state first. | |
71 | ||
6495ce18 MH |
72 | The driver implements three temperature sensors, ten voltage sensors, |
73 | five fan rotation speed sensors and manual PWM control of each fan. | |
9873964d CS |
74 | |
75 | Temperatures are measured in degrees Celsius and measurement resolution is 1 | |
76 | degC for temp1 and 0.5 degC for temp2 and temp3. An alarm is triggered when | |
77 | the temperature gets higher than the Overtemperature Shutdown value; it stays | |
78 | on until the temperature falls below the Hysteresis value. | |
79 | ||
6495ce18 MH |
80 | Voltage sensors (also known as IN sensors) report their values in millivolts. |
81 | An alarm is triggered if the voltage has crossed a programmable minimum | |
82 | or maximum limit. | |
83 | ||
9873964d CS |
84 | Fan rotation speeds are reported in RPM (rotations per minute). An alarm is |
85 | triggered if the rotation speed has dropped below a programmable limit. Fan | |
ad02ad85 MH |
86 | readings can be divided by a programmable divider (1, 2, 4, 8, 16, |
87 | 32, 64 or 128 for all fans) to give the readings more range or accuracy. | |
9873964d | 88 | |
6495ce18 MH |
89 | Each fan controlled is controlled by PWM. The PWM duty cycle can be read and |
90 | set for each fan separately. Valid values range from 0 (stop) to 255 (full). | |
a5a4598c MH |
91 | PWM 1-3 support Thermal Cruise mode, in which the PWMs are automatically |
92 | regulated to keep respectively temp 1-3 at a certain target temperature. | |
93 | See below for the description of the sysfs-interface. | |
9873964d | 94 | |
64383123 CS |
95 | The w83791d has a global bit used to enable beeping from the speaker when an |
96 | alarm is triggered as well as a bitmask to enable or disable the beep for | |
97 | specific alarms. You need both the global beep enable bit and the | |
98 | corresponding beep bit to be on for a triggered alarm to sound a beep. | |
99 | ||
6495ce18 | 100 | The sysfs interface to the global enable is via the sysfs beep_enable file. |
64383123 CS |
101 | This file is used for both legacy and new code. |
102 | ||
103 | The sysfs interface to the beep bitmask has migrated from the original legacy | |
104 | method of a single sysfs beep_mask file to a newer method using multiple | |
7ebd8b66 | 105 | `*_beep` files as described in `Documentation/hwmon/sysfs-interface.rst`. |
64383123 | 106 | |
25985edc | 107 | A similar change has occurred for the bitmap corresponding to the alarms. The |
64383123 | 108 | original legacy method used a single sysfs alarms file containing a bitmap |
ce09cfb6 | 109 | of triggered alarms. The newer method uses multiple sysfs `*_alarm` files |
64383123 CS |
110 | (again following the pattern described in sysfs-interface). |
111 | ||
112 | Since both methods read and write the underlying hardware, they can be used | |
113 | interchangeably and changes in one will automatically be reflected by | |
114 | the other. If you use the legacy bitmask method, your user-space code is | |
115 | responsible for handling the fact that the alarms and beep_mask bitmaps | |
116 | are not the same (see the table below). | |
117 | ||
118 | NOTE: All new code should be written to use the newer sysfs-interface | |
119 | specification as that avoids bitmap problems and is the preferred interface | |
120 | going forward. | |
121 | ||
122 | The driver reads the hardware chip values at most once every three seconds. | |
123 | User mode code requesting values more often will receive cached values. | |
124 | ||
b5938f8c MH |
125 | /sys files |
126 | ---------- | |
127 | The sysfs-interface is documented in the 'sysfs-interface' file. Only | |
128 | chip-specific options are documented here. | |
129 | ||
ce09cfb6 MCC |
130 | ======================= ======================================================= |
131 | pwm[1-3]_enable this file controls mode of fan/temperature control for | |
b5938f8c | 132 | fan 1-3. Fan/PWM 4-5 only support manual mode. |
b5938f8c | 133 | |
ce09cfb6 MCC |
134 | * 1 Manual mode |
135 | * 2 Thermal Cruise mode | |
136 | * 3 Fan Speed Cruise mode (no further support) | |
137 | ||
138 | temp[1-3]_target defines the target temperature for Thermal Cruise mode. | |
a5a4598c MH |
139 | Unit: millidegree Celsius |
140 | RW | |
141 | ||
ce09cfb6 | 142 | temp[1-3]_tolerance temperature tolerance for Thermal Cruise mode. |
a5a4598c MH |
143 | Specifies an interval around the target temperature |
144 | in which the fan speed is not changed. | |
145 | Unit: millidegree Celsius | |
146 | RW | |
ce09cfb6 | 147 | ======================= ======================================================= |
a5a4598c | 148 | |
64383123 | 149 | Alarms bitmap vs. beep_mask bitmask |
ce09cfb6 MCC |
150 | ----------------------------------- |
151 | ||
64383123 CS |
152 | For legacy code using the alarms and beep_mask files: |
153 | ||
ce09cfb6 MCC |
154 | ============= ======== ========= ========================== |
155 | Signal Alarms beep_mask Obs | |
156 | ============= ======== ========= ========================== | |
157 | in0 (VCORE) 0x000001 0x000001 | |
158 | in1 (VINR0) 0x000002 0x002000 <== mismatch | |
159 | in2 (+3.3VIN) 0x000004 0x000004 | |
160 | in3 (5VDD) 0x000008 0x000008 | |
161 | in4 (+12VIN) 0x000100 0x000100 | |
162 | in5 (-12VIN) 0x000200 0x000200 | |
163 | in6 (-5VIN) 0x000400 0x000400 | |
164 | in7 (VSB) 0x080000 0x010000 <== mismatch | |
165 | in8 (VBAT) 0x100000 0x020000 <== mismatch | |
166 | in9 (VINR1) 0x004000 0x004000 | |
167 | temp1 0x000010 0x000010 | |
168 | temp2 0x000020 0x000020 | |
169 | temp3 0x002000 0x000002 <== mismatch | |
170 | fan1 0x000040 0x000040 | |
171 | fan2 0x000080 0x000080 | |
172 | fan3 0x000800 0x000800 | |
173 | fan4 0x200000 0x200000 | |
174 | fan5 0x400000 0x400000 | |
175 | tart1 0x010000 0x040000 <== mismatch | |
176 | tart2 0x020000 0x080000 <== mismatch | |
177 | tart3 0x040000 0x100000 <== mismatch | |
178 | case_open 0x001000 0x001000 | |
179 | global_enable - 0x800000 (modified via beep_enable) | |
180 | ============= ======== ========= ========================== |