Loading...
1/*
2 w83793.c - Linux kernel driver for hardware monitoring
3 Copyright (C) 2006 Winbond Electronics Corp.
4 Yuan Mu
5 Rudolf Marek <r.marek@assembler.cz>
6 Copyright (C) 2009-2010 Sven Anders <anders@anduras.de>, ANDURAS AG.
7 Watchdog driver part
8 (Based partially on fschmd driver,
9 Copyright 2007-2008 by Hans de Goede)
10
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation - version 2.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 02110-1301 USA.
24*/
25
26/*
27 Supports following chips:
28
29 Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA
30 w83793 10 12 8 6 0x7b 0x5ca3 yes no
31*/
32
33#include <linux/module.h>
34#include <linux/init.h>
35#include <linux/slab.h>
36#include <linux/i2c.h>
37#include <linux/hwmon.h>
38#include <linux/hwmon-vid.h>
39#include <linux/hwmon-sysfs.h>
40#include <linux/err.h>
41#include <linux/mutex.h>
42#include <linux/fs.h>
43#include <linux/watchdog.h>
44#include <linux/miscdevice.h>
45#include <linux/uaccess.h>
46#include <linux/kref.h>
47#include <linux/notifier.h>
48#include <linux/reboot.h>
49
50/* Default values */
51#define WATCHDOG_TIMEOUT 2 /* 2 minute default timeout */
52
53/* Addresses to scan */
54static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
55 I2C_CLIENT_END };
56
57/* Insmod parameters */
58
59static unsigned short force_subclients[4];
60module_param_array(force_subclients, short, NULL, 0);
61MODULE_PARM_DESC(force_subclients, "List of subclient addresses: "
62 "{bus, clientaddr, subclientaddr1, subclientaddr2}");
63
64static int reset;
65module_param(reset, bool, 0);
66MODULE_PARM_DESC(reset, "Set to 1 to reset chip, not recommended");
67
68static int timeout = WATCHDOG_TIMEOUT; /* default timeout in minutes */
69module_param(timeout, int, 0);
70MODULE_PARM_DESC(timeout,
71 "Watchdog timeout in minutes. 2<= timeout <=255 (default="
72 __MODULE_STRING(WATCHDOG_TIMEOUT) ")");
73
74static int nowayout = WATCHDOG_NOWAYOUT;
75module_param(nowayout, int, 0);
76MODULE_PARM_DESC(nowayout,
77 "Watchdog cannot be stopped once started (default="
78 __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
79
80/*
81 Address 0x00, 0x0d, 0x0e, 0x0f in all three banks are reserved
82 as ID, Bank Select registers
83*/
84#define W83793_REG_BANKSEL 0x00
85#define W83793_REG_VENDORID 0x0d
86#define W83793_REG_CHIPID 0x0e
87#define W83793_REG_DEVICEID 0x0f
88
89#define W83793_REG_CONFIG 0x40
90#define W83793_REG_MFC 0x58
91#define W83793_REG_FANIN_CTRL 0x5c
92#define W83793_REG_FANIN_SEL 0x5d
93#define W83793_REG_I2C_ADDR 0x0b
94#define W83793_REG_I2C_SUBADDR 0x0c
95#define W83793_REG_VID_INA 0x05
96#define W83793_REG_VID_INB 0x06
97#define W83793_REG_VID_LATCHA 0x07
98#define W83793_REG_VID_LATCHB 0x08
99#define W83793_REG_VID_CTRL 0x59
100
101#define W83793_REG_WDT_LOCK 0x01
102#define W83793_REG_WDT_ENABLE 0x02
103#define W83793_REG_WDT_STATUS 0x03
104#define W83793_REG_WDT_TIMEOUT 0x04
105
106static u16 W83793_REG_TEMP_MODE[2] = { 0x5e, 0x5f };
107
108#define TEMP_READ 0
109#define TEMP_CRIT 1
110#define TEMP_CRIT_HYST 2
111#define TEMP_WARN 3
112#define TEMP_WARN_HYST 4
113/* only crit and crit_hyst affect real-time alarm status
114 current crit crit_hyst warn warn_hyst */
115static u16 W83793_REG_TEMP[][5] = {
116 {0x1c, 0x78, 0x79, 0x7a, 0x7b},
117 {0x1d, 0x7c, 0x7d, 0x7e, 0x7f},
118 {0x1e, 0x80, 0x81, 0x82, 0x83},
119 {0x1f, 0x84, 0x85, 0x86, 0x87},
120 {0x20, 0x88, 0x89, 0x8a, 0x8b},
121 {0x21, 0x8c, 0x8d, 0x8e, 0x8f},
122};
123
124#define W83793_REG_TEMP_LOW_BITS 0x22
125
126#define W83793_REG_BEEP(index) (0x53 + (index))
127#define W83793_REG_ALARM(index) (0x4b + (index))
128
129#define W83793_REG_CLR_CHASSIS 0x4a /* SMI MASK4 */
130#define W83793_REG_IRQ_CTRL 0x50
131#define W83793_REG_OVT_CTRL 0x51
132#define W83793_REG_OVT_BEEP 0x52
133
134#define IN_READ 0
135#define IN_MAX 1
136#define IN_LOW 2
137static const u16 W83793_REG_IN[][3] = {
138 /* Current, High, Low */
139 {0x10, 0x60, 0x61}, /* Vcore A */
140 {0x11, 0x62, 0x63}, /* Vcore B */
141 {0x12, 0x64, 0x65}, /* Vtt */
142 {0x14, 0x6a, 0x6b}, /* VSEN1 */
143 {0x15, 0x6c, 0x6d}, /* VSEN2 */
144 {0x16, 0x6e, 0x6f}, /* +3VSEN */
145 {0x17, 0x70, 0x71}, /* +12VSEN */
146 {0x18, 0x72, 0x73}, /* 5VDD */
147 {0x19, 0x74, 0x75}, /* 5VSB */
148 {0x1a, 0x76, 0x77}, /* VBAT */
149};
150
151/* Low Bits of Vcore A/B Vtt Read/High/Low */
152static const u16 W83793_REG_IN_LOW_BITS[] = { 0x1b, 0x68, 0x69 };
153static u8 scale_in[] = { 2, 2, 2, 16, 16, 16, 8, 24, 24, 16 };
154static u8 scale_in_add[] = { 0, 0, 0, 0, 0, 0, 0, 150, 150, 0 };
155
156#define W83793_REG_FAN(index) (0x23 + 2 * (index)) /* High byte */
157#define W83793_REG_FAN_MIN(index) (0x90 + 2 * (index)) /* High byte */
158
159#define W83793_REG_PWM_DEFAULT 0xb2
160#define W83793_REG_PWM_ENABLE 0x207
161#define W83793_REG_PWM_UPTIME 0xc3 /* Unit in 0.1 second */
162#define W83793_REG_PWM_DOWNTIME 0xc4 /* Unit in 0.1 second */
163#define W83793_REG_TEMP_CRITICAL 0xc5
164
165#define PWM_DUTY 0
166#define PWM_START 1
167#define PWM_NONSTOP 2
168#define PWM_STOP_TIME 3
169#define W83793_REG_PWM(index, nr) (((nr) == 0 ? 0xb3 : \
170 (nr) == 1 ? 0x220 : 0x218) + (index))
171
172/* bit field, fan1 is bit0, fan2 is bit1 ... */
173#define W83793_REG_TEMP_FAN_MAP(index) (0x201 + (index))
174#define W83793_REG_TEMP_TOL(index) (0x208 + (index))
175#define W83793_REG_TEMP_CRUISE(index) (0x210 + (index))
176#define W83793_REG_PWM_STOP_TIME(index) (0x228 + (index))
177#define W83793_REG_SF2_TEMP(index, nr) (0x230 + ((index) << 4) + (nr))
178#define W83793_REG_SF2_PWM(index, nr) (0x238 + ((index) << 4) + (nr))
179
180static inline unsigned long FAN_FROM_REG(u16 val)
181{
182 if ((val >= 0xfff) || (val == 0))
183 return 0;
184 return (1350000UL / val);
185}
186
187static inline u16 FAN_TO_REG(long rpm)
188{
189 if (rpm <= 0)
190 return 0x0fff;
191 return SENSORS_LIMIT((1350000 + (rpm >> 1)) / rpm, 1, 0xffe);
192}
193
194static inline unsigned long TIME_FROM_REG(u8 reg)
195{
196 return (reg * 100);
197}
198
199static inline u8 TIME_TO_REG(unsigned long val)
200{
201 return SENSORS_LIMIT((val + 50) / 100, 0, 0xff);
202}
203
204static inline long TEMP_FROM_REG(s8 reg)
205{
206 return (reg * 1000);
207}
208
209static inline s8 TEMP_TO_REG(long val, s8 min, s8 max)
210{
211 return SENSORS_LIMIT((val + (val < 0 ? -500 : 500)) / 1000, min, max);
212}
213
214struct w83793_data {
215 struct i2c_client *lm75[2];
216 struct device *hwmon_dev;
217 struct mutex update_lock;
218 char valid; /* !=0 if following fields are valid */
219 unsigned long last_updated; /* In jiffies */
220 unsigned long last_nonvolatile; /* In jiffies, last time we update the
221 nonvolatile registers */
222
223 u8 bank;
224 u8 vrm;
225 u8 vid[2];
226 u8 in[10][3]; /* Register value, read/high/low */
227 u8 in_low_bits[3]; /* Additional resolution for VCore A/B Vtt */
228
229 u16 has_fan; /* Only fan1- fan5 has own pins */
230 u16 fan[12]; /* Register value combine */
231 u16 fan_min[12]; /* Register value combine */
232
233 s8 temp[6][5]; /* current, crit, crit_hyst,warn, warn_hyst */
234 u8 temp_low_bits; /* Additional resolution TD1-TD4 */
235 u8 temp_mode[2]; /* byte 0: Temp D1-D4 mode each has 2 bits
236 byte 1: Temp R1,R2 mode, each has 1 bit */
237 u8 temp_critical; /* If reached all fan will be at full speed */
238 u8 temp_fan_map[6]; /* Temp controls which pwm fan, bit field */
239
240 u8 has_pwm;
241 u8 has_temp;
242 u8 has_vid;
243 u8 pwm_enable; /* Register value, each Temp has 1 bit */
244 u8 pwm_uptime; /* Register value */
245 u8 pwm_downtime; /* Register value */
246 u8 pwm_default; /* All fan default pwm, next poweron valid */
247 u8 pwm[8][3]; /* Register value */
248 u8 pwm_stop_time[8];
249 u8 temp_cruise[6];
250
251 u8 alarms[5]; /* realtime status registers */
252 u8 beeps[5];
253 u8 beep_enable;
254 u8 tolerance[3]; /* Temp tolerance(Smart Fan I/II) */
255 u8 sf2_pwm[6][7]; /* Smart FanII: Fan duty cycle */
256 u8 sf2_temp[6][7]; /* Smart FanII: Temp level point */
257
258 /* watchdog */
259 struct i2c_client *client;
260 struct mutex watchdog_lock;
261 struct list_head list; /* member of the watchdog_data_list */
262 struct kref kref;
263 struct miscdevice watchdog_miscdev;
264 unsigned long watchdog_is_open;
265 char watchdog_expect_close;
266 char watchdog_name[10]; /* must be unique to avoid sysfs conflict */
267 unsigned int watchdog_caused_reboot;
268 int watchdog_timeout; /* watchdog timeout in minutes */
269};
270
271/* Somewhat ugly :( global data pointer list with all devices, so that
272 we can find our device data as when using misc_register. There is no
273 other method to get to one's device data from the open file-op and
274 for usage in the reboot notifier callback. */
275static LIST_HEAD(watchdog_data_list);
276
277/* Note this lock not only protect list access, but also data.kref access */
278static DEFINE_MUTEX(watchdog_data_mutex);
279
280/* Release our data struct when we're detached from the i2c client *and* all
281 references to our watchdog device are released */
282static void w83793_release_resources(struct kref *ref)
283{
284 struct w83793_data *data = container_of(ref, struct w83793_data, kref);
285 kfree(data);
286}
287
288static u8 w83793_read_value(struct i2c_client *client, u16 reg);
289static int w83793_write_value(struct i2c_client *client, u16 reg, u8 value);
290static int w83793_probe(struct i2c_client *client,
291 const struct i2c_device_id *id);
292static int w83793_detect(struct i2c_client *client,
293 struct i2c_board_info *info);
294static int w83793_remove(struct i2c_client *client);
295static void w83793_init_client(struct i2c_client *client);
296static void w83793_update_nonvolatile(struct device *dev);
297static struct w83793_data *w83793_update_device(struct device *dev);
298
299static const struct i2c_device_id w83793_id[] = {
300 { "w83793", 0 },
301 { }
302};
303MODULE_DEVICE_TABLE(i2c, w83793_id);
304
305static struct i2c_driver w83793_driver = {
306 .class = I2C_CLASS_HWMON,
307 .driver = {
308 .name = "w83793",
309 },
310 .probe = w83793_probe,
311 .remove = w83793_remove,
312 .id_table = w83793_id,
313 .detect = w83793_detect,
314 .address_list = normal_i2c,
315};
316
317static ssize_t
318show_vrm(struct device *dev, struct device_attribute *attr, char *buf)
319{
320 struct w83793_data *data = dev_get_drvdata(dev);
321 return sprintf(buf, "%d\n", data->vrm);
322}
323
324static ssize_t
325show_vid(struct device *dev, struct device_attribute *attr, char *buf)
326{
327 struct w83793_data *data = w83793_update_device(dev);
328 struct sensor_device_attribute_2 *sensor_attr =
329 to_sensor_dev_attr_2(attr);
330 int index = sensor_attr->index;
331
332 return sprintf(buf, "%d\n", vid_from_reg(data->vid[index], data->vrm));
333}
334
335static ssize_t
336store_vrm(struct device *dev, struct device_attribute *attr,
337 const char *buf, size_t count)
338{
339 struct w83793_data *data = dev_get_drvdata(dev);
340 data->vrm = simple_strtoul(buf, NULL, 10);
341 return count;
342}
343
344#define ALARM_STATUS 0
345#define BEEP_ENABLE 1
346static ssize_t
347show_alarm_beep(struct device *dev, struct device_attribute *attr, char *buf)
348{
349 struct w83793_data *data = w83793_update_device(dev);
350 struct sensor_device_attribute_2 *sensor_attr =
351 to_sensor_dev_attr_2(attr);
352 int nr = sensor_attr->nr;
353 int index = sensor_attr->index >> 3;
354 int bit = sensor_attr->index & 0x07;
355 u8 val;
356
357 if (ALARM_STATUS == nr) {
358 val = (data->alarms[index] >> (bit)) & 1;
359 } else { /* BEEP_ENABLE */
360 val = (data->beeps[index] >> (bit)) & 1;
361 }
362
363 return sprintf(buf, "%u\n", val);
364}
365
366static ssize_t
367store_beep(struct device *dev, struct device_attribute *attr,
368 const char *buf, size_t count)
369{
370 struct i2c_client *client = to_i2c_client(dev);
371 struct w83793_data *data = i2c_get_clientdata(client);
372 struct sensor_device_attribute_2 *sensor_attr =
373 to_sensor_dev_attr_2(attr);
374 int index = sensor_attr->index >> 3;
375 int shift = sensor_attr->index & 0x07;
376 u8 beep_bit = 1 << shift;
377 u8 val;
378
379 val = simple_strtoul(buf, NULL, 10);
380 if (val != 0 && val != 1)
381 return -EINVAL;
382
383 mutex_lock(&data->update_lock);
384 data->beeps[index] = w83793_read_value(client, W83793_REG_BEEP(index));
385 data->beeps[index] &= ~beep_bit;
386 data->beeps[index] |= val << shift;
387 w83793_write_value(client, W83793_REG_BEEP(index), data->beeps[index]);
388 mutex_unlock(&data->update_lock);
389
390 return count;
391}
392
393static ssize_t
394show_beep_enable(struct device *dev, struct device_attribute *attr, char *buf)
395{
396 struct w83793_data *data = w83793_update_device(dev);
397 return sprintf(buf, "%u\n", (data->beep_enable >> 1) & 0x01);
398}
399
400static ssize_t
401store_beep_enable(struct device *dev, struct device_attribute *attr,
402 const char *buf, size_t count)
403{
404 struct i2c_client *client = to_i2c_client(dev);
405 struct w83793_data *data = i2c_get_clientdata(client);
406 u8 val = simple_strtoul(buf, NULL, 10);
407
408 if (val != 0 && val != 1)
409 return -EINVAL;
410
411 mutex_lock(&data->update_lock);
412 data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP)
413 & 0xfd;
414 data->beep_enable |= val << 1;
415 w83793_write_value(client, W83793_REG_OVT_BEEP, data->beep_enable);
416 mutex_unlock(&data->update_lock);
417
418 return count;
419}
420
421/* Write any value to clear chassis alarm */
422static ssize_t
423store_chassis_clear_legacy(struct device *dev,
424 struct device_attribute *attr, const char *buf,
425 size_t count)
426{
427 struct i2c_client *client = to_i2c_client(dev);
428 struct w83793_data *data = i2c_get_clientdata(client);
429 u8 val;
430
431 dev_warn(dev, "Attribute chassis is deprecated, "
432 "use intrusion0_alarm instead\n");
433
434 mutex_lock(&data->update_lock);
435 val = w83793_read_value(client, W83793_REG_CLR_CHASSIS);
436 val |= 0x80;
437 w83793_write_value(client, W83793_REG_CLR_CHASSIS, val);
438 mutex_unlock(&data->update_lock);
439 return count;
440}
441
442/* Write 0 to clear chassis alarm */
443static ssize_t
444store_chassis_clear(struct device *dev,
445 struct device_attribute *attr, const char *buf,
446 size_t count)
447{
448 struct i2c_client *client = to_i2c_client(dev);
449 struct w83793_data *data = i2c_get_clientdata(client);
450 unsigned long val;
451 u8 reg;
452
453 if (strict_strtoul(buf, 10, &val) || val != 0)
454 return -EINVAL;
455
456 mutex_lock(&data->update_lock);
457 reg = w83793_read_value(client, W83793_REG_CLR_CHASSIS);
458 w83793_write_value(client, W83793_REG_CLR_CHASSIS, reg | 0x80);
459 data->valid = 0; /* Force cache refresh */
460 mutex_unlock(&data->update_lock);
461 return count;
462}
463
464#define FAN_INPUT 0
465#define FAN_MIN 1
466static ssize_t
467show_fan(struct device *dev, struct device_attribute *attr, char *buf)
468{
469 struct sensor_device_attribute_2 *sensor_attr =
470 to_sensor_dev_attr_2(attr);
471 int nr = sensor_attr->nr;
472 int index = sensor_attr->index;
473 struct w83793_data *data = w83793_update_device(dev);
474 u16 val;
475
476 if (FAN_INPUT == nr) {
477 val = data->fan[index] & 0x0fff;
478 } else {
479 val = data->fan_min[index] & 0x0fff;
480 }
481
482 return sprintf(buf, "%lu\n", FAN_FROM_REG(val));
483}
484
485static ssize_t
486store_fan_min(struct device *dev, struct device_attribute *attr,
487 const char *buf, size_t count)
488{
489 struct sensor_device_attribute_2 *sensor_attr =
490 to_sensor_dev_attr_2(attr);
491 int index = sensor_attr->index;
492 struct i2c_client *client = to_i2c_client(dev);
493 struct w83793_data *data = i2c_get_clientdata(client);
494 u16 val = FAN_TO_REG(simple_strtoul(buf, NULL, 10));
495
496 mutex_lock(&data->update_lock);
497 data->fan_min[index] = val;
498 w83793_write_value(client, W83793_REG_FAN_MIN(index),
499 (val >> 8) & 0xff);
500 w83793_write_value(client, W83793_REG_FAN_MIN(index) + 1, val & 0xff);
501 mutex_unlock(&data->update_lock);
502
503 return count;
504}
505
506static ssize_t
507show_pwm(struct device *dev, struct device_attribute *attr, char *buf)
508{
509 struct sensor_device_attribute_2 *sensor_attr =
510 to_sensor_dev_attr_2(attr);
511 struct w83793_data *data = w83793_update_device(dev);
512 u16 val;
513 int nr = sensor_attr->nr;
514 int index = sensor_attr->index;
515
516 if (PWM_STOP_TIME == nr)
517 val = TIME_FROM_REG(data->pwm_stop_time[index]);
518 else
519 val = (data->pwm[index][nr] & 0x3f) << 2;
520
521 return sprintf(buf, "%d\n", val);
522}
523
524static ssize_t
525store_pwm(struct device *dev, struct device_attribute *attr,
526 const char *buf, size_t count)
527{
528 struct i2c_client *client = to_i2c_client(dev);
529 struct w83793_data *data = i2c_get_clientdata(client);
530 struct sensor_device_attribute_2 *sensor_attr =
531 to_sensor_dev_attr_2(attr);
532 int nr = sensor_attr->nr;
533 int index = sensor_attr->index;
534 u8 val;
535
536 mutex_lock(&data->update_lock);
537 if (PWM_STOP_TIME == nr) {
538 val = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
539 data->pwm_stop_time[index] = val;
540 w83793_write_value(client, W83793_REG_PWM_STOP_TIME(index),
541 val);
542 } else {
543 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 0xff)
544 >> 2;
545 data->pwm[index][nr] =
546 w83793_read_value(client, W83793_REG_PWM(index, nr)) & 0xc0;
547 data->pwm[index][nr] |= val;
548 w83793_write_value(client, W83793_REG_PWM(index, nr),
549 data->pwm[index][nr]);
550 }
551
552 mutex_unlock(&data->update_lock);
553 return count;
554}
555
556static ssize_t
557show_temp(struct device *dev, struct device_attribute *attr, char *buf)
558{
559 struct sensor_device_attribute_2 *sensor_attr =
560 to_sensor_dev_attr_2(attr);
561 int nr = sensor_attr->nr;
562 int index = sensor_attr->index;
563 struct w83793_data *data = w83793_update_device(dev);
564 long temp = TEMP_FROM_REG(data->temp[index][nr]);
565
566 if (TEMP_READ == nr && index < 4) { /* Only TD1-TD4 have low bits */
567 int low = ((data->temp_low_bits >> (index * 2)) & 0x03) * 250;
568 temp += temp > 0 ? low : -low;
569 }
570 return sprintf(buf, "%ld\n", temp);
571}
572
573static ssize_t
574store_temp(struct device *dev, struct device_attribute *attr,
575 const char *buf, size_t count)
576{
577 struct sensor_device_attribute_2 *sensor_attr =
578 to_sensor_dev_attr_2(attr);
579 int nr = sensor_attr->nr;
580 int index = sensor_attr->index;
581 struct i2c_client *client = to_i2c_client(dev);
582 struct w83793_data *data = i2c_get_clientdata(client);
583 long tmp = simple_strtol(buf, NULL, 10);
584
585 mutex_lock(&data->update_lock);
586 data->temp[index][nr] = TEMP_TO_REG(tmp, -128, 127);
587 w83793_write_value(client, W83793_REG_TEMP[index][nr],
588 data->temp[index][nr]);
589 mutex_unlock(&data->update_lock);
590 return count;
591}
592
593/*
594 TD1-TD4
595 each has 4 mode:(2 bits)
596 0: Stop monitor
597 1: Use internal temp sensor(default)
598 2: Reserved
599 3: Use sensor in Intel CPU and get result by PECI
600
601 TR1-TR2
602 each has 2 mode:(1 bit)
603 0: Disable temp sensor monitor
604 1: To enable temp sensors monitor
605*/
606
607/* 0 disable, 6 PECI */
608static u8 TO_TEMP_MODE[] = { 0, 0, 0, 6 };
609
610static ssize_t
611show_temp_mode(struct device *dev, struct device_attribute *attr, char *buf)
612{
613 struct w83793_data *data = w83793_update_device(dev);
614 struct sensor_device_attribute_2 *sensor_attr =
615 to_sensor_dev_attr_2(attr);
616 int index = sensor_attr->index;
617 u8 mask = (index < 4) ? 0x03 : 0x01;
618 u8 shift = (index < 4) ? (2 * index) : (index - 4);
619 u8 tmp;
620 index = (index < 4) ? 0 : 1;
621
622 tmp = (data->temp_mode[index] >> shift) & mask;
623
624 /* for the internal sensor, found out if diode or thermistor */
625 if (tmp == 1) {
626 tmp = index == 0 ? 3 : 4;
627 } else {
628 tmp = TO_TEMP_MODE[tmp];
629 }
630
631 return sprintf(buf, "%d\n", tmp);
632}
633
634static ssize_t
635store_temp_mode(struct device *dev, struct device_attribute *attr,
636 const char *buf, size_t count)
637{
638 struct i2c_client *client = to_i2c_client(dev);
639 struct w83793_data *data = i2c_get_clientdata(client);
640 struct sensor_device_attribute_2 *sensor_attr =
641 to_sensor_dev_attr_2(attr);
642 int index = sensor_attr->index;
643 u8 mask = (index < 4) ? 0x03 : 0x01;
644 u8 shift = (index < 4) ? (2 * index) : (index - 4);
645 u8 val = simple_strtoul(buf, NULL, 10);
646
647 /* transform the sysfs interface values into table above */
648 if ((val == 6) && (index < 4)) {
649 val -= 3;
650 } else if ((val == 3 && index < 4)
651 || (val == 4 && index >= 4)) {
652 /* transform diode or thermistor into internal enable */
653 val = !!val;
654 } else {
655 return -EINVAL;
656 }
657
658 index = (index < 4) ? 0 : 1;
659 mutex_lock(&data->update_lock);
660 data->temp_mode[index] =
661 w83793_read_value(client, W83793_REG_TEMP_MODE[index]);
662 data->temp_mode[index] &= ~(mask << shift);
663 data->temp_mode[index] |= val << shift;
664 w83793_write_value(client, W83793_REG_TEMP_MODE[index],
665 data->temp_mode[index]);
666 mutex_unlock(&data->update_lock);
667
668 return count;
669}
670
671#define SETUP_PWM_DEFAULT 0
672#define SETUP_PWM_UPTIME 1 /* Unit in 0.1s */
673#define SETUP_PWM_DOWNTIME 2 /* Unit in 0.1s */
674#define SETUP_TEMP_CRITICAL 3
675static ssize_t
676show_sf_setup(struct device *dev, struct device_attribute *attr, char *buf)
677{
678 struct sensor_device_attribute_2 *sensor_attr =
679 to_sensor_dev_attr_2(attr);
680 int nr = sensor_attr->nr;
681 struct w83793_data *data = w83793_update_device(dev);
682 u32 val = 0;
683
684 if (SETUP_PWM_DEFAULT == nr) {
685 val = (data->pwm_default & 0x3f) << 2;
686 } else if (SETUP_PWM_UPTIME == nr) {
687 val = TIME_FROM_REG(data->pwm_uptime);
688 } else if (SETUP_PWM_DOWNTIME == nr) {
689 val = TIME_FROM_REG(data->pwm_downtime);
690 } else if (SETUP_TEMP_CRITICAL == nr) {
691 val = TEMP_FROM_REG(data->temp_critical & 0x7f);
692 }
693
694 return sprintf(buf, "%d\n", val);
695}
696
697static ssize_t
698store_sf_setup(struct device *dev, struct device_attribute *attr,
699 const char *buf, size_t count)
700{
701 struct sensor_device_attribute_2 *sensor_attr =
702 to_sensor_dev_attr_2(attr);
703 int nr = sensor_attr->nr;
704 struct i2c_client *client = to_i2c_client(dev);
705 struct w83793_data *data = i2c_get_clientdata(client);
706
707 mutex_lock(&data->update_lock);
708 if (SETUP_PWM_DEFAULT == nr) {
709 data->pwm_default =
710 w83793_read_value(client, W83793_REG_PWM_DEFAULT) & 0xc0;
711 data->pwm_default |= SENSORS_LIMIT(simple_strtoul(buf, NULL,
712 10),
713 0, 0xff) >> 2;
714 w83793_write_value(client, W83793_REG_PWM_DEFAULT,
715 data->pwm_default);
716 } else if (SETUP_PWM_UPTIME == nr) {
717 data->pwm_uptime = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
718 data->pwm_uptime += data->pwm_uptime == 0 ? 1 : 0;
719 w83793_write_value(client, W83793_REG_PWM_UPTIME,
720 data->pwm_uptime);
721 } else if (SETUP_PWM_DOWNTIME == nr) {
722 data->pwm_downtime = TIME_TO_REG(simple_strtoul(buf, NULL, 10));
723 data->pwm_downtime += data->pwm_downtime == 0 ? 1 : 0;
724 w83793_write_value(client, W83793_REG_PWM_DOWNTIME,
725 data->pwm_downtime);
726 } else { /* SETUP_TEMP_CRITICAL */
727 data->temp_critical =
728 w83793_read_value(client, W83793_REG_TEMP_CRITICAL) & 0x80;
729 data->temp_critical |= TEMP_TO_REG(simple_strtol(buf, NULL, 10),
730 0, 0x7f);
731 w83793_write_value(client, W83793_REG_TEMP_CRITICAL,
732 data->temp_critical);
733 }
734
735 mutex_unlock(&data->update_lock);
736 return count;
737}
738
739/*
740 Temp SmartFan control
741 TEMP_FAN_MAP
742 Temp channel control which pwm fan, bitfield, bit 0 indicate pwm1...
743 It's possible two or more temp channels control the same fan, w83793
744 always prefers to pick the most critical request and applies it to
745 the related Fan.
746 It's possible one fan is not in any mapping of 6 temp channels, this
747 means the fan is manual mode
748
749 TEMP_PWM_ENABLE
750 Each temp channel has its own SmartFan mode, and temp channel
751 control fans that are set by TEMP_FAN_MAP
752 0: SmartFanII mode
753 1: Thermal Cruise Mode
754
755 TEMP_CRUISE
756 Target temperature in thermal cruise mode, w83793 will try to turn
757 fan speed to keep the temperature of target device around this
758 temperature.
759
760 TEMP_TOLERANCE
761 If Temp higher or lower than target with this tolerance, w83793
762 will take actions to speed up or slow down the fan to keep the
763 temperature within the tolerance range.
764*/
765
766#define TEMP_FAN_MAP 0
767#define TEMP_PWM_ENABLE 1
768#define TEMP_CRUISE 2
769#define TEMP_TOLERANCE 3
770static ssize_t
771show_sf_ctrl(struct device *dev, struct device_attribute *attr, char *buf)
772{
773 struct sensor_device_attribute_2 *sensor_attr =
774 to_sensor_dev_attr_2(attr);
775 int nr = sensor_attr->nr;
776 int index = sensor_attr->index;
777 struct w83793_data *data = w83793_update_device(dev);
778 u32 val;
779
780 if (TEMP_FAN_MAP == nr) {
781 val = data->temp_fan_map[index];
782 } else if (TEMP_PWM_ENABLE == nr) {
783 /* +2 to transfrom into 2 and 3 to conform with sysfs intf */
784 val = ((data->pwm_enable >> index) & 0x01) + 2;
785 } else if (TEMP_CRUISE == nr) {
786 val = TEMP_FROM_REG(data->temp_cruise[index] & 0x7f);
787 } else { /* TEMP_TOLERANCE */
788 val = data->tolerance[index >> 1] >> ((index & 0x01) ? 4 : 0);
789 val = TEMP_FROM_REG(val & 0x0f);
790 }
791 return sprintf(buf, "%d\n", val);
792}
793
794static ssize_t
795store_sf_ctrl(struct device *dev, struct device_attribute *attr,
796 const char *buf, size_t count)
797{
798 struct sensor_device_attribute_2 *sensor_attr =
799 to_sensor_dev_attr_2(attr);
800 int nr = sensor_attr->nr;
801 int index = sensor_attr->index;
802 struct i2c_client *client = to_i2c_client(dev);
803 struct w83793_data *data = i2c_get_clientdata(client);
804 u32 val;
805
806 mutex_lock(&data->update_lock);
807 if (TEMP_FAN_MAP == nr) {
808 val = simple_strtoul(buf, NULL, 10) & 0xff;
809 w83793_write_value(client, W83793_REG_TEMP_FAN_MAP(index), val);
810 data->temp_fan_map[index] = val;
811 } else if (TEMP_PWM_ENABLE == nr) {
812 val = simple_strtoul(buf, NULL, 10);
813 if (2 == val || 3 == val) {
814 data->pwm_enable =
815 w83793_read_value(client, W83793_REG_PWM_ENABLE);
816 if (val - 2)
817 data->pwm_enable |= 1 << index;
818 else
819 data->pwm_enable &= ~(1 << index);
820 w83793_write_value(client, W83793_REG_PWM_ENABLE,
821 data->pwm_enable);
822 } else {
823 mutex_unlock(&data->update_lock);
824 return -EINVAL;
825 }
826 } else if (TEMP_CRUISE == nr) {
827 data->temp_cruise[index] =
828 w83793_read_value(client, W83793_REG_TEMP_CRUISE(index));
829 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x7f);
830 data->temp_cruise[index] &= 0x80;
831 data->temp_cruise[index] |= val;
832
833 w83793_write_value(client, W83793_REG_TEMP_CRUISE(index),
834 data->temp_cruise[index]);
835 } else { /* TEMP_TOLERANCE */
836 int i = index >> 1;
837 u8 shift = (index & 0x01) ? 4 : 0;
838 data->tolerance[i] =
839 w83793_read_value(client, W83793_REG_TEMP_TOL(i));
840
841 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x0f);
842 data->tolerance[i] &= ~(0x0f << shift);
843 data->tolerance[i] |= val << shift;
844 w83793_write_value(client, W83793_REG_TEMP_TOL(i),
845 data->tolerance[i]);
846 }
847
848 mutex_unlock(&data->update_lock);
849 return count;
850}
851
852static ssize_t
853show_sf2_pwm(struct device *dev, struct device_attribute *attr, char *buf)
854{
855 struct sensor_device_attribute_2 *sensor_attr =
856 to_sensor_dev_attr_2(attr);
857 int nr = sensor_attr->nr;
858 int index = sensor_attr->index;
859 struct w83793_data *data = w83793_update_device(dev);
860
861 return sprintf(buf, "%d\n", (data->sf2_pwm[index][nr] & 0x3f) << 2);
862}
863
864static ssize_t
865store_sf2_pwm(struct device *dev, struct device_attribute *attr,
866 const char *buf, size_t count)
867{
868 struct i2c_client *client = to_i2c_client(dev);
869 struct w83793_data *data = i2c_get_clientdata(client);
870 struct sensor_device_attribute_2 *sensor_attr =
871 to_sensor_dev_attr_2(attr);
872 int nr = sensor_attr->nr;
873 int index = sensor_attr->index;
874 u8 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 0xff) >> 2;
875
876 mutex_lock(&data->update_lock);
877 data->sf2_pwm[index][nr] =
878 w83793_read_value(client, W83793_REG_SF2_PWM(index, nr)) & 0xc0;
879 data->sf2_pwm[index][nr] |= val;
880 w83793_write_value(client, W83793_REG_SF2_PWM(index, nr),
881 data->sf2_pwm[index][nr]);
882 mutex_unlock(&data->update_lock);
883 return count;
884}
885
886static ssize_t
887show_sf2_temp(struct device *dev, struct device_attribute *attr, char *buf)
888{
889 struct sensor_device_attribute_2 *sensor_attr =
890 to_sensor_dev_attr_2(attr);
891 int nr = sensor_attr->nr;
892 int index = sensor_attr->index;
893 struct w83793_data *data = w83793_update_device(dev);
894
895 return sprintf(buf, "%ld\n",
896 TEMP_FROM_REG(data->sf2_temp[index][nr] & 0x7f));
897}
898
899static ssize_t
900store_sf2_temp(struct device *dev, struct device_attribute *attr,
901 const char *buf, size_t count)
902{
903 struct i2c_client *client = to_i2c_client(dev);
904 struct w83793_data *data = i2c_get_clientdata(client);
905 struct sensor_device_attribute_2 *sensor_attr =
906 to_sensor_dev_attr_2(attr);
907 int nr = sensor_attr->nr;
908 int index = sensor_attr->index;
909 u8 val = TEMP_TO_REG(simple_strtol(buf, NULL, 10), 0, 0x7f);
910
911 mutex_lock(&data->update_lock);
912 data->sf2_temp[index][nr] =
913 w83793_read_value(client, W83793_REG_SF2_TEMP(index, nr)) & 0x80;
914 data->sf2_temp[index][nr] |= val;
915 w83793_write_value(client, W83793_REG_SF2_TEMP(index, nr),
916 data->sf2_temp[index][nr]);
917 mutex_unlock(&data->update_lock);
918 return count;
919}
920
921/* only Vcore A/B and Vtt have additional 2 bits precision */
922static ssize_t
923show_in(struct device *dev, struct device_attribute *attr, char *buf)
924{
925 struct sensor_device_attribute_2 *sensor_attr =
926 to_sensor_dev_attr_2(attr);
927 int nr = sensor_attr->nr;
928 int index = sensor_attr->index;
929 struct w83793_data *data = w83793_update_device(dev);
930 u16 val = data->in[index][nr];
931
932 if (index < 3) {
933 val <<= 2;
934 val += (data->in_low_bits[nr] >> (index * 2)) & 0x3;
935 }
936 /* voltage inputs 5VDD and 5VSB needs 150mV offset */
937 val = val * scale_in[index] + scale_in_add[index];
938 return sprintf(buf, "%d\n", val);
939}
940
941static ssize_t
942store_in(struct device *dev, struct device_attribute *attr,
943 const char *buf, size_t count)
944{
945 struct sensor_device_attribute_2 *sensor_attr =
946 to_sensor_dev_attr_2(attr);
947 int nr = sensor_attr->nr;
948 int index = sensor_attr->index;
949 struct i2c_client *client = to_i2c_client(dev);
950 struct w83793_data *data = i2c_get_clientdata(client);
951 u32 val;
952
953 val =
954 (simple_strtoul(buf, NULL, 10) +
955 scale_in[index] / 2) / scale_in[index];
956 mutex_lock(&data->update_lock);
957 if (index > 2) {
958 /* fix the limit values of 5VDD and 5VSB to ALARM mechanism */
959 if (1 == nr || 2 == nr) {
960 val -= scale_in_add[index] / scale_in[index];
961 }
962 val = SENSORS_LIMIT(val, 0, 255);
963 } else {
964 val = SENSORS_LIMIT(val, 0, 0x3FF);
965 data->in_low_bits[nr] =
966 w83793_read_value(client, W83793_REG_IN_LOW_BITS[nr]);
967 data->in_low_bits[nr] &= ~(0x03 << (2 * index));
968 data->in_low_bits[nr] |= (val & 0x03) << (2 * index);
969 w83793_write_value(client, W83793_REG_IN_LOW_BITS[nr],
970 data->in_low_bits[nr]);
971 val >>= 2;
972 }
973 data->in[index][nr] = val;
974 w83793_write_value(client, W83793_REG_IN[index][nr],
975 data->in[index][nr]);
976 mutex_unlock(&data->update_lock);
977 return count;
978}
979
980#define NOT_USED -1
981
982#define SENSOR_ATTR_IN(index) \
983 SENSOR_ATTR_2(in##index##_input, S_IRUGO, show_in, NULL, \
984 IN_READ, index), \
985 SENSOR_ATTR_2(in##index##_max, S_IRUGO | S_IWUSR, show_in, \
986 store_in, IN_MAX, index), \
987 SENSOR_ATTR_2(in##index##_min, S_IRUGO | S_IWUSR, show_in, \
988 store_in, IN_LOW, index), \
989 SENSOR_ATTR_2(in##index##_alarm, S_IRUGO, show_alarm_beep, \
990 NULL, ALARM_STATUS, index + ((index > 2) ? 1 : 0)), \
991 SENSOR_ATTR_2(in##index##_beep, S_IWUSR | S_IRUGO, \
992 show_alarm_beep, store_beep, BEEP_ENABLE, \
993 index + ((index > 2) ? 1 : 0))
994
995#define SENSOR_ATTR_FAN(index) \
996 SENSOR_ATTR_2(fan##index##_alarm, S_IRUGO, show_alarm_beep, \
997 NULL, ALARM_STATUS, index + 17), \
998 SENSOR_ATTR_2(fan##index##_beep, S_IWUSR | S_IRUGO, \
999 show_alarm_beep, store_beep, BEEP_ENABLE, index + 17), \
1000 SENSOR_ATTR_2(fan##index##_input, S_IRUGO, show_fan, \
1001 NULL, FAN_INPUT, index - 1), \
1002 SENSOR_ATTR_2(fan##index##_min, S_IWUSR | S_IRUGO, \
1003 show_fan, store_fan_min, FAN_MIN, index - 1)
1004
1005#define SENSOR_ATTR_PWM(index) \
1006 SENSOR_ATTR_2(pwm##index, S_IWUSR | S_IRUGO, show_pwm, \
1007 store_pwm, PWM_DUTY, index - 1), \
1008 SENSOR_ATTR_2(pwm##index##_nonstop, S_IWUSR | S_IRUGO, \
1009 show_pwm, store_pwm, PWM_NONSTOP, index - 1), \
1010 SENSOR_ATTR_2(pwm##index##_start, S_IWUSR | S_IRUGO, \
1011 show_pwm, store_pwm, PWM_START, index - 1), \
1012 SENSOR_ATTR_2(pwm##index##_stop_time, S_IWUSR | S_IRUGO, \
1013 show_pwm, store_pwm, PWM_STOP_TIME, index - 1)
1014
1015#define SENSOR_ATTR_TEMP(index) \
1016 SENSOR_ATTR_2(temp##index##_type, S_IRUGO | S_IWUSR, \
1017 show_temp_mode, store_temp_mode, NOT_USED, index - 1), \
1018 SENSOR_ATTR_2(temp##index##_input, S_IRUGO, show_temp, \
1019 NULL, TEMP_READ, index - 1), \
1020 SENSOR_ATTR_2(temp##index##_max, S_IRUGO | S_IWUSR, show_temp, \
1021 store_temp, TEMP_CRIT, index - 1), \
1022 SENSOR_ATTR_2(temp##index##_max_hyst, S_IRUGO | S_IWUSR, \
1023 show_temp, store_temp, TEMP_CRIT_HYST, index - 1), \
1024 SENSOR_ATTR_2(temp##index##_warn, S_IRUGO | S_IWUSR, show_temp, \
1025 store_temp, TEMP_WARN, index - 1), \
1026 SENSOR_ATTR_2(temp##index##_warn_hyst, S_IRUGO | S_IWUSR, \
1027 show_temp, store_temp, TEMP_WARN_HYST, index - 1), \
1028 SENSOR_ATTR_2(temp##index##_alarm, S_IRUGO, \
1029 show_alarm_beep, NULL, ALARM_STATUS, index + 11), \
1030 SENSOR_ATTR_2(temp##index##_beep, S_IWUSR | S_IRUGO, \
1031 show_alarm_beep, store_beep, BEEP_ENABLE, index + 11), \
1032 SENSOR_ATTR_2(temp##index##_auto_channels_pwm, \
1033 S_IRUGO | S_IWUSR, show_sf_ctrl, store_sf_ctrl, \
1034 TEMP_FAN_MAP, index - 1), \
1035 SENSOR_ATTR_2(temp##index##_pwm_enable, S_IWUSR | S_IRUGO, \
1036 show_sf_ctrl, store_sf_ctrl, TEMP_PWM_ENABLE, \
1037 index - 1), \
1038 SENSOR_ATTR_2(thermal_cruise##index, S_IRUGO | S_IWUSR, \
1039 show_sf_ctrl, store_sf_ctrl, TEMP_CRUISE, index - 1), \
1040 SENSOR_ATTR_2(tolerance##index, S_IRUGO | S_IWUSR, show_sf_ctrl,\
1041 store_sf_ctrl, TEMP_TOLERANCE, index - 1), \
1042 SENSOR_ATTR_2(temp##index##_auto_point1_pwm, S_IRUGO | S_IWUSR, \
1043 show_sf2_pwm, store_sf2_pwm, 0, index - 1), \
1044 SENSOR_ATTR_2(temp##index##_auto_point2_pwm, S_IRUGO | S_IWUSR, \
1045 show_sf2_pwm, store_sf2_pwm, 1, index - 1), \
1046 SENSOR_ATTR_2(temp##index##_auto_point3_pwm, S_IRUGO | S_IWUSR, \
1047 show_sf2_pwm, store_sf2_pwm, 2, index - 1), \
1048 SENSOR_ATTR_2(temp##index##_auto_point4_pwm, S_IRUGO | S_IWUSR, \
1049 show_sf2_pwm, store_sf2_pwm, 3, index - 1), \
1050 SENSOR_ATTR_2(temp##index##_auto_point5_pwm, S_IRUGO | S_IWUSR, \
1051 show_sf2_pwm, store_sf2_pwm, 4, index - 1), \
1052 SENSOR_ATTR_2(temp##index##_auto_point6_pwm, S_IRUGO | S_IWUSR, \
1053 show_sf2_pwm, store_sf2_pwm, 5, index - 1), \
1054 SENSOR_ATTR_2(temp##index##_auto_point7_pwm, S_IRUGO | S_IWUSR, \
1055 show_sf2_pwm, store_sf2_pwm, 6, index - 1), \
1056 SENSOR_ATTR_2(temp##index##_auto_point1_temp, S_IRUGO | S_IWUSR,\
1057 show_sf2_temp, store_sf2_temp, 0, index - 1), \
1058 SENSOR_ATTR_2(temp##index##_auto_point2_temp, S_IRUGO | S_IWUSR,\
1059 show_sf2_temp, store_sf2_temp, 1, index - 1), \
1060 SENSOR_ATTR_2(temp##index##_auto_point3_temp, S_IRUGO | S_IWUSR,\
1061 show_sf2_temp, store_sf2_temp, 2, index - 1), \
1062 SENSOR_ATTR_2(temp##index##_auto_point4_temp, S_IRUGO | S_IWUSR,\
1063 show_sf2_temp, store_sf2_temp, 3, index - 1), \
1064 SENSOR_ATTR_2(temp##index##_auto_point5_temp, S_IRUGO | S_IWUSR,\
1065 show_sf2_temp, store_sf2_temp, 4, index - 1), \
1066 SENSOR_ATTR_2(temp##index##_auto_point6_temp, S_IRUGO | S_IWUSR,\
1067 show_sf2_temp, store_sf2_temp, 5, index - 1), \
1068 SENSOR_ATTR_2(temp##index##_auto_point7_temp, S_IRUGO | S_IWUSR,\
1069 show_sf2_temp, store_sf2_temp, 6, index - 1)
1070
1071static struct sensor_device_attribute_2 w83793_sensor_attr_2[] = {
1072 SENSOR_ATTR_IN(0),
1073 SENSOR_ATTR_IN(1),
1074 SENSOR_ATTR_IN(2),
1075 SENSOR_ATTR_IN(3),
1076 SENSOR_ATTR_IN(4),
1077 SENSOR_ATTR_IN(5),
1078 SENSOR_ATTR_IN(6),
1079 SENSOR_ATTR_IN(7),
1080 SENSOR_ATTR_IN(8),
1081 SENSOR_ATTR_IN(9),
1082 SENSOR_ATTR_FAN(1),
1083 SENSOR_ATTR_FAN(2),
1084 SENSOR_ATTR_FAN(3),
1085 SENSOR_ATTR_FAN(4),
1086 SENSOR_ATTR_FAN(5),
1087 SENSOR_ATTR_PWM(1),
1088 SENSOR_ATTR_PWM(2),
1089 SENSOR_ATTR_PWM(3),
1090};
1091
1092static struct sensor_device_attribute_2 w83793_temp[] = {
1093 SENSOR_ATTR_TEMP(1),
1094 SENSOR_ATTR_TEMP(2),
1095 SENSOR_ATTR_TEMP(3),
1096 SENSOR_ATTR_TEMP(4),
1097 SENSOR_ATTR_TEMP(5),
1098 SENSOR_ATTR_TEMP(6),
1099};
1100
1101/* Fan6-Fan12 */
1102static struct sensor_device_attribute_2 w83793_left_fan[] = {
1103 SENSOR_ATTR_FAN(6),
1104 SENSOR_ATTR_FAN(7),
1105 SENSOR_ATTR_FAN(8),
1106 SENSOR_ATTR_FAN(9),
1107 SENSOR_ATTR_FAN(10),
1108 SENSOR_ATTR_FAN(11),
1109 SENSOR_ATTR_FAN(12),
1110};
1111
1112/* Pwm4-Pwm8 */
1113static struct sensor_device_attribute_2 w83793_left_pwm[] = {
1114 SENSOR_ATTR_PWM(4),
1115 SENSOR_ATTR_PWM(5),
1116 SENSOR_ATTR_PWM(6),
1117 SENSOR_ATTR_PWM(7),
1118 SENSOR_ATTR_PWM(8),
1119};
1120
1121static struct sensor_device_attribute_2 w83793_vid[] = {
1122 SENSOR_ATTR_2(cpu0_vid, S_IRUGO, show_vid, NULL, NOT_USED, 0),
1123 SENSOR_ATTR_2(cpu1_vid, S_IRUGO, show_vid, NULL, NOT_USED, 1),
1124};
1125static DEVICE_ATTR(vrm, S_IWUSR | S_IRUGO, show_vrm, store_vrm);
1126
1127static struct sensor_device_attribute_2 sda_single_files[] = {
1128 SENSOR_ATTR_2(chassis, S_IWUSR | S_IRUGO, show_alarm_beep,
1129 store_chassis_clear_legacy, ALARM_STATUS, 30),
1130 SENSOR_ATTR_2(intrusion0_alarm, S_IWUSR | S_IRUGO, show_alarm_beep,
1131 store_chassis_clear, ALARM_STATUS, 30),
1132 SENSOR_ATTR_2(beep_enable, S_IWUSR | S_IRUGO, show_beep_enable,
1133 store_beep_enable, NOT_USED, NOT_USED),
1134 SENSOR_ATTR_2(pwm_default, S_IWUSR | S_IRUGO, show_sf_setup,
1135 store_sf_setup, SETUP_PWM_DEFAULT, NOT_USED),
1136 SENSOR_ATTR_2(pwm_uptime, S_IWUSR | S_IRUGO, show_sf_setup,
1137 store_sf_setup, SETUP_PWM_UPTIME, NOT_USED),
1138 SENSOR_ATTR_2(pwm_downtime, S_IWUSR | S_IRUGO, show_sf_setup,
1139 store_sf_setup, SETUP_PWM_DOWNTIME, NOT_USED),
1140 SENSOR_ATTR_2(temp_critical, S_IWUSR | S_IRUGO, show_sf_setup,
1141 store_sf_setup, SETUP_TEMP_CRITICAL, NOT_USED),
1142};
1143
1144static void w83793_init_client(struct i2c_client *client)
1145{
1146 if (reset) {
1147 w83793_write_value(client, W83793_REG_CONFIG, 0x80);
1148 }
1149
1150 /* Start monitoring */
1151 w83793_write_value(client, W83793_REG_CONFIG,
1152 w83793_read_value(client, W83793_REG_CONFIG) | 0x01);
1153}
1154
1155/*
1156 * Watchdog routines
1157 */
1158
1159static int watchdog_set_timeout(struct w83793_data *data, int timeout)
1160{
1161 int ret, mtimeout;
1162
1163 mtimeout = DIV_ROUND_UP(timeout, 60);
1164
1165 if (mtimeout > 255)
1166 return -EINVAL;
1167
1168 mutex_lock(&data->watchdog_lock);
1169 if (!data->client) {
1170 ret = -ENODEV;
1171 goto leave;
1172 }
1173
1174 data->watchdog_timeout = mtimeout;
1175
1176 /* Set Timeout value (in Minutes) */
1177 w83793_write_value(data->client, W83793_REG_WDT_TIMEOUT,
1178 data->watchdog_timeout);
1179
1180 ret = mtimeout * 60;
1181
1182leave:
1183 mutex_unlock(&data->watchdog_lock);
1184 return ret;
1185}
1186
1187static int watchdog_get_timeout(struct w83793_data *data)
1188{
1189 int timeout;
1190
1191 mutex_lock(&data->watchdog_lock);
1192 timeout = data->watchdog_timeout * 60;
1193 mutex_unlock(&data->watchdog_lock);
1194
1195 return timeout;
1196}
1197
1198static int watchdog_trigger(struct w83793_data *data)
1199{
1200 int ret = 0;
1201
1202 mutex_lock(&data->watchdog_lock);
1203 if (!data->client) {
1204 ret = -ENODEV;
1205 goto leave;
1206 }
1207
1208 /* Set Timeout value (in Minutes) */
1209 w83793_write_value(data->client, W83793_REG_WDT_TIMEOUT,
1210 data->watchdog_timeout);
1211
1212leave:
1213 mutex_unlock(&data->watchdog_lock);
1214 return ret;
1215}
1216
1217static int watchdog_enable(struct w83793_data *data)
1218{
1219 int ret = 0;
1220
1221 mutex_lock(&data->watchdog_lock);
1222 if (!data->client) {
1223 ret = -ENODEV;
1224 goto leave;
1225 }
1226
1227 /* Set initial timeout */
1228 w83793_write_value(data->client, W83793_REG_WDT_TIMEOUT,
1229 data->watchdog_timeout);
1230
1231 /* Enable Soft Watchdog */
1232 w83793_write_value(data->client, W83793_REG_WDT_LOCK, 0x55);
1233
1234leave:
1235 mutex_unlock(&data->watchdog_lock);
1236 return ret;
1237}
1238
1239static int watchdog_disable(struct w83793_data *data)
1240{
1241 int ret = 0;
1242
1243 mutex_lock(&data->watchdog_lock);
1244 if (!data->client) {
1245 ret = -ENODEV;
1246 goto leave;
1247 }
1248
1249 /* Disable Soft Watchdog */
1250 w83793_write_value(data->client, W83793_REG_WDT_LOCK, 0xAA);
1251
1252leave:
1253 mutex_unlock(&data->watchdog_lock);
1254 return ret;
1255}
1256
1257static int watchdog_open(struct inode *inode, struct file *filp)
1258{
1259 struct w83793_data *pos, *data = NULL;
1260 int watchdog_is_open;
1261
1262 /* We get called from drivers/char/misc.c with misc_mtx hold, and we
1263 call misc_register() from w83793_probe() with watchdog_data_mutex
1264 hold, as misc_register() takes the misc_mtx lock, this is a possible
1265 deadlock, so we use mutex_trylock here. */
1266 if (!mutex_trylock(&watchdog_data_mutex))
1267 return -ERESTARTSYS;
1268 list_for_each_entry(pos, &watchdog_data_list, list) {
1269 if (pos->watchdog_miscdev.minor == iminor(inode)) {
1270 data = pos;
1271 break;
1272 }
1273 }
1274
1275 /* Check, if device is already open */
1276 watchdog_is_open = test_and_set_bit(0, &data->watchdog_is_open);
1277
1278 /* Increase data reference counter (if not already done).
1279 Note we can never not have found data, so we don't check for this */
1280 if (!watchdog_is_open)
1281 kref_get(&data->kref);
1282
1283 mutex_unlock(&watchdog_data_mutex);
1284
1285 /* Check, if device is already open and possibly issue error */
1286 if (watchdog_is_open)
1287 return -EBUSY;
1288
1289 /* Enable Soft Watchdog */
1290 watchdog_enable(data);
1291
1292 /* Store pointer to data into filp's private data */
1293 filp->private_data = data;
1294
1295 return nonseekable_open(inode, filp);
1296}
1297
1298static int watchdog_close(struct inode *inode, struct file *filp)
1299{
1300 struct w83793_data *data = filp->private_data;
1301
1302 if (data->watchdog_expect_close) {
1303 watchdog_disable(data);
1304 data->watchdog_expect_close = 0;
1305 } else {
1306 watchdog_trigger(data);
1307 dev_crit(&data->client->dev,
1308 "unexpected close, not stopping watchdog!\n");
1309 }
1310
1311 clear_bit(0, &data->watchdog_is_open);
1312
1313 /* Decrease data reference counter */
1314 mutex_lock(&watchdog_data_mutex);
1315 kref_put(&data->kref, w83793_release_resources);
1316 mutex_unlock(&watchdog_data_mutex);
1317
1318 return 0;
1319}
1320
1321static ssize_t watchdog_write(struct file *filp, const char __user *buf,
1322 size_t count, loff_t *offset)
1323{
1324 ssize_t ret;
1325 struct w83793_data *data = filp->private_data;
1326
1327 if (count) {
1328 if (!nowayout) {
1329 size_t i;
1330
1331 /* Clear it in case it was set with a previous write */
1332 data->watchdog_expect_close = 0;
1333
1334 for (i = 0; i != count; i++) {
1335 char c;
1336 if (get_user(c, buf + i))
1337 return -EFAULT;
1338 if (c == 'V')
1339 data->watchdog_expect_close = 1;
1340 }
1341 }
1342 ret = watchdog_trigger(data);
1343 if (ret < 0)
1344 return ret;
1345 }
1346 return count;
1347}
1348
1349static long watchdog_ioctl(struct file *filp, unsigned int cmd,
1350 unsigned long arg)
1351{
1352 struct watchdog_info ident = {
1353 .options = WDIOF_KEEPALIVEPING |
1354 WDIOF_SETTIMEOUT |
1355 WDIOF_CARDRESET,
1356 .identity = "w83793 watchdog"
1357 };
1358
1359 int val, ret = 0;
1360 struct w83793_data *data = filp->private_data;
1361
1362 switch (cmd) {
1363 case WDIOC_GETSUPPORT:
1364 if (!nowayout)
1365 ident.options |= WDIOF_MAGICCLOSE;
1366 if (copy_to_user((void __user *)arg, &ident, sizeof(ident)))
1367 ret = -EFAULT;
1368 break;
1369
1370 case WDIOC_GETSTATUS:
1371 val = data->watchdog_caused_reboot ? WDIOF_CARDRESET : 0;
1372 ret = put_user(val, (int __user *)arg);
1373 break;
1374
1375 case WDIOC_GETBOOTSTATUS:
1376 ret = put_user(0, (int __user *)arg);
1377 break;
1378
1379 case WDIOC_KEEPALIVE:
1380 ret = watchdog_trigger(data);
1381 break;
1382
1383 case WDIOC_GETTIMEOUT:
1384 val = watchdog_get_timeout(data);
1385 ret = put_user(val, (int __user *)arg);
1386 break;
1387
1388 case WDIOC_SETTIMEOUT:
1389 if (get_user(val, (int __user *)arg)) {
1390 ret = -EFAULT;
1391 break;
1392 }
1393 ret = watchdog_set_timeout(data, val);
1394 if (ret > 0)
1395 ret = put_user(ret, (int __user *)arg);
1396 break;
1397
1398 case WDIOC_SETOPTIONS:
1399 if (get_user(val, (int __user *)arg)) {
1400 ret = -EFAULT;
1401 break;
1402 }
1403
1404 if (val & WDIOS_DISABLECARD)
1405 ret = watchdog_disable(data);
1406 else if (val & WDIOS_ENABLECARD)
1407 ret = watchdog_enable(data);
1408 else
1409 ret = -EINVAL;
1410
1411 break;
1412 default:
1413 ret = -ENOTTY;
1414 }
1415 return ret;
1416}
1417
1418static const struct file_operations watchdog_fops = {
1419 .owner = THIS_MODULE,
1420 .llseek = no_llseek,
1421 .open = watchdog_open,
1422 .release = watchdog_close,
1423 .write = watchdog_write,
1424 .unlocked_ioctl = watchdog_ioctl,
1425};
1426
1427/*
1428 * Notifier for system down
1429 */
1430
1431static int watchdog_notify_sys(struct notifier_block *this, unsigned long code,
1432 void *unused)
1433{
1434 struct w83793_data *data = NULL;
1435
1436 if (code == SYS_DOWN || code == SYS_HALT) {
1437
1438 /* Disable each registered watchdog */
1439 mutex_lock(&watchdog_data_mutex);
1440 list_for_each_entry(data, &watchdog_data_list, list) {
1441 if (data->watchdog_miscdev.minor)
1442 watchdog_disable(data);
1443 }
1444 mutex_unlock(&watchdog_data_mutex);
1445 }
1446
1447 return NOTIFY_DONE;
1448}
1449
1450/*
1451 * The WDT needs to learn about soft shutdowns in order to
1452 * turn the timebomb registers off.
1453 */
1454
1455static struct notifier_block watchdog_notifier = {
1456 .notifier_call = watchdog_notify_sys,
1457};
1458
1459/*
1460 * Init / remove routines
1461 */
1462
1463static int w83793_remove(struct i2c_client *client)
1464{
1465 struct w83793_data *data = i2c_get_clientdata(client);
1466 struct device *dev = &client->dev;
1467 int i, tmp;
1468
1469 /* Unregister the watchdog (if registered) */
1470 if (data->watchdog_miscdev.minor) {
1471 misc_deregister(&data->watchdog_miscdev);
1472
1473 if (data->watchdog_is_open) {
1474 dev_warn(&client->dev,
1475 "i2c client detached with watchdog open! "
1476 "Stopping watchdog.\n");
1477 watchdog_disable(data);
1478 }
1479
1480 mutex_lock(&watchdog_data_mutex);
1481 list_del(&data->list);
1482 mutex_unlock(&watchdog_data_mutex);
1483
1484 /* Tell the watchdog code the client is gone */
1485 mutex_lock(&data->watchdog_lock);
1486 data->client = NULL;
1487 mutex_unlock(&data->watchdog_lock);
1488 }
1489
1490 /* Reset Configuration Register to Disable Watch Dog Registers */
1491 tmp = w83793_read_value(client, W83793_REG_CONFIG);
1492 w83793_write_value(client, W83793_REG_CONFIG, tmp & ~0x04);
1493
1494 unregister_reboot_notifier(&watchdog_notifier);
1495
1496 hwmon_device_unregister(data->hwmon_dev);
1497
1498 for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1499 device_remove_file(dev,
1500 &w83793_sensor_attr_2[i].dev_attr);
1501
1502 for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1503 device_remove_file(dev, &sda_single_files[i].dev_attr);
1504
1505 for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1506 device_remove_file(dev, &w83793_vid[i].dev_attr);
1507 device_remove_file(dev, &dev_attr_vrm);
1508
1509 for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1510 device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1511
1512 for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1513 device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1514
1515 for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1516 device_remove_file(dev, &w83793_temp[i].dev_attr);
1517
1518 if (data->lm75[0] != NULL)
1519 i2c_unregister_device(data->lm75[0]);
1520 if (data->lm75[1] != NULL)
1521 i2c_unregister_device(data->lm75[1]);
1522
1523 /* Decrease data reference counter */
1524 mutex_lock(&watchdog_data_mutex);
1525 kref_put(&data->kref, w83793_release_resources);
1526 mutex_unlock(&watchdog_data_mutex);
1527
1528 return 0;
1529}
1530
1531static int
1532w83793_detect_subclients(struct i2c_client *client)
1533{
1534 int i, id, err;
1535 int address = client->addr;
1536 u8 tmp;
1537 struct i2c_adapter *adapter = client->adapter;
1538 struct w83793_data *data = i2c_get_clientdata(client);
1539
1540 id = i2c_adapter_id(adapter);
1541 if (force_subclients[0] == id && force_subclients[1] == address) {
1542 for (i = 2; i <= 3; i++) {
1543 if (force_subclients[i] < 0x48
1544 || force_subclients[i] > 0x4f) {
1545 dev_err(&client->dev,
1546 "invalid subclient "
1547 "address %d; must be 0x48-0x4f\n",
1548 force_subclients[i]);
1549 err = -EINVAL;
1550 goto ERROR_SC_0;
1551 }
1552 }
1553 w83793_write_value(client, W83793_REG_I2C_SUBADDR,
1554 (force_subclients[2] & 0x07) |
1555 ((force_subclients[3] & 0x07) << 4));
1556 }
1557
1558 tmp = w83793_read_value(client, W83793_REG_I2C_SUBADDR);
1559 if (!(tmp & 0x08)) {
1560 data->lm75[0] = i2c_new_dummy(adapter, 0x48 + (tmp & 0x7));
1561 }
1562 if (!(tmp & 0x80)) {
1563 if ((data->lm75[0] != NULL)
1564 && ((tmp & 0x7) == ((tmp >> 4) & 0x7))) {
1565 dev_err(&client->dev,
1566 "duplicate addresses 0x%x, "
1567 "use force_subclients\n", data->lm75[0]->addr);
1568 err = -ENODEV;
1569 goto ERROR_SC_1;
1570 }
1571 data->lm75[1] = i2c_new_dummy(adapter,
1572 0x48 + ((tmp >> 4) & 0x7));
1573 }
1574
1575 return 0;
1576
1577 /* Undo inits in case of errors */
1578
1579ERROR_SC_1:
1580 if (data->lm75[0] != NULL)
1581 i2c_unregister_device(data->lm75[0]);
1582ERROR_SC_0:
1583 return err;
1584}
1585
1586/* Return 0 if detection is successful, -ENODEV otherwise */
1587static int w83793_detect(struct i2c_client *client,
1588 struct i2c_board_info *info)
1589{
1590 u8 tmp, bank, chip_id;
1591 struct i2c_adapter *adapter = client->adapter;
1592 unsigned short address = client->addr;
1593
1594 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1595 return -ENODEV;
1596 }
1597
1598 bank = i2c_smbus_read_byte_data(client, W83793_REG_BANKSEL);
1599
1600 tmp = bank & 0x80 ? 0x5c : 0xa3;
1601 /* Check Winbond vendor ID */
1602 if (tmp != i2c_smbus_read_byte_data(client, W83793_REG_VENDORID)) {
1603 pr_debug("w83793: Detection failed at check vendor id\n");
1604 return -ENODEV;
1605 }
1606
1607 /* If Winbond chip, address of chip and W83793_REG_I2C_ADDR
1608 should match */
1609 if ((bank & 0x07) == 0
1610 && i2c_smbus_read_byte_data(client, W83793_REG_I2C_ADDR) !=
1611 (address << 1)) {
1612 pr_debug("w83793: Detection failed at check i2c addr\n");
1613 return -ENODEV;
1614 }
1615
1616 /* Determine the chip type now */
1617 chip_id = i2c_smbus_read_byte_data(client, W83793_REG_CHIPID);
1618 if (chip_id != 0x7b)
1619 return -ENODEV;
1620
1621 strlcpy(info->type, "w83793", I2C_NAME_SIZE);
1622
1623 return 0;
1624}
1625
1626static int w83793_probe(struct i2c_client *client,
1627 const struct i2c_device_id *id)
1628{
1629 struct device *dev = &client->dev;
1630 const int watchdog_minors[] = { WATCHDOG_MINOR, 212, 213, 214, 215 };
1631 struct w83793_data *data;
1632 int i, tmp, val, err;
1633 int files_fan = ARRAY_SIZE(w83793_left_fan) / 7;
1634 int files_pwm = ARRAY_SIZE(w83793_left_pwm) / 5;
1635 int files_temp = ARRAY_SIZE(w83793_temp) / 6;
1636
1637 data = kzalloc(sizeof(struct w83793_data), GFP_KERNEL);
1638 if (!data) {
1639 err = -ENOMEM;
1640 goto exit;
1641 }
1642
1643 i2c_set_clientdata(client, data);
1644 data->bank = i2c_smbus_read_byte_data(client, W83793_REG_BANKSEL);
1645 mutex_init(&data->update_lock);
1646 mutex_init(&data->watchdog_lock);
1647 INIT_LIST_HEAD(&data->list);
1648 kref_init(&data->kref);
1649
1650 /* Store client pointer in our data struct for watchdog usage
1651 (where the client is found through a data ptr instead of the
1652 otherway around) */
1653 data->client = client;
1654
1655 err = w83793_detect_subclients(client);
1656 if (err)
1657 goto free_mem;
1658
1659 /* Initialize the chip */
1660 w83793_init_client(client);
1661
1662 /*
1663 Only fan 1-5 has their own input pins,
1664 Pwm 1-3 has their own pins
1665 */
1666 data->has_fan = 0x1f;
1667 data->has_pwm = 0x07;
1668 tmp = w83793_read_value(client, W83793_REG_MFC);
1669 val = w83793_read_value(client, W83793_REG_FANIN_CTRL);
1670
1671 /* check the function of pins 49-56 */
1672 if (tmp & 0x80) {
1673 data->has_vid |= 0x2; /* has VIDB */
1674 } else {
1675 data->has_pwm |= 0x18; /* pwm 4,5 */
1676 if (val & 0x01) { /* fan 6 */
1677 data->has_fan |= 0x20;
1678 data->has_pwm |= 0x20;
1679 }
1680 if (val & 0x02) { /* fan 7 */
1681 data->has_fan |= 0x40;
1682 data->has_pwm |= 0x40;
1683 }
1684 if (!(tmp & 0x40) && (val & 0x04)) { /* fan 8 */
1685 data->has_fan |= 0x80;
1686 data->has_pwm |= 0x80;
1687 }
1688 }
1689
1690 /* check the function of pins 37-40 */
1691 if (!(tmp & 0x29))
1692 data->has_vid |= 0x1; /* has VIDA */
1693 if (0x08 == (tmp & 0x0c)) {
1694 if (val & 0x08) /* fan 9 */
1695 data->has_fan |= 0x100;
1696 if (val & 0x10) /* fan 10 */
1697 data->has_fan |= 0x200;
1698 }
1699 if (0x20 == (tmp & 0x30)) {
1700 if (val & 0x20) /* fan 11 */
1701 data->has_fan |= 0x400;
1702 if (val & 0x40) /* fan 12 */
1703 data->has_fan |= 0x800;
1704 }
1705
1706 if ((tmp & 0x01) && (val & 0x04)) { /* fan 8, second location */
1707 data->has_fan |= 0x80;
1708 data->has_pwm |= 0x80;
1709 }
1710
1711 tmp = w83793_read_value(client, W83793_REG_FANIN_SEL);
1712 if ((tmp & 0x01) && (val & 0x08)) { /* fan 9, second location */
1713 data->has_fan |= 0x100;
1714 }
1715 if ((tmp & 0x02) && (val & 0x10)) { /* fan 10, second location */
1716 data->has_fan |= 0x200;
1717 }
1718 if ((tmp & 0x04) && (val & 0x20)) { /* fan 11, second location */
1719 data->has_fan |= 0x400;
1720 }
1721 if ((tmp & 0x08) && (val & 0x40)) { /* fan 12, second location */
1722 data->has_fan |= 0x800;
1723 }
1724
1725 /* check the temp1-6 mode, ignore former AMDSI selected inputs */
1726 tmp = w83793_read_value(client,W83793_REG_TEMP_MODE[0]);
1727 if (tmp & 0x01)
1728 data->has_temp |= 0x01;
1729 if (tmp & 0x04)
1730 data->has_temp |= 0x02;
1731 if (tmp & 0x10)
1732 data->has_temp |= 0x04;
1733 if (tmp & 0x40)
1734 data->has_temp |= 0x08;
1735
1736 tmp = w83793_read_value(client,W83793_REG_TEMP_MODE[1]);
1737 if (tmp & 0x01)
1738 data->has_temp |= 0x10;
1739 if (tmp & 0x02)
1740 data->has_temp |= 0x20;
1741
1742 /* Register sysfs hooks */
1743 for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++) {
1744 err = device_create_file(dev,
1745 &w83793_sensor_attr_2[i].dev_attr);
1746 if (err)
1747 goto exit_remove;
1748 }
1749
1750 for (i = 0; i < ARRAY_SIZE(w83793_vid); i++) {
1751 if (!(data->has_vid & (1 << i)))
1752 continue;
1753 err = device_create_file(dev, &w83793_vid[i].dev_attr);
1754 if (err)
1755 goto exit_remove;
1756 }
1757 if (data->has_vid) {
1758 data->vrm = vid_which_vrm();
1759 err = device_create_file(dev, &dev_attr_vrm);
1760 if (err)
1761 goto exit_remove;
1762 }
1763
1764 for (i = 0; i < ARRAY_SIZE(sda_single_files); i++) {
1765 err = device_create_file(dev, &sda_single_files[i].dev_attr);
1766 if (err)
1767 goto exit_remove;
1768
1769 }
1770
1771 for (i = 0; i < 6; i++) {
1772 int j;
1773 if (!(data->has_temp & (1 << i)))
1774 continue;
1775 for (j = 0; j < files_temp; j++) {
1776 err = device_create_file(dev,
1777 &w83793_temp[(i) * files_temp
1778 + j].dev_attr);
1779 if (err)
1780 goto exit_remove;
1781 }
1782 }
1783
1784 for (i = 5; i < 12; i++) {
1785 int j;
1786 if (!(data->has_fan & (1 << i)))
1787 continue;
1788 for (j = 0; j < files_fan; j++) {
1789 err = device_create_file(dev,
1790 &w83793_left_fan[(i - 5) * files_fan
1791 + j].dev_attr);
1792 if (err)
1793 goto exit_remove;
1794 }
1795 }
1796
1797 for (i = 3; i < 8; i++) {
1798 int j;
1799 if (!(data->has_pwm & (1 << i)))
1800 continue;
1801 for (j = 0; j < files_pwm; j++) {
1802 err = device_create_file(dev,
1803 &w83793_left_pwm[(i - 3) * files_pwm
1804 + j].dev_attr);
1805 if (err)
1806 goto exit_remove;
1807 }
1808 }
1809
1810 data->hwmon_dev = hwmon_device_register(dev);
1811 if (IS_ERR(data->hwmon_dev)) {
1812 err = PTR_ERR(data->hwmon_dev);
1813 goto exit_remove;
1814 }
1815
1816 /* Watchdog initialization */
1817
1818 /* Register boot notifier */
1819 err = register_reboot_notifier(&watchdog_notifier);
1820 if (err != 0) {
1821 dev_err(&client->dev,
1822 "cannot register reboot notifier (err=%d)\n", err);
1823 goto exit_devunreg;
1824 }
1825
1826 /* Enable Watchdog registers.
1827 Set Configuration Register to Enable Watch Dog Registers
1828 (Bit 2) = XXXX, X1XX. */
1829 tmp = w83793_read_value(client, W83793_REG_CONFIG);
1830 w83793_write_value(client, W83793_REG_CONFIG, tmp | 0x04);
1831
1832 /* Set the default watchdog timeout */
1833 data->watchdog_timeout = timeout;
1834
1835 /* Check, if last reboot was caused by watchdog */
1836 data->watchdog_caused_reboot =
1837 w83793_read_value(data->client, W83793_REG_WDT_STATUS) & 0x01;
1838
1839 /* Disable Soft Watchdog during initialiation */
1840 watchdog_disable(data);
1841
1842 /* We take the data_mutex lock early so that watchdog_open() cannot
1843 run when misc_register() has completed, but we've not yet added
1844 our data to the watchdog_data_list (and set the default timeout) */
1845 mutex_lock(&watchdog_data_mutex);
1846 for (i = 0; i < ARRAY_SIZE(watchdog_minors); i++) {
1847 /* Register our watchdog part */
1848 snprintf(data->watchdog_name, sizeof(data->watchdog_name),
1849 "watchdog%c", (i == 0) ? '\0' : ('0' + i));
1850 data->watchdog_miscdev.name = data->watchdog_name;
1851 data->watchdog_miscdev.fops = &watchdog_fops;
1852 data->watchdog_miscdev.minor = watchdog_minors[i];
1853
1854 err = misc_register(&data->watchdog_miscdev);
1855 if (err == -EBUSY)
1856 continue;
1857 if (err) {
1858 data->watchdog_miscdev.minor = 0;
1859 dev_err(&client->dev,
1860 "Registering watchdog chardev: %d\n", err);
1861 break;
1862 }
1863
1864 list_add(&data->list, &watchdog_data_list);
1865
1866 dev_info(&client->dev,
1867 "Registered watchdog chardev major 10, minor: %d\n",
1868 watchdog_minors[i]);
1869 break;
1870 }
1871 if (i == ARRAY_SIZE(watchdog_minors)) {
1872 data->watchdog_miscdev.minor = 0;
1873 dev_warn(&client->dev, "Couldn't register watchdog chardev "
1874 "(due to no free minor)\n");
1875 }
1876
1877 mutex_unlock(&watchdog_data_mutex);
1878
1879 return 0;
1880
1881 /* Unregister hwmon device */
1882
1883exit_devunreg:
1884
1885 hwmon_device_unregister(data->hwmon_dev);
1886
1887 /* Unregister sysfs hooks */
1888
1889exit_remove:
1890 for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1891 device_remove_file(dev, &w83793_sensor_attr_2[i].dev_attr);
1892
1893 for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1894 device_remove_file(dev, &sda_single_files[i].dev_attr);
1895
1896 for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1897 device_remove_file(dev, &w83793_vid[i].dev_attr);
1898
1899 for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1900 device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1901
1902 for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1903 device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1904
1905 for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1906 device_remove_file(dev, &w83793_temp[i].dev_attr);
1907
1908 if (data->lm75[0] != NULL)
1909 i2c_unregister_device(data->lm75[0]);
1910 if (data->lm75[1] != NULL)
1911 i2c_unregister_device(data->lm75[1]);
1912free_mem:
1913 kfree(data);
1914exit:
1915 return err;
1916}
1917
1918static void w83793_update_nonvolatile(struct device *dev)
1919{
1920 struct i2c_client *client = to_i2c_client(dev);
1921 struct w83793_data *data = i2c_get_clientdata(client);
1922 int i, j;
1923 /*
1924 They are somewhat "stable" registers, and to update them every time
1925 takes so much time, it's just not worthy. Update them in a long
1926 interval to avoid exception.
1927 */
1928 if (!(time_after(jiffies, data->last_nonvolatile + HZ * 300)
1929 || !data->valid))
1930 return;
1931 /* update voltage limits */
1932 for (i = 1; i < 3; i++) {
1933 for (j = 0; j < ARRAY_SIZE(data->in); j++) {
1934 data->in[j][i] =
1935 w83793_read_value(client, W83793_REG_IN[j][i]);
1936 }
1937 data->in_low_bits[i] =
1938 w83793_read_value(client, W83793_REG_IN_LOW_BITS[i]);
1939 }
1940
1941 for (i = 0; i < ARRAY_SIZE(data->fan_min); i++) {
1942 /* Update the Fan measured value and limits */
1943 if (!(data->has_fan & (1 << i))) {
1944 continue;
1945 }
1946 data->fan_min[i] =
1947 w83793_read_value(client, W83793_REG_FAN_MIN(i)) << 8;
1948 data->fan_min[i] |=
1949 w83793_read_value(client, W83793_REG_FAN_MIN(i) + 1);
1950 }
1951
1952 for (i = 0; i < ARRAY_SIZE(data->temp_fan_map); i++) {
1953 if (!(data->has_temp & (1 << i)))
1954 continue;
1955 data->temp_fan_map[i] =
1956 w83793_read_value(client, W83793_REG_TEMP_FAN_MAP(i));
1957 for (j = 1; j < 5; j++) {
1958 data->temp[i][j] =
1959 w83793_read_value(client, W83793_REG_TEMP[i][j]);
1960 }
1961 data->temp_cruise[i] =
1962 w83793_read_value(client, W83793_REG_TEMP_CRUISE(i));
1963 for (j = 0; j < 7; j++) {
1964 data->sf2_pwm[i][j] =
1965 w83793_read_value(client, W83793_REG_SF2_PWM(i, j));
1966 data->sf2_temp[i][j] =
1967 w83793_read_value(client,
1968 W83793_REG_SF2_TEMP(i, j));
1969 }
1970 }
1971
1972 for (i = 0; i < ARRAY_SIZE(data->temp_mode); i++)
1973 data->temp_mode[i] =
1974 w83793_read_value(client, W83793_REG_TEMP_MODE[i]);
1975
1976 for (i = 0; i < ARRAY_SIZE(data->tolerance); i++) {
1977 data->tolerance[i] =
1978 w83793_read_value(client, W83793_REG_TEMP_TOL(i));
1979 }
1980
1981 for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
1982 if (!(data->has_pwm & (1 << i)))
1983 continue;
1984 data->pwm[i][PWM_NONSTOP] =
1985 w83793_read_value(client, W83793_REG_PWM(i, PWM_NONSTOP));
1986 data->pwm[i][PWM_START] =
1987 w83793_read_value(client, W83793_REG_PWM(i, PWM_START));
1988 data->pwm_stop_time[i] =
1989 w83793_read_value(client, W83793_REG_PWM_STOP_TIME(i));
1990 }
1991
1992 data->pwm_default = w83793_read_value(client, W83793_REG_PWM_DEFAULT);
1993 data->pwm_enable = w83793_read_value(client, W83793_REG_PWM_ENABLE);
1994 data->pwm_uptime = w83793_read_value(client, W83793_REG_PWM_UPTIME);
1995 data->pwm_downtime = w83793_read_value(client, W83793_REG_PWM_DOWNTIME);
1996 data->temp_critical =
1997 w83793_read_value(client, W83793_REG_TEMP_CRITICAL);
1998 data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP);
1999
2000 for (i = 0; i < ARRAY_SIZE(data->beeps); i++) {
2001 data->beeps[i] = w83793_read_value(client, W83793_REG_BEEP(i));
2002 }
2003
2004 data->last_nonvolatile = jiffies;
2005}
2006
2007static struct w83793_data *w83793_update_device(struct device *dev)
2008{
2009 struct i2c_client *client = to_i2c_client(dev);
2010 struct w83793_data *data = i2c_get_clientdata(client);
2011 int i;
2012
2013 mutex_lock(&data->update_lock);
2014
2015 if (!(time_after(jiffies, data->last_updated + HZ * 2)
2016 || !data->valid))
2017 goto END;
2018
2019 /* Update the voltages measured value and limits */
2020 for (i = 0; i < ARRAY_SIZE(data->in); i++)
2021 data->in[i][IN_READ] =
2022 w83793_read_value(client, W83793_REG_IN[i][IN_READ]);
2023
2024 data->in_low_bits[IN_READ] =
2025 w83793_read_value(client, W83793_REG_IN_LOW_BITS[IN_READ]);
2026
2027 for (i = 0; i < ARRAY_SIZE(data->fan); i++) {
2028 if (!(data->has_fan & (1 << i))) {
2029 continue;
2030 }
2031 data->fan[i] =
2032 w83793_read_value(client, W83793_REG_FAN(i)) << 8;
2033 data->fan[i] |=
2034 w83793_read_value(client, W83793_REG_FAN(i) + 1);
2035 }
2036
2037 for (i = 0; i < ARRAY_SIZE(data->temp); i++) {
2038 if (!(data->has_temp & (1 << i)))
2039 continue;
2040 data->temp[i][TEMP_READ] =
2041 w83793_read_value(client, W83793_REG_TEMP[i][TEMP_READ]);
2042 }
2043
2044 data->temp_low_bits =
2045 w83793_read_value(client, W83793_REG_TEMP_LOW_BITS);
2046
2047 for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
2048 if (data->has_pwm & (1 << i))
2049 data->pwm[i][PWM_DUTY] =
2050 w83793_read_value(client,
2051 W83793_REG_PWM(i, PWM_DUTY));
2052 }
2053
2054 for (i = 0; i < ARRAY_SIZE(data->alarms); i++)
2055 data->alarms[i] =
2056 w83793_read_value(client, W83793_REG_ALARM(i));
2057 if (data->has_vid & 0x01)
2058 data->vid[0] = w83793_read_value(client, W83793_REG_VID_INA);
2059 if (data->has_vid & 0x02)
2060 data->vid[1] = w83793_read_value(client, W83793_REG_VID_INB);
2061 w83793_update_nonvolatile(dev);
2062 data->last_updated = jiffies;
2063 data->valid = 1;
2064
2065END:
2066 mutex_unlock(&data->update_lock);
2067 return data;
2068}
2069
2070/* Ignore the possibility that somebody change bank outside the driver
2071 Must be called with data->update_lock held, except during initialization */
2072static u8 w83793_read_value(struct i2c_client *client, u16 reg)
2073{
2074 struct w83793_data *data = i2c_get_clientdata(client);
2075 u8 res = 0xff;
2076 u8 new_bank = reg >> 8;
2077
2078 new_bank |= data->bank & 0xfc;
2079 if (data->bank != new_bank) {
2080 if (i2c_smbus_write_byte_data
2081 (client, W83793_REG_BANKSEL, new_bank) >= 0)
2082 data->bank = new_bank;
2083 else {
2084 dev_err(&client->dev,
2085 "set bank to %d failed, fall back "
2086 "to bank %d, read reg 0x%x error\n",
2087 new_bank, data->bank, reg);
2088 res = 0x0; /* read 0x0 from the chip */
2089 goto END;
2090 }
2091 }
2092 res = i2c_smbus_read_byte_data(client, reg & 0xff);
2093END:
2094 return res;
2095}
2096
2097/* Must be called with data->update_lock held, except during initialization */
2098static int w83793_write_value(struct i2c_client *client, u16 reg, u8 value)
2099{
2100 struct w83793_data *data = i2c_get_clientdata(client);
2101 int res;
2102 u8 new_bank = reg >> 8;
2103
2104 new_bank |= data->bank & 0xfc;
2105 if (data->bank != new_bank) {
2106 if ((res = i2c_smbus_write_byte_data
2107 (client, W83793_REG_BANKSEL, new_bank)) >= 0)
2108 data->bank = new_bank;
2109 else {
2110 dev_err(&client->dev,
2111 "set bank to %d failed, fall back "
2112 "to bank %d, write reg 0x%x error\n",
2113 new_bank, data->bank, reg);
2114 goto END;
2115 }
2116 }
2117
2118 res = i2c_smbus_write_byte_data(client, reg & 0xff, value);
2119END:
2120 return res;
2121}
2122
2123static int __init sensors_w83793_init(void)
2124{
2125 return i2c_add_driver(&w83793_driver);
2126}
2127
2128static void __exit sensors_w83793_exit(void)
2129{
2130 i2c_del_driver(&w83793_driver);
2131}
2132
2133MODULE_AUTHOR("Yuan Mu, Sven Anders");
2134MODULE_DESCRIPTION("w83793 driver");
2135MODULE_LICENSE("GPL");
2136
2137module_init(sensors_w83793_init);
2138module_exit(sensors_w83793_exit);
1/*
2 * w83793.c - Linux kernel driver for hardware monitoring
3 * Copyright (C) 2006 Winbond Electronics Corp.
4 * Yuan Mu
5 * Rudolf Marek <r.marek@assembler.cz>
6 * Copyright (C) 2009-2010 Sven Anders <anders@anduras.de>, ANDURAS AG.
7 * Watchdog driver part
8 * (Based partially on fschmd driver,
9 * Copyright 2007-2008 by Hans de Goede)
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation - version 2.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 * 02110-1301 USA.
24 */
25
26/*
27 * Supports following chips:
28 *
29 * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA
30 * w83793 10 12 8 6 0x7b 0x5ca3 yes no
31 */
32
33#include <linux/module.h>
34#include <linux/init.h>
35#include <linux/slab.h>
36#include <linux/i2c.h>
37#include <linux/hwmon.h>
38#include <linux/hwmon-vid.h>
39#include <linux/hwmon-sysfs.h>
40#include <linux/err.h>
41#include <linux/mutex.h>
42#include <linux/fs.h>
43#include <linux/watchdog.h>
44#include <linux/miscdevice.h>
45#include <linux/uaccess.h>
46#include <linux/kref.h>
47#include <linux/notifier.h>
48#include <linux/reboot.h>
49
50/* Default values */
51#define WATCHDOG_TIMEOUT 2 /* 2 minute default timeout */
52
53/* Addresses to scan */
54static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
55 I2C_CLIENT_END };
56
57/* Insmod parameters */
58
59static unsigned short force_subclients[4];
60module_param_array(force_subclients, short, NULL, 0);
61MODULE_PARM_DESC(force_subclients, "List of subclient addresses: "
62 "{bus, clientaddr, subclientaddr1, subclientaddr2}");
63
64static bool reset;
65module_param(reset, bool, 0);
66MODULE_PARM_DESC(reset, "Set to 1 to reset chip, not recommended");
67
68static int timeout = WATCHDOG_TIMEOUT; /* default timeout in minutes */
69module_param(timeout, int, 0);
70MODULE_PARM_DESC(timeout,
71 "Watchdog timeout in minutes. 2<= timeout <=255 (default="
72 __MODULE_STRING(WATCHDOG_TIMEOUT) ")");
73
74static bool nowayout = WATCHDOG_NOWAYOUT;
75module_param(nowayout, bool, 0);
76MODULE_PARM_DESC(nowayout,
77 "Watchdog cannot be stopped once started (default="
78 __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
79
80/*
81 * Address 0x00, 0x0d, 0x0e, 0x0f in all three banks are reserved
82 * as ID, Bank Select registers
83 */
84#define W83793_REG_BANKSEL 0x00
85#define W83793_REG_VENDORID 0x0d
86#define W83793_REG_CHIPID 0x0e
87#define W83793_REG_DEVICEID 0x0f
88
89#define W83793_REG_CONFIG 0x40
90#define W83793_REG_MFC 0x58
91#define W83793_REG_FANIN_CTRL 0x5c
92#define W83793_REG_FANIN_SEL 0x5d
93#define W83793_REG_I2C_ADDR 0x0b
94#define W83793_REG_I2C_SUBADDR 0x0c
95#define W83793_REG_VID_INA 0x05
96#define W83793_REG_VID_INB 0x06
97#define W83793_REG_VID_LATCHA 0x07
98#define W83793_REG_VID_LATCHB 0x08
99#define W83793_REG_VID_CTRL 0x59
100
101#define W83793_REG_WDT_LOCK 0x01
102#define W83793_REG_WDT_ENABLE 0x02
103#define W83793_REG_WDT_STATUS 0x03
104#define W83793_REG_WDT_TIMEOUT 0x04
105
106static u16 W83793_REG_TEMP_MODE[2] = { 0x5e, 0x5f };
107
108#define TEMP_READ 0
109#define TEMP_CRIT 1
110#define TEMP_CRIT_HYST 2
111#define TEMP_WARN 3
112#define TEMP_WARN_HYST 4
113/*
114 * only crit and crit_hyst affect real-time alarm status
115 * current crit crit_hyst warn warn_hyst
116 */
117static u16 W83793_REG_TEMP[][5] = {
118 {0x1c, 0x78, 0x79, 0x7a, 0x7b},
119 {0x1d, 0x7c, 0x7d, 0x7e, 0x7f},
120 {0x1e, 0x80, 0x81, 0x82, 0x83},
121 {0x1f, 0x84, 0x85, 0x86, 0x87},
122 {0x20, 0x88, 0x89, 0x8a, 0x8b},
123 {0x21, 0x8c, 0x8d, 0x8e, 0x8f},
124};
125
126#define W83793_REG_TEMP_LOW_BITS 0x22
127
128#define W83793_REG_BEEP(index) (0x53 + (index))
129#define W83793_REG_ALARM(index) (0x4b + (index))
130
131#define W83793_REG_CLR_CHASSIS 0x4a /* SMI MASK4 */
132#define W83793_REG_IRQ_CTRL 0x50
133#define W83793_REG_OVT_CTRL 0x51
134#define W83793_REG_OVT_BEEP 0x52
135
136#define IN_READ 0
137#define IN_MAX 1
138#define IN_LOW 2
139static const u16 W83793_REG_IN[][3] = {
140 /* Current, High, Low */
141 {0x10, 0x60, 0x61}, /* Vcore A */
142 {0x11, 0x62, 0x63}, /* Vcore B */
143 {0x12, 0x64, 0x65}, /* Vtt */
144 {0x14, 0x6a, 0x6b}, /* VSEN1 */
145 {0x15, 0x6c, 0x6d}, /* VSEN2 */
146 {0x16, 0x6e, 0x6f}, /* +3VSEN */
147 {0x17, 0x70, 0x71}, /* +12VSEN */
148 {0x18, 0x72, 0x73}, /* 5VDD */
149 {0x19, 0x74, 0x75}, /* 5VSB */
150 {0x1a, 0x76, 0x77}, /* VBAT */
151};
152
153/* Low Bits of Vcore A/B Vtt Read/High/Low */
154static const u16 W83793_REG_IN_LOW_BITS[] = { 0x1b, 0x68, 0x69 };
155static u8 scale_in[] = { 2, 2, 2, 16, 16, 16, 8, 24, 24, 16 };
156static u8 scale_in_add[] = { 0, 0, 0, 0, 0, 0, 0, 150, 150, 0 };
157
158#define W83793_REG_FAN(index) (0x23 + 2 * (index)) /* High byte */
159#define W83793_REG_FAN_MIN(index) (0x90 + 2 * (index)) /* High byte */
160
161#define W83793_REG_PWM_DEFAULT 0xb2
162#define W83793_REG_PWM_ENABLE 0x207
163#define W83793_REG_PWM_UPTIME 0xc3 /* Unit in 0.1 second */
164#define W83793_REG_PWM_DOWNTIME 0xc4 /* Unit in 0.1 second */
165#define W83793_REG_TEMP_CRITICAL 0xc5
166
167#define PWM_DUTY 0
168#define PWM_START 1
169#define PWM_NONSTOP 2
170#define PWM_STOP_TIME 3
171#define W83793_REG_PWM(index, nr) (((nr) == 0 ? 0xb3 : \
172 (nr) == 1 ? 0x220 : 0x218) + (index))
173
174/* bit field, fan1 is bit0, fan2 is bit1 ... */
175#define W83793_REG_TEMP_FAN_MAP(index) (0x201 + (index))
176#define W83793_REG_TEMP_TOL(index) (0x208 + (index))
177#define W83793_REG_TEMP_CRUISE(index) (0x210 + (index))
178#define W83793_REG_PWM_STOP_TIME(index) (0x228 + (index))
179#define W83793_REG_SF2_TEMP(index, nr) (0x230 + ((index) << 4) + (nr))
180#define W83793_REG_SF2_PWM(index, nr) (0x238 + ((index) << 4) + (nr))
181
182static inline unsigned long FAN_FROM_REG(u16 val)
183{
184 if ((val >= 0xfff) || (val == 0))
185 return 0;
186 return 1350000UL / val;
187}
188
189static inline u16 FAN_TO_REG(long rpm)
190{
191 if (rpm <= 0)
192 return 0x0fff;
193 return SENSORS_LIMIT((1350000 + (rpm >> 1)) / rpm, 1, 0xffe);
194}
195
196static inline unsigned long TIME_FROM_REG(u8 reg)
197{
198 return reg * 100;
199}
200
201static inline u8 TIME_TO_REG(unsigned long val)
202{
203 return SENSORS_LIMIT((val + 50) / 100, 0, 0xff);
204}
205
206static inline long TEMP_FROM_REG(s8 reg)
207{
208 return reg * 1000;
209}
210
211static inline s8 TEMP_TO_REG(long val, s8 min, s8 max)
212{
213 return SENSORS_LIMIT((val + (val < 0 ? -500 : 500)) / 1000, min, max);
214}
215
216struct w83793_data {
217 struct i2c_client *lm75[2];
218 struct device *hwmon_dev;
219 struct mutex update_lock;
220 char valid; /* !=0 if following fields are valid */
221 unsigned long last_updated; /* In jiffies */
222 unsigned long last_nonvolatile; /* In jiffies, last time we update the
223 * nonvolatile registers
224 */
225
226 u8 bank;
227 u8 vrm;
228 u8 vid[2];
229 u8 in[10][3]; /* Register value, read/high/low */
230 u8 in_low_bits[3]; /* Additional resolution for VCore A/B Vtt */
231
232 u16 has_fan; /* Only fan1- fan5 has own pins */
233 u16 fan[12]; /* Register value combine */
234 u16 fan_min[12]; /* Register value combine */
235
236 s8 temp[6][5]; /* current, crit, crit_hyst,warn, warn_hyst */
237 u8 temp_low_bits; /* Additional resolution TD1-TD4 */
238 u8 temp_mode[2]; /* byte 0: Temp D1-D4 mode each has 2 bits
239 * byte 1: Temp R1,R2 mode, each has 1 bit
240 */
241 u8 temp_critical; /* If reached all fan will be at full speed */
242 u8 temp_fan_map[6]; /* Temp controls which pwm fan, bit field */
243
244 u8 has_pwm;
245 u8 has_temp;
246 u8 has_vid;
247 u8 pwm_enable; /* Register value, each Temp has 1 bit */
248 u8 pwm_uptime; /* Register value */
249 u8 pwm_downtime; /* Register value */
250 u8 pwm_default; /* All fan default pwm, next poweron valid */
251 u8 pwm[8][3]; /* Register value */
252 u8 pwm_stop_time[8];
253 u8 temp_cruise[6];
254
255 u8 alarms[5]; /* realtime status registers */
256 u8 beeps[5];
257 u8 beep_enable;
258 u8 tolerance[3]; /* Temp tolerance(Smart Fan I/II) */
259 u8 sf2_pwm[6][7]; /* Smart FanII: Fan duty cycle */
260 u8 sf2_temp[6][7]; /* Smart FanII: Temp level point */
261
262 /* watchdog */
263 struct i2c_client *client;
264 struct mutex watchdog_lock;
265 struct list_head list; /* member of the watchdog_data_list */
266 struct kref kref;
267 struct miscdevice watchdog_miscdev;
268 unsigned long watchdog_is_open;
269 char watchdog_expect_close;
270 char watchdog_name[10]; /* must be unique to avoid sysfs conflict */
271 unsigned int watchdog_caused_reboot;
272 int watchdog_timeout; /* watchdog timeout in minutes */
273};
274
275/*
276 * Somewhat ugly :( global data pointer list with all devices, so that
277 * we can find our device data as when using misc_register. There is no
278 * other method to get to one's device data from the open file-op and
279 * for usage in the reboot notifier callback.
280 */
281static LIST_HEAD(watchdog_data_list);
282
283/* Note this lock not only protect list access, but also data.kref access */
284static DEFINE_MUTEX(watchdog_data_mutex);
285
286/*
287 * Release our data struct when we're detached from the i2c client *and* all
288 * references to our watchdog device are released
289 */
290static void w83793_release_resources(struct kref *ref)
291{
292 struct w83793_data *data = container_of(ref, struct w83793_data, kref);
293 kfree(data);
294}
295
296static u8 w83793_read_value(struct i2c_client *client, u16 reg);
297static int w83793_write_value(struct i2c_client *client, u16 reg, u8 value);
298static int w83793_probe(struct i2c_client *client,
299 const struct i2c_device_id *id);
300static int w83793_detect(struct i2c_client *client,
301 struct i2c_board_info *info);
302static int w83793_remove(struct i2c_client *client);
303static void w83793_init_client(struct i2c_client *client);
304static void w83793_update_nonvolatile(struct device *dev);
305static struct w83793_data *w83793_update_device(struct device *dev);
306
307static const struct i2c_device_id w83793_id[] = {
308 { "w83793", 0 },
309 { }
310};
311MODULE_DEVICE_TABLE(i2c, w83793_id);
312
313static struct i2c_driver w83793_driver = {
314 .class = I2C_CLASS_HWMON,
315 .driver = {
316 .name = "w83793",
317 },
318 .probe = w83793_probe,
319 .remove = w83793_remove,
320 .id_table = w83793_id,
321 .detect = w83793_detect,
322 .address_list = normal_i2c,
323};
324
325static ssize_t
326show_vrm(struct device *dev, struct device_attribute *attr, char *buf)
327{
328 struct w83793_data *data = dev_get_drvdata(dev);
329 return sprintf(buf, "%d\n", data->vrm);
330}
331
332static ssize_t
333show_vid(struct device *dev, struct device_attribute *attr, char *buf)
334{
335 struct w83793_data *data = w83793_update_device(dev);
336 struct sensor_device_attribute_2 *sensor_attr =
337 to_sensor_dev_attr_2(attr);
338 int index = sensor_attr->index;
339
340 return sprintf(buf, "%d\n", vid_from_reg(data->vid[index], data->vrm));
341}
342
343static ssize_t
344store_vrm(struct device *dev, struct device_attribute *attr,
345 const char *buf, size_t count)
346{
347 struct w83793_data *data = dev_get_drvdata(dev);
348 unsigned long val;
349 int err;
350
351 err = kstrtoul(buf, 10, &val);
352 if (err)
353 return err;
354
355 data->vrm = val;
356 return count;
357}
358
359#define ALARM_STATUS 0
360#define BEEP_ENABLE 1
361static ssize_t
362show_alarm_beep(struct device *dev, struct device_attribute *attr, char *buf)
363{
364 struct w83793_data *data = w83793_update_device(dev);
365 struct sensor_device_attribute_2 *sensor_attr =
366 to_sensor_dev_attr_2(attr);
367 int nr = sensor_attr->nr;
368 int index = sensor_attr->index >> 3;
369 int bit = sensor_attr->index & 0x07;
370 u8 val;
371
372 if (nr == ALARM_STATUS) {
373 val = (data->alarms[index] >> (bit)) & 1;
374 } else { /* BEEP_ENABLE */
375 val = (data->beeps[index] >> (bit)) & 1;
376 }
377
378 return sprintf(buf, "%u\n", val);
379}
380
381static ssize_t
382store_beep(struct device *dev, struct device_attribute *attr,
383 const char *buf, size_t count)
384{
385 struct i2c_client *client = to_i2c_client(dev);
386 struct w83793_data *data = i2c_get_clientdata(client);
387 struct sensor_device_attribute_2 *sensor_attr =
388 to_sensor_dev_attr_2(attr);
389 int index = sensor_attr->index >> 3;
390 int shift = sensor_attr->index & 0x07;
391 u8 beep_bit = 1 << shift;
392 unsigned long val;
393 int err;
394
395 err = kstrtoul(buf, 10, &val);
396 if (err)
397 return err;
398
399 if (val > 1)
400 return -EINVAL;
401
402 mutex_lock(&data->update_lock);
403 data->beeps[index] = w83793_read_value(client, W83793_REG_BEEP(index));
404 data->beeps[index] &= ~beep_bit;
405 data->beeps[index] |= val << shift;
406 w83793_write_value(client, W83793_REG_BEEP(index), data->beeps[index]);
407 mutex_unlock(&data->update_lock);
408
409 return count;
410}
411
412static ssize_t
413show_beep_enable(struct device *dev, struct device_attribute *attr, char *buf)
414{
415 struct w83793_data *data = w83793_update_device(dev);
416 return sprintf(buf, "%u\n", (data->beep_enable >> 1) & 0x01);
417}
418
419static ssize_t
420store_beep_enable(struct device *dev, struct device_attribute *attr,
421 const char *buf, size_t count)
422{
423 struct i2c_client *client = to_i2c_client(dev);
424 struct w83793_data *data = i2c_get_clientdata(client);
425 unsigned long val;
426 int err;
427
428 err = kstrtoul(buf, 10, &val);
429 if (err)
430 return err;
431
432 if (val > 1)
433 return -EINVAL;
434
435 mutex_lock(&data->update_lock);
436 data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP)
437 & 0xfd;
438 data->beep_enable |= val << 1;
439 w83793_write_value(client, W83793_REG_OVT_BEEP, data->beep_enable);
440 mutex_unlock(&data->update_lock);
441
442 return count;
443}
444
445/* Write any value to clear chassis alarm */
446static ssize_t
447store_chassis_clear_legacy(struct device *dev,
448 struct device_attribute *attr, const char *buf,
449 size_t count)
450{
451 struct i2c_client *client = to_i2c_client(dev);
452 struct w83793_data *data = i2c_get_clientdata(client);
453 u8 val;
454
455 dev_warn(dev, "Attribute chassis is deprecated, "
456 "use intrusion0_alarm instead\n");
457
458 mutex_lock(&data->update_lock);
459 val = w83793_read_value(client, W83793_REG_CLR_CHASSIS);
460 val |= 0x80;
461 w83793_write_value(client, W83793_REG_CLR_CHASSIS, val);
462 mutex_unlock(&data->update_lock);
463 return count;
464}
465
466/* Write 0 to clear chassis alarm */
467static ssize_t
468store_chassis_clear(struct device *dev,
469 struct device_attribute *attr, const char *buf,
470 size_t count)
471{
472 struct i2c_client *client = to_i2c_client(dev);
473 struct w83793_data *data = i2c_get_clientdata(client);
474 unsigned long val;
475 u8 reg;
476 int err;
477
478 err = kstrtoul(buf, 10, &val);
479 if (err)
480 return err;
481 if (val)
482 return -EINVAL;
483
484 mutex_lock(&data->update_lock);
485 reg = w83793_read_value(client, W83793_REG_CLR_CHASSIS);
486 w83793_write_value(client, W83793_REG_CLR_CHASSIS, reg | 0x80);
487 data->valid = 0; /* Force cache refresh */
488 mutex_unlock(&data->update_lock);
489 return count;
490}
491
492#define FAN_INPUT 0
493#define FAN_MIN 1
494static ssize_t
495show_fan(struct device *dev, struct device_attribute *attr, char *buf)
496{
497 struct sensor_device_attribute_2 *sensor_attr =
498 to_sensor_dev_attr_2(attr);
499 int nr = sensor_attr->nr;
500 int index = sensor_attr->index;
501 struct w83793_data *data = w83793_update_device(dev);
502 u16 val;
503
504 if (nr == FAN_INPUT)
505 val = data->fan[index] & 0x0fff;
506 else
507 val = data->fan_min[index] & 0x0fff;
508
509 return sprintf(buf, "%lu\n", FAN_FROM_REG(val));
510}
511
512static ssize_t
513store_fan_min(struct device *dev, struct device_attribute *attr,
514 const char *buf, size_t count)
515{
516 struct sensor_device_attribute_2 *sensor_attr =
517 to_sensor_dev_attr_2(attr);
518 int index = sensor_attr->index;
519 struct i2c_client *client = to_i2c_client(dev);
520 struct w83793_data *data = i2c_get_clientdata(client);
521 unsigned long val;
522 int err;
523
524 err = kstrtoul(buf, 10, &val);
525 if (err)
526 return err;
527 val = FAN_TO_REG(val);
528
529 mutex_lock(&data->update_lock);
530 data->fan_min[index] = val;
531 w83793_write_value(client, W83793_REG_FAN_MIN(index),
532 (val >> 8) & 0xff);
533 w83793_write_value(client, W83793_REG_FAN_MIN(index) + 1, val & 0xff);
534 mutex_unlock(&data->update_lock);
535
536 return count;
537}
538
539static ssize_t
540show_pwm(struct device *dev, struct device_attribute *attr, char *buf)
541{
542 struct sensor_device_attribute_2 *sensor_attr =
543 to_sensor_dev_attr_2(attr);
544 struct w83793_data *data = w83793_update_device(dev);
545 u16 val;
546 int nr = sensor_attr->nr;
547 int index = sensor_attr->index;
548
549 if (nr == PWM_STOP_TIME)
550 val = TIME_FROM_REG(data->pwm_stop_time[index]);
551 else
552 val = (data->pwm[index][nr] & 0x3f) << 2;
553
554 return sprintf(buf, "%d\n", val);
555}
556
557static ssize_t
558store_pwm(struct device *dev, struct device_attribute *attr,
559 const char *buf, size_t count)
560{
561 struct i2c_client *client = to_i2c_client(dev);
562 struct w83793_data *data = i2c_get_clientdata(client);
563 struct sensor_device_attribute_2 *sensor_attr =
564 to_sensor_dev_attr_2(attr);
565 int nr = sensor_attr->nr;
566 int index = sensor_attr->index;
567 unsigned long val;
568 int err;
569
570 err = kstrtoul(buf, 10, &val);
571 if (err)
572 return err;
573
574 mutex_lock(&data->update_lock);
575 if (nr == PWM_STOP_TIME) {
576 val = TIME_TO_REG(val);
577 data->pwm_stop_time[index] = val;
578 w83793_write_value(client, W83793_REG_PWM_STOP_TIME(index),
579 val);
580 } else {
581 val = SENSORS_LIMIT(val, 0, 0xff) >> 2;
582 data->pwm[index][nr] =
583 w83793_read_value(client, W83793_REG_PWM(index, nr)) & 0xc0;
584 data->pwm[index][nr] |= val;
585 w83793_write_value(client, W83793_REG_PWM(index, nr),
586 data->pwm[index][nr]);
587 }
588
589 mutex_unlock(&data->update_lock);
590 return count;
591}
592
593static ssize_t
594show_temp(struct device *dev, struct device_attribute *attr, char *buf)
595{
596 struct sensor_device_attribute_2 *sensor_attr =
597 to_sensor_dev_attr_2(attr);
598 int nr = sensor_attr->nr;
599 int index = sensor_attr->index;
600 struct w83793_data *data = w83793_update_device(dev);
601 long temp = TEMP_FROM_REG(data->temp[index][nr]);
602
603 if (nr == TEMP_READ && index < 4) { /* Only TD1-TD4 have low bits */
604 int low = ((data->temp_low_bits >> (index * 2)) & 0x03) * 250;
605 temp += temp > 0 ? low : -low;
606 }
607 return sprintf(buf, "%ld\n", temp);
608}
609
610static ssize_t
611store_temp(struct device *dev, struct device_attribute *attr,
612 const char *buf, size_t count)
613{
614 struct sensor_device_attribute_2 *sensor_attr =
615 to_sensor_dev_attr_2(attr);
616 int nr = sensor_attr->nr;
617 int index = sensor_attr->index;
618 struct i2c_client *client = to_i2c_client(dev);
619 struct w83793_data *data = i2c_get_clientdata(client);
620 long tmp;
621 int err;
622
623 err = kstrtol(buf, 10, &tmp);
624 if (err)
625 return err;
626
627 mutex_lock(&data->update_lock);
628 data->temp[index][nr] = TEMP_TO_REG(tmp, -128, 127);
629 w83793_write_value(client, W83793_REG_TEMP[index][nr],
630 data->temp[index][nr]);
631 mutex_unlock(&data->update_lock);
632 return count;
633}
634
635/*
636 * TD1-TD4
637 * each has 4 mode:(2 bits)
638 * 0: Stop monitor
639 * 1: Use internal temp sensor(default)
640 * 2: Reserved
641 * 3: Use sensor in Intel CPU and get result by PECI
642 *
643 * TR1-TR2
644 * each has 2 mode:(1 bit)
645 * 0: Disable temp sensor monitor
646 * 1: To enable temp sensors monitor
647 */
648
649/* 0 disable, 6 PECI */
650static u8 TO_TEMP_MODE[] = { 0, 0, 0, 6 };
651
652static ssize_t
653show_temp_mode(struct device *dev, struct device_attribute *attr, char *buf)
654{
655 struct w83793_data *data = w83793_update_device(dev);
656 struct sensor_device_attribute_2 *sensor_attr =
657 to_sensor_dev_attr_2(attr);
658 int index = sensor_attr->index;
659 u8 mask = (index < 4) ? 0x03 : 0x01;
660 u8 shift = (index < 4) ? (2 * index) : (index - 4);
661 u8 tmp;
662 index = (index < 4) ? 0 : 1;
663
664 tmp = (data->temp_mode[index] >> shift) & mask;
665
666 /* for the internal sensor, found out if diode or thermistor */
667 if (tmp == 1)
668 tmp = index == 0 ? 3 : 4;
669 else
670 tmp = TO_TEMP_MODE[tmp];
671
672 return sprintf(buf, "%d\n", tmp);
673}
674
675static ssize_t
676store_temp_mode(struct device *dev, struct device_attribute *attr,
677 const char *buf, size_t count)
678{
679 struct i2c_client *client = to_i2c_client(dev);
680 struct w83793_data *data = i2c_get_clientdata(client);
681 struct sensor_device_attribute_2 *sensor_attr =
682 to_sensor_dev_attr_2(attr);
683 int index = sensor_attr->index;
684 u8 mask = (index < 4) ? 0x03 : 0x01;
685 u8 shift = (index < 4) ? (2 * index) : (index - 4);
686 unsigned long val;
687 int err;
688
689 err = kstrtoul(buf, 10, &val);
690 if (err)
691 return err;
692
693 /* transform the sysfs interface values into table above */
694 if ((val == 6) && (index < 4)) {
695 val -= 3;
696 } else if ((val == 3 && index < 4)
697 || (val == 4 && index >= 4)) {
698 /* transform diode or thermistor into internal enable */
699 val = !!val;
700 } else {
701 return -EINVAL;
702 }
703
704 index = (index < 4) ? 0 : 1;
705 mutex_lock(&data->update_lock);
706 data->temp_mode[index] =
707 w83793_read_value(client, W83793_REG_TEMP_MODE[index]);
708 data->temp_mode[index] &= ~(mask << shift);
709 data->temp_mode[index] |= val << shift;
710 w83793_write_value(client, W83793_REG_TEMP_MODE[index],
711 data->temp_mode[index]);
712 mutex_unlock(&data->update_lock);
713
714 return count;
715}
716
717#define SETUP_PWM_DEFAULT 0
718#define SETUP_PWM_UPTIME 1 /* Unit in 0.1s */
719#define SETUP_PWM_DOWNTIME 2 /* Unit in 0.1s */
720#define SETUP_TEMP_CRITICAL 3
721static ssize_t
722show_sf_setup(struct device *dev, struct device_attribute *attr, char *buf)
723{
724 struct sensor_device_attribute_2 *sensor_attr =
725 to_sensor_dev_attr_2(attr);
726 int nr = sensor_attr->nr;
727 struct w83793_data *data = w83793_update_device(dev);
728 u32 val = 0;
729
730 if (nr == SETUP_PWM_DEFAULT)
731 val = (data->pwm_default & 0x3f) << 2;
732 else if (nr == SETUP_PWM_UPTIME)
733 val = TIME_FROM_REG(data->pwm_uptime);
734 else if (nr == SETUP_PWM_DOWNTIME)
735 val = TIME_FROM_REG(data->pwm_downtime);
736 else if (nr == SETUP_TEMP_CRITICAL)
737 val = TEMP_FROM_REG(data->temp_critical & 0x7f);
738
739 return sprintf(buf, "%d\n", val);
740}
741
742static ssize_t
743store_sf_setup(struct device *dev, struct device_attribute *attr,
744 const char *buf, size_t count)
745{
746 struct sensor_device_attribute_2 *sensor_attr =
747 to_sensor_dev_attr_2(attr);
748 int nr = sensor_attr->nr;
749 struct i2c_client *client = to_i2c_client(dev);
750 struct w83793_data *data = i2c_get_clientdata(client);
751 long val;
752 int err;
753
754 err = kstrtol(buf, 10, &val);
755 if (err)
756 return err;
757
758 mutex_lock(&data->update_lock);
759 if (nr == SETUP_PWM_DEFAULT) {
760 data->pwm_default =
761 w83793_read_value(client, W83793_REG_PWM_DEFAULT) & 0xc0;
762 data->pwm_default |= SENSORS_LIMIT(val, 0, 0xff) >> 2;
763 w83793_write_value(client, W83793_REG_PWM_DEFAULT,
764 data->pwm_default);
765 } else if (nr == SETUP_PWM_UPTIME) {
766 data->pwm_uptime = TIME_TO_REG(val);
767 data->pwm_uptime += data->pwm_uptime == 0 ? 1 : 0;
768 w83793_write_value(client, W83793_REG_PWM_UPTIME,
769 data->pwm_uptime);
770 } else if (nr == SETUP_PWM_DOWNTIME) {
771 data->pwm_downtime = TIME_TO_REG(val);
772 data->pwm_downtime += data->pwm_downtime == 0 ? 1 : 0;
773 w83793_write_value(client, W83793_REG_PWM_DOWNTIME,
774 data->pwm_downtime);
775 } else { /* SETUP_TEMP_CRITICAL */
776 data->temp_critical =
777 w83793_read_value(client, W83793_REG_TEMP_CRITICAL) & 0x80;
778 data->temp_critical |= TEMP_TO_REG(val, 0, 0x7f);
779 w83793_write_value(client, W83793_REG_TEMP_CRITICAL,
780 data->temp_critical);
781 }
782
783 mutex_unlock(&data->update_lock);
784 return count;
785}
786
787/*
788 * Temp SmartFan control
789 * TEMP_FAN_MAP
790 * Temp channel control which pwm fan, bitfield, bit 0 indicate pwm1...
791 * It's possible two or more temp channels control the same fan, w83793
792 * always prefers to pick the most critical request and applies it to
793 * the related Fan.
794 * It's possible one fan is not in any mapping of 6 temp channels, this
795 * means the fan is manual mode
796 *
797 * TEMP_PWM_ENABLE
798 * Each temp channel has its own SmartFan mode, and temp channel
799 * control fans that are set by TEMP_FAN_MAP
800 * 0: SmartFanII mode
801 * 1: Thermal Cruise Mode
802 *
803 * TEMP_CRUISE
804 * Target temperature in thermal cruise mode, w83793 will try to turn
805 * fan speed to keep the temperature of target device around this
806 * temperature.
807 *
808 * TEMP_TOLERANCE
809 * If Temp higher or lower than target with this tolerance, w83793
810 * will take actions to speed up or slow down the fan to keep the
811 * temperature within the tolerance range.
812 */
813
814#define TEMP_FAN_MAP 0
815#define TEMP_PWM_ENABLE 1
816#define TEMP_CRUISE 2
817#define TEMP_TOLERANCE 3
818static ssize_t
819show_sf_ctrl(struct device *dev, struct device_attribute *attr, char *buf)
820{
821 struct sensor_device_attribute_2 *sensor_attr =
822 to_sensor_dev_attr_2(attr);
823 int nr = sensor_attr->nr;
824 int index = sensor_attr->index;
825 struct w83793_data *data = w83793_update_device(dev);
826 u32 val;
827
828 if (nr == TEMP_FAN_MAP) {
829 val = data->temp_fan_map[index];
830 } else if (nr == TEMP_PWM_ENABLE) {
831 /* +2 to transfrom into 2 and 3 to conform with sysfs intf */
832 val = ((data->pwm_enable >> index) & 0x01) + 2;
833 } else if (nr == TEMP_CRUISE) {
834 val = TEMP_FROM_REG(data->temp_cruise[index] & 0x7f);
835 } else { /* TEMP_TOLERANCE */
836 val = data->tolerance[index >> 1] >> ((index & 0x01) ? 4 : 0);
837 val = TEMP_FROM_REG(val & 0x0f);
838 }
839 return sprintf(buf, "%d\n", val);
840}
841
842static ssize_t
843store_sf_ctrl(struct device *dev, struct device_attribute *attr,
844 const char *buf, size_t count)
845{
846 struct sensor_device_attribute_2 *sensor_attr =
847 to_sensor_dev_attr_2(attr);
848 int nr = sensor_attr->nr;
849 int index = sensor_attr->index;
850 struct i2c_client *client = to_i2c_client(dev);
851 struct w83793_data *data = i2c_get_clientdata(client);
852 long val;
853 int err;
854
855 err = kstrtol(buf, 10, &val);
856 if (err)
857 return err;
858
859 mutex_lock(&data->update_lock);
860 if (nr == TEMP_FAN_MAP) {
861 val = SENSORS_LIMIT(val, 0, 255);
862 w83793_write_value(client, W83793_REG_TEMP_FAN_MAP(index), val);
863 data->temp_fan_map[index] = val;
864 } else if (nr == TEMP_PWM_ENABLE) {
865 if (val == 2 || val == 3) {
866 data->pwm_enable =
867 w83793_read_value(client, W83793_REG_PWM_ENABLE);
868 if (val - 2)
869 data->pwm_enable |= 1 << index;
870 else
871 data->pwm_enable &= ~(1 << index);
872 w83793_write_value(client, W83793_REG_PWM_ENABLE,
873 data->pwm_enable);
874 } else {
875 mutex_unlock(&data->update_lock);
876 return -EINVAL;
877 }
878 } else if (nr == TEMP_CRUISE) {
879 data->temp_cruise[index] =
880 w83793_read_value(client, W83793_REG_TEMP_CRUISE(index));
881 data->temp_cruise[index] &= 0x80;
882 data->temp_cruise[index] |= TEMP_TO_REG(val, 0, 0x7f);
883
884 w83793_write_value(client, W83793_REG_TEMP_CRUISE(index),
885 data->temp_cruise[index]);
886 } else { /* TEMP_TOLERANCE */
887 int i = index >> 1;
888 u8 shift = (index & 0x01) ? 4 : 0;
889 data->tolerance[i] =
890 w83793_read_value(client, W83793_REG_TEMP_TOL(i));
891
892 data->tolerance[i] &= ~(0x0f << shift);
893 data->tolerance[i] |= TEMP_TO_REG(val, 0, 0x0f) << shift;
894 w83793_write_value(client, W83793_REG_TEMP_TOL(i),
895 data->tolerance[i]);
896 }
897
898 mutex_unlock(&data->update_lock);
899 return count;
900}
901
902static ssize_t
903show_sf2_pwm(struct device *dev, struct device_attribute *attr, char *buf)
904{
905 struct sensor_device_attribute_2 *sensor_attr =
906 to_sensor_dev_attr_2(attr);
907 int nr = sensor_attr->nr;
908 int index = sensor_attr->index;
909 struct w83793_data *data = w83793_update_device(dev);
910
911 return sprintf(buf, "%d\n", (data->sf2_pwm[index][nr] & 0x3f) << 2);
912}
913
914static ssize_t
915store_sf2_pwm(struct device *dev, struct device_attribute *attr,
916 const char *buf, size_t count)
917{
918 struct i2c_client *client = to_i2c_client(dev);
919 struct w83793_data *data = i2c_get_clientdata(client);
920 struct sensor_device_attribute_2 *sensor_attr =
921 to_sensor_dev_attr_2(attr);
922 int nr = sensor_attr->nr;
923 int index = sensor_attr->index;
924 unsigned long val;
925 int err;
926
927 err = kstrtoul(buf, 10, &val);
928 if (err)
929 return err;
930 val = SENSORS_LIMIT(val, 0, 0xff) >> 2;
931
932 mutex_lock(&data->update_lock);
933 data->sf2_pwm[index][nr] =
934 w83793_read_value(client, W83793_REG_SF2_PWM(index, nr)) & 0xc0;
935 data->sf2_pwm[index][nr] |= val;
936 w83793_write_value(client, W83793_REG_SF2_PWM(index, nr),
937 data->sf2_pwm[index][nr]);
938 mutex_unlock(&data->update_lock);
939 return count;
940}
941
942static ssize_t
943show_sf2_temp(struct device *dev, struct device_attribute *attr, char *buf)
944{
945 struct sensor_device_attribute_2 *sensor_attr =
946 to_sensor_dev_attr_2(attr);
947 int nr = sensor_attr->nr;
948 int index = sensor_attr->index;
949 struct w83793_data *data = w83793_update_device(dev);
950
951 return sprintf(buf, "%ld\n",
952 TEMP_FROM_REG(data->sf2_temp[index][nr] & 0x7f));
953}
954
955static ssize_t
956store_sf2_temp(struct device *dev, struct device_attribute *attr,
957 const char *buf, size_t count)
958{
959 struct i2c_client *client = to_i2c_client(dev);
960 struct w83793_data *data = i2c_get_clientdata(client);
961 struct sensor_device_attribute_2 *sensor_attr =
962 to_sensor_dev_attr_2(attr);
963 int nr = sensor_attr->nr;
964 int index = sensor_attr->index;
965 long val;
966 int err;
967
968 err = kstrtol(buf, 10, &val);
969 if (err)
970 return err;
971 val = TEMP_TO_REG(val, 0, 0x7f);
972
973 mutex_lock(&data->update_lock);
974 data->sf2_temp[index][nr] =
975 w83793_read_value(client, W83793_REG_SF2_TEMP(index, nr)) & 0x80;
976 data->sf2_temp[index][nr] |= val;
977 w83793_write_value(client, W83793_REG_SF2_TEMP(index, nr),
978 data->sf2_temp[index][nr]);
979 mutex_unlock(&data->update_lock);
980 return count;
981}
982
983/* only Vcore A/B and Vtt have additional 2 bits precision */
984static ssize_t
985show_in(struct device *dev, struct device_attribute *attr, char *buf)
986{
987 struct sensor_device_attribute_2 *sensor_attr =
988 to_sensor_dev_attr_2(attr);
989 int nr = sensor_attr->nr;
990 int index = sensor_attr->index;
991 struct w83793_data *data = w83793_update_device(dev);
992 u16 val = data->in[index][nr];
993
994 if (index < 3) {
995 val <<= 2;
996 val += (data->in_low_bits[nr] >> (index * 2)) & 0x3;
997 }
998 /* voltage inputs 5VDD and 5VSB needs 150mV offset */
999 val = val * scale_in[index] + scale_in_add[index];
1000 return sprintf(buf, "%d\n", val);
1001}
1002
1003static ssize_t
1004store_in(struct device *dev, struct device_attribute *attr,
1005 const char *buf, size_t count)
1006{
1007 struct sensor_device_attribute_2 *sensor_attr =
1008 to_sensor_dev_attr_2(attr);
1009 int nr = sensor_attr->nr;
1010 int index = sensor_attr->index;
1011 struct i2c_client *client = to_i2c_client(dev);
1012 struct w83793_data *data = i2c_get_clientdata(client);
1013 unsigned long val;
1014 int err;
1015
1016 err = kstrtoul(buf, 10, &val);
1017 if (err)
1018 return err;
1019 val = (val + scale_in[index] / 2) / scale_in[index];
1020
1021 mutex_lock(&data->update_lock);
1022 if (index > 2) {
1023 /* fix the limit values of 5VDD and 5VSB to ALARM mechanism */
1024 if (nr == 1 || nr == 2)
1025 val -= scale_in_add[index] / scale_in[index];
1026 val = SENSORS_LIMIT(val, 0, 255);
1027 } else {
1028 val = SENSORS_LIMIT(val, 0, 0x3FF);
1029 data->in_low_bits[nr] =
1030 w83793_read_value(client, W83793_REG_IN_LOW_BITS[nr]);
1031 data->in_low_bits[nr] &= ~(0x03 << (2 * index));
1032 data->in_low_bits[nr] |= (val & 0x03) << (2 * index);
1033 w83793_write_value(client, W83793_REG_IN_LOW_BITS[nr],
1034 data->in_low_bits[nr]);
1035 val >>= 2;
1036 }
1037 data->in[index][nr] = val;
1038 w83793_write_value(client, W83793_REG_IN[index][nr],
1039 data->in[index][nr]);
1040 mutex_unlock(&data->update_lock);
1041 return count;
1042}
1043
1044#define NOT_USED -1
1045
1046#define SENSOR_ATTR_IN(index) \
1047 SENSOR_ATTR_2(in##index##_input, S_IRUGO, show_in, NULL, \
1048 IN_READ, index), \
1049 SENSOR_ATTR_2(in##index##_max, S_IRUGO | S_IWUSR, show_in, \
1050 store_in, IN_MAX, index), \
1051 SENSOR_ATTR_2(in##index##_min, S_IRUGO | S_IWUSR, show_in, \
1052 store_in, IN_LOW, index), \
1053 SENSOR_ATTR_2(in##index##_alarm, S_IRUGO, show_alarm_beep, \
1054 NULL, ALARM_STATUS, index + ((index > 2) ? 1 : 0)), \
1055 SENSOR_ATTR_2(in##index##_beep, S_IWUSR | S_IRUGO, \
1056 show_alarm_beep, store_beep, BEEP_ENABLE, \
1057 index + ((index > 2) ? 1 : 0))
1058
1059#define SENSOR_ATTR_FAN(index) \
1060 SENSOR_ATTR_2(fan##index##_alarm, S_IRUGO, show_alarm_beep, \
1061 NULL, ALARM_STATUS, index + 17), \
1062 SENSOR_ATTR_2(fan##index##_beep, S_IWUSR | S_IRUGO, \
1063 show_alarm_beep, store_beep, BEEP_ENABLE, index + 17), \
1064 SENSOR_ATTR_2(fan##index##_input, S_IRUGO, show_fan, \
1065 NULL, FAN_INPUT, index - 1), \
1066 SENSOR_ATTR_2(fan##index##_min, S_IWUSR | S_IRUGO, \
1067 show_fan, store_fan_min, FAN_MIN, index - 1)
1068
1069#define SENSOR_ATTR_PWM(index) \
1070 SENSOR_ATTR_2(pwm##index, S_IWUSR | S_IRUGO, show_pwm, \
1071 store_pwm, PWM_DUTY, index - 1), \
1072 SENSOR_ATTR_2(pwm##index##_nonstop, S_IWUSR | S_IRUGO, \
1073 show_pwm, store_pwm, PWM_NONSTOP, index - 1), \
1074 SENSOR_ATTR_2(pwm##index##_start, S_IWUSR | S_IRUGO, \
1075 show_pwm, store_pwm, PWM_START, index - 1), \
1076 SENSOR_ATTR_2(pwm##index##_stop_time, S_IWUSR | S_IRUGO, \
1077 show_pwm, store_pwm, PWM_STOP_TIME, index - 1)
1078
1079#define SENSOR_ATTR_TEMP(index) \
1080 SENSOR_ATTR_2(temp##index##_type, S_IRUGO | S_IWUSR, \
1081 show_temp_mode, store_temp_mode, NOT_USED, index - 1), \
1082 SENSOR_ATTR_2(temp##index##_input, S_IRUGO, show_temp, \
1083 NULL, TEMP_READ, index - 1), \
1084 SENSOR_ATTR_2(temp##index##_max, S_IRUGO | S_IWUSR, show_temp, \
1085 store_temp, TEMP_CRIT, index - 1), \
1086 SENSOR_ATTR_2(temp##index##_max_hyst, S_IRUGO | S_IWUSR, \
1087 show_temp, store_temp, TEMP_CRIT_HYST, index - 1), \
1088 SENSOR_ATTR_2(temp##index##_warn, S_IRUGO | S_IWUSR, show_temp, \
1089 store_temp, TEMP_WARN, index - 1), \
1090 SENSOR_ATTR_2(temp##index##_warn_hyst, S_IRUGO | S_IWUSR, \
1091 show_temp, store_temp, TEMP_WARN_HYST, index - 1), \
1092 SENSOR_ATTR_2(temp##index##_alarm, S_IRUGO, \
1093 show_alarm_beep, NULL, ALARM_STATUS, index + 11), \
1094 SENSOR_ATTR_2(temp##index##_beep, S_IWUSR | S_IRUGO, \
1095 show_alarm_beep, store_beep, BEEP_ENABLE, index + 11), \
1096 SENSOR_ATTR_2(temp##index##_auto_channels_pwm, \
1097 S_IRUGO | S_IWUSR, show_sf_ctrl, store_sf_ctrl, \
1098 TEMP_FAN_MAP, index - 1), \
1099 SENSOR_ATTR_2(temp##index##_pwm_enable, S_IWUSR | S_IRUGO, \
1100 show_sf_ctrl, store_sf_ctrl, TEMP_PWM_ENABLE, \
1101 index - 1), \
1102 SENSOR_ATTR_2(thermal_cruise##index, S_IRUGO | S_IWUSR, \
1103 show_sf_ctrl, store_sf_ctrl, TEMP_CRUISE, index - 1), \
1104 SENSOR_ATTR_2(tolerance##index, S_IRUGO | S_IWUSR, show_sf_ctrl,\
1105 store_sf_ctrl, TEMP_TOLERANCE, index - 1), \
1106 SENSOR_ATTR_2(temp##index##_auto_point1_pwm, S_IRUGO | S_IWUSR, \
1107 show_sf2_pwm, store_sf2_pwm, 0, index - 1), \
1108 SENSOR_ATTR_2(temp##index##_auto_point2_pwm, S_IRUGO | S_IWUSR, \
1109 show_sf2_pwm, store_sf2_pwm, 1, index - 1), \
1110 SENSOR_ATTR_2(temp##index##_auto_point3_pwm, S_IRUGO | S_IWUSR, \
1111 show_sf2_pwm, store_sf2_pwm, 2, index - 1), \
1112 SENSOR_ATTR_2(temp##index##_auto_point4_pwm, S_IRUGO | S_IWUSR, \
1113 show_sf2_pwm, store_sf2_pwm, 3, index - 1), \
1114 SENSOR_ATTR_2(temp##index##_auto_point5_pwm, S_IRUGO | S_IWUSR, \
1115 show_sf2_pwm, store_sf2_pwm, 4, index - 1), \
1116 SENSOR_ATTR_2(temp##index##_auto_point6_pwm, S_IRUGO | S_IWUSR, \
1117 show_sf2_pwm, store_sf2_pwm, 5, index - 1), \
1118 SENSOR_ATTR_2(temp##index##_auto_point7_pwm, S_IRUGO | S_IWUSR, \
1119 show_sf2_pwm, store_sf2_pwm, 6, index - 1), \
1120 SENSOR_ATTR_2(temp##index##_auto_point1_temp, S_IRUGO | S_IWUSR,\
1121 show_sf2_temp, store_sf2_temp, 0, index - 1), \
1122 SENSOR_ATTR_2(temp##index##_auto_point2_temp, S_IRUGO | S_IWUSR,\
1123 show_sf2_temp, store_sf2_temp, 1, index - 1), \
1124 SENSOR_ATTR_2(temp##index##_auto_point3_temp, S_IRUGO | S_IWUSR,\
1125 show_sf2_temp, store_sf2_temp, 2, index - 1), \
1126 SENSOR_ATTR_2(temp##index##_auto_point4_temp, S_IRUGO | S_IWUSR,\
1127 show_sf2_temp, store_sf2_temp, 3, index - 1), \
1128 SENSOR_ATTR_2(temp##index##_auto_point5_temp, S_IRUGO | S_IWUSR,\
1129 show_sf2_temp, store_sf2_temp, 4, index - 1), \
1130 SENSOR_ATTR_2(temp##index##_auto_point6_temp, S_IRUGO | S_IWUSR,\
1131 show_sf2_temp, store_sf2_temp, 5, index - 1), \
1132 SENSOR_ATTR_2(temp##index##_auto_point7_temp, S_IRUGO | S_IWUSR,\
1133 show_sf2_temp, store_sf2_temp, 6, index - 1)
1134
1135static struct sensor_device_attribute_2 w83793_sensor_attr_2[] = {
1136 SENSOR_ATTR_IN(0),
1137 SENSOR_ATTR_IN(1),
1138 SENSOR_ATTR_IN(2),
1139 SENSOR_ATTR_IN(3),
1140 SENSOR_ATTR_IN(4),
1141 SENSOR_ATTR_IN(5),
1142 SENSOR_ATTR_IN(6),
1143 SENSOR_ATTR_IN(7),
1144 SENSOR_ATTR_IN(8),
1145 SENSOR_ATTR_IN(9),
1146 SENSOR_ATTR_FAN(1),
1147 SENSOR_ATTR_FAN(2),
1148 SENSOR_ATTR_FAN(3),
1149 SENSOR_ATTR_FAN(4),
1150 SENSOR_ATTR_FAN(5),
1151 SENSOR_ATTR_PWM(1),
1152 SENSOR_ATTR_PWM(2),
1153 SENSOR_ATTR_PWM(3),
1154};
1155
1156static struct sensor_device_attribute_2 w83793_temp[] = {
1157 SENSOR_ATTR_TEMP(1),
1158 SENSOR_ATTR_TEMP(2),
1159 SENSOR_ATTR_TEMP(3),
1160 SENSOR_ATTR_TEMP(4),
1161 SENSOR_ATTR_TEMP(5),
1162 SENSOR_ATTR_TEMP(6),
1163};
1164
1165/* Fan6-Fan12 */
1166static struct sensor_device_attribute_2 w83793_left_fan[] = {
1167 SENSOR_ATTR_FAN(6),
1168 SENSOR_ATTR_FAN(7),
1169 SENSOR_ATTR_FAN(8),
1170 SENSOR_ATTR_FAN(9),
1171 SENSOR_ATTR_FAN(10),
1172 SENSOR_ATTR_FAN(11),
1173 SENSOR_ATTR_FAN(12),
1174};
1175
1176/* Pwm4-Pwm8 */
1177static struct sensor_device_attribute_2 w83793_left_pwm[] = {
1178 SENSOR_ATTR_PWM(4),
1179 SENSOR_ATTR_PWM(5),
1180 SENSOR_ATTR_PWM(6),
1181 SENSOR_ATTR_PWM(7),
1182 SENSOR_ATTR_PWM(8),
1183};
1184
1185static struct sensor_device_attribute_2 w83793_vid[] = {
1186 SENSOR_ATTR_2(cpu0_vid, S_IRUGO, show_vid, NULL, NOT_USED, 0),
1187 SENSOR_ATTR_2(cpu1_vid, S_IRUGO, show_vid, NULL, NOT_USED, 1),
1188};
1189static DEVICE_ATTR(vrm, S_IWUSR | S_IRUGO, show_vrm, store_vrm);
1190
1191static struct sensor_device_attribute_2 sda_single_files[] = {
1192 SENSOR_ATTR_2(chassis, S_IWUSR | S_IRUGO, show_alarm_beep,
1193 store_chassis_clear_legacy, ALARM_STATUS, 30),
1194 SENSOR_ATTR_2(intrusion0_alarm, S_IWUSR | S_IRUGO, show_alarm_beep,
1195 store_chassis_clear, ALARM_STATUS, 30),
1196 SENSOR_ATTR_2(beep_enable, S_IWUSR | S_IRUGO, show_beep_enable,
1197 store_beep_enable, NOT_USED, NOT_USED),
1198 SENSOR_ATTR_2(pwm_default, S_IWUSR | S_IRUGO, show_sf_setup,
1199 store_sf_setup, SETUP_PWM_DEFAULT, NOT_USED),
1200 SENSOR_ATTR_2(pwm_uptime, S_IWUSR | S_IRUGO, show_sf_setup,
1201 store_sf_setup, SETUP_PWM_UPTIME, NOT_USED),
1202 SENSOR_ATTR_2(pwm_downtime, S_IWUSR | S_IRUGO, show_sf_setup,
1203 store_sf_setup, SETUP_PWM_DOWNTIME, NOT_USED),
1204 SENSOR_ATTR_2(temp_critical, S_IWUSR | S_IRUGO, show_sf_setup,
1205 store_sf_setup, SETUP_TEMP_CRITICAL, NOT_USED),
1206};
1207
1208static void w83793_init_client(struct i2c_client *client)
1209{
1210 if (reset)
1211 w83793_write_value(client, W83793_REG_CONFIG, 0x80);
1212
1213 /* Start monitoring */
1214 w83793_write_value(client, W83793_REG_CONFIG,
1215 w83793_read_value(client, W83793_REG_CONFIG) | 0x01);
1216}
1217
1218/*
1219 * Watchdog routines
1220 */
1221
1222static int watchdog_set_timeout(struct w83793_data *data, int timeout)
1223{
1224 int ret, mtimeout;
1225
1226 mtimeout = DIV_ROUND_UP(timeout, 60);
1227
1228 if (mtimeout > 255)
1229 return -EINVAL;
1230
1231 mutex_lock(&data->watchdog_lock);
1232 if (!data->client) {
1233 ret = -ENODEV;
1234 goto leave;
1235 }
1236
1237 data->watchdog_timeout = mtimeout;
1238
1239 /* Set Timeout value (in Minutes) */
1240 w83793_write_value(data->client, W83793_REG_WDT_TIMEOUT,
1241 data->watchdog_timeout);
1242
1243 ret = mtimeout * 60;
1244
1245leave:
1246 mutex_unlock(&data->watchdog_lock);
1247 return ret;
1248}
1249
1250static int watchdog_get_timeout(struct w83793_data *data)
1251{
1252 int timeout;
1253
1254 mutex_lock(&data->watchdog_lock);
1255 timeout = data->watchdog_timeout * 60;
1256 mutex_unlock(&data->watchdog_lock);
1257
1258 return timeout;
1259}
1260
1261static int watchdog_trigger(struct w83793_data *data)
1262{
1263 int ret = 0;
1264
1265 mutex_lock(&data->watchdog_lock);
1266 if (!data->client) {
1267 ret = -ENODEV;
1268 goto leave;
1269 }
1270
1271 /* Set Timeout value (in Minutes) */
1272 w83793_write_value(data->client, W83793_REG_WDT_TIMEOUT,
1273 data->watchdog_timeout);
1274
1275leave:
1276 mutex_unlock(&data->watchdog_lock);
1277 return ret;
1278}
1279
1280static int watchdog_enable(struct w83793_data *data)
1281{
1282 int ret = 0;
1283
1284 mutex_lock(&data->watchdog_lock);
1285 if (!data->client) {
1286 ret = -ENODEV;
1287 goto leave;
1288 }
1289
1290 /* Set initial timeout */
1291 w83793_write_value(data->client, W83793_REG_WDT_TIMEOUT,
1292 data->watchdog_timeout);
1293
1294 /* Enable Soft Watchdog */
1295 w83793_write_value(data->client, W83793_REG_WDT_LOCK, 0x55);
1296
1297leave:
1298 mutex_unlock(&data->watchdog_lock);
1299 return ret;
1300}
1301
1302static int watchdog_disable(struct w83793_data *data)
1303{
1304 int ret = 0;
1305
1306 mutex_lock(&data->watchdog_lock);
1307 if (!data->client) {
1308 ret = -ENODEV;
1309 goto leave;
1310 }
1311
1312 /* Disable Soft Watchdog */
1313 w83793_write_value(data->client, W83793_REG_WDT_LOCK, 0xAA);
1314
1315leave:
1316 mutex_unlock(&data->watchdog_lock);
1317 return ret;
1318}
1319
1320static int watchdog_open(struct inode *inode, struct file *filp)
1321{
1322 struct w83793_data *pos, *data = NULL;
1323 int watchdog_is_open;
1324
1325 /*
1326 * We get called from drivers/char/misc.c with misc_mtx hold, and we
1327 * call misc_register() from w83793_probe() with watchdog_data_mutex
1328 * hold, as misc_register() takes the misc_mtx lock, this is a possible
1329 * deadlock, so we use mutex_trylock here.
1330 */
1331 if (!mutex_trylock(&watchdog_data_mutex))
1332 return -ERESTARTSYS;
1333 list_for_each_entry(pos, &watchdog_data_list, list) {
1334 if (pos->watchdog_miscdev.minor == iminor(inode)) {
1335 data = pos;
1336 break;
1337 }
1338 }
1339
1340 /* Check, if device is already open */
1341 watchdog_is_open = test_and_set_bit(0, &data->watchdog_is_open);
1342
1343 /*
1344 * Increase data reference counter (if not already done).
1345 * Note we can never not have found data, so we don't check for this
1346 */
1347 if (!watchdog_is_open)
1348 kref_get(&data->kref);
1349
1350 mutex_unlock(&watchdog_data_mutex);
1351
1352 /* Check, if device is already open and possibly issue error */
1353 if (watchdog_is_open)
1354 return -EBUSY;
1355
1356 /* Enable Soft Watchdog */
1357 watchdog_enable(data);
1358
1359 /* Store pointer to data into filp's private data */
1360 filp->private_data = data;
1361
1362 return nonseekable_open(inode, filp);
1363}
1364
1365static int watchdog_close(struct inode *inode, struct file *filp)
1366{
1367 struct w83793_data *data = filp->private_data;
1368
1369 if (data->watchdog_expect_close) {
1370 watchdog_disable(data);
1371 data->watchdog_expect_close = 0;
1372 } else {
1373 watchdog_trigger(data);
1374 dev_crit(&data->client->dev,
1375 "unexpected close, not stopping watchdog!\n");
1376 }
1377
1378 clear_bit(0, &data->watchdog_is_open);
1379
1380 /* Decrease data reference counter */
1381 mutex_lock(&watchdog_data_mutex);
1382 kref_put(&data->kref, w83793_release_resources);
1383 mutex_unlock(&watchdog_data_mutex);
1384
1385 return 0;
1386}
1387
1388static ssize_t watchdog_write(struct file *filp, const char __user *buf,
1389 size_t count, loff_t *offset)
1390{
1391 ssize_t ret;
1392 struct w83793_data *data = filp->private_data;
1393
1394 if (count) {
1395 if (!nowayout) {
1396 size_t i;
1397
1398 /* Clear it in case it was set with a previous write */
1399 data->watchdog_expect_close = 0;
1400
1401 for (i = 0; i != count; i++) {
1402 char c;
1403 if (get_user(c, buf + i))
1404 return -EFAULT;
1405 if (c == 'V')
1406 data->watchdog_expect_close = 1;
1407 }
1408 }
1409 ret = watchdog_trigger(data);
1410 if (ret < 0)
1411 return ret;
1412 }
1413 return count;
1414}
1415
1416static long watchdog_ioctl(struct file *filp, unsigned int cmd,
1417 unsigned long arg)
1418{
1419 struct watchdog_info ident = {
1420 .options = WDIOF_KEEPALIVEPING |
1421 WDIOF_SETTIMEOUT |
1422 WDIOF_CARDRESET,
1423 .identity = "w83793 watchdog"
1424 };
1425
1426 int val, ret = 0;
1427 struct w83793_data *data = filp->private_data;
1428
1429 switch (cmd) {
1430 case WDIOC_GETSUPPORT:
1431 if (!nowayout)
1432 ident.options |= WDIOF_MAGICCLOSE;
1433 if (copy_to_user((void __user *)arg, &ident, sizeof(ident)))
1434 ret = -EFAULT;
1435 break;
1436
1437 case WDIOC_GETSTATUS:
1438 val = data->watchdog_caused_reboot ? WDIOF_CARDRESET : 0;
1439 ret = put_user(val, (int __user *)arg);
1440 break;
1441
1442 case WDIOC_GETBOOTSTATUS:
1443 ret = put_user(0, (int __user *)arg);
1444 break;
1445
1446 case WDIOC_KEEPALIVE:
1447 ret = watchdog_trigger(data);
1448 break;
1449
1450 case WDIOC_GETTIMEOUT:
1451 val = watchdog_get_timeout(data);
1452 ret = put_user(val, (int __user *)arg);
1453 break;
1454
1455 case WDIOC_SETTIMEOUT:
1456 if (get_user(val, (int __user *)arg)) {
1457 ret = -EFAULT;
1458 break;
1459 }
1460 ret = watchdog_set_timeout(data, val);
1461 if (ret > 0)
1462 ret = put_user(ret, (int __user *)arg);
1463 break;
1464
1465 case WDIOC_SETOPTIONS:
1466 if (get_user(val, (int __user *)arg)) {
1467 ret = -EFAULT;
1468 break;
1469 }
1470
1471 if (val & WDIOS_DISABLECARD)
1472 ret = watchdog_disable(data);
1473 else if (val & WDIOS_ENABLECARD)
1474 ret = watchdog_enable(data);
1475 else
1476 ret = -EINVAL;
1477
1478 break;
1479 default:
1480 ret = -ENOTTY;
1481 }
1482 return ret;
1483}
1484
1485static const struct file_operations watchdog_fops = {
1486 .owner = THIS_MODULE,
1487 .llseek = no_llseek,
1488 .open = watchdog_open,
1489 .release = watchdog_close,
1490 .write = watchdog_write,
1491 .unlocked_ioctl = watchdog_ioctl,
1492};
1493
1494/*
1495 * Notifier for system down
1496 */
1497
1498static int watchdog_notify_sys(struct notifier_block *this, unsigned long code,
1499 void *unused)
1500{
1501 struct w83793_data *data = NULL;
1502
1503 if (code == SYS_DOWN || code == SYS_HALT) {
1504
1505 /* Disable each registered watchdog */
1506 mutex_lock(&watchdog_data_mutex);
1507 list_for_each_entry(data, &watchdog_data_list, list) {
1508 if (data->watchdog_miscdev.minor)
1509 watchdog_disable(data);
1510 }
1511 mutex_unlock(&watchdog_data_mutex);
1512 }
1513
1514 return NOTIFY_DONE;
1515}
1516
1517/*
1518 * The WDT needs to learn about soft shutdowns in order to
1519 * turn the timebomb registers off.
1520 */
1521
1522static struct notifier_block watchdog_notifier = {
1523 .notifier_call = watchdog_notify_sys,
1524};
1525
1526/*
1527 * Init / remove routines
1528 */
1529
1530static int w83793_remove(struct i2c_client *client)
1531{
1532 struct w83793_data *data = i2c_get_clientdata(client);
1533 struct device *dev = &client->dev;
1534 int i, tmp;
1535
1536 /* Unregister the watchdog (if registered) */
1537 if (data->watchdog_miscdev.minor) {
1538 misc_deregister(&data->watchdog_miscdev);
1539
1540 if (data->watchdog_is_open) {
1541 dev_warn(&client->dev,
1542 "i2c client detached with watchdog open! "
1543 "Stopping watchdog.\n");
1544 watchdog_disable(data);
1545 }
1546
1547 mutex_lock(&watchdog_data_mutex);
1548 list_del(&data->list);
1549 mutex_unlock(&watchdog_data_mutex);
1550
1551 /* Tell the watchdog code the client is gone */
1552 mutex_lock(&data->watchdog_lock);
1553 data->client = NULL;
1554 mutex_unlock(&data->watchdog_lock);
1555 }
1556
1557 /* Reset Configuration Register to Disable Watch Dog Registers */
1558 tmp = w83793_read_value(client, W83793_REG_CONFIG);
1559 w83793_write_value(client, W83793_REG_CONFIG, tmp & ~0x04);
1560
1561 unregister_reboot_notifier(&watchdog_notifier);
1562
1563 hwmon_device_unregister(data->hwmon_dev);
1564
1565 for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1566 device_remove_file(dev,
1567 &w83793_sensor_attr_2[i].dev_attr);
1568
1569 for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1570 device_remove_file(dev, &sda_single_files[i].dev_attr);
1571
1572 for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1573 device_remove_file(dev, &w83793_vid[i].dev_attr);
1574 device_remove_file(dev, &dev_attr_vrm);
1575
1576 for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1577 device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1578
1579 for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1580 device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1581
1582 for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1583 device_remove_file(dev, &w83793_temp[i].dev_attr);
1584
1585 if (data->lm75[0] != NULL)
1586 i2c_unregister_device(data->lm75[0]);
1587 if (data->lm75[1] != NULL)
1588 i2c_unregister_device(data->lm75[1]);
1589
1590 /* Decrease data reference counter */
1591 mutex_lock(&watchdog_data_mutex);
1592 kref_put(&data->kref, w83793_release_resources);
1593 mutex_unlock(&watchdog_data_mutex);
1594
1595 return 0;
1596}
1597
1598static int
1599w83793_detect_subclients(struct i2c_client *client)
1600{
1601 int i, id, err;
1602 int address = client->addr;
1603 u8 tmp;
1604 struct i2c_adapter *adapter = client->adapter;
1605 struct w83793_data *data = i2c_get_clientdata(client);
1606
1607 id = i2c_adapter_id(adapter);
1608 if (force_subclients[0] == id && force_subclients[1] == address) {
1609 for (i = 2; i <= 3; i++) {
1610 if (force_subclients[i] < 0x48
1611 || force_subclients[i] > 0x4f) {
1612 dev_err(&client->dev,
1613 "invalid subclient "
1614 "address %d; must be 0x48-0x4f\n",
1615 force_subclients[i]);
1616 err = -EINVAL;
1617 goto ERROR_SC_0;
1618 }
1619 }
1620 w83793_write_value(client, W83793_REG_I2C_SUBADDR,
1621 (force_subclients[2] & 0x07) |
1622 ((force_subclients[3] & 0x07) << 4));
1623 }
1624
1625 tmp = w83793_read_value(client, W83793_REG_I2C_SUBADDR);
1626 if (!(tmp & 0x08))
1627 data->lm75[0] = i2c_new_dummy(adapter, 0x48 + (tmp & 0x7));
1628 if (!(tmp & 0x80)) {
1629 if ((data->lm75[0] != NULL)
1630 && ((tmp & 0x7) == ((tmp >> 4) & 0x7))) {
1631 dev_err(&client->dev,
1632 "duplicate addresses 0x%x, "
1633 "use force_subclients\n", data->lm75[0]->addr);
1634 err = -ENODEV;
1635 goto ERROR_SC_1;
1636 }
1637 data->lm75[1] = i2c_new_dummy(adapter,
1638 0x48 + ((tmp >> 4) & 0x7));
1639 }
1640
1641 return 0;
1642
1643 /* Undo inits in case of errors */
1644
1645ERROR_SC_1:
1646 if (data->lm75[0] != NULL)
1647 i2c_unregister_device(data->lm75[0]);
1648ERROR_SC_0:
1649 return err;
1650}
1651
1652/* Return 0 if detection is successful, -ENODEV otherwise */
1653static int w83793_detect(struct i2c_client *client,
1654 struct i2c_board_info *info)
1655{
1656 u8 tmp, bank, chip_id;
1657 struct i2c_adapter *adapter = client->adapter;
1658 unsigned short address = client->addr;
1659
1660 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1661 return -ENODEV;
1662
1663 bank = i2c_smbus_read_byte_data(client, W83793_REG_BANKSEL);
1664
1665 tmp = bank & 0x80 ? 0x5c : 0xa3;
1666 /* Check Winbond vendor ID */
1667 if (tmp != i2c_smbus_read_byte_data(client, W83793_REG_VENDORID)) {
1668 pr_debug("w83793: Detection failed at check vendor id\n");
1669 return -ENODEV;
1670 }
1671
1672 /*
1673 * If Winbond chip, address of chip and W83793_REG_I2C_ADDR
1674 * should match
1675 */
1676 if ((bank & 0x07) == 0
1677 && i2c_smbus_read_byte_data(client, W83793_REG_I2C_ADDR) !=
1678 (address << 1)) {
1679 pr_debug("w83793: Detection failed at check i2c addr\n");
1680 return -ENODEV;
1681 }
1682
1683 /* Determine the chip type now */
1684 chip_id = i2c_smbus_read_byte_data(client, W83793_REG_CHIPID);
1685 if (chip_id != 0x7b)
1686 return -ENODEV;
1687
1688 strlcpy(info->type, "w83793", I2C_NAME_SIZE);
1689
1690 return 0;
1691}
1692
1693static int w83793_probe(struct i2c_client *client,
1694 const struct i2c_device_id *id)
1695{
1696 struct device *dev = &client->dev;
1697 const int watchdog_minors[] = { WATCHDOG_MINOR, 212, 213, 214, 215 };
1698 struct w83793_data *data;
1699 int i, tmp, val, err;
1700 int files_fan = ARRAY_SIZE(w83793_left_fan) / 7;
1701 int files_pwm = ARRAY_SIZE(w83793_left_pwm) / 5;
1702 int files_temp = ARRAY_SIZE(w83793_temp) / 6;
1703
1704 data = kzalloc(sizeof(struct w83793_data), GFP_KERNEL);
1705 if (!data) {
1706 err = -ENOMEM;
1707 goto exit;
1708 }
1709
1710 i2c_set_clientdata(client, data);
1711 data->bank = i2c_smbus_read_byte_data(client, W83793_REG_BANKSEL);
1712 mutex_init(&data->update_lock);
1713 mutex_init(&data->watchdog_lock);
1714 INIT_LIST_HEAD(&data->list);
1715 kref_init(&data->kref);
1716
1717 /*
1718 * Store client pointer in our data struct for watchdog usage
1719 * (where the client is found through a data ptr instead of the
1720 * otherway around)
1721 */
1722 data->client = client;
1723
1724 err = w83793_detect_subclients(client);
1725 if (err)
1726 goto free_mem;
1727
1728 /* Initialize the chip */
1729 w83793_init_client(client);
1730
1731 /*
1732 * Only fan 1-5 has their own input pins,
1733 * Pwm 1-3 has their own pins
1734 */
1735 data->has_fan = 0x1f;
1736 data->has_pwm = 0x07;
1737 tmp = w83793_read_value(client, W83793_REG_MFC);
1738 val = w83793_read_value(client, W83793_REG_FANIN_CTRL);
1739
1740 /* check the function of pins 49-56 */
1741 if (tmp & 0x80) {
1742 data->has_vid |= 0x2; /* has VIDB */
1743 } else {
1744 data->has_pwm |= 0x18; /* pwm 4,5 */
1745 if (val & 0x01) { /* fan 6 */
1746 data->has_fan |= 0x20;
1747 data->has_pwm |= 0x20;
1748 }
1749 if (val & 0x02) { /* fan 7 */
1750 data->has_fan |= 0x40;
1751 data->has_pwm |= 0x40;
1752 }
1753 if (!(tmp & 0x40) && (val & 0x04)) { /* fan 8 */
1754 data->has_fan |= 0x80;
1755 data->has_pwm |= 0x80;
1756 }
1757 }
1758
1759 /* check the function of pins 37-40 */
1760 if (!(tmp & 0x29))
1761 data->has_vid |= 0x1; /* has VIDA */
1762 if (0x08 == (tmp & 0x0c)) {
1763 if (val & 0x08) /* fan 9 */
1764 data->has_fan |= 0x100;
1765 if (val & 0x10) /* fan 10 */
1766 data->has_fan |= 0x200;
1767 }
1768 if (0x20 == (tmp & 0x30)) {
1769 if (val & 0x20) /* fan 11 */
1770 data->has_fan |= 0x400;
1771 if (val & 0x40) /* fan 12 */
1772 data->has_fan |= 0x800;
1773 }
1774
1775 if ((tmp & 0x01) && (val & 0x04)) { /* fan 8, second location */
1776 data->has_fan |= 0x80;
1777 data->has_pwm |= 0x80;
1778 }
1779
1780 tmp = w83793_read_value(client, W83793_REG_FANIN_SEL);
1781 if ((tmp & 0x01) && (val & 0x08)) { /* fan 9, second location */
1782 data->has_fan |= 0x100;
1783 }
1784 if ((tmp & 0x02) && (val & 0x10)) { /* fan 10, second location */
1785 data->has_fan |= 0x200;
1786 }
1787 if ((tmp & 0x04) && (val & 0x20)) { /* fan 11, second location */
1788 data->has_fan |= 0x400;
1789 }
1790 if ((tmp & 0x08) && (val & 0x40)) { /* fan 12, second location */
1791 data->has_fan |= 0x800;
1792 }
1793
1794 /* check the temp1-6 mode, ignore former AMDSI selected inputs */
1795 tmp = w83793_read_value(client, W83793_REG_TEMP_MODE[0]);
1796 if (tmp & 0x01)
1797 data->has_temp |= 0x01;
1798 if (tmp & 0x04)
1799 data->has_temp |= 0x02;
1800 if (tmp & 0x10)
1801 data->has_temp |= 0x04;
1802 if (tmp & 0x40)
1803 data->has_temp |= 0x08;
1804
1805 tmp = w83793_read_value(client, W83793_REG_TEMP_MODE[1]);
1806 if (tmp & 0x01)
1807 data->has_temp |= 0x10;
1808 if (tmp & 0x02)
1809 data->has_temp |= 0x20;
1810
1811 /* Register sysfs hooks */
1812 for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++) {
1813 err = device_create_file(dev,
1814 &w83793_sensor_attr_2[i].dev_attr);
1815 if (err)
1816 goto exit_remove;
1817 }
1818
1819 for (i = 0; i < ARRAY_SIZE(w83793_vid); i++) {
1820 if (!(data->has_vid & (1 << i)))
1821 continue;
1822 err = device_create_file(dev, &w83793_vid[i].dev_attr);
1823 if (err)
1824 goto exit_remove;
1825 }
1826 if (data->has_vid) {
1827 data->vrm = vid_which_vrm();
1828 err = device_create_file(dev, &dev_attr_vrm);
1829 if (err)
1830 goto exit_remove;
1831 }
1832
1833 for (i = 0; i < ARRAY_SIZE(sda_single_files); i++) {
1834 err = device_create_file(dev, &sda_single_files[i].dev_attr);
1835 if (err)
1836 goto exit_remove;
1837
1838 }
1839
1840 for (i = 0; i < 6; i++) {
1841 int j;
1842 if (!(data->has_temp & (1 << i)))
1843 continue;
1844 for (j = 0; j < files_temp; j++) {
1845 err = device_create_file(dev,
1846 &w83793_temp[(i) * files_temp
1847 + j].dev_attr);
1848 if (err)
1849 goto exit_remove;
1850 }
1851 }
1852
1853 for (i = 5; i < 12; i++) {
1854 int j;
1855 if (!(data->has_fan & (1 << i)))
1856 continue;
1857 for (j = 0; j < files_fan; j++) {
1858 err = device_create_file(dev,
1859 &w83793_left_fan[(i - 5) * files_fan
1860 + j].dev_attr);
1861 if (err)
1862 goto exit_remove;
1863 }
1864 }
1865
1866 for (i = 3; i < 8; i++) {
1867 int j;
1868 if (!(data->has_pwm & (1 << i)))
1869 continue;
1870 for (j = 0; j < files_pwm; j++) {
1871 err = device_create_file(dev,
1872 &w83793_left_pwm[(i - 3) * files_pwm
1873 + j].dev_attr);
1874 if (err)
1875 goto exit_remove;
1876 }
1877 }
1878
1879 data->hwmon_dev = hwmon_device_register(dev);
1880 if (IS_ERR(data->hwmon_dev)) {
1881 err = PTR_ERR(data->hwmon_dev);
1882 goto exit_remove;
1883 }
1884
1885 /* Watchdog initialization */
1886
1887 /* Register boot notifier */
1888 err = register_reboot_notifier(&watchdog_notifier);
1889 if (err != 0) {
1890 dev_err(&client->dev,
1891 "cannot register reboot notifier (err=%d)\n", err);
1892 goto exit_devunreg;
1893 }
1894
1895 /*
1896 * Enable Watchdog registers.
1897 * Set Configuration Register to Enable Watch Dog Registers
1898 * (Bit 2) = XXXX, X1XX.
1899 */
1900 tmp = w83793_read_value(client, W83793_REG_CONFIG);
1901 w83793_write_value(client, W83793_REG_CONFIG, tmp | 0x04);
1902
1903 /* Set the default watchdog timeout */
1904 data->watchdog_timeout = timeout;
1905
1906 /* Check, if last reboot was caused by watchdog */
1907 data->watchdog_caused_reboot =
1908 w83793_read_value(data->client, W83793_REG_WDT_STATUS) & 0x01;
1909
1910 /* Disable Soft Watchdog during initialiation */
1911 watchdog_disable(data);
1912
1913 /*
1914 * We take the data_mutex lock early so that watchdog_open() cannot
1915 * run when misc_register() has completed, but we've not yet added
1916 * our data to the watchdog_data_list (and set the default timeout)
1917 */
1918 mutex_lock(&watchdog_data_mutex);
1919 for (i = 0; i < ARRAY_SIZE(watchdog_minors); i++) {
1920 /* Register our watchdog part */
1921 snprintf(data->watchdog_name, sizeof(data->watchdog_name),
1922 "watchdog%c", (i == 0) ? '\0' : ('0' + i));
1923 data->watchdog_miscdev.name = data->watchdog_name;
1924 data->watchdog_miscdev.fops = &watchdog_fops;
1925 data->watchdog_miscdev.minor = watchdog_minors[i];
1926
1927 err = misc_register(&data->watchdog_miscdev);
1928 if (err == -EBUSY)
1929 continue;
1930 if (err) {
1931 data->watchdog_miscdev.minor = 0;
1932 dev_err(&client->dev,
1933 "Registering watchdog chardev: %d\n", err);
1934 break;
1935 }
1936
1937 list_add(&data->list, &watchdog_data_list);
1938
1939 dev_info(&client->dev,
1940 "Registered watchdog chardev major 10, minor: %d\n",
1941 watchdog_minors[i]);
1942 break;
1943 }
1944 if (i == ARRAY_SIZE(watchdog_minors)) {
1945 data->watchdog_miscdev.minor = 0;
1946 dev_warn(&client->dev, "Couldn't register watchdog chardev "
1947 "(due to no free minor)\n");
1948 }
1949
1950 mutex_unlock(&watchdog_data_mutex);
1951
1952 return 0;
1953
1954 /* Unregister hwmon device */
1955
1956exit_devunreg:
1957
1958 hwmon_device_unregister(data->hwmon_dev);
1959
1960 /* Unregister sysfs hooks */
1961
1962exit_remove:
1963 for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1964 device_remove_file(dev, &w83793_sensor_attr_2[i].dev_attr);
1965
1966 for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1967 device_remove_file(dev, &sda_single_files[i].dev_attr);
1968
1969 for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1970 device_remove_file(dev, &w83793_vid[i].dev_attr);
1971
1972 for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1973 device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1974
1975 for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1976 device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1977
1978 for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1979 device_remove_file(dev, &w83793_temp[i].dev_attr);
1980
1981 if (data->lm75[0] != NULL)
1982 i2c_unregister_device(data->lm75[0]);
1983 if (data->lm75[1] != NULL)
1984 i2c_unregister_device(data->lm75[1]);
1985free_mem:
1986 kfree(data);
1987exit:
1988 return err;
1989}
1990
1991static void w83793_update_nonvolatile(struct device *dev)
1992{
1993 struct i2c_client *client = to_i2c_client(dev);
1994 struct w83793_data *data = i2c_get_clientdata(client);
1995 int i, j;
1996 /*
1997 * They are somewhat "stable" registers, and to update them every time
1998 * takes so much time, it's just not worthy. Update them in a long
1999 * interval to avoid exception.
2000 */
2001 if (!(time_after(jiffies, data->last_nonvolatile + HZ * 300)
2002 || !data->valid))
2003 return;
2004 /* update voltage limits */
2005 for (i = 1; i < 3; i++) {
2006 for (j = 0; j < ARRAY_SIZE(data->in); j++) {
2007 data->in[j][i] =
2008 w83793_read_value(client, W83793_REG_IN[j][i]);
2009 }
2010 data->in_low_bits[i] =
2011 w83793_read_value(client, W83793_REG_IN_LOW_BITS[i]);
2012 }
2013
2014 for (i = 0; i < ARRAY_SIZE(data->fan_min); i++) {
2015 /* Update the Fan measured value and limits */
2016 if (!(data->has_fan & (1 << i)))
2017 continue;
2018 data->fan_min[i] =
2019 w83793_read_value(client, W83793_REG_FAN_MIN(i)) << 8;
2020 data->fan_min[i] |=
2021 w83793_read_value(client, W83793_REG_FAN_MIN(i) + 1);
2022 }
2023
2024 for (i = 0; i < ARRAY_SIZE(data->temp_fan_map); i++) {
2025 if (!(data->has_temp & (1 << i)))
2026 continue;
2027 data->temp_fan_map[i] =
2028 w83793_read_value(client, W83793_REG_TEMP_FAN_MAP(i));
2029 for (j = 1; j < 5; j++) {
2030 data->temp[i][j] =
2031 w83793_read_value(client, W83793_REG_TEMP[i][j]);
2032 }
2033 data->temp_cruise[i] =
2034 w83793_read_value(client, W83793_REG_TEMP_CRUISE(i));
2035 for (j = 0; j < 7; j++) {
2036 data->sf2_pwm[i][j] =
2037 w83793_read_value(client, W83793_REG_SF2_PWM(i, j));
2038 data->sf2_temp[i][j] =
2039 w83793_read_value(client,
2040 W83793_REG_SF2_TEMP(i, j));
2041 }
2042 }
2043
2044 for (i = 0; i < ARRAY_SIZE(data->temp_mode); i++)
2045 data->temp_mode[i] =
2046 w83793_read_value(client, W83793_REG_TEMP_MODE[i]);
2047
2048 for (i = 0; i < ARRAY_SIZE(data->tolerance); i++) {
2049 data->tolerance[i] =
2050 w83793_read_value(client, W83793_REG_TEMP_TOL(i));
2051 }
2052
2053 for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
2054 if (!(data->has_pwm & (1 << i)))
2055 continue;
2056 data->pwm[i][PWM_NONSTOP] =
2057 w83793_read_value(client, W83793_REG_PWM(i, PWM_NONSTOP));
2058 data->pwm[i][PWM_START] =
2059 w83793_read_value(client, W83793_REG_PWM(i, PWM_START));
2060 data->pwm_stop_time[i] =
2061 w83793_read_value(client, W83793_REG_PWM_STOP_TIME(i));
2062 }
2063
2064 data->pwm_default = w83793_read_value(client, W83793_REG_PWM_DEFAULT);
2065 data->pwm_enable = w83793_read_value(client, W83793_REG_PWM_ENABLE);
2066 data->pwm_uptime = w83793_read_value(client, W83793_REG_PWM_UPTIME);
2067 data->pwm_downtime = w83793_read_value(client, W83793_REG_PWM_DOWNTIME);
2068 data->temp_critical =
2069 w83793_read_value(client, W83793_REG_TEMP_CRITICAL);
2070 data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP);
2071
2072 for (i = 0; i < ARRAY_SIZE(data->beeps); i++)
2073 data->beeps[i] = w83793_read_value(client, W83793_REG_BEEP(i));
2074
2075 data->last_nonvolatile = jiffies;
2076}
2077
2078static struct w83793_data *w83793_update_device(struct device *dev)
2079{
2080 struct i2c_client *client = to_i2c_client(dev);
2081 struct w83793_data *data = i2c_get_clientdata(client);
2082 int i;
2083
2084 mutex_lock(&data->update_lock);
2085
2086 if (!(time_after(jiffies, data->last_updated + HZ * 2)
2087 || !data->valid))
2088 goto END;
2089
2090 /* Update the voltages measured value and limits */
2091 for (i = 0; i < ARRAY_SIZE(data->in); i++)
2092 data->in[i][IN_READ] =
2093 w83793_read_value(client, W83793_REG_IN[i][IN_READ]);
2094
2095 data->in_low_bits[IN_READ] =
2096 w83793_read_value(client, W83793_REG_IN_LOW_BITS[IN_READ]);
2097
2098 for (i = 0; i < ARRAY_SIZE(data->fan); i++) {
2099 if (!(data->has_fan & (1 << i)))
2100 continue;
2101 data->fan[i] =
2102 w83793_read_value(client, W83793_REG_FAN(i)) << 8;
2103 data->fan[i] |=
2104 w83793_read_value(client, W83793_REG_FAN(i) + 1);
2105 }
2106
2107 for (i = 0; i < ARRAY_SIZE(data->temp); i++) {
2108 if (!(data->has_temp & (1 << i)))
2109 continue;
2110 data->temp[i][TEMP_READ] =
2111 w83793_read_value(client, W83793_REG_TEMP[i][TEMP_READ]);
2112 }
2113
2114 data->temp_low_bits =
2115 w83793_read_value(client, W83793_REG_TEMP_LOW_BITS);
2116
2117 for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
2118 if (data->has_pwm & (1 << i))
2119 data->pwm[i][PWM_DUTY] =
2120 w83793_read_value(client,
2121 W83793_REG_PWM(i, PWM_DUTY));
2122 }
2123
2124 for (i = 0; i < ARRAY_SIZE(data->alarms); i++)
2125 data->alarms[i] =
2126 w83793_read_value(client, W83793_REG_ALARM(i));
2127 if (data->has_vid & 0x01)
2128 data->vid[0] = w83793_read_value(client, W83793_REG_VID_INA);
2129 if (data->has_vid & 0x02)
2130 data->vid[1] = w83793_read_value(client, W83793_REG_VID_INB);
2131 w83793_update_nonvolatile(dev);
2132 data->last_updated = jiffies;
2133 data->valid = 1;
2134
2135END:
2136 mutex_unlock(&data->update_lock);
2137 return data;
2138}
2139
2140/*
2141 * Ignore the possibility that somebody change bank outside the driver
2142 * Must be called with data->update_lock held, except during initialization
2143 */
2144static u8 w83793_read_value(struct i2c_client *client, u16 reg)
2145{
2146 struct w83793_data *data = i2c_get_clientdata(client);
2147 u8 res = 0xff;
2148 u8 new_bank = reg >> 8;
2149
2150 new_bank |= data->bank & 0xfc;
2151 if (data->bank != new_bank) {
2152 if (i2c_smbus_write_byte_data
2153 (client, W83793_REG_BANKSEL, new_bank) >= 0)
2154 data->bank = new_bank;
2155 else {
2156 dev_err(&client->dev,
2157 "set bank to %d failed, fall back "
2158 "to bank %d, read reg 0x%x error\n",
2159 new_bank, data->bank, reg);
2160 res = 0x0; /* read 0x0 from the chip */
2161 goto END;
2162 }
2163 }
2164 res = i2c_smbus_read_byte_data(client, reg & 0xff);
2165END:
2166 return res;
2167}
2168
2169/* Must be called with data->update_lock held, except during initialization */
2170static int w83793_write_value(struct i2c_client *client, u16 reg, u8 value)
2171{
2172 struct w83793_data *data = i2c_get_clientdata(client);
2173 int res;
2174 u8 new_bank = reg >> 8;
2175
2176 new_bank |= data->bank & 0xfc;
2177 if (data->bank != new_bank) {
2178 res = i2c_smbus_write_byte_data(client, W83793_REG_BANKSEL,
2179 new_bank);
2180 if (res < 0) {
2181 dev_err(&client->dev,
2182 "set bank to %d failed, fall back "
2183 "to bank %d, write reg 0x%x error\n",
2184 new_bank, data->bank, reg);
2185 goto END;
2186 }
2187 data->bank = new_bank;
2188 }
2189
2190 res = i2c_smbus_write_byte_data(client, reg & 0xff, value);
2191END:
2192 return res;
2193}
2194
2195module_i2c_driver(w83793_driver);
2196
2197MODULE_AUTHOR("Yuan Mu, Sven Anders");
2198MODULE_DESCRIPTION("w83793 driver");
2199MODULE_LICENSE("GPL");