Commit 2b3d1d87eaabf422a42440351ff3be1792d35852

Authored by Jean Delvare
1 parent 8acf07c5a7

hwmon: (it87) Invalidate cache on temperature sensor change

When any temperature sensor type is changed, the corresponding
temperature value needs to be updated. The register caching mechanism
may delay this update, so we want to invalidate the cache to force an
immediate update.

Signed-off-by: Jean Delvare <khali@linux-fr.org>

Showing 1 changed file with 1 additions and 0 deletions Inline Diff

drivers/hwmon/it87.c
1 /* 1 /*
2 * it87.c - Part of lm_sensors, Linux kernel modules for hardware 2 * it87.c - Part of lm_sensors, Linux kernel modules for hardware
3 * monitoring. 3 * monitoring.
4 * 4 *
5 * The IT8705F is an LPC-based Super I/O part that contains UARTs, a 5 * The IT8705F is an LPC-based Super I/O part that contains UARTs, a
6 * parallel port, an IR port, a MIDI port, a floppy controller, etc., in 6 * parallel port, an IR port, a MIDI port, a floppy controller, etc., in
7 * addition to an Environment Controller (Enhanced Hardware Monitor and 7 * addition to an Environment Controller (Enhanced Hardware Monitor and
8 * Fan Controller) 8 * Fan Controller)
9 * 9 *
10 * This driver supports only the Environment Controller in the IT8705F and 10 * This driver supports only the Environment Controller in the IT8705F and
11 * similar parts. The other devices are supported by different drivers. 11 * similar parts. The other devices are supported by different drivers.
12 * 12 *
13 * Supports: IT8705F Super I/O chip w/LPC interface 13 * Supports: IT8705F Super I/O chip w/LPC interface
14 * IT8712F Super I/O chip w/LPC interface 14 * IT8712F Super I/O chip w/LPC interface
15 * IT8716F Super I/O chip w/LPC interface 15 * IT8716F Super I/O chip w/LPC interface
16 * IT8718F Super I/O chip w/LPC interface 16 * IT8718F Super I/O chip w/LPC interface
17 * IT8720F Super I/O chip w/LPC interface 17 * IT8720F Super I/O chip w/LPC interface
18 * IT8726F Super I/O chip w/LPC interface 18 * IT8726F Super I/O chip w/LPC interface
19 * Sis950 A clone of the IT8705F 19 * Sis950 A clone of the IT8705F
20 * 20 *
21 * Copyright (C) 2001 Chris Gauthron 21 * Copyright (C) 2001 Chris Gauthron
22 * Copyright (C) 2005-2010 Jean Delvare <khali@linux-fr.org> 22 * Copyright (C) 2005-2010 Jean Delvare <khali@linux-fr.org>
23 * 23 *
24 * This program is free software; you can redistribute it and/or modify 24 * This program is free software; you can redistribute it and/or modify
25 * it under the terms of the GNU General Public License as published by 25 * it under the terms of the GNU General Public License as published by
26 * the Free Software Foundation; either version 2 of the License, or 26 * the Free Software Foundation; either version 2 of the License, or
27 * (at your option) any later version. 27 * (at your option) any later version.
28 * 28 *
29 * This program is distributed in the hope that it will be useful, 29 * This program is distributed in the hope that it will be useful,
30 * but WITHOUT ANY WARRANTY; without even the implied warranty of 30 * but WITHOUT ANY WARRANTY; without even the implied warranty of
31 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 31 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
32 * GNU General Public License for more details. 32 * GNU General Public License for more details.
33 * 33 *
34 * You should have received a copy of the GNU General Public License 34 * You should have received a copy of the GNU General Public License
35 * along with this program; if not, write to the Free Software 35 * along with this program; if not, write to the Free Software
36 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 36 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
37 */ 37 */
38 38
39 #include <linux/module.h> 39 #include <linux/module.h>
40 #include <linux/init.h> 40 #include <linux/init.h>
41 #include <linux/slab.h> 41 #include <linux/slab.h>
42 #include <linux/jiffies.h> 42 #include <linux/jiffies.h>
43 #include <linux/platform_device.h> 43 #include <linux/platform_device.h>
44 #include <linux/hwmon.h> 44 #include <linux/hwmon.h>
45 #include <linux/hwmon-sysfs.h> 45 #include <linux/hwmon-sysfs.h>
46 #include <linux/hwmon-vid.h> 46 #include <linux/hwmon-vid.h>
47 #include <linux/err.h> 47 #include <linux/err.h>
48 #include <linux/mutex.h> 48 #include <linux/mutex.h>
49 #include <linux/sysfs.h> 49 #include <linux/sysfs.h>
50 #include <linux/string.h> 50 #include <linux/string.h>
51 #include <linux/dmi.h> 51 #include <linux/dmi.h>
52 #include <linux/acpi.h> 52 #include <linux/acpi.h>
53 #include <linux/io.h> 53 #include <linux/io.h>
54 54
55 #define DRVNAME "it87" 55 #define DRVNAME "it87"
56 56
57 enum chips { it87, it8712, it8716, it8718, it8720 }; 57 enum chips { it87, it8712, it8716, it8718, it8720 };
58 58
59 static unsigned short force_id; 59 static unsigned short force_id;
60 module_param(force_id, ushort, 0); 60 module_param(force_id, ushort, 0);
61 MODULE_PARM_DESC(force_id, "Override the detected device ID"); 61 MODULE_PARM_DESC(force_id, "Override the detected device ID");
62 62
63 static struct platform_device *pdev; 63 static struct platform_device *pdev;
64 64
65 #define REG 0x2e /* The register to read/write */ 65 #define REG 0x2e /* The register to read/write */
66 #define DEV 0x07 /* Register: Logical device select */ 66 #define DEV 0x07 /* Register: Logical device select */
67 #define VAL 0x2f /* The value to read/write */ 67 #define VAL 0x2f /* The value to read/write */
68 #define PME 0x04 /* The device with the fan registers in it */ 68 #define PME 0x04 /* The device with the fan registers in it */
69 69
70 /* The device with the IT8718F/IT8720F VID value in it */ 70 /* The device with the IT8718F/IT8720F VID value in it */
71 #define GPIO 0x07 71 #define GPIO 0x07
72 72
73 #define DEVID 0x20 /* Register: Device ID */ 73 #define DEVID 0x20 /* Register: Device ID */
74 #define DEVREV 0x22 /* Register: Device Revision */ 74 #define DEVREV 0x22 /* Register: Device Revision */
75 75
76 static inline int 76 static inline int
77 superio_inb(int reg) 77 superio_inb(int reg)
78 { 78 {
79 outb(reg, REG); 79 outb(reg, REG);
80 return inb(VAL); 80 return inb(VAL);
81 } 81 }
82 82
83 static int superio_inw(int reg) 83 static int superio_inw(int reg)
84 { 84 {
85 int val; 85 int val;
86 outb(reg++, REG); 86 outb(reg++, REG);
87 val = inb(VAL) << 8; 87 val = inb(VAL) << 8;
88 outb(reg, REG); 88 outb(reg, REG);
89 val |= inb(VAL); 89 val |= inb(VAL);
90 return val; 90 return val;
91 } 91 }
92 92
93 static inline void 93 static inline void
94 superio_select(int ldn) 94 superio_select(int ldn)
95 { 95 {
96 outb(DEV, REG); 96 outb(DEV, REG);
97 outb(ldn, VAL); 97 outb(ldn, VAL);
98 } 98 }
99 99
100 static inline void 100 static inline void
101 superio_enter(void) 101 superio_enter(void)
102 { 102 {
103 outb(0x87, REG); 103 outb(0x87, REG);
104 outb(0x01, REG); 104 outb(0x01, REG);
105 outb(0x55, REG); 105 outb(0x55, REG);
106 outb(0x55, REG); 106 outb(0x55, REG);
107 } 107 }
108 108
109 static inline void 109 static inline void
110 superio_exit(void) 110 superio_exit(void)
111 { 111 {
112 outb(0x02, REG); 112 outb(0x02, REG);
113 outb(0x02, VAL); 113 outb(0x02, VAL);
114 } 114 }
115 115
116 /* Logical device 4 registers */ 116 /* Logical device 4 registers */
117 #define IT8712F_DEVID 0x8712 117 #define IT8712F_DEVID 0x8712
118 #define IT8705F_DEVID 0x8705 118 #define IT8705F_DEVID 0x8705
119 #define IT8716F_DEVID 0x8716 119 #define IT8716F_DEVID 0x8716
120 #define IT8718F_DEVID 0x8718 120 #define IT8718F_DEVID 0x8718
121 #define IT8720F_DEVID 0x8720 121 #define IT8720F_DEVID 0x8720
122 #define IT8726F_DEVID 0x8726 122 #define IT8726F_DEVID 0x8726
123 #define IT87_ACT_REG 0x30 123 #define IT87_ACT_REG 0x30
124 #define IT87_BASE_REG 0x60 124 #define IT87_BASE_REG 0x60
125 125
126 /* Logical device 7 registers (IT8712F and later) */ 126 /* Logical device 7 registers (IT8712F and later) */
127 #define IT87_SIO_GPIO3_REG 0x27 127 #define IT87_SIO_GPIO3_REG 0x27
128 #define IT87_SIO_GPIO5_REG 0x29 128 #define IT87_SIO_GPIO5_REG 0x29
129 #define IT87_SIO_PINX2_REG 0x2c /* Pin selection */ 129 #define IT87_SIO_PINX2_REG 0x2c /* Pin selection */
130 #define IT87_SIO_VID_REG 0xfc /* VID value */ 130 #define IT87_SIO_VID_REG 0xfc /* VID value */
131 #define IT87_SIO_BEEP_PIN_REG 0xf6 /* Beep pin mapping */ 131 #define IT87_SIO_BEEP_PIN_REG 0xf6 /* Beep pin mapping */
132 132
133 /* Update battery voltage after every reading if true */ 133 /* Update battery voltage after every reading if true */
134 static int update_vbat; 134 static int update_vbat;
135 135
136 /* Not all BIOSes properly configure the PWM registers */ 136 /* Not all BIOSes properly configure the PWM registers */
137 static int fix_pwm_polarity; 137 static int fix_pwm_polarity;
138 138
139 /* Many IT87 constants specified below */ 139 /* Many IT87 constants specified below */
140 140
141 /* Length of ISA address segment */ 141 /* Length of ISA address segment */
142 #define IT87_EXTENT 8 142 #define IT87_EXTENT 8
143 143
144 /* Length of ISA address segment for Environmental Controller */ 144 /* Length of ISA address segment for Environmental Controller */
145 #define IT87_EC_EXTENT 2 145 #define IT87_EC_EXTENT 2
146 146
147 /* Offset of EC registers from ISA base address */ 147 /* Offset of EC registers from ISA base address */
148 #define IT87_EC_OFFSET 5 148 #define IT87_EC_OFFSET 5
149 149
150 /* Where are the ISA address/data registers relative to the EC base address */ 150 /* Where are the ISA address/data registers relative to the EC base address */
151 #define IT87_ADDR_REG_OFFSET 0 151 #define IT87_ADDR_REG_OFFSET 0
152 #define IT87_DATA_REG_OFFSET 1 152 #define IT87_DATA_REG_OFFSET 1
153 153
154 /*----- The IT87 registers -----*/ 154 /*----- The IT87 registers -----*/
155 155
156 #define IT87_REG_CONFIG 0x00 156 #define IT87_REG_CONFIG 0x00
157 157
158 #define IT87_REG_ALARM1 0x01 158 #define IT87_REG_ALARM1 0x01
159 #define IT87_REG_ALARM2 0x02 159 #define IT87_REG_ALARM2 0x02
160 #define IT87_REG_ALARM3 0x03 160 #define IT87_REG_ALARM3 0x03
161 161
162 /* The IT8718F and IT8720F have the VID value in a different register, in 162 /* The IT8718F and IT8720F have the VID value in a different register, in
163 Super-I/O configuration space. */ 163 Super-I/O configuration space. */
164 #define IT87_REG_VID 0x0a 164 #define IT87_REG_VID 0x0a
165 /* The IT8705F and IT8712F earlier than revision 0x08 use register 0x0b 165 /* The IT8705F and IT8712F earlier than revision 0x08 use register 0x0b
166 for fan divisors. Later IT8712F revisions must use 16-bit tachometer 166 for fan divisors. Later IT8712F revisions must use 16-bit tachometer
167 mode. */ 167 mode. */
168 #define IT87_REG_FAN_DIV 0x0b 168 #define IT87_REG_FAN_DIV 0x0b
169 #define IT87_REG_FAN_16BIT 0x0c 169 #define IT87_REG_FAN_16BIT 0x0c
170 170
171 /* Monitors: 9 voltage (0 to 7, battery), 3 temp (1 to 3), 3 fan (1 to 3) */ 171 /* Monitors: 9 voltage (0 to 7, battery), 3 temp (1 to 3), 3 fan (1 to 3) */
172 172
173 static const u8 IT87_REG_FAN[] = { 0x0d, 0x0e, 0x0f, 0x80, 0x82 }; 173 static const u8 IT87_REG_FAN[] = { 0x0d, 0x0e, 0x0f, 0x80, 0x82 };
174 static const u8 IT87_REG_FAN_MIN[] = { 0x10, 0x11, 0x12, 0x84, 0x86 }; 174 static const u8 IT87_REG_FAN_MIN[] = { 0x10, 0x11, 0x12, 0x84, 0x86 };
175 static const u8 IT87_REG_FANX[] = { 0x18, 0x19, 0x1a, 0x81, 0x83 }; 175 static const u8 IT87_REG_FANX[] = { 0x18, 0x19, 0x1a, 0x81, 0x83 };
176 static const u8 IT87_REG_FANX_MIN[] = { 0x1b, 0x1c, 0x1d, 0x85, 0x87 }; 176 static const u8 IT87_REG_FANX_MIN[] = { 0x1b, 0x1c, 0x1d, 0x85, 0x87 };
177 #define IT87_REG_FAN_MAIN_CTRL 0x13 177 #define IT87_REG_FAN_MAIN_CTRL 0x13
178 #define IT87_REG_FAN_CTL 0x14 178 #define IT87_REG_FAN_CTL 0x14
179 #define IT87_REG_PWM(nr) (0x15 + (nr)) 179 #define IT87_REG_PWM(nr) (0x15 + (nr))
180 180
181 #define IT87_REG_VIN(nr) (0x20 + (nr)) 181 #define IT87_REG_VIN(nr) (0x20 + (nr))
182 #define IT87_REG_TEMP(nr) (0x29 + (nr)) 182 #define IT87_REG_TEMP(nr) (0x29 + (nr))
183 183
184 #define IT87_REG_VIN_MAX(nr) (0x30 + (nr) * 2) 184 #define IT87_REG_VIN_MAX(nr) (0x30 + (nr) * 2)
185 #define IT87_REG_VIN_MIN(nr) (0x31 + (nr) * 2) 185 #define IT87_REG_VIN_MIN(nr) (0x31 + (nr) * 2)
186 #define IT87_REG_TEMP_HIGH(nr) (0x40 + (nr) * 2) 186 #define IT87_REG_TEMP_HIGH(nr) (0x40 + (nr) * 2)
187 #define IT87_REG_TEMP_LOW(nr) (0x41 + (nr) * 2) 187 #define IT87_REG_TEMP_LOW(nr) (0x41 + (nr) * 2)
188 188
189 #define IT87_REG_VIN_ENABLE 0x50 189 #define IT87_REG_VIN_ENABLE 0x50
190 #define IT87_REG_TEMP_ENABLE 0x51 190 #define IT87_REG_TEMP_ENABLE 0x51
191 #define IT87_REG_BEEP_ENABLE 0x5c 191 #define IT87_REG_BEEP_ENABLE 0x5c
192 192
193 #define IT87_REG_CHIPID 0x58 193 #define IT87_REG_CHIPID 0x58
194 194
195 #define IT87_REG_AUTO_TEMP(nr, i) (0x60 + (nr) * 8 + (i)) 195 #define IT87_REG_AUTO_TEMP(nr, i) (0x60 + (nr) * 8 + (i))
196 #define IT87_REG_AUTO_PWM(nr, i) (0x65 + (nr) * 8 + (i)) 196 #define IT87_REG_AUTO_PWM(nr, i) (0x65 + (nr) * 8 + (i))
197 197
198 #define IN_TO_REG(val) (SENSORS_LIMIT((((val) + 8)/16),0,255)) 198 #define IN_TO_REG(val) (SENSORS_LIMIT((((val) + 8)/16),0,255))
199 #define IN_FROM_REG(val) ((val) * 16) 199 #define IN_FROM_REG(val) ((val) * 16)
200 200
201 static inline u8 FAN_TO_REG(long rpm, int div) 201 static inline u8 FAN_TO_REG(long rpm, int div)
202 { 202 {
203 if (rpm == 0) 203 if (rpm == 0)
204 return 255; 204 return 255;
205 rpm = SENSORS_LIMIT(rpm, 1, 1000000); 205 rpm = SENSORS_LIMIT(rpm, 1, 1000000);
206 return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1, 206 return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1,
207 254); 207 254);
208 } 208 }
209 209
210 static inline u16 FAN16_TO_REG(long rpm) 210 static inline u16 FAN16_TO_REG(long rpm)
211 { 211 {
212 if (rpm == 0) 212 if (rpm == 0)
213 return 0xffff; 213 return 0xffff;
214 return SENSORS_LIMIT((1350000 + rpm) / (rpm * 2), 1, 0xfffe); 214 return SENSORS_LIMIT((1350000 + rpm) / (rpm * 2), 1, 0xfffe);
215 } 215 }
216 216
217 #define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*(div))) 217 #define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*(div)))
218 /* The divider is fixed to 2 in 16-bit mode */ 218 /* The divider is fixed to 2 in 16-bit mode */
219 #define FAN16_FROM_REG(val) ((val)==0?-1:(val)==0xffff?0:1350000/((val)*2)) 219 #define FAN16_FROM_REG(val) ((val)==0?-1:(val)==0xffff?0:1350000/((val)*2))
220 220
221 #define TEMP_TO_REG(val) (SENSORS_LIMIT(((val)<0?(((val)-500)/1000):\ 221 #define TEMP_TO_REG(val) (SENSORS_LIMIT(((val)<0?(((val)-500)/1000):\
222 ((val)+500)/1000),-128,127)) 222 ((val)+500)/1000),-128,127))
223 #define TEMP_FROM_REG(val) ((val) * 1000) 223 #define TEMP_FROM_REG(val) ((val) * 1000)
224 224
225 #define PWM_TO_REG(val) ((val) >> 1) 225 #define PWM_TO_REG(val) ((val) >> 1)
226 #define PWM_FROM_REG(val) (((val)&0x7f) << 1) 226 #define PWM_FROM_REG(val) (((val)&0x7f) << 1)
227 227
228 static int DIV_TO_REG(int val) 228 static int DIV_TO_REG(int val)
229 { 229 {
230 int answer = 0; 230 int answer = 0;
231 while (answer < 7 && (val >>= 1)) 231 while (answer < 7 && (val >>= 1))
232 answer++; 232 answer++;
233 return answer; 233 return answer;
234 } 234 }
235 #define DIV_FROM_REG(val) (1 << (val)) 235 #define DIV_FROM_REG(val) (1 << (val))
236 236
237 static const unsigned int pwm_freq[8] = { 237 static const unsigned int pwm_freq[8] = {
238 48000000 / 128, 238 48000000 / 128,
239 24000000 / 128, 239 24000000 / 128,
240 12000000 / 128, 240 12000000 / 128,
241 8000000 / 128, 241 8000000 / 128,
242 6000000 / 128, 242 6000000 / 128,
243 3000000 / 128, 243 3000000 / 128,
244 1500000 / 128, 244 1500000 / 128,
245 750000 / 128, 245 750000 / 128,
246 }; 246 };
247 247
248 248
249 struct it87_sio_data { 249 struct it87_sio_data {
250 enum chips type; 250 enum chips type;
251 /* Values read from Super-I/O config space */ 251 /* Values read from Super-I/O config space */
252 u8 revision; 252 u8 revision;
253 u8 vid_value; 253 u8 vid_value;
254 u8 beep_pin; 254 u8 beep_pin;
255 /* Features skipped based on config or DMI */ 255 /* Features skipped based on config or DMI */
256 u8 skip_vid; 256 u8 skip_vid;
257 u8 skip_fan; 257 u8 skip_fan;
258 u8 skip_pwm; 258 u8 skip_pwm;
259 }; 259 };
260 260
261 /* For each registered chip, we need to keep some data in memory. 261 /* For each registered chip, we need to keep some data in memory.
262 The structure is dynamically allocated. */ 262 The structure is dynamically allocated. */
263 struct it87_data { 263 struct it87_data {
264 struct device *hwmon_dev; 264 struct device *hwmon_dev;
265 enum chips type; 265 enum chips type;
266 u8 revision; 266 u8 revision;
267 267
268 unsigned short addr; 268 unsigned short addr;
269 const char *name; 269 const char *name;
270 struct mutex update_lock; 270 struct mutex update_lock;
271 char valid; /* !=0 if following fields are valid */ 271 char valid; /* !=0 if following fields are valid */
272 unsigned long last_updated; /* In jiffies */ 272 unsigned long last_updated; /* In jiffies */
273 273
274 u8 in[9]; /* Register value */ 274 u8 in[9]; /* Register value */
275 u8 in_max[8]; /* Register value */ 275 u8 in_max[8]; /* Register value */
276 u8 in_min[8]; /* Register value */ 276 u8 in_min[8]; /* Register value */
277 u8 has_fan; /* Bitfield, fans enabled */ 277 u8 has_fan; /* Bitfield, fans enabled */
278 u16 fan[5]; /* Register values, possibly combined */ 278 u16 fan[5]; /* Register values, possibly combined */
279 u16 fan_min[5]; /* Register values, possibly combined */ 279 u16 fan_min[5]; /* Register values, possibly combined */
280 s8 temp[3]; /* Register value */ 280 s8 temp[3]; /* Register value */
281 s8 temp_high[3]; /* Register value */ 281 s8 temp_high[3]; /* Register value */
282 s8 temp_low[3]; /* Register value */ 282 s8 temp_low[3]; /* Register value */
283 u8 sensor; /* Register value */ 283 u8 sensor; /* Register value */
284 u8 fan_div[3]; /* Register encoding, shifted right */ 284 u8 fan_div[3]; /* Register encoding, shifted right */
285 u8 vid; /* Register encoding, combined */ 285 u8 vid; /* Register encoding, combined */
286 u8 vrm; 286 u8 vrm;
287 u32 alarms; /* Register encoding, combined */ 287 u32 alarms; /* Register encoding, combined */
288 u8 beeps; /* Register encoding */ 288 u8 beeps; /* Register encoding */
289 u8 fan_main_ctrl; /* Register value */ 289 u8 fan_main_ctrl; /* Register value */
290 u8 fan_ctl; /* Register value */ 290 u8 fan_ctl; /* Register value */
291 291
292 /* The following 3 arrays correspond to the same registers. The 292 /* The following 3 arrays correspond to the same registers. The
293 * meaning of bits 6-0 depends on the value of bit 7, and we want 293 * meaning of bits 6-0 depends on the value of bit 7, and we want
294 * to preserve settings on mode changes, so we have to track all 294 * to preserve settings on mode changes, so we have to track all
295 * values separately. */ 295 * values separately. */
296 u8 pwm_ctrl[3]; /* Register value */ 296 u8 pwm_ctrl[3]; /* Register value */
297 u8 pwm_duty[3]; /* Manual PWM value set by user (bit 6-0) */ 297 u8 pwm_duty[3]; /* Manual PWM value set by user (bit 6-0) */
298 u8 pwm_temp_map[3]; /* PWM to temp. chan. mapping (bits 1-0) */ 298 u8 pwm_temp_map[3]; /* PWM to temp. chan. mapping (bits 1-0) */
299 299
300 /* Automatic fan speed control registers */ 300 /* Automatic fan speed control registers */
301 u8 auto_pwm[3][4]; /* [nr][3] is hard-coded */ 301 u8 auto_pwm[3][4]; /* [nr][3] is hard-coded */
302 s8 auto_temp[3][5]; /* [nr][0] is point1_temp_hyst */ 302 s8 auto_temp[3][5]; /* [nr][0] is point1_temp_hyst */
303 }; 303 };
304 304
305 static inline int has_16bit_fans(const struct it87_data *data) 305 static inline int has_16bit_fans(const struct it87_data *data)
306 { 306 {
307 /* IT8705F Datasheet 0.4.1, 3h == Version G. 307 /* IT8705F Datasheet 0.4.1, 3h == Version G.
308 IT8712F Datasheet 0.9.1, section 8.3.5 indicates 8h == Version J. 308 IT8712F Datasheet 0.9.1, section 8.3.5 indicates 8h == Version J.
309 These are the first revisions with 16bit tachometer support. */ 309 These are the first revisions with 16bit tachometer support. */
310 return (data->type == it87 && data->revision >= 0x03) 310 return (data->type == it87 && data->revision >= 0x03)
311 || (data->type == it8712 && data->revision >= 0x08) 311 || (data->type == it8712 && data->revision >= 0x08)
312 || data->type == it8716 312 || data->type == it8716
313 || data->type == it8718 313 || data->type == it8718
314 || data->type == it8720; 314 || data->type == it8720;
315 } 315 }
316 316
317 static inline int has_old_autopwm(const struct it87_data *data) 317 static inline int has_old_autopwm(const struct it87_data *data)
318 { 318 {
319 /* The old automatic fan speed control interface is implemented 319 /* The old automatic fan speed control interface is implemented
320 by IT8705F chips up to revision F and IT8712F chips up to 320 by IT8705F chips up to revision F and IT8712F chips up to
321 revision G. */ 321 revision G. */
322 return (data->type == it87 && data->revision < 0x03) 322 return (data->type == it87 && data->revision < 0x03)
323 || (data->type == it8712 && data->revision < 0x08); 323 || (data->type == it8712 && data->revision < 0x08);
324 } 324 }
325 325
326 static int it87_probe(struct platform_device *pdev); 326 static int it87_probe(struct platform_device *pdev);
327 static int __devexit it87_remove(struct platform_device *pdev); 327 static int __devexit it87_remove(struct platform_device *pdev);
328 328
329 static int it87_read_value(struct it87_data *data, u8 reg); 329 static int it87_read_value(struct it87_data *data, u8 reg);
330 static void it87_write_value(struct it87_data *data, u8 reg, u8 value); 330 static void it87_write_value(struct it87_data *data, u8 reg, u8 value);
331 static struct it87_data *it87_update_device(struct device *dev); 331 static struct it87_data *it87_update_device(struct device *dev);
332 static int it87_check_pwm(struct device *dev); 332 static int it87_check_pwm(struct device *dev);
333 static void it87_init_device(struct platform_device *pdev); 333 static void it87_init_device(struct platform_device *pdev);
334 334
335 335
336 static struct platform_driver it87_driver = { 336 static struct platform_driver it87_driver = {
337 .driver = { 337 .driver = {
338 .owner = THIS_MODULE, 338 .owner = THIS_MODULE,
339 .name = DRVNAME, 339 .name = DRVNAME,
340 }, 340 },
341 .probe = it87_probe, 341 .probe = it87_probe,
342 .remove = __devexit_p(it87_remove), 342 .remove = __devexit_p(it87_remove),
343 }; 343 };
344 344
345 static ssize_t show_in(struct device *dev, struct device_attribute *attr, 345 static ssize_t show_in(struct device *dev, struct device_attribute *attr,
346 char *buf) 346 char *buf)
347 { 347 {
348 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 348 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
349 int nr = sensor_attr->index; 349 int nr = sensor_attr->index;
350 350
351 struct it87_data *data = it87_update_device(dev); 351 struct it87_data *data = it87_update_device(dev);
352 return sprintf(buf, "%d\n", IN_FROM_REG(data->in[nr])); 352 return sprintf(buf, "%d\n", IN_FROM_REG(data->in[nr]));
353 } 353 }
354 354
355 static ssize_t show_in_min(struct device *dev, struct device_attribute *attr, 355 static ssize_t show_in_min(struct device *dev, struct device_attribute *attr,
356 char *buf) 356 char *buf)
357 { 357 {
358 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 358 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
359 int nr = sensor_attr->index; 359 int nr = sensor_attr->index;
360 360
361 struct it87_data *data = it87_update_device(dev); 361 struct it87_data *data = it87_update_device(dev);
362 return sprintf(buf, "%d\n", IN_FROM_REG(data->in_min[nr])); 362 return sprintf(buf, "%d\n", IN_FROM_REG(data->in_min[nr]));
363 } 363 }
364 364
365 static ssize_t show_in_max(struct device *dev, struct device_attribute *attr, 365 static ssize_t show_in_max(struct device *dev, struct device_attribute *attr,
366 char *buf) 366 char *buf)
367 { 367 {
368 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 368 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
369 int nr = sensor_attr->index; 369 int nr = sensor_attr->index;
370 370
371 struct it87_data *data = it87_update_device(dev); 371 struct it87_data *data = it87_update_device(dev);
372 return sprintf(buf, "%d\n", IN_FROM_REG(data->in_max[nr])); 372 return sprintf(buf, "%d\n", IN_FROM_REG(data->in_max[nr]));
373 } 373 }
374 374
375 static ssize_t set_in_min(struct device *dev, struct device_attribute *attr, 375 static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
376 const char *buf, size_t count) 376 const char *buf, size_t count)
377 { 377 {
378 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 378 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
379 int nr = sensor_attr->index; 379 int nr = sensor_attr->index;
380 380
381 struct it87_data *data = dev_get_drvdata(dev); 381 struct it87_data *data = dev_get_drvdata(dev);
382 unsigned long val; 382 unsigned long val;
383 383
384 if (strict_strtoul(buf, 10, &val) < 0) 384 if (strict_strtoul(buf, 10, &val) < 0)
385 return -EINVAL; 385 return -EINVAL;
386 386
387 mutex_lock(&data->update_lock); 387 mutex_lock(&data->update_lock);
388 data->in_min[nr] = IN_TO_REG(val); 388 data->in_min[nr] = IN_TO_REG(val);
389 it87_write_value(data, IT87_REG_VIN_MIN(nr), 389 it87_write_value(data, IT87_REG_VIN_MIN(nr),
390 data->in_min[nr]); 390 data->in_min[nr]);
391 mutex_unlock(&data->update_lock); 391 mutex_unlock(&data->update_lock);
392 return count; 392 return count;
393 } 393 }
394 static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, 394 static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
395 const char *buf, size_t count) 395 const char *buf, size_t count)
396 { 396 {
397 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 397 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
398 int nr = sensor_attr->index; 398 int nr = sensor_attr->index;
399 399
400 struct it87_data *data = dev_get_drvdata(dev); 400 struct it87_data *data = dev_get_drvdata(dev);
401 unsigned long val; 401 unsigned long val;
402 402
403 if (strict_strtoul(buf, 10, &val) < 0) 403 if (strict_strtoul(buf, 10, &val) < 0)
404 return -EINVAL; 404 return -EINVAL;
405 405
406 mutex_lock(&data->update_lock); 406 mutex_lock(&data->update_lock);
407 data->in_max[nr] = IN_TO_REG(val); 407 data->in_max[nr] = IN_TO_REG(val);
408 it87_write_value(data, IT87_REG_VIN_MAX(nr), 408 it87_write_value(data, IT87_REG_VIN_MAX(nr),
409 data->in_max[nr]); 409 data->in_max[nr]);
410 mutex_unlock(&data->update_lock); 410 mutex_unlock(&data->update_lock);
411 return count; 411 return count;
412 } 412 }
413 413
414 #define show_in_offset(offset) \ 414 #define show_in_offset(offset) \
415 static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \ 415 static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \
416 show_in, NULL, offset); 416 show_in, NULL, offset);
417 417
418 #define limit_in_offset(offset) \ 418 #define limit_in_offset(offset) \
419 static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \ 419 static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
420 show_in_min, set_in_min, offset); \ 420 show_in_min, set_in_min, offset); \
421 static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \ 421 static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
422 show_in_max, set_in_max, offset); 422 show_in_max, set_in_max, offset);
423 423
424 show_in_offset(0); 424 show_in_offset(0);
425 limit_in_offset(0); 425 limit_in_offset(0);
426 show_in_offset(1); 426 show_in_offset(1);
427 limit_in_offset(1); 427 limit_in_offset(1);
428 show_in_offset(2); 428 show_in_offset(2);
429 limit_in_offset(2); 429 limit_in_offset(2);
430 show_in_offset(3); 430 show_in_offset(3);
431 limit_in_offset(3); 431 limit_in_offset(3);
432 show_in_offset(4); 432 show_in_offset(4);
433 limit_in_offset(4); 433 limit_in_offset(4);
434 show_in_offset(5); 434 show_in_offset(5);
435 limit_in_offset(5); 435 limit_in_offset(5);
436 show_in_offset(6); 436 show_in_offset(6);
437 limit_in_offset(6); 437 limit_in_offset(6);
438 show_in_offset(7); 438 show_in_offset(7);
439 limit_in_offset(7); 439 limit_in_offset(7);
440 show_in_offset(8); 440 show_in_offset(8);
441 441
442 /* 3 temperatures */ 442 /* 3 temperatures */
443 static ssize_t show_temp(struct device *dev, struct device_attribute *attr, 443 static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
444 char *buf) 444 char *buf)
445 { 445 {
446 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 446 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
447 int nr = sensor_attr->index; 447 int nr = sensor_attr->index;
448 448
449 struct it87_data *data = it87_update_device(dev); 449 struct it87_data *data = it87_update_device(dev);
450 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[nr])); 450 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[nr]));
451 } 451 }
452 static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr, 452 static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr,
453 char *buf) 453 char *buf)
454 { 454 {
455 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 455 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
456 int nr = sensor_attr->index; 456 int nr = sensor_attr->index;
457 457
458 struct it87_data *data = it87_update_device(dev); 458 struct it87_data *data = it87_update_device(dev);
459 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_high[nr])); 459 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_high[nr]));
460 } 460 }
461 static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr, 461 static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr,
462 char *buf) 462 char *buf)
463 { 463 {
464 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 464 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
465 int nr = sensor_attr->index; 465 int nr = sensor_attr->index;
466 466
467 struct it87_data *data = it87_update_device(dev); 467 struct it87_data *data = it87_update_device(dev);
468 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_low[nr])); 468 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_low[nr]));
469 } 469 }
470 static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, 470 static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
471 const char *buf, size_t count) 471 const char *buf, size_t count)
472 { 472 {
473 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 473 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
474 int nr = sensor_attr->index; 474 int nr = sensor_attr->index;
475 475
476 struct it87_data *data = dev_get_drvdata(dev); 476 struct it87_data *data = dev_get_drvdata(dev);
477 long val; 477 long val;
478 478
479 if (strict_strtol(buf, 10, &val) < 0) 479 if (strict_strtol(buf, 10, &val) < 0)
480 return -EINVAL; 480 return -EINVAL;
481 481
482 mutex_lock(&data->update_lock); 482 mutex_lock(&data->update_lock);
483 data->temp_high[nr] = TEMP_TO_REG(val); 483 data->temp_high[nr] = TEMP_TO_REG(val);
484 it87_write_value(data, IT87_REG_TEMP_HIGH(nr), data->temp_high[nr]); 484 it87_write_value(data, IT87_REG_TEMP_HIGH(nr), data->temp_high[nr]);
485 mutex_unlock(&data->update_lock); 485 mutex_unlock(&data->update_lock);
486 return count; 486 return count;
487 } 487 }
488 static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr, 488 static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
489 const char *buf, size_t count) 489 const char *buf, size_t count)
490 { 490 {
491 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 491 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
492 int nr = sensor_attr->index; 492 int nr = sensor_attr->index;
493 493
494 struct it87_data *data = dev_get_drvdata(dev); 494 struct it87_data *data = dev_get_drvdata(dev);
495 long val; 495 long val;
496 496
497 if (strict_strtol(buf, 10, &val) < 0) 497 if (strict_strtol(buf, 10, &val) < 0)
498 return -EINVAL; 498 return -EINVAL;
499 499
500 mutex_lock(&data->update_lock); 500 mutex_lock(&data->update_lock);
501 data->temp_low[nr] = TEMP_TO_REG(val); 501 data->temp_low[nr] = TEMP_TO_REG(val);
502 it87_write_value(data, IT87_REG_TEMP_LOW(nr), data->temp_low[nr]); 502 it87_write_value(data, IT87_REG_TEMP_LOW(nr), data->temp_low[nr]);
503 mutex_unlock(&data->update_lock); 503 mutex_unlock(&data->update_lock);
504 return count; 504 return count;
505 } 505 }
506 #define show_temp_offset(offset) \ 506 #define show_temp_offset(offset) \
507 static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \ 507 static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \
508 show_temp, NULL, offset - 1); \ 508 show_temp, NULL, offset - 1); \
509 static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \ 509 static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \
510 show_temp_max, set_temp_max, offset - 1); \ 510 show_temp_max, set_temp_max, offset - 1); \
511 static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \ 511 static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \
512 show_temp_min, set_temp_min, offset - 1); 512 show_temp_min, set_temp_min, offset - 1);
513 513
514 show_temp_offset(1); 514 show_temp_offset(1);
515 show_temp_offset(2); 515 show_temp_offset(2);
516 show_temp_offset(3); 516 show_temp_offset(3);
517 517
518 static ssize_t show_sensor(struct device *dev, struct device_attribute *attr, 518 static ssize_t show_sensor(struct device *dev, struct device_attribute *attr,
519 char *buf) 519 char *buf)
520 { 520 {
521 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 521 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
522 int nr = sensor_attr->index; 522 int nr = sensor_attr->index;
523 523
524 struct it87_data *data = it87_update_device(dev); 524 struct it87_data *data = it87_update_device(dev);
525 u8 reg = data->sensor; /* In case the value is updated while 525 u8 reg = data->sensor; /* In case the value is updated while
526 we use it */ 526 we use it */
527 527
528 if (reg & (1 << nr)) 528 if (reg & (1 << nr))
529 return sprintf(buf, "3\n"); /* thermal diode */ 529 return sprintf(buf, "3\n"); /* thermal diode */
530 if (reg & (8 << nr)) 530 if (reg & (8 << nr))
531 return sprintf(buf, "4\n"); /* thermistor */ 531 return sprintf(buf, "4\n"); /* thermistor */
532 return sprintf(buf, "0\n"); /* disabled */ 532 return sprintf(buf, "0\n"); /* disabled */
533 } 533 }
534 static ssize_t set_sensor(struct device *dev, struct device_attribute *attr, 534 static ssize_t set_sensor(struct device *dev, struct device_attribute *attr,
535 const char *buf, size_t count) 535 const char *buf, size_t count)
536 { 536 {
537 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 537 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
538 int nr = sensor_attr->index; 538 int nr = sensor_attr->index;
539 539
540 struct it87_data *data = dev_get_drvdata(dev); 540 struct it87_data *data = dev_get_drvdata(dev);
541 long val; 541 long val;
542 u8 reg; 542 u8 reg;
543 543
544 if (strict_strtol(buf, 10, &val) < 0) 544 if (strict_strtol(buf, 10, &val) < 0)
545 return -EINVAL; 545 return -EINVAL;
546 546
547 reg = it87_read_value(data, IT87_REG_TEMP_ENABLE); 547 reg = it87_read_value(data, IT87_REG_TEMP_ENABLE);
548 reg &= ~(1 << nr); 548 reg &= ~(1 << nr);
549 reg &= ~(8 << nr); 549 reg &= ~(8 << nr);
550 if (val == 2) { /* backwards compatibility */ 550 if (val == 2) { /* backwards compatibility */
551 dev_warn(dev, "Sensor type 2 is deprecated, please use 4 " 551 dev_warn(dev, "Sensor type 2 is deprecated, please use 4 "
552 "instead\n"); 552 "instead\n");
553 val = 4; 553 val = 4;
554 } 554 }
555 /* 3 = thermal diode; 4 = thermistor; 0 = disabled */ 555 /* 3 = thermal diode; 4 = thermistor; 0 = disabled */
556 if (val == 3) 556 if (val == 3)
557 reg |= 1 << nr; 557 reg |= 1 << nr;
558 else if (val == 4) 558 else if (val == 4)
559 reg |= 8 << nr; 559 reg |= 8 << nr;
560 else if (val != 0) 560 else if (val != 0)
561 return -EINVAL; 561 return -EINVAL;
562 562
563 mutex_lock(&data->update_lock); 563 mutex_lock(&data->update_lock);
564 data->sensor = reg; 564 data->sensor = reg;
565 it87_write_value(data, IT87_REG_TEMP_ENABLE, data->sensor); 565 it87_write_value(data, IT87_REG_TEMP_ENABLE, data->sensor);
566 data->valid = 0; /* Force cache refresh */
566 mutex_unlock(&data->update_lock); 567 mutex_unlock(&data->update_lock);
567 return count; 568 return count;
568 } 569 }
569 #define show_sensor_offset(offset) \ 570 #define show_sensor_offset(offset) \
570 static SENSOR_DEVICE_ATTR(temp##offset##_type, S_IRUGO | S_IWUSR, \ 571 static SENSOR_DEVICE_ATTR(temp##offset##_type, S_IRUGO | S_IWUSR, \
571 show_sensor, set_sensor, offset - 1); 572 show_sensor, set_sensor, offset - 1);
572 573
573 show_sensor_offset(1); 574 show_sensor_offset(1);
574 show_sensor_offset(2); 575 show_sensor_offset(2);
575 show_sensor_offset(3); 576 show_sensor_offset(3);
576 577
577 /* 3 Fans */ 578 /* 3 Fans */
578 579
579 static int pwm_mode(const struct it87_data *data, int nr) 580 static int pwm_mode(const struct it87_data *data, int nr)
580 { 581 {
581 int ctrl = data->fan_main_ctrl & (1 << nr); 582 int ctrl = data->fan_main_ctrl & (1 << nr);
582 583
583 if (ctrl == 0) /* Full speed */ 584 if (ctrl == 0) /* Full speed */
584 return 0; 585 return 0;
585 if (data->pwm_ctrl[nr] & 0x80) /* Automatic mode */ 586 if (data->pwm_ctrl[nr] & 0x80) /* Automatic mode */
586 return 2; 587 return 2;
587 else /* Manual mode */ 588 else /* Manual mode */
588 return 1; 589 return 1;
589 } 590 }
590 591
591 static ssize_t show_fan(struct device *dev, struct device_attribute *attr, 592 static ssize_t show_fan(struct device *dev, struct device_attribute *attr,
592 char *buf) 593 char *buf)
593 { 594 {
594 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 595 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
595 int nr = sensor_attr->index; 596 int nr = sensor_attr->index;
596 597
597 struct it87_data *data = it87_update_device(dev); 598 struct it87_data *data = it87_update_device(dev);
598 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr], 599 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr],
599 DIV_FROM_REG(data->fan_div[nr]))); 600 DIV_FROM_REG(data->fan_div[nr])));
600 } 601 }
601 static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr, 602 static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr,
602 char *buf) 603 char *buf)
603 { 604 {
604 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 605 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
605 int nr = sensor_attr->index; 606 int nr = sensor_attr->index;
606 607
607 struct it87_data *data = it87_update_device(dev); 608 struct it87_data *data = it87_update_device(dev);
608 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr], 609 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr],
609 DIV_FROM_REG(data->fan_div[nr]))); 610 DIV_FROM_REG(data->fan_div[nr])));
610 } 611 }
611 static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr, 612 static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
612 char *buf) 613 char *buf)
613 { 614 {
614 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 615 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
615 int nr = sensor_attr->index; 616 int nr = sensor_attr->index;
616 617
617 struct it87_data *data = it87_update_device(dev); 618 struct it87_data *data = it87_update_device(dev);
618 return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr])); 619 return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr]));
619 } 620 }
620 static ssize_t show_pwm_enable(struct device *dev, 621 static ssize_t show_pwm_enable(struct device *dev,
621 struct device_attribute *attr, char *buf) 622 struct device_attribute *attr, char *buf)
622 { 623 {
623 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 624 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
624 int nr = sensor_attr->index; 625 int nr = sensor_attr->index;
625 626
626 struct it87_data *data = it87_update_device(dev); 627 struct it87_data *data = it87_update_device(dev);
627 return sprintf(buf, "%d\n", pwm_mode(data, nr)); 628 return sprintf(buf, "%d\n", pwm_mode(data, nr));
628 } 629 }
629 static ssize_t show_pwm(struct device *dev, struct device_attribute *attr, 630 static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
630 char *buf) 631 char *buf)
631 { 632 {
632 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 633 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
633 int nr = sensor_attr->index; 634 int nr = sensor_attr->index;
634 635
635 struct it87_data *data = it87_update_device(dev); 636 struct it87_data *data = it87_update_device(dev);
636 return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm_duty[nr])); 637 return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm_duty[nr]));
637 } 638 }
638 static ssize_t show_pwm_freq(struct device *dev, struct device_attribute *attr, 639 static ssize_t show_pwm_freq(struct device *dev, struct device_attribute *attr,
639 char *buf) 640 char *buf)
640 { 641 {
641 struct it87_data *data = it87_update_device(dev); 642 struct it87_data *data = it87_update_device(dev);
642 int index = (data->fan_ctl >> 4) & 0x07; 643 int index = (data->fan_ctl >> 4) & 0x07;
643 644
644 return sprintf(buf, "%u\n", pwm_freq[index]); 645 return sprintf(buf, "%u\n", pwm_freq[index]);
645 } 646 }
646 static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, 647 static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
647 const char *buf, size_t count) 648 const char *buf, size_t count)
648 { 649 {
649 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 650 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
650 int nr = sensor_attr->index; 651 int nr = sensor_attr->index;
651 652
652 struct it87_data *data = dev_get_drvdata(dev); 653 struct it87_data *data = dev_get_drvdata(dev);
653 long val; 654 long val;
654 u8 reg; 655 u8 reg;
655 656
656 if (strict_strtol(buf, 10, &val) < 0) 657 if (strict_strtol(buf, 10, &val) < 0)
657 return -EINVAL; 658 return -EINVAL;
658 659
659 mutex_lock(&data->update_lock); 660 mutex_lock(&data->update_lock);
660 reg = it87_read_value(data, IT87_REG_FAN_DIV); 661 reg = it87_read_value(data, IT87_REG_FAN_DIV);
661 switch (nr) { 662 switch (nr) {
662 case 0: 663 case 0:
663 data->fan_div[nr] = reg & 0x07; 664 data->fan_div[nr] = reg & 0x07;
664 break; 665 break;
665 case 1: 666 case 1:
666 data->fan_div[nr] = (reg >> 3) & 0x07; 667 data->fan_div[nr] = (reg >> 3) & 0x07;
667 break; 668 break;
668 case 2: 669 case 2:
669 data->fan_div[nr] = (reg & 0x40) ? 3 : 1; 670 data->fan_div[nr] = (reg & 0x40) ? 3 : 1;
670 break; 671 break;
671 } 672 }
672 673
673 data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr])); 674 data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
674 it87_write_value(data, IT87_REG_FAN_MIN[nr], data->fan_min[nr]); 675 it87_write_value(data, IT87_REG_FAN_MIN[nr], data->fan_min[nr]);
675 mutex_unlock(&data->update_lock); 676 mutex_unlock(&data->update_lock);
676 return count; 677 return count;
677 } 678 }
678 static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 679 static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
679 const char *buf, size_t count) 680 const char *buf, size_t count)
680 { 681 {
681 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 682 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
682 int nr = sensor_attr->index; 683 int nr = sensor_attr->index;
683 684
684 struct it87_data *data = dev_get_drvdata(dev); 685 struct it87_data *data = dev_get_drvdata(dev);
685 unsigned long val; 686 unsigned long val;
686 int min; 687 int min;
687 u8 old; 688 u8 old;
688 689
689 if (strict_strtoul(buf, 10, &val) < 0) 690 if (strict_strtoul(buf, 10, &val) < 0)
690 return -EINVAL; 691 return -EINVAL;
691 692
692 mutex_lock(&data->update_lock); 693 mutex_lock(&data->update_lock);
693 old = it87_read_value(data, IT87_REG_FAN_DIV); 694 old = it87_read_value(data, IT87_REG_FAN_DIV);
694 695
695 /* Save fan min limit */ 696 /* Save fan min limit */
696 min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr])); 697 min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr]));
697 698
698 switch (nr) { 699 switch (nr) {
699 case 0: 700 case 0:
700 case 1: 701 case 1:
701 data->fan_div[nr] = DIV_TO_REG(val); 702 data->fan_div[nr] = DIV_TO_REG(val);
702 break; 703 break;
703 case 2: 704 case 2:
704 if (val < 8) 705 if (val < 8)
705 data->fan_div[nr] = 1; 706 data->fan_div[nr] = 1;
706 else 707 else
707 data->fan_div[nr] = 3; 708 data->fan_div[nr] = 3;
708 } 709 }
709 val = old & 0x80; 710 val = old & 0x80;
710 val |= (data->fan_div[0] & 0x07); 711 val |= (data->fan_div[0] & 0x07);
711 val |= (data->fan_div[1] & 0x07) << 3; 712 val |= (data->fan_div[1] & 0x07) << 3;
712 if (data->fan_div[2] == 3) 713 if (data->fan_div[2] == 3)
713 val |= 0x1 << 6; 714 val |= 0x1 << 6;
714 it87_write_value(data, IT87_REG_FAN_DIV, val); 715 it87_write_value(data, IT87_REG_FAN_DIV, val);
715 716
716 /* Restore fan min limit */ 717 /* Restore fan min limit */
717 data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr])); 718 data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
718 it87_write_value(data, IT87_REG_FAN_MIN[nr], data->fan_min[nr]); 719 it87_write_value(data, IT87_REG_FAN_MIN[nr], data->fan_min[nr]);
719 720
720 mutex_unlock(&data->update_lock); 721 mutex_unlock(&data->update_lock);
721 return count; 722 return count;
722 } 723 }
723 724
724 /* Returns 0 if OK, -EINVAL otherwise */ 725 /* Returns 0 if OK, -EINVAL otherwise */
725 static int check_trip_points(struct device *dev, int nr) 726 static int check_trip_points(struct device *dev, int nr)
726 { 727 {
727 const struct it87_data *data = dev_get_drvdata(dev); 728 const struct it87_data *data = dev_get_drvdata(dev);
728 int i, err = 0; 729 int i, err = 0;
729 730
730 if (has_old_autopwm(data)) { 731 if (has_old_autopwm(data)) {
731 for (i = 0; i < 3; i++) { 732 for (i = 0; i < 3; i++) {
732 if (data->auto_temp[nr][i] > data->auto_temp[nr][i + 1]) 733 if (data->auto_temp[nr][i] > data->auto_temp[nr][i + 1])
733 err = -EINVAL; 734 err = -EINVAL;
734 } 735 }
735 for (i = 0; i < 2; i++) { 736 for (i = 0; i < 2; i++) {
736 if (data->auto_pwm[nr][i] > data->auto_pwm[nr][i + 1]) 737 if (data->auto_pwm[nr][i] > data->auto_pwm[nr][i + 1])
737 err = -EINVAL; 738 err = -EINVAL;
738 } 739 }
739 } 740 }
740 741
741 if (err) { 742 if (err) {
742 dev_err(dev, "Inconsistent trip points, not switching to " 743 dev_err(dev, "Inconsistent trip points, not switching to "
743 "automatic mode\n"); 744 "automatic mode\n");
744 dev_err(dev, "Adjust the trip points and try again\n"); 745 dev_err(dev, "Adjust the trip points and try again\n");
745 } 746 }
746 return err; 747 return err;
747 } 748 }
748 749
749 static ssize_t set_pwm_enable(struct device *dev, 750 static ssize_t set_pwm_enable(struct device *dev,
750 struct device_attribute *attr, const char *buf, size_t count) 751 struct device_attribute *attr, const char *buf, size_t count)
751 { 752 {
752 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 753 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
753 int nr = sensor_attr->index; 754 int nr = sensor_attr->index;
754 755
755 struct it87_data *data = dev_get_drvdata(dev); 756 struct it87_data *data = dev_get_drvdata(dev);
756 long val; 757 long val;
757 758
758 if (strict_strtol(buf, 10, &val) < 0 || val < 0 || val > 2) 759 if (strict_strtol(buf, 10, &val) < 0 || val < 0 || val > 2)
759 return -EINVAL; 760 return -EINVAL;
760 761
761 /* Check trip points before switching to automatic mode */ 762 /* Check trip points before switching to automatic mode */
762 if (val == 2) { 763 if (val == 2) {
763 if (check_trip_points(dev, nr) < 0) 764 if (check_trip_points(dev, nr) < 0)
764 return -EINVAL; 765 return -EINVAL;
765 } 766 }
766 767
767 mutex_lock(&data->update_lock); 768 mutex_lock(&data->update_lock);
768 769
769 if (val == 0) { 770 if (val == 0) {
770 int tmp; 771 int tmp;
771 /* make sure the fan is on when in on/off mode */ 772 /* make sure the fan is on when in on/off mode */
772 tmp = it87_read_value(data, IT87_REG_FAN_CTL); 773 tmp = it87_read_value(data, IT87_REG_FAN_CTL);
773 it87_write_value(data, IT87_REG_FAN_CTL, tmp | (1 << nr)); 774 it87_write_value(data, IT87_REG_FAN_CTL, tmp | (1 << nr));
774 /* set on/off mode */ 775 /* set on/off mode */
775 data->fan_main_ctrl &= ~(1 << nr); 776 data->fan_main_ctrl &= ~(1 << nr);
776 it87_write_value(data, IT87_REG_FAN_MAIN_CTRL, 777 it87_write_value(data, IT87_REG_FAN_MAIN_CTRL,
777 data->fan_main_ctrl); 778 data->fan_main_ctrl);
778 } else { 779 } else {
779 if (val == 1) /* Manual mode */ 780 if (val == 1) /* Manual mode */
780 data->pwm_ctrl[nr] = data->pwm_duty[nr]; 781 data->pwm_ctrl[nr] = data->pwm_duty[nr];
781 else /* Automatic mode */ 782 else /* Automatic mode */
782 data->pwm_ctrl[nr] = 0x80 | data->pwm_temp_map[nr]; 783 data->pwm_ctrl[nr] = 0x80 | data->pwm_temp_map[nr];
783 it87_write_value(data, IT87_REG_PWM(nr), data->pwm_ctrl[nr]); 784 it87_write_value(data, IT87_REG_PWM(nr), data->pwm_ctrl[nr]);
784 /* set SmartGuardian mode */ 785 /* set SmartGuardian mode */
785 data->fan_main_ctrl |= (1 << nr); 786 data->fan_main_ctrl |= (1 << nr);
786 it87_write_value(data, IT87_REG_FAN_MAIN_CTRL, 787 it87_write_value(data, IT87_REG_FAN_MAIN_CTRL,
787 data->fan_main_ctrl); 788 data->fan_main_ctrl);
788 } 789 }
789 790
790 mutex_unlock(&data->update_lock); 791 mutex_unlock(&data->update_lock);
791 return count; 792 return count;
792 } 793 }
793 static ssize_t set_pwm(struct device *dev, struct device_attribute *attr, 794 static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
794 const char *buf, size_t count) 795 const char *buf, size_t count)
795 { 796 {
796 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 797 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
797 int nr = sensor_attr->index; 798 int nr = sensor_attr->index;
798 799
799 struct it87_data *data = dev_get_drvdata(dev); 800 struct it87_data *data = dev_get_drvdata(dev);
800 long val; 801 long val;
801 802
802 if (strict_strtol(buf, 10, &val) < 0 || val < 0 || val > 255) 803 if (strict_strtol(buf, 10, &val) < 0 || val < 0 || val > 255)
803 return -EINVAL; 804 return -EINVAL;
804 805
805 mutex_lock(&data->update_lock); 806 mutex_lock(&data->update_lock);
806 data->pwm_duty[nr] = PWM_TO_REG(val); 807 data->pwm_duty[nr] = PWM_TO_REG(val);
807 /* If we are in manual mode, write the duty cycle immediately; 808 /* If we are in manual mode, write the duty cycle immediately;
808 * otherwise, just store it for later use. */ 809 * otherwise, just store it for later use. */
809 if (!(data->pwm_ctrl[nr] & 0x80)) { 810 if (!(data->pwm_ctrl[nr] & 0x80)) {
810 data->pwm_ctrl[nr] = data->pwm_duty[nr]; 811 data->pwm_ctrl[nr] = data->pwm_duty[nr];
811 it87_write_value(data, IT87_REG_PWM(nr), data->pwm_ctrl[nr]); 812 it87_write_value(data, IT87_REG_PWM(nr), data->pwm_ctrl[nr]);
812 } 813 }
813 mutex_unlock(&data->update_lock); 814 mutex_unlock(&data->update_lock);
814 return count; 815 return count;
815 } 816 }
816 static ssize_t set_pwm_freq(struct device *dev, 817 static ssize_t set_pwm_freq(struct device *dev,
817 struct device_attribute *attr, const char *buf, size_t count) 818 struct device_attribute *attr, const char *buf, size_t count)
818 { 819 {
819 struct it87_data *data = dev_get_drvdata(dev); 820 struct it87_data *data = dev_get_drvdata(dev);
820 unsigned long val; 821 unsigned long val;
821 int i; 822 int i;
822 823
823 if (strict_strtoul(buf, 10, &val) < 0) 824 if (strict_strtoul(buf, 10, &val) < 0)
824 return -EINVAL; 825 return -EINVAL;
825 826
826 /* Search for the nearest available frequency */ 827 /* Search for the nearest available frequency */
827 for (i = 0; i < 7; i++) { 828 for (i = 0; i < 7; i++) {
828 if (val > (pwm_freq[i] + pwm_freq[i+1]) / 2) 829 if (val > (pwm_freq[i] + pwm_freq[i+1]) / 2)
829 break; 830 break;
830 } 831 }
831 832
832 mutex_lock(&data->update_lock); 833 mutex_lock(&data->update_lock);
833 data->fan_ctl = it87_read_value(data, IT87_REG_FAN_CTL) & 0x8f; 834 data->fan_ctl = it87_read_value(data, IT87_REG_FAN_CTL) & 0x8f;
834 data->fan_ctl |= i << 4; 835 data->fan_ctl |= i << 4;
835 it87_write_value(data, IT87_REG_FAN_CTL, data->fan_ctl); 836 it87_write_value(data, IT87_REG_FAN_CTL, data->fan_ctl);
836 mutex_unlock(&data->update_lock); 837 mutex_unlock(&data->update_lock);
837 838
838 return count; 839 return count;
839 } 840 }
840 static ssize_t show_pwm_temp_map(struct device *dev, 841 static ssize_t show_pwm_temp_map(struct device *dev,
841 struct device_attribute *attr, char *buf) 842 struct device_attribute *attr, char *buf)
842 { 843 {
843 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 844 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
844 int nr = sensor_attr->index; 845 int nr = sensor_attr->index;
845 846
846 struct it87_data *data = it87_update_device(dev); 847 struct it87_data *data = it87_update_device(dev);
847 int map; 848 int map;
848 849
849 if (data->pwm_temp_map[nr] < 3) 850 if (data->pwm_temp_map[nr] < 3)
850 map = 1 << data->pwm_temp_map[nr]; 851 map = 1 << data->pwm_temp_map[nr];
851 else 852 else
852 map = 0; /* Should never happen */ 853 map = 0; /* Should never happen */
853 return sprintf(buf, "%d\n", map); 854 return sprintf(buf, "%d\n", map);
854 } 855 }
855 static ssize_t set_pwm_temp_map(struct device *dev, 856 static ssize_t set_pwm_temp_map(struct device *dev,
856 struct device_attribute *attr, const char *buf, size_t count) 857 struct device_attribute *attr, const char *buf, size_t count)
857 { 858 {
858 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 859 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
859 int nr = sensor_attr->index; 860 int nr = sensor_attr->index;
860 861
861 struct it87_data *data = dev_get_drvdata(dev); 862 struct it87_data *data = dev_get_drvdata(dev);
862 long val; 863 long val;
863 u8 reg; 864 u8 reg;
864 865
865 /* This check can go away if we ever support automatic fan speed 866 /* This check can go away if we ever support automatic fan speed
866 control on newer chips. */ 867 control on newer chips. */
867 if (!has_old_autopwm(data)) { 868 if (!has_old_autopwm(data)) {
868 dev_notice(dev, "Mapping change disabled for safety reasons\n"); 869 dev_notice(dev, "Mapping change disabled for safety reasons\n");
869 return -EINVAL; 870 return -EINVAL;
870 } 871 }
871 872
872 if (strict_strtol(buf, 10, &val) < 0) 873 if (strict_strtol(buf, 10, &val) < 0)
873 return -EINVAL; 874 return -EINVAL;
874 875
875 switch (val) { 876 switch (val) {
876 case (1 << 0): 877 case (1 << 0):
877 reg = 0x00; 878 reg = 0x00;
878 break; 879 break;
879 case (1 << 1): 880 case (1 << 1):
880 reg = 0x01; 881 reg = 0x01;
881 break; 882 break;
882 case (1 << 2): 883 case (1 << 2):
883 reg = 0x02; 884 reg = 0x02;
884 break; 885 break;
885 default: 886 default:
886 return -EINVAL; 887 return -EINVAL;
887 } 888 }
888 889
889 mutex_lock(&data->update_lock); 890 mutex_lock(&data->update_lock);
890 data->pwm_temp_map[nr] = reg; 891 data->pwm_temp_map[nr] = reg;
891 /* If we are in automatic mode, write the temp mapping immediately; 892 /* If we are in automatic mode, write the temp mapping immediately;
892 * otherwise, just store it for later use. */ 893 * otherwise, just store it for later use. */
893 if (data->pwm_ctrl[nr] & 0x80) { 894 if (data->pwm_ctrl[nr] & 0x80) {
894 data->pwm_ctrl[nr] = 0x80 | data->pwm_temp_map[nr]; 895 data->pwm_ctrl[nr] = 0x80 | data->pwm_temp_map[nr];
895 it87_write_value(data, IT87_REG_PWM(nr), data->pwm_ctrl[nr]); 896 it87_write_value(data, IT87_REG_PWM(nr), data->pwm_ctrl[nr]);
896 } 897 }
897 mutex_unlock(&data->update_lock); 898 mutex_unlock(&data->update_lock);
898 return count; 899 return count;
899 } 900 }
900 901
901 static ssize_t show_auto_pwm(struct device *dev, 902 static ssize_t show_auto_pwm(struct device *dev,
902 struct device_attribute *attr, char *buf) 903 struct device_attribute *attr, char *buf)
903 { 904 {
904 struct it87_data *data = it87_update_device(dev); 905 struct it87_data *data = it87_update_device(dev);
905 struct sensor_device_attribute_2 *sensor_attr = 906 struct sensor_device_attribute_2 *sensor_attr =
906 to_sensor_dev_attr_2(attr); 907 to_sensor_dev_attr_2(attr);
907 int nr = sensor_attr->nr; 908 int nr = sensor_attr->nr;
908 int point = sensor_attr->index; 909 int point = sensor_attr->index;
909 910
910 return sprintf(buf, "%d\n", PWM_FROM_REG(data->auto_pwm[nr][point])); 911 return sprintf(buf, "%d\n", PWM_FROM_REG(data->auto_pwm[nr][point]));
911 } 912 }
912 913
913 static ssize_t set_auto_pwm(struct device *dev, 914 static ssize_t set_auto_pwm(struct device *dev,
914 struct device_attribute *attr, const char *buf, size_t count) 915 struct device_attribute *attr, const char *buf, size_t count)
915 { 916 {
916 struct it87_data *data = dev_get_drvdata(dev); 917 struct it87_data *data = dev_get_drvdata(dev);
917 struct sensor_device_attribute_2 *sensor_attr = 918 struct sensor_device_attribute_2 *sensor_attr =
918 to_sensor_dev_attr_2(attr); 919 to_sensor_dev_attr_2(attr);
919 int nr = sensor_attr->nr; 920 int nr = sensor_attr->nr;
920 int point = sensor_attr->index; 921 int point = sensor_attr->index;
921 long val; 922 long val;
922 923
923 if (strict_strtol(buf, 10, &val) < 0 || val < 0 || val > 255) 924 if (strict_strtol(buf, 10, &val) < 0 || val < 0 || val > 255)
924 return -EINVAL; 925 return -EINVAL;
925 926
926 mutex_lock(&data->update_lock); 927 mutex_lock(&data->update_lock);
927 data->auto_pwm[nr][point] = PWM_TO_REG(val); 928 data->auto_pwm[nr][point] = PWM_TO_REG(val);
928 it87_write_value(data, IT87_REG_AUTO_PWM(nr, point), 929 it87_write_value(data, IT87_REG_AUTO_PWM(nr, point),
929 data->auto_pwm[nr][point]); 930 data->auto_pwm[nr][point]);
930 mutex_unlock(&data->update_lock); 931 mutex_unlock(&data->update_lock);
931 return count; 932 return count;
932 } 933 }
933 934
934 static ssize_t show_auto_temp(struct device *dev, 935 static ssize_t show_auto_temp(struct device *dev,
935 struct device_attribute *attr, char *buf) 936 struct device_attribute *attr, char *buf)
936 { 937 {
937 struct it87_data *data = it87_update_device(dev); 938 struct it87_data *data = it87_update_device(dev);
938 struct sensor_device_attribute_2 *sensor_attr = 939 struct sensor_device_attribute_2 *sensor_attr =
939 to_sensor_dev_attr_2(attr); 940 to_sensor_dev_attr_2(attr);
940 int nr = sensor_attr->nr; 941 int nr = sensor_attr->nr;
941 int point = sensor_attr->index; 942 int point = sensor_attr->index;
942 943
943 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->auto_temp[nr][point])); 944 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->auto_temp[nr][point]));
944 } 945 }
945 946
946 static ssize_t set_auto_temp(struct device *dev, 947 static ssize_t set_auto_temp(struct device *dev,
947 struct device_attribute *attr, const char *buf, size_t count) 948 struct device_attribute *attr, const char *buf, size_t count)
948 { 949 {
949 struct it87_data *data = dev_get_drvdata(dev); 950 struct it87_data *data = dev_get_drvdata(dev);
950 struct sensor_device_attribute_2 *sensor_attr = 951 struct sensor_device_attribute_2 *sensor_attr =
951 to_sensor_dev_attr_2(attr); 952 to_sensor_dev_attr_2(attr);
952 int nr = sensor_attr->nr; 953 int nr = sensor_attr->nr;
953 int point = sensor_attr->index; 954 int point = sensor_attr->index;
954 long val; 955 long val;
955 956
956 if (strict_strtol(buf, 10, &val) < 0 || val < -128000 || val > 127000) 957 if (strict_strtol(buf, 10, &val) < 0 || val < -128000 || val > 127000)
957 return -EINVAL; 958 return -EINVAL;
958 959
959 mutex_lock(&data->update_lock); 960 mutex_lock(&data->update_lock);
960 data->auto_temp[nr][point] = TEMP_TO_REG(val); 961 data->auto_temp[nr][point] = TEMP_TO_REG(val);
961 it87_write_value(data, IT87_REG_AUTO_TEMP(nr, point), 962 it87_write_value(data, IT87_REG_AUTO_TEMP(nr, point),
962 data->auto_temp[nr][point]); 963 data->auto_temp[nr][point]);
963 mutex_unlock(&data->update_lock); 964 mutex_unlock(&data->update_lock);
964 return count; 965 return count;
965 } 966 }
966 967
967 #define show_fan_offset(offset) \ 968 #define show_fan_offset(offset) \
968 static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, \ 969 static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, \
969 show_fan, NULL, offset - 1); \ 970 show_fan, NULL, offset - 1); \
970 static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \ 971 static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
971 show_fan_min, set_fan_min, offset - 1); \ 972 show_fan_min, set_fan_min, offset - 1); \
972 static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \ 973 static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
973 show_fan_div, set_fan_div, offset - 1); 974 show_fan_div, set_fan_div, offset - 1);
974 975
975 show_fan_offset(1); 976 show_fan_offset(1);
976 show_fan_offset(2); 977 show_fan_offset(2);
977 show_fan_offset(3); 978 show_fan_offset(3);
978 979
979 #define show_pwm_offset(offset) \ 980 #define show_pwm_offset(offset) \
980 static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \ 981 static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \
981 show_pwm_enable, set_pwm_enable, offset - 1); \ 982 show_pwm_enable, set_pwm_enable, offset - 1); \
982 static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \ 983 static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \
983 show_pwm, set_pwm, offset - 1); \ 984 show_pwm, set_pwm, offset - 1); \
984 static DEVICE_ATTR(pwm##offset##_freq, \ 985 static DEVICE_ATTR(pwm##offset##_freq, \
985 (offset == 1 ? S_IRUGO | S_IWUSR : S_IRUGO), \ 986 (offset == 1 ? S_IRUGO | S_IWUSR : S_IRUGO), \
986 show_pwm_freq, (offset == 1 ? set_pwm_freq : NULL)); \ 987 show_pwm_freq, (offset == 1 ? set_pwm_freq : NULL)); \
987 static SENSOR_DEVICE_ATTR(pwm##offset##_auto_channels_temp, \ 988 static SENSOR_DEVICE_ATTR(pwm##offset##_auto_channels_temp, \
988 S_IRUGO | S_IWUSR, show_pwm_temp_map, set_pwm_temp_map, \ 989 S_IRUGO | S_IWUSR, show_pwm_temp_map, set_pwm_temp_map, \
989 offset - 1); \ 990 offset - 1); \
990 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point1_pwm, \ 991 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point1_pwm, \
991 S_IRUGO | S_IWUSR, show_auto_pwm, set_auto_pwm, \ 992 S_IRUGO | S_IWUSR, show_auto_pwm, set_auto_pwm, \
992 offset - 1, 0); \ 993 offset - 1, 0); \
993 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point2_pwm, \ 994 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point2_pwm, \
994 S_IRUGO | S_IWUSR, show_auto_pwm, set_auto_pwm, \ 995 S_IRUGO | S_IWUSR, show_auto_pwm, set_auto_pwm, \
995 offset - 1, 1); \ 996 offset - 1, 1); \
996 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point3_pwm, \ 997 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point3_pwm, \
997 S_IRUGO | S_IWUSR, show_auto_pwm, set_auto_pwm, \ 998 S_IRUGO | S_IWUSR, show_auto_pwm, set_auto_pwm, \
998 offset - 1, 2); \ 999 offset - 1, 2); \
999 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point4_pwm, \ 1000 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point4_pwm, \
1000 S_IRUGO, show_auto_pwm, NULL, offset - 1, 3); \ 1001 S_IRUGO, show_auto_pwm, NULL, offset - 1, 3); \
1001 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point1_temp, \ 1002 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point1_temp, \
1002 S_IRUGO | S_IWUSR, show_auto_temp, set_auto_temp, \ 1003 S_IRUGO | S_IWUSR, show_auto_temp, set_auto_temp, \
1003 offset - 1, 1); \ 1004 offset - 1, 1); \
1004 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point1_temp_hyst, \ 1005 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point1_temp_hyst, \
1005 S_IRUGO | S_IWUSR, show_auto_temp, set_auto_temp, \ 1006 S_IRUGO | S_IWUSR, show_auto_temp, set_auto_temp, \
1006 offset - 1, 0); \ 1007 offset - 1, 0); \
1007 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point2_temp, \ 1008 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point2_temp, \
1008 S_IRUGO | S_IWUSR, show_auto_temp, set_auto_temp, \ 1009 S_IRUGO | S_IWUSR, show_auto_temp, set_auto_temp, \
1009 offset - 1, 2); \ 1010 offset - 1, 2); \
1010 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point3_temp, \ 1011 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point3_temp, \
1011 S_IRUGO | S_IWUSR, show_auto_temp, set_auto_temp, \ 1012 S_IRUGO | S_IWUSR, show_auto_temp, set_auto_temp, \
1012 offset - 1, 3); \ 1013 offset - 1, 3); \
1013 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point4_temp, \ 1014 static SENSOR_DEVICE_ATTR_2(pwm##offset##_auto_point4_temp, \
1014 S_IRUGO | S_IWUSR, show_auto_temp, set_auto_temp, \ 1015 S_IRUGO | S_IWUSR, show_auto_temp, set_auto_temp, \
1015 offset - 1, 4); 1016 offset - 1, 4);
1016 1017
1017 show_pwm_offset(1); 1018 show_pwm_offset(1);
1018 show_pwm_offset(2); 1019 show_pwm_offset(2);
1019 show_pwm_offset(3); 1020 show_pwm_offset(3);
1020 1021
1021 /* A different set of callbacks for 16-bit fans */ 1022 /* A different set of callbacks for 16-bit fans */
1022 static ssize_t show_fan16(struct device *dev, struct device_attribute *attr, 1023 static ssize_t show_fan16(struct device *dev, struct device_attribute *attr,
1023 char *buf) 1024 char *buf)
1024 { 1025 {
1025 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1026 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1026 int nr = sensor_attr->index; 1027 int nr = sensor_attr->index;
1027 struct it87_data *data = it87_update_device(dev); 1028 struct it87_data *data = it87_update_device(dev);
1028 return sprintf(buf, "%d\n", FAN16_FROM_REG(data->fan[nr])); 1029 return sprintf(buf, "%d\n", FAN16_FROM_REG(data->fan[nr]));
1029 } 1030 }
1030 1031
1031 static ssize_t show_fan16_min(struct device *dev, struct device_attribute *attr, 1032 static ssize_t show_fan16_min(struct device *dev, struct device_attribute *attr,
1032 char *buf) 1033 char *buf)
1033 { 1034 {
1034 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1035 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1035 int nr = sensor_attr->index; 1036 int nr = sensor_attr->index;
1036 struct it87_data *data = it87_update_device(dev); 1037 struct it87_data *data = it87_update_device(dev);
1037 return sprintf(buf, "%d\n", FAN16_FROM_REG(data->fan_min[nr])); 1038 return sprintf(buf, "%d\n", FAN16_FROM_REG(data->fan_min[nr]));
1038 } 1039 }
1039 1040
1040 static ssize_t set_fan16_min(struct device *dev, struct device_attribute *attr, 1041 static ssize_t set_fan16_min(struct device *dev, struct device_attribute *attr,
1041 const char *buf, size_t count) 1042 const char *buf, size_t count)
1042 { 1043 {
1043 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1044 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1044 int nr = sensor_attr->index; 1045 int nr = sensor_attr->index;
1045 struct it87_data *data = dev_get_drvdata(dev); 1046 struct it87_data *data = dev_get_drvdata(dev);
1046 long val; 1047 long val;
1047 1048
1048 if (strict_strtol(buf, 10, &val) < 0) 1049 if (strict_strtol(buf, 10, &val) < 0)
1049 return -EINVAL; 1050 return -EINVAL;
1050 1051
1051 mutex_lock(&data->update_lock); 1052 mutex_lock(&data->update_lock);
1052 data->fan_min[nr] = FAN16_TO_REG(val); 1053 data->fan_min[nr] = FAN16_TO_REG(val);
1053 it87_write_value(data, IT87_REG_FAN_MIN[nr], 1054 it87_write_value(data, IT87_REG_FAN_MIN[nr],
1054 data->fan_min[nr] & 0xff); 1055 data->fan_min[nr] & 0xff);
1055 it87_write_value(data, IT87_REG_FANX_MIN[nr], 1056 it87_write_value(data, IT87_REG_FANX_MIN[nr],
1056 data->fan_min[nr] >> 8); 1057 data->fan_min[nr] >> 8);
1057 mutex_unlock(&data->update_lock); 1058 mutex_unlock(&data->update_lock);
1058 return count; 1059 return count;
1059 } 1060 }
1060 1061
1061 /* We want to use the same sysfs file names as 8-bit fans, but we need 1062 /* We want to use the same sysfs file names as 8-bit fans, but we need
1062 different variable names, so we have to use SENSOR_ATTR instead of 1063 different variable names, so we have to use SENSOR_ATTR instead of
1063 SENSOR_DEVICE_ATTR. */ 1064 SENSOR_DEVICE_ATTR. */
1064 #define show_fan16_offset(offset) \ 1065 #define show_fan16_offset(offset) \
1065 static struct sensor_device_attribute sensor_dev_attr_fan##offset##_input16 \ 1066 static struct sensor_device_attribute sensor_dev_attr_fan##offset##_input16 \
1066 = SENSOR_ATTR(fan##offset##_input, S_IRUGO, \ 1067 = SENSOR_ATTR(fan##offset##_input, S_IRUGO, \
1067 show_fan16, NULL, offset - 1); \ 1068 show_fan16, NULL, offset - 1); \
1068 static struct sensor_device_attribute sensor_dev_attr_fan##offset##_min16 \ 1069 static struct sensor_device_attribute sensor_dev_attr_fan##offset##_min16 \
1069 = SENSOR_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \ 1070 = SENSOR_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
1070 show_fan16_min, set_fan16_min, offset - 1) 1071 show_fan16_min, set_fan16_min, offset - 1)
1071 1072
1072 show_fan16_offset(1); 1073 show_fan16_offset(1);
1073 show_fan16_offset(2); 1074 show_fan16_offset(2);
1074 show_fan16_offset(3); 1075 show_fan16_offset(3);
1075 show_fan16_offset(4); 1076 show_fan16_offset(4);
1076 show_fan16_offset(5); 1077 show_fan16_offset(5);
1077 1078
1078 /* Alarms */ 1079 /* Alarms */
1079 static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, 1080 static ssize_t show_alarms(struct device *dev, struct device_attribute *attr,
1080 char *buf) 1081 char *buf)
1081 { 1082 {
1082 struct it87_data *data = it87_update_device(dev); 1083 struct it87_data *data = it87_update_device(dev);
1083 return sprintf(buf, "%u\n", data->alarms); 1084 return sprintf(buf, "%u\n", data->alarms);
1084 } 1085 }
1085 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 1086 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
1086 1087
1087 static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, 1088 static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
1088 char *buf) 1089 char *buf)
1089 { 1090 {
1090 int bitnr = to_sensor_dev_attr(attr)->index; 1091 int bitnr = to_sensor_dev_attr(attr)->index;
1091 struct it87_data *data = it87_update_device(dev); 1092 struct it87_data *data = it87_update_device(dev);
1092 return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); 1093 return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1);
1093 } 1094 }
1094 static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 8); 1095 static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 8);
1095 static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 9); 1096 static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 9);
1096 static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 10); 1097 static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 10);
1097 static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 11); 1098 static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 11);
1098 static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 12); 1099 static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 12);
1099 static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 13); 1100 static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 13);
1100 static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 14); 1101 static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 14);
1101 static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 15); 1102 static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 15);
1102 static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 0); 1103 static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 0);
1103 static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 1); 1104 static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 1);
1104 static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 2); 1105 static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 2);
1105 static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 3); 1106 static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 3);
1106 static SENSOR_DEVICE_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 6); 1107 static SENSOR_DEVICE_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 6);
1107 static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 16); 1108 static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 16);
1108 static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 17); 1109 static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 17);
1109 static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 18); 1110 static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 18);
1110 1111
1111 static ssize_t show_beep(struct device *dev, struct device_attribute *attr, 1112 static ssize_t show_beep(struct device *dev, struct device_attribute *attr,
1112 char *buf) 1113 char *buf)
1113 { 1114 {
1114 int bitnr = to_sensor_dev_attr(attr)->index; 1115 int bitnr = to_sensor_dev_attr(attr)->index;
1115 struct it87_data *data = it87_update_device(dev); 1116 struct it87_data *data = it87_update_device(dev);
1116 return sprintf(buf, "%u\n", (data->beeps >> bitnr) & 1); 1117 return sprintf(buf, "%u\n", (data->beeps >> bitnr) & 1);
1117 } 1118 }
1118 static ssize_t set_beep(struct device *dev, struct device_attribute *attr, 1119 static ssize_t set_beep(struct device *dev, struct device_attribute *attr,
1119 const char *buf, size_t count) 1120 const char *buf, size_t count)
1120 { 1121 {
1121 int bitnr = to_sensor_dev_attr(attr)->index; 1122 int bitnr = to_sensor_dev_attr(attr)->index;
1122 struct it87_data *data = dev_get_drvdata(dev); 1123 struct it87_data *data = dev_get_drvdata(dev);
1123 long val; 1124 long val;
1124 1125
1125 if (strict_strtol(buf, 10, &val) < 0 1126 if (strict_strtol(buf, 10, &val) < 0
1126 || (val != 0 && val != 1)) 1127 || (val != 0 && val != 1))
1127 return -EINVAL; 1128 return -EINVAL;
1128 1129
1129 mutex_lock(&data->update_lock); 1130 mutex_lock(&data->update_lock);
1130 data->beeps = it87_read_value(data, IT87_REG_BEEP_ENABLE); 1131 data->beeps = it87_read_value(data, IT87_REG_BEEP_ENABLE);
1131 if (val) 1132 if (val)
1132 data->beeps |= (1 << bitnr); 1133 data->beeps |= (1 << bitnr);
1133 else 1134 else
1134 data->beeps &= ~(1 << bitnr); 1135 data->beeps &= ~(1 << bitnr);
1135 it87_write_value(data, IT87_REG_BEEP_ENABLE, data->beeps); 1136 it87_write_value(data, IT87_REG_BEEP_ENABLE, data->beeps);
1136 mutex_unlock(&data->update_lock); 1137 mutex_unlock(&data->update_lock);
1137 return count; 1138 return count;
1138 } 1139 }
1139 1140
1140 static SENSOR_DEVICE_ATTR(in0_beep, S_IRUGO | S_IWUSR, 1141 static SENSOR_DEVICE_ATTR(in0_beep, S_IRUGO | S_IWUSR,
1141 show_beep, set_beep, 1); 1142 show_beep, set_beep, 1);
1142 static SENSOR_DEVICE_ATTR(in1_beep, S_IRUGO, show_beep, NULL, 1); 1143 static SENSOR_DEVICE_ATTR(in1_beep, S_IRUGO, show_beep, NULL, 1);
1143 static SENSOR_DEVICE_ATTR(in2_beep, S_IRUGO, show_beep, NULL, 1); 1144 static SENSOR_DEVICE_ATTR(in2_beep, S_IRUGO, show_beep, NULL, 1);
1144 static SENSOR_DEVICE_ATTR(in3_beep, S_IRUGO, show_beep, NULL, 1); 1145 static SENSOR_DEVICE_ATTR(in3_beep, S_IRUGO, show_beep, NULL, 1);
1145 static SENSOR_DEVICE_ATTR(in4_beep, S_IRUGO, show_beep, NULL, 1); 1146 static SENSOR_DEVICE_ATTR(in4_beep, S_IRUGO, show_beep, NULL, 1);
1146 static SENSOR_DEVICE_ATTR(in5_beep, S_IRUGO, show_beep, NULL, 1); 1147 static SENSOR_DEVICE_ATTR(in5_beep, S_IRUGO, show_beep, NULL, 1);
1147 static SENSOR_DEVICE_ATTR(in6_beep, S_IRUGO, show_beep, NULL, 1); 1148 static SENSOR_DEVICE_ATTR(in6_beep, S_IRUGO, show_beep, NULL, 1);
1148 static SENSOR_DEVICE_ATTR(in7_beep, S_IRUGO, show_beep, NULL, 1); 1149 static SENSOR_DEVICE_ATTR(in7_beep, S_IRUGO, show_beep, NULL, 1);
1149 /* fanX_beep writability is set later */ 1150 /* fanX_beep writability is set later */
1150 static SENSOR_DEVICE_ATTR(fan1_beep, S_IRUGO, show_beep, set_beep, 0); 1151 static SENSOR_DEVICE_ATTR(fan1_beep, S_IRUGO, show_beep, set_beep, 0);
1151 static SENSOR_DEVICE_ATTR(fan2_beep, S_IRUGO, show_beep, set_beep, 0); 1152 static SENSOR_DEVICE_ATTR(fan2_beep, S_IRUGO, show_beep, set_beep, 0);
1152 static SENSOR_DEVICE_ATTR(fan3_beep, S_IRUGO, show_beep, set_beep, 0); 1153 static SENSOR_DEVICE_ATTR(fan3_beep, S_IRUGO, show_beep, set_beep, 0);
1153 static SENSOR_DEVICE_ATTR(fan4_beep, S_IRUGO, show_beep, set_beep, 0); 1154 static SENSOR_DEVICE_ATTR(fan4_beep, S_IRUGO, show_beep, set_beep, 0);
1154 static SENSOR_DEVICE_ATTR(fan5_beep, S_IRUGO, show_beep, set_beep, 0); 1155 static SENSOR_DEVICE_ATTR(fan5_beep, S_IRUGO, show_beep, set_beep, 0);
1155 static SENSOR_DEVICE_ATTR(temp1_beep, S_IRUGO | S_IWUSR, 1156 static SENSOR_DEVICE_ATTR(temp1_beep, S_IRUGO | S_IWUSR,
1156 show_beep, set_beep, 2); 1157 show_beep, set_beep, 2);
1157 static SENSOR_DEVICE_ATTR(temp2_beep, S_IRUGO, show_beep, NULL, 2); 1158 static SENSOR_DEVICE_ATTR(temp2_beep, S_IRUGO, show_beep, NULL, 2);
1158 static SENSOR_DEVICE_ATTR(temp3_beep, S_IRUGO, show_beep, NULL, 2); 1159 static SENSOR_DEVICE_ATTR(temp3_beep, S_IRUGO, show_beep, NULL, 2);
1159 1160
1160 static ssize_t show_vrm_reg(struct device *dev, struct device_attribute *attr, 1161 static ssize_t show_vrm_reg(struct device *dev, struct device_attribute *attr,
1161 char *buf) 1162 char *buf)
1162 { 1163 {
1163 struct it87_data *data = dev_get_drvdata(dev); 1164 struct it87_data *data = dev_get_drvdata(dev);
1164 return sprintf(buf, "%u\n", data->vrm); 1165 return sprintf(buf, "%u\n", data->vrm);
1165 } 1166 }
1166 static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr, 1167 static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr,
1167 const char *buf, size_t count) 1168 const char *buf, size_t count)
1168 { 1169 {
1169 struct it87_data *data = dev_get_drvdata(dev); 1170 struct it87_data *data = dev_get_drvdata(dev);
1170 unsigned long val; 1171 unsigned long val;
1171 1172
1172 if (strict_strtoul(buf, 10, &val) < 0) 1173 if (strict_strtoul(buf, 10, &val) < 0)
1173 return -EINVAL; 1174 return -EINVAL;
1174 1175
1175 data->vrm = val; 1176 data->vrm = val;
1176 1177
1177 return count; 1178 return count;
1178 } 1179 }
1179 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg); 1180 static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg);
1180 1181
1181 static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr, 1182 static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr,
1182 char *buf) 1183 char *buf)
1183 { 1184 {
1184 struct it87_data *data = it87_update_device(dev); 1185 struct it87_data *data = it87_update_device(dev);
1185 return sprintf(buf, "%ld\n", (long) vid_from_reg(data->vid, data->vrm)); 1186 return sprintf(buf, "%ld\n", (long) vid_from_reg(data->vid, data->vrm));
1186 } 1187 }
1187 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL); 1188 static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
1188 1189
1189 static ssize_t show_name(struct device *dev, struct device_attribute 1190 static ssize_t show_name(struct device *dev, struct device_attribute
1190 *devattr, char *buf) 1191 *devattr, char *buf)
1191 { 1192 {
1192 struct it87_data *data = dev_get_drvdata(dev); 1193 struct it87_data *data = dev_get_drvdata(dev);
1193 return sprintf(buf, "%s\n", data->name); 1194 return sprintf(buf, "%s\n", data->name);
1194 } 1195 }
1195 static DEVICE_ATTR(name, S_IRUGO, show_name, NULL); 1196 static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
1196 1197
1197 static struct attribute *it87_attributes[] = { 1198 static struct attribute *it87_attributes[] = {
1198 &sensor_dev_attr_in0_input.dev_attr.attr, 1199 &sensor_dev_attr_in0_input.dev_attr.attr,
1199 &sensor_dev_attr_in1_input.dev_attr.attr, 1200 &sensor_dev_attr_in1_input.dev_attr.attr,
1200 &sensor_dev_attr_in2_input.dev_attr.attr, 1201 &sensor_dev_attr_in2_input.dev_attr.attr,
1201 &sensor_dev_attr_in3_input.dev_attr.attr, 1202 &sensor_dev_attr_in3_input.dev_attr.attr,
1202 &sensor_dev_attr_in4_input.dev_attr.attr, 1203 &sensor_dev_attr_in4_input.dev_attr.attr,
1203 &sensor_dev_attr_in5_input.dev_attr.attr, 1204 &sensor_dev_attr_in5_input.dev_attr.attr,
1204 &sensor_dev_attr_in6_input.dev_attr.attr, 1205 &sensor_dev_attr_in6_input.dev_attr.attr,
1205 &sensor_dev_attr_in7_input.dev_attr.attr, 1206 &sensor_dev_attr_in7_input.dev_attr.attr,
1206 &sensor_dev_attr_in8_input.dev_attr.attr, 1207 &sensor_dev_attr_in8_input.dev_attr.attr,
1207 &sensor_dev_attr_in0_min.dev_attr.attr, 1208 &sensor_dev_attr_in0_min.dev_attr.attr,
1208 &sensor_dev_attr_in1_min.dev_attr.attr, 1209 &sensor_dev_attr_in1_min.dev_attr.attr,
1209 &sensor_dev_attr_in2_min.dev_attr.attr, 1210 &sensor_dev_attr_in2_min.dev_attr.attr,
1210 &sensor_dev_attr_in3_min.dev_attr.attr, 1211 &sensor_dev_attr_in3_min.dev_attr.attr,
1211 &sensor_dev_attr_in4_min.dev_attr.attr, 1212 &sensor_dev_attr_in4_min.dev_attr.attr,
1212 &sensor_dev_attr_in5_min.dev_attr.attr, 1213 &sensor_dev_attr_in5_min.dev_attr.attr,
1213 &sensor_dev_attr_in6_min.dev_attr.attr, 1214 &sensor_dev_attr_in6_min.dev_attr.attr,
1214 &sensor_dev_attr_in7_min.dev_attr.attr, 1215 &sensor_dev_attr_in7_min.dev_attr.attr,
1215 &sensor_dev_attr_in0_max.dev_attr.attr, 1216 &sensor_dev_attr_in0_max.dev_attr.attr,
1216 &sensor_dev_attr_in1_max.dev_attr.attr, 1217 &sensor_dev_attr_in1_max.dev_attr.attr,
1217 &sensor_dev_attr_in2_max.dev_attr.attr, 1218 &sensor_dev_attr_in2_max.dev_attr.attr,
1218 &sensor_dev_attr_in3_max.dev_attr.attr, 1219 &sensor_dev_attr_in3_max.dev_attr.attr,
1219 &sensor_dev_attr_in4_max.dev_attr.attr, 1220 &sensor_dev_attr_in4_max.dev_attr.attr,
1220 &sensor_dev_attr_in5_max.dev_attr.attr, 1221 &sensor_dev_attr_in5_max.dev_attr.attr,
1221 &sensor_dev_attr_in6_max.dev_attr.attr, 1222 &sensor_dev_attr_in6_max.dev_attr.attr,
1222 &sensor_dev_attr_in7_max.dev_attr.attr, 1223 &sensor_dev_attr_in7_max.dev_attr.attr,
1223 &sensor_dev_attr_in0_alarm.dev_attr.attr, 1224 &sensor_dev_attr_in0_alarm.dev_attr.attr,
1224 &sensor_dev_attr_in1_alarm.dev_attr.attr, 1225 &sensor_dev_attr_in1_alarm.dev_attr.attr,
1225 &sensor_dev_attr_in2_alarm.dev_attr.attr, 1226 &sensor_dev_attr_in2_alarm.dev_attr.attr,
1226 &sensor_dev_attr_in3_alarm.dev_attr.attr, 1227 &sensor_dev_attr_in3_alarm.dev_attr.attr,
1227 &sensor_dev_attr_in4_alarm.dev_attr.attr, 1228 &sensor_dev_attr_in4_alarm.dev_attr.attr,
1228 &sensor_dev_attr_in5_alarm.dev_attr.attr, 1229 &sensor_dev_attr_in5_alarm.dev_attr.attr,
1229 &sensor_dev_attr_in6_alarm.dev_attr.attr, 1230 &sensor_dev_attr_in6_alarm.dev_attr.attr,
1230 &sensor_dev_attr_in7_alarm.dev_attr.attr, 1231 &sensor_dev_attr_in7_alarm.dev_attr.attr,
1231 1232
1232 &sensor_dev_attr_temp1_input.dev_attr.attr, 1233 &sensor_dev_attr_temp1_input.dev_attr.attr,
1233 &sensor_dev_attr_temp2_input.dev_attr.attr, 1234 &sensor_dev_attr_temp2_input.dev_attr.attr,
1234 &sensor_dev_attr_temp3_input.dev_attr.attr, 1235 &sensor_dev_attr_temp3_input.dev_attr.attr,
1235 &sensor_dev_attr_temp1_max.dev_attr.attr, 1236 &sensor_dev_attr_temp1_max.dev_attr.attr,
1236 &sensor_dev_attr_temp2_max.dev_attr.attr, 1237 &sensor_dev_attr_temp2_max.dev_attr.attr,
1237 &sensor_dev_attr_temp3_max.dev_attr.attr, 1238 &sensor_dev_attr_temp3_max.dev_attr.attr,
1238 &sensor_dev_attr_temp1_min.dev_attr.attr, 1239 &sensor_dev_attr_temp1_min.dev_attr.attr,
1239 &sensor_dev_attr_temp2_min.dev_attr.attr, 1240 &sensor_dev_attr_temp2_min.dev_attr.attr,
1240 &sensor_dev_attr_temp3_min.dev_attr.attr, 1241 &sensor_dev_attr_temp3_min.dev_attr.attr,
1241 &sensor_dev_attr_temp1_type.dev_attr.attr, 1242 &sensor_dev_attr_temp1_type.dev_attr.attr,
1242 &sensor_dev_attr_temp2_type.dev_attr.attr, 1243 &sensor_dev_attr_temp2_type.dev_attr.attr,
1243 &sensor_dev_attr_temp3_type.dev_attr.attr, 1244 &sensor_dev_attr_temp3_type.dev_attr.attr,
1244 &sensor_dev_attr_temp1_alarm.dev_attr.attr, 1245 &sensor_dev_attr_temp1_alarm.dev_attr.attr,
1245 &sensor_dev_attr_temp2_alarm.dev_attr.attr, 1246 &sensor_dev_attr_temp2_alarm.dev_attr.attr,
1246 &sensor_dev_attr_temp3_alarm.dev_attr.attr, 1247 &sensor_dev_attr_temp3_alarm.dev_attr.attr,
1247 1248
1248 &dev_attr_alarms.attr, 1249 &dev_attr_alarms.attr,
1249 &dev_attr_name.attr, 1250 &dev_attr_name.attr,
1250 NULL 1251 NULL
1251 }; 1252 };
1252 1253
1253 static const struct attribute_group it87_group = { 1254 static const struct attribute_group it87_group = {
1254 .attrs = it87_attributes, 1255 .attrs = it87_attributes,
1255 }; 1256 };
1256 1257
1257 static struct attribute *it87_attributes_beep[] = { 1258 static struct attribute *it87_attributes_beep[] = {
1258 &sensor_dev_attr_in0_beep.dev_attr.attr, 1259 &sensor_dev_attr_in0_beep.dev_attr.attr,
1259 &sensor_dev_attr_in1_beep.dev_attr.attr, 1260 &sensor_dev_attr_in1_beep.dev_attr.attr,
1260 &sensor_dev_attr_in2_beep.dev_attr.attr, 1261 &sensor_dev_attr_in2_beep.dev_attr.attr,
1261 &sensor_dev_attr_in3_beep.dev_attr.attr, 1262 &sensor_dev_attr_in3_beep.dev_attr.attr,
1262 &sensor_dev_attr_in4_beep.dev_attr.attr, 1263 &sensor_dev_attr_in4_beep.dev_attr.attr,
1263 &sensor_dev_attr_in5_beep.dev_attr.attr, 1264 &sensor_dev_attr_in5_beep.dev_attr.attr,
1264 &sensor_dev_attr_in6_beep.dev_attr.attr, 1265 &sensor_dev_attr_in6_beep.dev_attr.attr,
1265 &sensor_dev_attr_in7_beep.dev_attr.attr, 1266 &sensor_dev_attr_in7_beep.dev_attr.attr,
1266 1267
1267 &sensor_dev_attr_temp1_beep.dev_attr.attr, 1268 &sensor_dev_attr_temp1_beep.dev_attr.attr,
1268 &sensor_dev_attr_temp2_beep.dev_attr.attr, 1269 &sensor_dev_attr_temp2_beep.dev_attr.attr,
1269 &sensor_dev_attr_temp3_beep.dev_attr.attr, 1270 &sensor_dev_attr_temp3_beep.dev_attr.attr,
1270 NULL 1271 NULL
1271 }; 1272 };
1272 1273
1273 static const struct attribute_group it87_group_beep = { 1274 static const struct attribute_group it87_group_beep = {
1274 .attrs = it87_attributes_beep, 1275 .attrs = it87_attributes_beep,
1275 }; 1276 };
1276 1277
1277 static struct attribute *it87_attributes_fan16[5][3+1] = { { 1278 static struct attribute *it87_attributes_fan16[5][3+1] = { {
1278 &sensor_dev_attr_fan1_input16.dev_attr.attr, 1279 &sensor_dev_attr_fan1_input16.dev_attr.attr,
1279 &sensor_dev_attr_fan1_min16.dev_attr.attr, 1280 &sensor_dev_attr_fan1_min16.dev_attr.attr,
1280 &sensor_dev_attr_fan1_alarm.dev_attr.attr, 1281 &sensor_dev_attr_fan1_alarm.dev_attr.attr,
1281 NULL 1282 NULL
1282 }, { 1283 }, {
1283 &sensor_dev_attr_fan2_input16.dev_attr.attr, 1284 &sensor_dev_attr_fan2_input16.dev_attr.attr,
1284 &sensor_dev_attr_fan2_min16.dev_attr.attr, 1285 &sensor_dev_attr_fan2_min16.dev_attr.attr,
1285 &sensor_dev_attr_fan2_alarm.dev_attr.attr, 1286 &sensor_dev_attr_fan2_alarm.dev_attr.attr,
1286 NULL 1287 NULL
1287 }, { 1288 }, {
1288 &sensor_dev_attr_fan3_input16.dev_attr.attr, 1289 &sensor_dev_attr_fan3_input16.dev_attr.attr,
1289 &sensor_dev_attr_fan3_min16.dev_attr.attr, 1290 &sensor_dev_attr_fan3_min16.dev_attr.attr,
1290 &sensor_dev_attr_fan3_alarm.dev_attr.attr, 1291 &sensor_dev_attr_fan3_alarm.dev_attr.attr,
1291 NULL 1292 NULL
1292 }, { 1293 }, {
1293 &sensor_dev_attr_fan4_input16.dev_attr.attr, 1294 &sensor_dev_attr_fan4_input16.dev_attr.attr,
1294 &sensor_dev_attr_fan4_min16.dev_attr.attr, 1295 &sensor_dev_attr_fan4_min16.dev_attr.attr,
1295 &sensor_dev_attr_fan4_alarm.dev_attr.attr, 1296 &sensor_dev_attr_fan4_alarm.dev_attr.attr,
1296 NULL 1297 NULL
1297 }, { 1298 }, {
1298 &sensor_dev_attr_fan5_input16.dev_attr.attr, 1299 &sensor_dev_attr_fan5_input16.dev_attr.attr,
1299 &sensor_dev_attr_fan5_min16.dev_attr.attr, 1300 &sensor_dev_attr_fan5_min16.dev_attr.attr,
1300 &sensor_dev_attr_fan5_alarm.dev_attr.attr, 1301 &sensor_dev_attr_fan5_alarm.dev_attr.attr,
1301 NULL 1302 NULL
1302 } }; 1303 } };
1303 1304
1304 static const struct attribute_group it87_group_fan16[5] = { 1305 static const struct attribute_group it87_group_fan16[5] = {
1305 { .attrs = it87_attributes_fan16[0] }, 1306 { .attrs = it87_attributes_fan16[0] },
1306 { .attrs = it87_attributes_fan16[1] }, 1307 { .attrs = it87_attributes_fan16[1] },
1307 { .attrs = it87_attributes_fan16[2] }, 1308 { .attrs = it87_attributes_fan16[2] },
1308 { .attrs = it87_attributes_fan16[3] }, 1309 { .attrs = it87_attributes_fan16[3] },
1309 { .attrs = it87_attributes_fan16[4] }, 1310 { .attrs = it87_attributes_fan16[4] },
1310 }; 1311 };
1311 1312
1312 static struct attribute *it87_attributes_fan[3][4+1] = { { 1313 static struct attribute *it87_attributes_fan[3][4+1] = { {
1313 &sensor_dev_attr_fan1_input.dev_attr.attr, 1314 &sensor_dev_attr_fan1_input.dev_attr.attr,
1314 &sensor_dev_attr_fan1_min.dev_attr.attr, 1315 &sensor_dev_attr_fan1_min.dev_attr.attr,
1315 &sensor_dev_attr_fan1_div.dev_attr.attr, 1316 &sensor_dev_attr_fan1_div.dev_attr.attr,
1316 &sensor_dev_attr_fan1_alarm.dev_attr.attr, 1317 &sensor_dev_attr_fan1_alarm.dev_attr.attr,
1317 NULL 1318 NULL
1318 }, { 1319 }, {
1319 &sensor_dev_attr_fan2_input.dev_attr.attr, 1320 &sensor_dev_attr_fan2_input.dev_attr.attr,
1320 &sensor_dev_attr_fan2_min.dev_attr.attr, 1321 &sensor_dev_attr_fan2_min.dev_attr.attr,
1321 &sensor_dev_attr_fan2_div.dev_attr.attr, 1322 &sensor_dev_attr_fan2_div.dev_attr.attr,
1322 &sensor_dev_attr_fan2_alarm.dev_attr.attr, 1323 &sensor_dev_attr_fan2_alarm.dev_attr.attr,
1323 NULL 1324 NULL
1324 }, { 1325 }, {
1325 &sensor_dev_attr_fan3_input.dev_attr.attr, 1326 &sensor_dev_attr_fan3_input.dev_attr.attr,
1326 &sensor_dev_attr_fan3_min.dev_attr.attr, 1327 &sensor_dev_attr_fan3_min.dev_attr.attr,
1327 &sensor_dev_attr_fan3_div.dev_attr.attr, 1328 &sensor_dev_attr_fan3_div.dev_attr.attr,
1328 &sensor_dev_attr_fan3_alarm.dev_attr.attr, 1329 &sensor_dev_attr_fan3_alarm.dev_attr.attr,
1329 NULL 1330 NULL
1330 } }; 1331 } };
1331 1332
1332 static const struct attribute_group it87_group_fan[3] = { 1333 static const struct attribute_group it87_group_fan[3] = {
1333 { .attrs = it87_attributes_fan[0] }, 1334 { .attrs = it87_attributes_fan[0] },
1334 { .attrs = it87_attributes_fan[1] }, 1335 { .attrs = it87_attributes_fan[1] },
1335 { .attrs = it87_attributes_fan[2] }, 1336 { .attrs = it87_attributes_fan[2] },
1336 }; 1337 };
1337 1338
1338 static const struct attribute_group * 1339 static const struct attribute_group *
1339 it87_get_fan_group(const struct it87_data *data) 1340 it87_get_fan_group(const struct it87_data *data)
1340 { 1341 {
1341 return has_16bit_fans(data) ? it87_group_fan16 : it87_group_fan; 1342 return has_16bit_fans(data) ? it87_group_fan16 : it87_group_fan;
1342 } 1343 }
1343 1344
1344 static struct attribute *it87_attributes_pwm[3][4+1] = { { 1345 static struct attribute *it87_attributes_pwm[3][4+1] = { {
1345 &sensor_dev_attr_pwm1_enable.dev_attr.attr, 1346 &sensor_dev_attr_pwm1_enable.dev_attr.attr,
1346 &sensor_dev_attr_pwm1.dev_attr.attr, 1347 &sensor_dev_attr_pwm1.dev_attr.attr,
1347 &dev_attr_pwm1_freq.attr, 1348 &dev_attr_pwm1_freq.attr,
1348 &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr, 1349 &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1349 NULL 1350 NULL
1350 }, { 1351 }, {
1351 &sensor_dev_attr_pwm2_enable.dev_attr.attr, 1352 &sensor_dev_attr_pwm2_enable.dev_attr.attr,
1352 &sensor_dev_attr_pwm2.dev_attr.attr, 1353 &sensor_dev_attr_pwm2.dev_attr.attr,
1353 &dev_attr_pwm2_freq.attr, 1354 &dev_attr_pwm2_freq.attr,
1354 &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr, 1355 &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
1355 NULL 1356 NULL
1356 }, { 1357 }, {
1357 &sensor_dev_attr_pwm3_enable.dev_attr.attr, 1358 &sensor_dev_attr_pwm3_enable.dev_attr.attr,
1358 &sensor_dev_attr_pwm3.dev_attr.attr, 1359 &sensor_dev_attr_pwm3.dev_attr.attr,
1359 &dev_attr_pwm3_freq.attr, 1360 &dev_attr_pwm3_freq.attr,
1360 &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr, 1361 &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1361 NULL 1362 NULL
1362 } }; 1363 } };
1363 1364
1364 static const struct attribute_group it87_group_pwm[3] = { 1365 static const struct attribute_group it87_group_pwm[3] = {
1365 { .attrs = it87_attributes_pwm[0] }, 1366 { .attrs = it87_attributes_pwm[0] },
1366 { .attrs = it87_attributes_pwm[1] }, 1367 { .attrs = it87_attributes_pwm[1] },
1367 { .attrs = it87_attributes_pwm[2] }, 1368 { .attrs = it87_attributes_pwm[2] },
1368 }; 1369 };
1369 1370
1370 static struct attribute *it87_attributes_autopwm[3][9+1] = { { 1371 static struct attribute *it87_attributes_autopwm[3][9+1] = { {
1371 &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr, 1372 &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1372 &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr, 1373 &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1373 &sensor_dev_attr_pwm1_auto_point3_pwm.dev_attr.attr, 1374 &sensor_dev_attr_pwm1_auto_point3_pwm.dev_attr.attr,
1374 &sensor_dev_attr_pwm1_auto_point4_pwm.dev_attr.attr, 1375 &sensor_dev_attr_pwm1_auto_point4_pwm.dev_attr.attr,
1375 &sensor_dev_attr_pwm1_auto_point1_temp.dev_attr.attr, 1376 &sensor_dev_attr_pwm1_auto_point1_temp.dev_attr.attr,
1376 &sensor_dev_attr_pwm1_auto_point1_temp_hyst.dev_attr.attr, 1377 &sensor_dev_attr_pwm1_auto_point1_temp_hyst.dev_attr.attr,
1377 &sensor_dev_attr_pwm1_auto_point2_temp.dev_attr.attr, 1378 &sensor_dev_attr_pwm1_auto_point2_temp.dev_attr.attr,
1378 &sensor_dev_attr_pwm1_auto_point3_temp.dev_attr.attr, 1379 &sensor_dev_attr_pwm1_auto_point3_temp.dev_attr.attr,
1379 &sensor_dev_attr_pwm1_auto_point4_temp.dev_attr.attr, 1380 &sensor_dev_attr_pwm1_auto_point4_temp.dev_attr.attr,
1380 NULL 1381 NULL
1381 }, { 1382 }, {
1382 &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr, 1383 &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
1383 &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr, 1384 &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
1384 &sensor_dev_attr_pwm2_auto_point3_pwm.dev_attr.attr, 1385 &sensor_dev_attr_pwm2_auto_point3_pwm.dev_attr.attr,
1385 &sensor_dev_attr_pwm2_auto_point4_pwm.dev_attr.attr, 1386 &sensor_dev_attr_pwm2_auto_point4_pwm.dev_attr.attr,
1386 &sensor_dev_attr_pwm2_auto_point1_temp.dev_attr.attr, 1387 &sensor_dev_attr_pwm2_auto_point1_temp.dev_attr.attr,
1387 &sensor_dev_attr_pwm2_auto_point1_temp_hyst.dev_attr.attr, 1388 &sensor_dev_attr_pwm2_auto_point1_temp_hyst.dev_attr.attr,
1388 &sensor_dev_attr_pwm2_auto_point2_temp.dev_attr.attr, 1389 &sensor_dev_attr_pwm2_auto_point2_temp.dev_attr.attr,
1389 &sensor_dev_attr_pwm2_auto_point3_temp.dev_attr.attr, 1390 &sensor_dev_attr_pwm2_auto_point3_temp.dev_attr.attr,
1390 &sensor_dev_attr_pwm2_auto_point4_temp.dev_attr.attr, 1391 &sensor_dev_attr_pwm2_auto_point4_temp.dev_attr.attr,
1391 NULL 1392 NULL
1392 }, { 1393 }, {
1393 &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr, 1394 &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1394 &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr, 1395 &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1395 &sensor_dev_attr_pwm3_auto_point3_pwm.dev_attr.attr, 1396 &sensor_dev_attr_pwm3_auto_point3_pwm.dev_attr.attr,
1396 &sensor_dev_attr_pwm3_auto_point4_pwm.dev_attr.attr, 1397 &sensor_dev_attr_pwm3_auto_point4_pwm.dev_attr.attr,
1397 &sensor_dev_attr_pwm3_auto_point1_temp.dev_attr.attr, 1398 &sensor_dev_attr_pwm3_auto_point1_temp.dev_attr.attr,
1398 &sensor_dev_attr_pwm3_auto_point1_temp_hyst.dev_attr.attr, 1399 &sensor_dev_attr_pwm3_auto_point1_temp_hyst.dev_attr.attr,
1399 &sensor_dev_attr_pwm3_auto_point2_temp.dev_attr.attr, 1400 &sensor_dev_attr_pwm3_auto_point2_temp.dev_attr.attr,
1400 &sensor_dev_attr_pwm3_auto_point3_temp.dev_attr.attr, 1401 &sensor_dev_attr_pwm3_auto_point3_temp.dev_attr.attr,
1401 &sensor_dev_attr_pwm3_auto_point4_temp.dev_attr.attr, 1402 &sensor_dev_attr_pwm3_auto_point4_temp.dev_attr.attr,
1402 NULL 1403 NULL
1403 } }; 1404 } };
1404 1405
1405 static const struct attribute_group it87_group_autopwm[3] = { 1406 static const struct attribute_group it87_group_autopwm[3] = {
1406 { .attrs = it87_attributes_autopwm[0] }, 1407 { .attrs = it87_attributes_autopwm[0] },
1407 { .attrs = it87_attributes_autopwm[1] }, 1408 { .attrs = it87_attributes_autopwm[1] },
1408 { .attrs = it87_attributes_autopwm[2] }, 1409 { .attrs = it87_attributes_autopwm[2] },
1409 }; 1410 };
1410 1411
1411 static struct attribute *it87_attributes_fan_beep[] = { 1412 static struct attribute *it87_attributes_fan_beep[] = {
1412 &sensor_dev_attr_fan1_beep.dev_attr.attr, 1413 &sensor_dev_attr_fan1_beep.dev_attr.attr,
1413 &sensor_dev_attr_fan2_beep.dev_attr.attr, 1414 &sensor_dev_attr_fan2_beep.dev_attr.attr,
1414 &sensor_dev_attr_fan3_beep.dev_attr.attr, 1415 &sensor_dev_attr_fan3_beep.dev_attr.attr,
1415 &sensor_dev_attr_fan4_beep.dev_attr.attr, 1416 &sensor_dev_attr_fan4_beep.dev_attr.attr,
1416 &sensor_dev_attr_fan5_beep.dev_attr.attr, 1417 &sensor_dev_attr_fan5_beep.dev_attr.attr,
1417 }; 1418 };
1418 1419
1419 static struct attribute *it87_attributes_vid[] = { 1420 static struct attribute *it87_attributes_vid[] = {
1420 &dev_attr_vrm.attr, 1421 &dev_attr_vrm.attr,
1421 &dev_attr_cpu0_vid.attr, 1422 &dev_attr_cpu0_vid.attr,
1422 NULL 1423 NULL
1423 }; 1424 };
1424 1425
1425 static const struct attribute_group it87_group_vid = { 1426 static const struct attribute_group it87_group_vid = {
1426 .attrs = it87_attributes_vid, 1427 .attrs = it87_attributes_vid,
1427 }; 1428 };
1428 1429
1429 /* SuperIO detection - will change isa_address if a chip is found */ 1430 /* SuperIO detection - will change isa_address if a chip is found */
1430 static int __init it87_find(unsigned short *address, 1431 static int __init it87_find(unsigned short *address,
1431 struct it87_sio_data *sio_data) 1432 struct it87_sio_data *sio_data)
1432 { 1433 {
1433 int err = -ENODEV; 1434 int err = -ENODEV;
1434 u16 chip_type; 1435 u16 chip_type;
1435 const char *board_vendor, *board_name; 1436 const char *board_vendor, *board_name;
1436 1437
1437 superio_enter(); 1438 superio_enter();
1438 chip_type = force_id ? force_id : superio_inw(DEVID); 1439 chip_type = force_id ? force_id : superio_inw(DEVID);
1439 1440
1440 switch (chip_type) { 1441 switch (chip_type) {
1441 case IT8705F_DEVID: 1442 case IT8705F_DEVID:
1442 sio_data->type = it87; 1443 sio_data->type = it87;
1443 break; 1444 break;
1444 case IT8712F_DEVID: 1445 case IT8712F_DEVID:
1445 sio_data->type = it8712; 1446 sio_data->type = it8712;
1446 break; 1447 break;
1447 case IT8716F_DEVID: 1448 case IT8716F_DEVID:
1448 case IT8726F_DEVID: 1449 case IT8726F_DEVID:
1449 sio_data->type = it8716; 1450 sio_data->type = it8716;
1450 break; 1451 break;
1451 case IT8718F_DEVID: 1452 case IT8718F_DEVID:
1452 sio_data->type = it8718; 1453 sio_data->type = it8718;
1453 break; 1454 break;
1454 case IT8720F_DEVID: 1455 case IT8720F_DEVID:
1455 sio_data->type = it8720; 1456 sio_data->type = it8720;
1456 break; 1457 break;
1457 case 0xffff: /* No device at all */ 1458 case 0xffff: /* No device at all */
1458 goto exit; 1459 goto exit;
1459 default: 1460 default:
1460 pr_debug(DRVNAME ": Unsupported chip (DEVID=0x%x)\n", 1461 pr_debug(DRVNAME ": Unsupported chip (DEVID=0x%x)\n",
1461 chip_type); 1462 chip_type);
1462 goto exit; 1463 goto exit;
1463 } 1464 }
1464 1465
1465 superio_select(PME); 1466 superio_select(PME);
1466 if (!(superio_inb(IT87_ACT_REG) & 0x01)) { 1467 if (!(superio_inb(IT87_ACT_REG) & 0x01)) {
1467 pr_info("it87: Device not activated, skipping\n"); 1468 pr_info("it87: Device not activated, skipping\n");
1468 goto exit; 1469 goto exit;
1469 } 1470 }
1470 1471
1471 *address = superio_inw(IT87_BASE_REG) & ~(IT87_EXTENT - 1); 1472 *address = superio_inw(IT87_BASE_REG) & ~(IT87_EXTENT - 1);
1472 if (*address == 0) { 1473 if (*address == 0) {
1473 pr_info("it87: Base address not set, skipping\n"); 1474 pr_info("it87: Base address not set, skipping\n");
1474 goto exit; 1475 goto exit;
1475 } 1476 }
1476 1477
1477 err = 0; 1478 err = 0;
1478 sio_data->revision = superio_inb(DEVREV) & 0x0f; 1479 sio_data->revision = superio_inb(DEVREV) & 0x0f;
1479 pr_info("it87: Found IT%04xF chip at 0x%x, revision %d\n", 1480 pr_info("it87: Found IT%04xF chip at 0x%x, revision %d\n",
1480 chip_type, *address, sio_data->revision); 1481 chip_type, *address, sio_data->revision);
1481 1482
1482 /* Read GPIO config and VID value from LDN 7 (GPIO) */ 1483 /* Read GPIO config and VID value from LDN 7 (GPIO) */
1483 if (sio_data->type == it87) { 1484 if (sio_data->type == it87) {
1484 /* The IT8705F doesn't have VID pins at all */ 1485 /* The IT8705F doesn't have VID pins at all */
1485 sio_data->skip_vid = 1; 1486 sio_data->skip_vid = 1;
1486 1487
1487 /* The IT8705F has a different LD number for GPIO */ 1488 /* The IT8705F has a different LD number for GPIO */
1488 superio_select(5); 1489 superio_select(5);
1489 sio_data->beep_pin = superio_inb(IT87_SIO_BEEP_PIN_REG) & 0x3f; 1490 sio_data->beep_pin = superio_inb(IT87_SIO_BEEP_PIN_REG) & 0x3f;
1490 } else { 1491 } else {
1491 int reg; 1492 int reg;
1492 1493
1493 superio_select(GPIO); 1494 superio_select(GPIO);
1494 /* We need at least 4 VID pins */ 1495 /* We need at least 4 VID pins */
1495 reg = superio_inb(IT87_SIO_GPIO3_REG); 1496 reg = superio_inb(IT87_SIO_GPIO3_REG);
1496 if (reg & 0x0f) { 1497 if (reg & 0x0f) {
1497 pr_info("it87: VID is disabled (pins used for GPIO)\n"); 1498 pr_info("it87: VID is disabled (pins used for GPIO)\n");
1498 sio_data->skip_vid = 1; 1499 sio_data->skip_vid = 1;
1499 } 1500 }
1500 1501
1501 /* Check if fan3 is there or not */ 1502 /* Check if fan3 is there or not */
1502 if (reg & (1 << 6)) 1503 if (reg & (1 << 6))
1503 sio_data->skip_pwm |= (1 << 2); 1504 sio_data->skip_pwm |= (1 << 2);
1504 if (reg & (1 << 7)) 1505 if (reg & (1 << 7))
1505 sio_data->skip_fan |= (1 << 2); 1506 sio_data->skip_fan |= (1 << 2);
1506 1507
1507 /* Check if fan2 is there or not */ 1508 /* Check if fan2 is there or not */
1508 reg = superio_inb(IT87_SIO_GPIO5_REG); 1509 reg = superio_inb(IT87_SIO_GPIO5_REG);
1509 if (reg & (1 << 1)) 1510 if (reg & (1 << 1))
1510 sio_data->skip_pwm |= (1 << 1); 1511 sio_data->skip_pwm |= (1 << 1);
1511 if (reg & (1 << 2)) 1512 if (reg & (1 << 2))
1512 sio_data->skip_fan |= (1 << 1); 1513 sio_data->skip_fan |= (1 << 1);
1513 1514
1514 if ((sio_data->type == it8718 || sio_data->type == it8720) 1515 if ((sio_data->type == it8718 || sio_data->type == it8720)
1515 && !(sio_data->skip_vid)) 1516 && !(sio_data->skip_vid))
1516 sio_data->vid_value = superio_inb(IT87_SIO_VID_REG); 1517 sio_data->vid_value = superio_inb(IT87_SIO_VID_REG);
1517 1518
1518 reg = superio_inb(IT87_SIO_PINX2_REG); 1519 reg = superio_inb(IT87_SIO_PINX2_REG);
1519 if (reg & (1 << 0)) 1520 if (reg & (1 << 0))
1520 pr_info("it87: in3 is VCC (+5V)\n"); 1521 pr_info("it87: in3 is VCC (+5V)\n");
1521 if (reg & (1 << 1)) 1522 if (reg & (1 << 1))
1522 pr_info("it87: in7 is VCCH (+5V Stand-By)\n"); 1523 pr_info("it87: in7 is VCCH (+5V Stand-By)\n");
1523 1524
1524 sio_data->beep_pin = superio_inb(IT87_SIO_BEEP_PIN_REG) & 0x3f; 1525 sio_data->beep_pin = superio_inb(IT87_SIO_BEEP_PIN_REG) & 0x3f;
1525 } 1526 }
1526 if (sio_data->beep_pin) 1527 if (sio_data->beep_pin)
1527 pr_info("it87: Beeping is supported\n"); 1528 pr_info("it87: Beeping is supported\n");
1528 1529
1529 /* Disable specific features based on DMI strings */ 1530 /* Disable specific features based on DMI strings */
1530 board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR); 1531 board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
1531 board_name = dmi_get_system_info(DMI_BOARD_NAME); 1532 board_name = dmi_get_system_info(DMI_BOARD_NAME);
1532 if (board_vendor && board_name) { 1533 if (board_vendor && board_name) {
1533 if (strcmp(board_vendor, "nVIDIA") == 0 1534 if (strcmp(board_vendor, "nVIDIA") == 0
1534 && strcmp(board_name, "FN68PT") == 0) { 1535 && strcmp(board_name, "FN68PT") == 0) {
1535 /* On the Shuttle SN68PT, FAN_CTL2 is apparently not 1536 /* On the Shuttle SN68PT, FAN_CTL2 is apparently not
1536 connected to a fan, but to something else. One user 1537 connected to a fan, but to something else. One user
1537 has reported instant system power-off when changing 1538 has reported instant system power-off when changing
1538 the PWM2 duty cycle, so we disable it. 1539 the PWM2 duty cycle, so we disable it.
1539 I use the board name string as the trigger in case 1540 I use the board name string as the trigger in case
1540 the same board is ever used in other systems. */ 1541 the same board is ever used in other systems. */
1541 pr_info("it87: Disabling pwm2 due to " 1542 pr_info("it87: Disabling pwm2 due to "
1542 "hardware constraints\n"); 1543 "hardware constraints\n");
1543 sio_data->skip_pwm = (1 << 1); 1544 sio_data->skip_pwm = (1 << 1);
1544 } 1545 }
1545 } 1546 }
1546 1547
1547 exit: 1548 exit:
1548 superio_exit(); 1549 superio_exit();
1549 return err; 1550 return err;
1550 } 1551 }
1551 1552
1552 static void it87_remove_files(struct device *dev) 1553 static void it87_remove_files(struct device *dev)
1553 { 1554 {
1554 struct it87_data *data = platform_get_drvdata(pdev); 1555 struct it87_data *data = platform_get_drvdata(pdev);
1555 struct it87_sio_data *sio_data = dev->platform_data; 1556 struct it87_sio_data *sio_data = dev->platform_data;
1556 const struct attribute_group *fan_group = it87_get_fan_group(data); 1557 const struct attribute_group *fan_group = it87_get_fan_group(data);
1557 int i; 1558 int i;
1558 1559
1559 sysfs_remove_group(&dev->kobj, &it87_group); 1560 sysfs_remove_group(&dev->kobj, &it87_group);
1560 if (sio_data->beep_pin) 1561 if (sio_data->beep_pin)
1561 sysfs_remove_group(&dev->kobj, &it87_group_beep); 1562 sysfs_remove_group(&dev->kobj, &it87_group_beep);
1562 for (i = 0; i < 5; i++) { 1563 for (i = 0; i < 5; i++) {
1563 if (!(data->has_fan & (1 << i))) 1564 if (!(data->has_fan & (1 << i)))
1564 continue; 1565 continue;
1565 sysfs_remove_group(&dev->kobj, &fan_group[i]); 1566 sysfs_remove_group(&dev->kobj, &fan_group[i]);
1566 if (sio_data->beep_pin) 1567 if (sio_data->beep_pin)
1567 sysfs_remove_file(&dev->kobj, 1568 sysfs_remove_file(&dev->kobj,
1568 it87_attributes_fan_beep[i]); 1569 it87_attributes_fan_beep[i]);
1569 } 1570 }
1570 for (i = 0; i < 3; i++) { 1571 for (i = 0; i < 3; i++) {
1571 if (sio_data->skip_pwm & (1 << 0)) 1572 if (sio_data->skip_pwm & (1 << 0))
1572 continue; 1573 continue;
1573 sysfs_remove_group(&dev->kobj, &it87_group_pwm[i]); 1574 sysfs_remove_group(&dev->kobj, &it87_group_pwm[i]);
1574 if (has_old_autopwm(data)) 1575 if (has_old_autopwm(data))
1575 sysfs_remove_group(&dev->kobj, 1576 sysfs_remove_group(&dev->kobj,
1576 &it87_group_autopwm[i]); 1577 &it87_group_autopwm[i]);
1577 } 1578 }
1578 if (!sio_data->skip_vid) 1579 if (!sio_data->skip_vid)
1579 sysfs_remove_group(&dev->kobj, &it87_group_vid); 1580 sysfs_remove_group(&dev->kobj, &it87_group_vid);
1580 } 1581 }
1581 1582
1582 static int __devinit it87_probe(struct platform_device *pdev) 1583 static int __devinit it87_probe(struct platform_device *pdev)
1583 { 1584 {
1584 struct it87_data *data; 1585 struct it87_data *data;
1585 struct resource *res; 1586 struct resource *res;
1586 struct device *dev = &pdev->dev; 1587 struct device *dev = &pdev->dev;
1587 struct it87_sio_data *sio_data = dev->platform_data; 1588 struct it87_sio_data *sio_data = dev->platform_data;
1588 const struct attribute_group *fan_group; 1589 const struct attribute_group *fan_group;
1589 int err = 0, i; 1590 int err = 0, i;
1590 int enable_pwm_interface; 1591 int enable_pwm_interface;
1591 int fan_beep_need_rw; 1592 int fan_beep_need_rw;
1592 static const char *names[] = { 1593 static const char *names[] = {
1593 "it87", 1594 "it87",
1594 "it8712", 1595 "it8712",
1595 "it8716", 1596 "it8716",
1596 "it8718", 1597 "it8718",
1597 "it8720", 1598 "it8720",
1598 }; 1599 };
1599 1600
1600 res = platform_get_resource(pdev, IORESOURCE_IO, 0); 1601 res = platform_get_resource(pdev, IORESOURCE_IO, 0);
1601 if (!request_region(res->start, IT87_EC_EXTENT, DRVNAME)) { 1602 if (!request_region(res->start, IT87_EC_EXTENT, DRVNAME)) {
1602 dev_err(dev, "Failed to request region 0x%lx-0x%lx\n", 1603 dev_err(dev, "Failed to request region 0x%lx-0x%lx\n",
1603 (unsigned long)res->start, 1604 (unsigned long)res->start,
1604 (unsigned long)(res->start + IT87_EC_EXTENT - 1)); 1605 (unsigned long)(res->start + IT87_EC_EXTENT - 1));
1605 err = -EBUSY; 1606 err = -EBUSY;
1606 goto ERROR0; 1607 goto ERROR0;
1607 } 1608 }
1608 1609
1609 data = kzalloc(sizeof(struct it87_data), GFP_KERNEL); 1610 data = kzalloc(sizeof(struct it87_data), GFP_KERNEL);
1610 if (!data) { 1611 if (!data) {
1611 err = -ENOMEM; 1612 err = -ENOMEM;
1612 goto ERROR1; 1613 goto ERROR1;
1613 } 1614 }
1614 1615
1615 data->addr = res->start; 1616 data->addr = res->start;
1616 data->type = sio_data->type; 1617 data->type = sio_data->type;
1617 data->revision = sio_data->revision; 1618 data->revision = sio_data->revision;
1618 data->name = names[sio_data->type]; 1619 data->name = names[sio_data->type];
1619 1620
1620 /* Now, we do the remaining detection. */ 1621 /* Now, we do the remaining detection. */
1621 if ((it87_read_value(data, IT87_REG_CONFIG) & 0x80) 1622 if ((it87_read_value(data, IT87_REG_CONFIG) & 0x80)
1622 || it87_read_value(data, IT87_REG_CHIPID) != 0x90) { 1623 || it87_read_value(data, IT87_REG_CHIPID) != 0x90) {
1623 err = -ENODEV; 1624 err = -ENODEV;
1624 goto ERROR2; 1625 goto ERROR2;
1625 } 1626 }
1626 1627
1627 platform_set_drvdata(pdev, data); 1628 platform_set_drvdata(pdev, data);
1628 1629
1629 mutex_init(&data->update_lock); 1630 mutex_init(&data->update_lock);
1630 1631
1631 /* Check PWM configuration */ 1632 /* Check PWM configuration */
1632 enable_pwm_interface = it87_check_pwm(dev); 1633 enable_pwm_interface = it87_check_pwm(dev);
1633 1634
1634 /* Initialize the IT87 chip */ 1635 /* Initialize the IT87 chip */
1635 it87_init_device(pdev); 1636 it87_init_device(pdev);
1636 1637
1637 /* Register sysfs hooks */ 1638 /* Register sysfs hooks */
1638 err = sysfs_create_group(&dev->kobj, &it87_group); 1639 err = sysfs_create_group(&dev->kobj, &it87_group);
1639 if (err) 1640 if (err)
1640 goto ERROR2; 1641 goto ERROR2;
1641 1642
1642 if (sio_data->beep_pin) { 1643 if (sio_data->beep_pin) {
1643 err = sysfs_create_group(&dev->kobj, &it87_group_beep); 1644 err = sysfs_create_group(&dev->kobj, &it87_group_beep);
1644 if (err) 1645 if (err)
1645 goto ERROR4; 1646 goto ERROR4;
1646 } 1647 }
1647 1648
1648 /* Do not create fan files for disabled fans */ 1649 /* Do not create fan files for disabled fans */
1649 fan_group = it87_get_fan_group(data); 1650 fan_group = it87_get_fan_group(data);
1650 fan_beep_need_rw = 1; 1651 fan_beep_need_rw = 1;
1651 for (i = 0; i < 5; i++) { 1652 for (i = 0; i < 5; i++) {
1652 if (!(data->has_fan & (1 << i))) 1653 if (!(data->has_fan & (1 << i)))
1653 continue; 1654 continue;
1654 err = sysfs_create_group(&dev->kobj, &fan_group[i]); 1655 err = sysfs_create_group(&dev->kobj, &fan_group[i]);
1655 if (err) 1656 if (err)
1656 goto ERROR4; 1657 goto ERROR4;
1657 1658
1658 if (sio_data->beep_pin) { 1659 if (sio_data->beep_pin) {
1659 err = sysfs_create_file(&dev->kobj, 1660 err = sysfs_create_file(&dev->kobj,
1660 it87_attributes_fan_beep[i]); 1661 it87_attributes_fan_beep[i]);
1661 if (err) 1662 if (err)
1662 goto ERROR4; 1663 goto ERROR4;
1663 if (!fan_beep_need_rw) 1664 if (!fan_beep_need_rw)
1664 continue; 1665 continue;
1665 1666
1666 /* As we have a single beep enable bit for all fans, 1667 /* As we have a single beep enable bit for all fans,
1667 * only the first enabled fan has a writable attribute 1668 * only the first enabled fan has a writable attribute
1668 * for it. */ 1669 * for it. */
1669 if (sysfs_chmod_file(&dev->kobj, 1670 if (sysfs_chmod_file(&dev->kobj,
1670 it87_attributes_fan_beep[i], 1671 it87_attributes_fan_beep[i],
1671 S_IRUGO | S_IWUSR)) 1672 S_IRUGO | S_IWUSR))
1672 dev_dbg(dev, "chmod +w fan%d_beep failed\n", 1673 dev_dbg(dev, "chmod +w fan%d_beep failed\n",
1673 i + 1); 1674 i + 1);
1674 fan_beep_need_rw = 0; 1675 fan_beep_need_rw = 0;
1675 } 1676 }
1676 } 1677 }
1677 1678
1678 if (enable_pwm_interface) { 1679 if (enable_pwm_interface) {
1679 for (i = 0; i < 3; i++) { 1680 for (i = 0; i < 3; i++) {
1680 if (sio_data->skip_pwm & (1 << i)) 1681 if (sio_data->skip_pwm & (1 << i))
1681 continue; 1682 continue;
1682 err = sysfs_create_group(&dev->kobj, 1683 err = sysfs_create_group(&dev->kobj,
1683 &it87_group_pwm[i]); 1684 &it87_group_pwm[i]);
1684 if (err) 1685 if (err)
1685 goto ERROR4; 1686 goto ERROR4;
1686 1687
1687 if (!has_old_autopwm(data)) 1688 if (!has_old_autopwm(data))
1688 continue; 1689 continue;
1689 err = sysfs_create_group(&dev->kobj, 1690 err = sysfs_create_group(&dev->kobj,
1690 &it87_group_autopwm[i]); 1691 &it87_group_autopwm[i]);
1691 if (err) 1692 if (err)
1692 goto ERROR4; 1693 goto ERROR4;
1693 } 1694 }
1694 } 1695 }
1695 1696
1696 if (!sio_data->skip_vid) { 1697 if (!sio_data->skip_vid) {
1697 data->vrm = vid_which_vrm(); 1698 data->vrm = vid_which_vrm();
1698 /* VID reading from Super-I/O config space if available */ 1699 /* VID reading from Super-I/O config space if available */
1699 data->vid = sio_data->vid_value; 1700 data->vid = sio_data->vid_value;
1700 err = sysfs_create_group(&dev->kobj, &it87_group_vid); 1701 err = sysfs_create_group(&dev->kobj, &it87_group_vid);
1701 if (err) 1702 if (err)
1702 goto ERROR4; 1703 goto ERROR4;
1703 } 1704 }
1704 1705
1705 data->hwmon_dev = hwmon_device_register(dev); 1706 data->hwmon_dev = hwmon_device_register(dev);
1706 if (IS_ERR(data->hwmon_dev)) { 1707 if (IS_ERR(data->hwmon_dev)) {
1707 err = PTR_ERR(data->hwmon_dev); 1708 err = PTR_ERR(data->hwmon_dev);
1708 goto ERROR4; 1709 goto ERROR4;
1709 } 1710 }
1710 1711
1711 return 0; 1712 return 0;
1712 1713
1713 ERROR4: 1714 ERROR4:
1714 it87_remove_files(dev); 1715 it87_remove_files(dev);
1715 ERROR2: 1716 ERROR2:
1716 platform_set_drvdata(pdev, NULL); 1717 platform_set_drvdata(pdev, NULL);
1717 kfree(data); 1718 kfree(data);
1718 ERROR1: 1719 ERROR1:
1719 release_region(res->start, IT87_EC_EXTENT); 1720 release_region(res->start, IT87_EC_EXTENT);
1720 ERROR0: 1721 ERROR0:
1721 return err; 1722 return err;
1722 } 1723 }
1723 1724
1724 static int __devexit it87_remove(struct platform_device *pdev) 1725 static int __devexit it87_remove(struct platform_device *pdev)
1725 { 1726 {
1726 struct it87_data *data = platform_get_drvdata(pdev); 1727 struct it87_data *data = platform_get_drvdata(pdev);
1727 1728
1728 hwmon_device_unregister(data->hwmon_dev); 1729 hwmon_device_unregister(data->hwmon_dev);
1729 it87_remove_files(&pdev->dev); 1730 it87_remove_files(&pdev->dev);
1730 1731
1731 release_region(data->addr, IT87_EC_EXTENT); 1732 release_region(data->addr, IT87_EC_EXTENT);
1732 platform_set_drvdata(pdev, NULL); 1733 platform_set_drvdata(pdev, NULL);
1733 kfree(data); 1734 kfree(data);
1734 1735
1735 return 0; 1736 return 0;
1736 } 1737 }
1737 1738
1738 /* Must be called with data->update_lock held, except during initialization. 1739 /* Must be called with data->update_lock held, except during initialization.
1739 We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks, 1740 We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks,
1740 would slow down the IT87 access and should not be necessary. */ 1741 would slow down the IT87 access and should not be necessary. */
1741 static int it87_read_value(struct it87_data *data, u8 reg) 1742 static int it87_read_value(struct it87_data *data, u8 reg)
1742 { 1743 {
1743 outb_p(reg, data->addr + IT87_ADDR_REG_OFFSET); 1744 outb_p(reg, data->addr + IT87_ADDR_REG_OFFSET);
1744 return inb_p(data->addr + IT87_DATA_REG_OFFSET); 1745 return inb_p(data->addr + IT87_DATA_REG_OFFSET);
1745 } 1746 }
1746 1747
1747 /* Must be called with data->update_lock held, except during initialization. 1748 /* Must be called with data->update_lock held, except during initialization.
1748 We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks, 1749 We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks,
1749 would slow down the IT87 access and should not be necessary. */ 1750 would slow down the IT87 access and should not be necessary. */
1750 static void it87_write_value(struct it87_data *data, u8 reg, u8 value) 1751 static void it87_write_value(struct it87_data *data, u8 reg, u8 value)
1751 { 1752 {
1752 outb_p(reg, data->addr + IT87_ADDR_REG_OFFSET); 1753 outb_p(reg, data->addr + IT87_ADDR_REG_OFFSET);
1753 outb_p(value, data->addr + IT87_DATA_REG_OFFSET); 1754 outb_p(value, data->addr + IT87_DATA_REG_OFFSET);
1754 } 1755 }
1755 1756
1756 /* Return 1 if and only if the PWM interface is safe to use */ 1757 /* Return 1 if and only if the PWM interface is safe to use */
1757 static int __devinit it87_check_pwm(struct device *dev) 1758 static int __devinit it87_check_pwm(struct device *dev)
1758 { 1759 {
1759 struct it87_data *data = dev_get_drvdata(dev); 1760 struct it87_data *data = dev_get_drvdata(dev);
1760 /* Some BIOSes fail to correctly configure the IT87 fans. All fans off 1761 /* Some BIOSes fail to correctly configure the IT87 fans. All fans off
1761 * and polarity set to active low is sign that this is the case so we 1762 * and polarity set to active low is sign that this is the case so we
1762 * disable pwm control to protect the user. */ 1763 * disable pwm control to protect the user. */
1763 int tmp = it87_read_value(data, IT87_REG_FAN_CTL); 1764 int tmp = it87_read_value(data, IT87_REG_FAN_CTL);
1764 if ((tmp & 0x87) == 0) { 1765 if ((tmp & 0x87) == 0) {
1765 if (fix_pwm_polarity) { 1766 if (fix_pwm_polarity) {
1766 /* The user asks us to attempt a chip reconfiguration. 1767 /* The user asks us to attempt a chip reconfiguration.
1767 * This means switching to active high polarity and 1768 * This means switching to active high polarity and
1768 * inverting all fan speed values. */ 1769 * inverting all fan speed values. */
1769 int i; 1770 int i;
1770 u8 pwm[3]; 1771 u8 pwm[3];
1771 1772
1772 for (i = 0; i < 3; i++) 1773 for (i = 0; i < 3; i++)
1773 pwm[i] = it87_read_value(data, 1774 pwm[i] = it87_read_value(data,
1774 IT87_REG_PWM(i)); 1775 IT87_REG_PWM(i));
1775 1776
1776 /* If any fan is in automatic pwm mode, the polarity 1777 /* If any fan is in automatic pwm mode, the polarity
1777 * might be correct, as suspicious as it seems, so we 1778 * might be correct, as suspicious as it seems, so we
1778 * better don't change anything (but still disable the 1779 * better don't change anything (but still disable the
1779 * PWM interface). */ 1780 * PWM interface). */
1780 if (!((pwm[0] | pwm[1] | pwm[2]) & 0x80)) { 1781 if (!((pwm[0] | pwm[1] | pwm[2]) & 0x80)) {
1781 dev_info(dev, "Reconfiguring PWM to " 1782 dev_info(dev, "Reconfiguring PWM to "
1782 "active high polarity\n"); 1783 "active high polarity\n");
1783 it87_write_value(data, IT87_REG_FAN_CTL, 1784 it87_write_value(data, IT87_REG_FAN_CTL,
1784 tmp | 0x87); 1785 tmp | 0x87);
1785 for (i = 0; i < 3; i++) 1786 for (i = 0; i < 3; i++)
1786 it87_write_value(data, 1787 it87_write_value(data,
1787 IT87_REG_PWM(i), 1788 IT87_REG_PWM(i),
1788 0x7f & ~pwm[i]); 1789 0x7f & ~pwm[i]);
1789 return 1; 1790 return 1;
1790 } 1791 }
1791 1792
1792 dev_info(dev, "PWM configuration is " 1793 dev_info(dev, "PWM configuration is "
1793 "too broken to be fixed\n"); 1794 "too broken to be fixed\n");
1794 } 1795 }
1795 1796
1796 dev_info(dev, "Detected broken BIOS " 1797 dev_info(dev, "Detected broken BIOS "
1797 "defaults, disabling PWM interface\n"); 1798 "defaults, disabling PWM interface\n");
1798 return 0; 1799 return 0;
1799 } else if (fix_pwm_polarity) { 1800 } else if (fix_pwm_polarity) {
1800 dev_info(dev, "PWM configuration looks " 1801 dev_info(dev, "PWM configuration looks "
1801 "sane, won't touch\n"); 1802 "sane, won't touch\n");
1802 } 1803 }
1803 1804
1804 return 1; 1805 return 1;
1805 } 1806 }
1806 1807
1807 /* Called when we have found a new IT87. */ 1808 /* Called when we have found a new IT87. */
1808 static void __devinit it87_init_device(struct platform_device *pdev) 1809 static void __devinit it87_init_device(struct platform_device *pdev)
1809 { 1810 {
1810 struct it87_sio_data *sio_data = pdev->dev.platform_data; 1811 struct it87_sio_data *sio_data = pdev->dev.platform_data;
1811 struct it87_data *data = platform_get_drvdata(pdev); 1812 struct it87_data *data = platform_get_drvdata(pdev);
1812 int tmp, i; 1813 int tmp, i;
1813 u8 mask; 1814 u8 mask;
1814 1815
1815 /* For each PWM channel: 1816 /* For each PWM channel:
1816 * - If it is in automatic mode, setting to manual mode should set 1817 * - If it is in automatic mode, setting to manual mode should set
1817 * the fan to full speed by default. 1818 * the fan to full speed by default.
1818 * - If it is in manual mode, we need a mapping to temperature 1819 * - If it is in manual mode, we need a mapping to temperature
1819 * channels to use when later setting to automatic mode later. 1820 * channels to use when later setting to automatic mode later.
1820 * Use a 1:1 mapping by default (we are clueless.) 1821 * Use a 1:1 mapping by default (we are clueless.)
1821 * In both cases, the value can (and should) be changed by the user 1822 * In both cases, the value can (and should) be changed by the user
1822 * prior to switching to a different mode. */ 1823 * prior to switching to a different mode. */
1823 for (i = 0; i < 3; i++) { 1824 for (i = 0; i < 3; i++) {
1824 data->pwm_temp_map[i] = i; 1825 data->pwm_temp_map[i] = i;
1825 data->pwm_duty[i] = 0x7f; /* Full speed */ 1826 data->pwm_duty[i] = 0x7f; /* Full speed */
1826 data->auto_pwm[i][3] = 0x7f; /* Full speed, hard-coded */ 1827 data->auto_pwm[i][3] = 0x7f; /* Full speed, hard-coded */
1827 } 1828 }
1828 1829
1829 /* Some chips seem to have default value 0xff for all limit 1830 /* Some chips seem to have default value 0xff for all limit
1830 * registers. For low voltage limits it makes no sense and triggers 1831 * registers. For low voltage limits it makes no sense and triggers
1831 * alarms, so change to 0 instead. For high temperature limits, it 1832 * alarms, so change to 0 instead. For high temperature limits, it
1832 * means -1 degree C, which surprisingly doesn't trigger an alarm, 1833 * means -1 degree C, which surprisingly doesn't trigger an alarm,
1833 * but is still confusing, so change to 127 degrees C. */ 1834 * but is still confusing, so change to 127 degrees C. */
1834 for (i = 0; i < 8; i++) { 1835 for (i = 0; i < 8; i++) {
1835 tmp = it87_read_value(data, IT87_REG_VIN_MIN(i)); 1836 tmp = it87_read_value(data, IT87_REG_VIN_MIN(i));
1836 if (tmp == 0xff) 1837 if (tmp == 0xff)
1837 it87_write_value(data, IT87_REG_VIN_MIN(i), 0); 1838 it87_write_value(data, IT87_REG_VIN_MIN(i), 0);
1838 } 1839 }
1839 for (i = 0; i < 3; i++) { 1840 for (i = 0; i < 3; i++) {
1840 tmp = it87_read_value(data, IT87_REG_TEMP_HIGH(i)); 1841 tmp = it87_read_value(data, IT87_REG_TEMP_HIGH(i));
1841 if (tmp == 0xff) 1842 if (tmp == 0xff)
1842 it87_write_value(data, IT87_REG_TEMP_HIGH(i), 127); 1843 it87_write_value(data, IT87_REG_TEMP_HIGH(i), 127);
1843 } 1844 }
1844 1845
1845 /* Temperature channels are not forcibly enabled, as they can be 1846 /* Temperature channels are not forcibly enabled, as they can be
1846 * set to two different sensor types and we can't guess which one 1847 * set to two different sensor types and we can't guess which one
1847 * is correct for a given system. These channels can be enabled at 1848 * is correct for a given system. These channels can be enabled at
1848 * run-time through the temp{1-3}_type sysfs accessors if needed. */ 1849 * run-time through the temp{1-3}_type sysfs accessors if needed. */
1849 1850
1850 /* Check if voltage monitors are reset manually or by some reason */ 1851 /* Check if voltage monitors are reset manually or by some reason */
1851 tmp = it87_read_value(data, IT87_REG_VIN_ENABLE); 1852 tmp = it87_read_value(data, IT87_REG_VIN_ENABLE);
1852 if ((tmp & 0xff) == 0) { 1853 if ((tmp & 0xff) == 0) {
1853 /* Enable all voltage monitors */ 1854 /* Enable all voltage monitors */
1854 it87_write_value(data, IT87_REG_VIN_ENABLE, 0xff); 1855 it87_write_value(data, IT87_REG_VIN_ENABLE, 0xff);
1855 } 1856 }
1856 1857
1857 /* Check if tachometers are reset manually or by some reason */ 1858 /* Check if tachometers are reset manually or by some reason */
1858 mask = 0x70 & ~(sio_data->skip_fan << 4); 1859 mask = 0x70 & ~(sio_data->skip_fan << 4);
1859 data->fan_main_ctrl = it87_read_value(data, IT87_REG_FAN_MAIN_CTRL); 1860 data->fan_main_ctrl = it87_read_value(data, IT87_REG_FAN_MAIN_CTRL);
1860 if ((data->fan_main_ctrl & mask) == 0) { 1861 if ((data->fan_main_ctrl & mask) == 0) {
1861 /* Enable all fan tachometers */ 1862 /* Enable all fan tachometers */
1862 data->fan_main_ctrl |= mask; 1863 data->fan_main_ctrl |= mask;
1863 it87_write_value(data, IT87_REG_FAN_MAIN_CTRL, 1864 it87_write_value(data, IT87_REG_FAN_MAIN_CTRL,
1864 data->fan_main_ctrl); 1865 data->fan_main_ctrl);
1865 } 1866 }
1866 data->has_fan = (data->fan_main_ctrl >> 4) & 0x07; 1867 data->has_fan = (data->fan_main_ctrl >> 4) & 0x07;
1867 1868
1868 /* Set tachometers to 16-bit mode if needed */ 1869 /* Set tachometers to 16-bit mode if needed */
1869 if (has_16bit_fans(data)) { 1870 if (has_16bit_fans(data)) {
1870 tmp = it87_read_value(data, IT87_REG_FAN_16BIT); 1871 tmp = it87_read_value(data, IT87_REG_FAN_16BIT);
1871 if (~tmp & 0x07 & data->has_fan) { 1872 if (~tmp & 0x07 & data->has_fan) {
1872 dev_dbg(&pdev->dev, 1873 dev_dbg(&pdev->dev,
1873 "Setting fan1-3 to 16-bit mode\n"); 1874 "Setting fan1-3 to 16-bit mode\n");
1874 it87_write_value(data, IT87_REG_FAN_16BIT, 1875 it87_write_value(data, IT87_REG_FAN_16BIT,
1875 tmp | 0x07); 1876 tmp | 0x07);
1876 } 1877 }
1877 /* IT8705F only supports three fans. */ 1878 /* IT8705F only supports three fans. */
1878 if (data->type != it87) { 1879 if (data->type != it87) {
1879 if (tmp & (1 << 4)) 1880 if (tmp & (1 << 4))
1880 data->has_fan |= (1 << 3); /* fan4 enabled */ 1881 data->has_fan |= (1 << 3); /* fan4 enabled */
1881 if (tmp & (1 << 5)) 1882 if (tmp & (1 << 5))
1882 data->has_fan |= (1 << 4); /* fan5 enabled */ 1883 data->has_fan |= (1 << 4); /* fan5 enabled */
1883 } 1884 }
1884 } 1885 }
1885 1886
1886 /* Fan input pins may be used for alternative functions */ 1887 /* Fan input pins may be used for alternative functions */
1887 data->has_fan &= ~sio_data->skip_fan; 1888 data->has_fan &= ~sio_data->skip_fan;
1888 1889
1889 /* Start monitoring */ 1890 /* Start monitoring */
1890 it87_write_value(data, IT87_REG_CONFIG, 1891 it87_write_value(data, IT87_REG_CONFIG,
1891 (it87_read_value(data, IT87_REG_CONFIG) & 0x36) 1892 (it87_read_value(data, IT87_REG_CONFIG) & 0x36)
1892 | (update_vbat ? 0x41 : 0x01)); 1893 | (update_vbat ? 0x41 : 0x01));
1893 } 1894 }
1894 1895
1895 static void it87_update_pwm_ctrl(struct it87_data *data, int nr) 1896 static void it87_update_pwm_ctrl(struct it87_data *data, int nr)
1896 { 1897 {
1897 data->pwm_ctrl[nr] = it87_read_value(data, IT87_REG_PWM(nr)); 1898 data->pwm_ctrl[nr] = it87_read_value(data, IT87_REG_PWM(nr));
1898 if (data->pwm_ctrl[nr] & 0x80) /* Automatic mode */ 1899 if (data->pwm_ctrl[nr] & 0x80) /* Automatic mode */
1899 data->pwm_temp_map[nr] = data->pwm_ctrl[nr] & 0x03; 1900 data->pwm_temp_map[nr] = data->pwm_ctrl[nr] & 0x03;
1900 else /* Manual mode */ 1901 else /* Manual mode */
1901 data->pwm_duty[nr] = data->pwm_ctrl[nr] & 0x7f; 1902 data->pwm_duty[nr] = data->pwm_ctrl[nr] & 0x7f;
1902 1903
1903 if (has_old_autopwm(data)) { 1904 if (has_old_autopwm(data)) {
1904 int i; 1905 int i;
1905 1906
1906 for (i = 0; i < 5 ; i++) 1907 for (i = 0; i < 5 ; i++)
1907 data->auto_temp[nr][i] = it87_read_value(data, 1908 data->auto_temp[nr][i] = it87_read_value(data,
1908 IT87_REG_AUTO_TEMP(nr, i)); 1909 IT87_REG_AUTO_TEMP(nr, i));
1909 for (i = 0; i < 3 ; i++) 1910 for (i = 0; i < 3 ; i++)
1910 data->auto_pwm[nr][i] = it87_read_value(data, 1911 data->auto_pwm[nr][i] = it87_read_value(data,
1911 IT87_REG_AUTO_PWM(nr, i)); 1912 IT87_REG_AUTO_PWM(nr, i));
1912 } 1913 }
1913 } 1914 }
1914 1915
1915 static struct it87_data *it87_update_device(struct device *dev) 1916 static struct it87_data *it87_update_device(struct device *dev)
1916 { 1917 {
1917 struct it87_data *data = dev_get_drvdata(dev); 1918 struct it87_data *data = dev_get_drvdata(dev);
1918 int i; 1919 int i;
1919 1920
1920 mutex_lock(&data->update_lock); 1921 mutex_lock(&data->update_lock);
1921 1922
1922 if (time_after(jiffies, data->last_updated + HZ + HZ / 2) 1923 if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
1923 || !data->valid) { 1924 || !data->valid) {
1924 if (update_vbat) { 1925 if (update_vbat) {
1925 /* Cleared after each update, so reenable. Value 1926 /* Cleared after each update, so reenable. Value
1926 returned by this read will be previous value */ 1927 returned by this read will be previous value */
1927 it87_write_value(data, IT87_REG_CONFIG, 1928 it87_write_value(data, IT87_REG_CONFIG,
1928 it87_read_value(data, IT87_REG_CONFIG) | 0x40); 1929 it87_read_value(data, IT87_REG_CONFIG) | 0x40);
1929 } 1930 }
1930 for (i = 0; i <= 7; i++) { 1931 for (i = 0; i <= 7; i++) {
1931 data->in[i] = 1932 data->in[i] =
1932 it87_read_value(data, IT87_REG_VIN(i)); 1933 it87_read_value(data, IT87_REG_VIN(i));
1933 data->in_min[i] = 1934 data->in_min[i] =
1934 it87_read_value(data, IT87_REG_VIN_MIN(i)); 1935 it87_read_value(data, IT87_REG_VIN_MIN(i));
1935 data->in_max[i] = 1936 data->in_max[i] =
1936 it87_read_value(data, IT87_REG_VIN_MAX(i)); 1937 it87_read_value(data, IT87_REG_VIN_MAX(i));
1937 } 1938 }
1938 /* in8 (battery) has no limit registers */ 1939 /* in8 (battery) has no limit registers */
1939 data->in[8] = it87_read_value(data, IT87_REG_VIN(8)); 1940 data->in[8] = it87_read_value(data, IT87_REG_VIN(8));
1940 1941
1941 for (i = 0; i < 5; i++) { 1942 for (i = 0; i < 5; i++) {
1942 /* Skip disabled fans */ 1943 /* Skip disabled fans */
1943 if (!(data->has_fan & (1 << i))) 1944 if (!(data->has_fan & (1 << i)))
1944 continue; 1945 continue;
1945 1946
1946 data->fan_min[i] = 1947 data->fan_min[i] =
1947 it87_read_value(data, IT87_REG_FAN_MIN[i]); 1948 it87_read_value(data, IT87_REG_FAN_MIN[i]);
1948 data->fan[i] = it87_read_value(data, 1949 data->fan[i] = it87_read_value(data,
1949 IT87_REG_FAN[i]); 1950 IT87_REG_FAN[i]);
1950 /* Add high byte if in 16-bit mode */ 1951 /* Add high byte if in 16-bit mode */
1951 if (has_16bit_fans(data)) { 1952 if (has_16bit_fans(data)) {
1952 data->fan[i] |= it87_read_value(data, 1953 data->fan[i] |= it87_read_value(data,
1953 IT87_REG_FANX[i]) << 8; 1954 IT87_REG_FANX[i]) << 8;
1954 data->fan_min[i] |= it87_read_value(data, 1955 data->fan_min[i] |= it87_read_value(data,
1955 IT87_REG_FANX_MIN[i]) << 8; 1956 IT87_REG_FANX_MIN[i]) << 8;
1956 } 1957 }
1957 } 1958 }
1958 for (i = 0; i < 3; i++) { 1959 for (i = 0; i < 3; i++) {
1959 data->temp[i] = 1960 data->temp[i] =
1960 it87_read_value(data, IT87_REG_TEMP(i)); 1961 it87_read_value(data, IT87_REG_TEMP(i));
1961 data->temp_high[i] = 1962 data->temp_high[i] =
1962 it87_read_value(data, IT87_REG_TEMP_HIGH(i)); 1963 it87_read_value(data, IT87_REG_TEMP_HIGH(i));
1963 data->temp_low[i] = 1964 data->temp_low[i] =
1964 it87_read_value(data, IT87_REG_TEMP_LOW(i)); 1965 it87_read_value(data, IT87_REG_TEMP_LOW(i));
1965 } 1966 }
1966 1967
1967 /* Newer chips don't have clock dividers */ 1968 /* Newer chips don't have clock dividers */
1968 if ((data->has_fan & 0x07) && !has_16bit_fans(data)) { 1969 if ((data->has_fan & 0x07) && !has_16bit_fans(data)) {
1969 i = it87_read_value(data, IT87_REG_FAN_DIV); 1970 i = it87_read_value(data, IT87_REG_FAN_DIV);
1970 data->fan_div[0] = i & 0x07; 1971 data->fan_div[0] = i & 0x07;
1971 data->fan_div[1] = (i >> 3) & 0x07; 1972 data->fan_div[1] = (i >> 3) & 0x07;
1972 data->fan_div[2] = (i & 0x40) ? 3 : 1; 1973 data->fan_div[2] = (i & 0x40) ? 3 : 1;
1973 } 1974 }
1974 1975
1975 data->alarms = 1976 data->alarms =
1976 it87_read_value(data, IT87_REG_ALARM1) | 1977 it87_read_value(data, IT87_REG_ALARM1) |
1977 (it87_read_value(data, IT87_REG_ALARM2) << 8) | 1978 (it87_read_value(data, IT87_REG_ALARM2) << 8) |
1978 (it87_read_value(data, IT87_REG_ALARM3) << 16); 1979 (it87_read_value(data, IT87_REG_ALARM3) << 16);
1979 data->beeps = it87_read_value(data, IT87_REG_BEEP_ENABLE); 1980 data->beeps = it87_read_value(data, IT87_REG_BEEP_ENABLE);
1980 1981
1981 data->fan_main_ctrl = it87_read_value(data, 1982 data->fan_main_ctrl = it87_read_value(data,
1982 IT87_REG_FAN_MAIN_CTRL); 1983 IT87_REG_FAN_MAIN_CTRL);
1983 data->fan_ctl = it87_read_value(data, IT87_REG_FAN_CTL); 1984 data->fan_ctl = it87_read_value(data, IT87_REG_FAN_CTL);
1984 for (i = 0; i < 3; i++) 1985 for (i = 0; i < 3; i++)
1985 it87_update_pwm_ctrl(data, i); 1986 it87_update_pwm_ctrl(data, i);
1986 1987
1987 data->sensor = it87_read_value(data, IT87_REG_TEMP_ENABLE); 1988 data->sensor = it87_read_value(data, IT87_REG_TEMP_ENABLE);
1988 /* The 8705 does not have VID capability. 1989 /* The 8705 does not have VID capability.
1989 The 8718 and the 8720 don't use IT87_REG_VID for the 1990 The 8718 and the 8720 don't use IT87_REG_VID for the
1990 same purpose. */ 1991 same purpose. */
1991 if (data->type == it8712 || data->type == it8716) { 1992 if (data->type == it8712 || data->type == it8716) {
1992 data->vid = it87_read_value(data, IT87_REG_VID); 1993 data->vid = it87_read_value(data, IT87_REG_VID);
1993 /* The older IT8712F revisions had only 5 VID pins, 1994 /* The older IT8712F revisions had only 5 VID pins,
1994 but we assume it is always safe to read 6 bits. */ 1995 but we assume it is always safe to read 6 bits. */
1995 data->vid &= 0x3f; 1996 data->vid &= 0x3f;
1996 } 1997 }
1997 data->last_updated = jiffies; 1998 data->last_updated = jiffies;
1998 data->valid = 1; 1999 data->valid = 1;
1999 } 2000 }
2000 2001
2001 mutex_unlock(&data->update_lock); 2002 mutex_unlock(&data->update_lock);
2002 2003
2003 return data; 2004 return data;
2004 } 2005 }
2005 2006
2006 static int __init it87_device_add(unsigned short address, 2007 static int __init it87_device_add(unsigned short address,
2007 const struct it87_sio_data *sio_data) 2008 const struct it87_sio_data *sio_data)
2008 { 2009 {
2009 struct resource res = { 2010 struct resource res = {
2010 .start = address + IT87_EC_OFFSET, 2011 .start = address + IT87_EC_OFFSET,
2011 .end = address + IT87_EC_OFFSET + IT87_EC_EXTENT - 1, 2012 .end = address + IT87_EC_OFFSET + IT87_EC_EXTENT - 1,
2012 .name = DRVNAME, 2013 .name = DRVNAME,
2013 .flags = IORESOURCE_IO, 2014 .flags = IORESOURCE_IO,
2014 }; 2015 };
2015 int err; 2016 int err;
2016 2017
2017 err = acpi_check_resource_conflict(&res); 2018 err = acpi_check_resource_conflict(&res);
2018 if (err) 2019 if (err)
2019 goto exit; 2020 goto exit;
2020 2021
2021 pdev = platform_device_alloc(DRVNAME, address); 2022 pdev = platform_device_alloc(DRVNAME, address);
2022 if (!pdev) { 2023 if (!pdev) {
2023 err = -ENOMEM; 2024 err = -ENOMEM;
2024 printk(KERN_ERR DRVNAME ": Device allocation failed\n"); 2025 printk(KERN_ERR DRVNAME ": Device allocation failed\n");
2025 goto exit; 2026 goto exit;
2026 } 2027 }
2027 2028
2028 err = platform_device_add_resources(pdev, &res, 1); 2029 err = platform_device_add_resources(pdev, &res, 1);
2029 if (err) { 2030 if (err) {
2030 printk(KERN_ERR DRVNAME ": Device resource addition failed " 2031 printk(KERN_ERR DRVNAME ": Device resource addition failed "
2031 "(%d)\n", err); 2032 "(%d)\n", err);
2032 goto exit_device_put; 2033 goto exit_device_put;
2033 } 2034 }
2034 2035
2035 err = platform_device_add_data(pdev, sio_data, 2036 err = platform_device_add_data(pdev, sio_data,
2036 sizeof(struct it87_sio_data)); 2037 sizeof(struct it87_sio_data));
2037 if (err) { 2038 if (err) {
2038 printk(KERN_ERR DRVNAME ": Platform data allocation failed\n"); 2039 printk(KERN_ERR DRVNAME ": Platform data allocation failed\n");
2039 goto exit_device_put; 2040 goto exit_device_put;
2040 } 2041 }
2041 2042
2042 err = platform_device_add(pdev); 2043 err = platform_device_add(pdev);
2043 if (err) { 2044 if (err) {
2044 printk(KERN_ERR DRVNAME ": Device addition failed (%d)\n", 2045 printk(KERN_ERR DRVNAME ": Device addition failed (%d)\n",
2045 err); 2046 err);
2046 goto exit_device_put; 2047 goto exit_device_put;
2047 } 2048 }
2048 2049
2049 return 0; 2050 return 0;
2050 2051
2051 exit_device_put: 2052 exit_device_put:
2052 platform_device_put(pdev); 2053 platform_device_put(pdev);
2053 exit: 2054 exit:
2054 return err; 2055 return err;
2055 } 2056 }
2056 2057
2057 static int __init sm_it87_init(void) 2058 static int __init sm_it87_init(void)
2058 { 2059 {
2059 int err; 2060 int err;
2060 unsigned short isa_address = 0; 2061 unsigned short isa_address = 0;
2061 struct it87_sio_data sio_data; 2062 struct it87_sio_data sio_data;
2062 2063
2063 memset(&sio_data, 0, sizeof(struct it87_sio_data)); 2064 memset(&sio_data, 0, sizeof(struct it87_sio_data));
2064 err = it87_find(&isa_address, &sio_data); 2065 err = it87_find(&isa_address, &sio_data);
2065 if (err) 2066 if (err)
2066 return err; 2067 return err;
2067 err = platform_driver_register(&it87_driver); 2068 err = platform_driver_register(&it87_driver);
2068 if (err) 2069 if (err)
2069 return err; 2070 return err;
2070 2071
2071 err = it87_device_add(isa_address, &sio_data); 2072 err = it87_device_add(isa_address, &sio_data);
2072 if (err) { 2073 if (err) {
2073 platform_driver_unregister(&it87_driver); 2074 platform_driver_unregister(&it87_driver);
2074 return err; 2075 return err;
2075 } 2076 }
2076 2077
2077 return 0; 2078 return 0;
2078 } 2079 }
2079 2080
2080 static void __exit sm_it87_exit(void) 2081 static void __exit sm_it87_exit(void)
2081 { 2082 {
2082 platform_device_unregister(pdev); 2083 platform_device_unregister(pdev);
2083 platform_driver_unregister(&it87_driver); 2084 platform_driver_unregister(&it87_driver);
2084 } 2085 }
2085 2086
2086 2087
2087 MODULE_AUTHOR("Chris Gauthron, " 2088 MODULE_AUTHOR("Chris Gauthron, "
2088 "Jean Delvare <khali@linux-fr.org>"); 2089 "Jean Delvare <khali@linux-fr.org>");
2089 MODULE_DESCRIPTION("IT8705F/8712F/8716F/8718F/8720F/8726F, SiS950 driver"); 2090 MODULE_DESCRIPTION("IT8705F/8712F/8716F/8718F/8720F/8726F, SiS950 driver");
2090 module_param(update_vbat, bool, 0); 2091 module_param(update_vbat, bool, 0);
2091 MODULE_PARM_DESC(update_vbat, "Update vbat if set else return powerup value"); 2092 MODULE_PARM_DESC(update_vbat, "Update vbat if set else return powerup value");
2092 module_param(fix_pwm_polarity, bool, 0); 2093 module_param(fix_pwm_polarity, bool, 0);
2093 MODULE_PARM_DESC(fix_pwm_polarity, 2094 MODULE_PARM_DESC(fix_pwm_polarity,
2094 "Force PWM polarity to active high (DANGEROUS)"); 2095 "Force PWM polarity to active high (DANGEROUS)");
2095 MODULE_LICENSE("GPL"); 2096 MODULE_LICENSE("GPL");
2096 2097
2097 module_init(sm_it87_init); 2098 module_init(sm_it87_init);
2098 module_exit(sm_it87_exit); 2099 module_exit(sm_it87_exit);
2099 2100