0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <linux/module.h>
0021 #include <linux/init.h>
0022 #include <linux/slab.h>
0023 #include <linux/i2c.h>
0024 #include <linux/hwmon.h>
0025 #include <linux/hwmon-vid.h>
0026 #include <linux/hwmon-sysfs.h>
0027 #include <linux/err.h>
0028 #include <linux/mutex.h>
0029 #include <linux/fs.h>
0030 #include <linux/watchdog.h>
0031 #include <linux/miscdevice.h>
0032 #include <linux/uaccess.h>
0033 #include <linux/kref.h>
0034 #include <linux/notifier.h>
0035 #include <linux/reboot.h>
0036 #include <linux/jiffies.h>
0037
0038
0039 #define WATCHDOG_TIMEOUT 2
0040
0041
0042 static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
0043 I2C_CLIENT_END };
0044
0045
0046
0047 static unsigned short force_subclients[4];
0048 module_param_array(force_subclients, short, NULL, 0);
0049 MODULE_PARM_DESC(force_subclients,
0050 "List of subclient addresses: {bus, clientaddr, subclientaddr1, subclientaddr2}");
0051
0052 static bool reset;
0053 module_param(reset, bool, 0);
0054 MODULE_PARM_DESC(reset, "Set to 1 to reset chip, not recommended");
0055
0056 static int timeout = WATCHDOG_TIMEOUT;
0057 module_param(timeout, int, 0);
0058 MODULE_PARM_DESC(timeout,
0059 "Watchdog timeout in minutes. 2<= timeout <=255 (default="
0060 __MODULE_STRING(WATCHDOG_TIMEOUT) ")");
0061
0062 static bool nowayout = WATCHDOG_NOWAYOUT;
0063 module_param(nowayout, bool, 0);
0064 MODULE_PARM_DESC(nowayout,
0065 "Watchdog cannot be stopped once started (default="
0066 __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
0067
0068
0069
0070
0071
0072 #define W83793_REG_BANKSEL 0x00
0073 #define W83793_REG_VENDORID 0x0d
0074 #define W83793_REG_CHIPID 0x0e
0075 #define W83793_REG_DEVICEID 0x0f
0076
0077 #define W83793_REG_CONFIG 0x40
0078 #define W83793_REG_MFC 0x58
0079 #define W83793_REG_FANIN_CTRL 0x5c
0080 #define W83793_REG_FANIN_SEL 0x5d
0081 #define W83793_REG_I2C_ADDR 0x0b
0082 #define W83793_REG_I2C_SUBADDR 0x0c
0083 #define W83793_REG_VID_INA 0x05
0084 #define W83793_REG_VID_INB 0x06
0085 #define W83793_REG_VID_LATCHA 0x07
0086 #define W83793_REG_VID_LATCHB 0x08
0087 #define W83793_REG_VID_CTRL 0x59
0088
0089 #define W83793_REG_WDT_LOCK 0x01
0090 #define W83793_REG_WDT_ENABLE 0x02
0091 #define W83793_REG_WDT_STATUS 0x03
0092 #define W83793_REG_WDT_TIMEOUT 0x04
0093
0094 static u16 W83793_REG_TEMP_MODE[2] = { 0x5e, 0x5f };
0095
0096 #define TEMP_READ 0
0097 #define TEMP_CRIT 1
0098 #define TEMP_CRIT_HYST 2
0099 #define TEMP_WARN 3
0100 #define TEMP_WARN_HYST 4
0101
0102
0103
0104
0105 static u16 W83793_REG_TEMP[][5] = {
0106 {0x1c, 0x78, 0x79, 0x7a, 0x7b},
0107 {0x1d, 0x7c, 0x7d, 0x7e, 0x7f},
0108 {0x1e, 0x80, 0x81, 0x82, 0x83},
0109 {0x1f, 0x84, 0x85, 0x86, 0x87},
0110 {0x20, 0x88, 0x89, 0x8a, 0x8b},
0111 {0x21, 0x8c, 0x8d, 0x8e, 0x8f},
0112 };
0113
0114 #define W83793_REG_TEMP_LOW_BITS 0x22
0115
0116 #define W83793_REG_BEEP(index) (0x53 + (index))
0117 #define W83793_REG_ALARM(index) (0x4b + (index))
0118
0119 #define W83793_REG_CLR_CHASSIS 0x4a
0120 #define W83793_REG_IRQ_CTRL 0x50
0121 #define W83793_REG_OVT_CTRL 0x51
0122 #define W83793_REG_OVT_BEEP 0x52
0123
0124 #define IN_READ 0
0125 #define IN_MAX 1
0126 #define IN_LOW 2
0127 static const u16 W83793_REG_IN[][3] = {
0128
0129 {0x10, 0x60, 0x61},
0130 {0x11, 0x62, 0x63},
0131 {0x12, 0x64, 0x65},
0132 {0x14, 0x6a, 0x6b},
0133 {0x15, 0x6c, 0x6d},
0134 {0x16, 0x6e, 0x6f},
0135 {0x17, 0x70, 0x71},
0136 {0x18, 0x72, 0x73},
0137 {0x19, 0x74, 0x75},
0138 {0x1a, 0x76, 0x77},
0139 };
0140
0141
0142 static const u16 W83793_REG_IN_LOW_BITS[] = { 0x1b, 0x68, 0x69 };
0143 static u8 scale_in[] = { 2, 2, 2, 16, 16, 16, 8, 24, 24, 16 };
0144 static u8 scale_in_add[] = { 0, 0, 0, 0, 0, 0, 0, 150, 150, 0 };
0145
0146 #define W83793_REG_FAN(index) (0x23 + 2 * (index))
0147 #define W83793_REG_FAN_MIN(index) (0x90 + 2 * (index))
0148
0149 #define W83793_REG_PWM_DEFAULT 0xb2
0150 #define W83793_REG_PWM_ENABLE 0x207
0151 #define W83793_REG_PWM_UPTIME 0xc3
0152 #define W83793_REG_PWM_DOWNTIME 0xc4
0153 #define W83793_REG_TEMP_CRITICAL 0xc5
0154
0155 #define PWM_DUTY 0
0156 #define PWM_START 1
0157 #define PWM_NONSTOP 2
0158 #define PWM_STOP_TIME 3
0159 #define W83793_REG_PWM(index, nr) (((nr) == 0 ? 0xb3 : \
0160 (nr) == 1 ? 0x220 : 0x218) + (index))
0161
0162
0163 #define W83793_REG_TEMP_FAN_MAP(index) (0x201 + (index))
0164 #define W83793_REG_TEMP_TOL(index) (0x208 + (index))
0165 #define W83793_REG_TEMP_CRUISE(index) (0x210 + (index))
0166 #define W83793_REG_PWM_STOP_TIME(index) (0x228 + (index))
0167 #define W83793_REG_SF2_TEMP(index, nr) (0x230 + ((index) << 4) + (nr))
0168 #define W83793_REG_SF2_PWM(index, nr) (0x238 + ((index) << 4) + (nr))
0169
0170 static inline unsigned long FAN_FROM_REG(u16 val)
0171 {
0172 if ((val >= 0xfff) || (val == 0))
0173 return 0;
0174 return 1350000UL / val;
0175 }
0176
0177 static inline u16 FAN_TO_REG(long rpm)
0178 {
0179 if (rpm <= 0)
0180 return 0x0fff;
0181 return clamp_val((1350000 + (rpm >> 1)) / rpm, 1, 0xffe);
0182 }
0183
0184 static inline unsigned long TIME_FROM_REG(u8 reg)
0185 {
0186 return reg * 100;
0187 }
0188
0189 static inline u8 TIME_TO_REG(unsigned long val)
0190 {
0191 return clamp_val((val + 50) / 100, 0, 0xff);
0192 }
0193
0194 static inline long TEMP_FROM_REG(s8 reg)
0195 {
0196 return reg * 1000;
0197 }
0198
0199 static inline s8 TEMP_TO_REG(long val, s8 min, s8 max)
0200 {
0201 return clamp_val((val + (val < 0 ? -500 : 500)) / 1000, min, max);
0202 }
0203
0204 struct w83793_data {
0205 struct device *hwmon_dev;
0206 struct mutex update_lock;
0207 bool valid;
0208 unsigned long last_updated;
0209 unsigned long last_nonvolatile;
0210
0211
0212
0213 u8 bank;
0214 u8 vrm;
0215 u8 vid[2];
0216 u8 in[10][3];
0217 u8 in_low_bits[3];
0218
0219 u16 has_fan;
0220 u16 fan[12];
0221 u16 fan_min[12];
0222
0223 s8 temp[6][5];
0224 u8 temp_low_bits;
0225 u8 temp_mode[2];
0226
0227
0228 u8 temp_critical;
0229 u8 temp_fan_map[6];
0230
0231 u8 has_pwm;
0232 u8 has_temp;
0233 u8 has_vid;
0234 u8 pwm_enable;
0235 u8 pwm_uptime;
0236 u8 pwm_downtime;
0237 u8 pwm_default;
0238 u8 pwm[8][3];
0239 u8 pwm_stop_time[8];
0240 u8 temp_cruise[6];
0241
0242 u8 alarms[5];
0243 u8 beeps[5];
0244 u8 beep_enable;
0245 u8 tolerance[3];
0246 u8 sf2_pwm[6][7];
0247 u8 sf2_temp[6][7];
0248
0249
0250 struct i2c_client *client;
0251 struct mutex watchdog_lock;
0252 struct list_head list;
0253 struct kref kref;
0254 struct miscdevice watchdog_miscdev;
0255 unsigned long watchdog_is_open;
0256 char watchdog_expect_close;
0257 char watchdog_name[10];
0258 unsigned int watchdog_caused_reboot;
0259 int watchdog_timeout;
0260 };
0261
0262
0263
0264
0265
0266
0267
0268 static LIST_HEAD(watchdog_data_list);
0269
0270
0271 static DEFINE_MUTEX(watchdog_data_mutex);
0272
0273
0274
0275
0276
0277 static void w83793_release_resources(struct kref *ref)
0278 {
0279 struct w83793_data *data = container_of(ref, struct w83793_data, kref);
0280 kfree(data);
0281 }
0282
0283 static u8 w83793_read_value(struct i2c_client *client, u16 reg);
0284 static int w83793_write_value(struct i2c_client *client, u16 reg, u8 value);
0285 static int w83793_probe(struct i2c_client *client);
0286 static int w83793_detect(struct i2c_client *client,
0287 struct i2c_board_info *info);
0288 static int w83793_remove(struct i2c_client *client);
0289 static void w83793_init_client(struct i2c_client *client);
0290 static void w83793_update_nonvolatile(struct device *dev);
0291 static struct w83793_data *w83793_update_device(struct device *dev);
0292
0293 static const struct i2c_device_id w83793_id[] = {
0294 { "w83793", 0 },
0295 { }
0296 };
0297 MODULE_DEVICE_TABLE(i2c, w83793_id);
0298
0299 static struct i2c_driver w83793_driver = {
0300 .class = I2C_CLASS_HWMON,
0301 .driver = {
0302 .name = "w83793",
0303 },
0304 .probe_new = w83793_probe,
0305 .remove = w83793_remove,
0306 .id_table = w83793_id,
0307 .detect = w83793_detect,
0308 .address_list = normal_i2c,
0309 };
0310
0311 static ssize_t
0312 vrm_show(struct device *dev, struct device_attribute *attr, char *buf)
0313 {
0314 struct w83793_data *data = dev_get_drvdata(dev);
0315 return sprintf(buf, "%d\n", data->vrm);
0316 }
0317
0318 static ssize_t
0319 show_vid(struct device *dev, struct device_attribute *attr, char *buf)
0320 {
0321 struct w83793_data *data = w83793_update_device(dev);
0322 struct sensor_device_attribute_2 *sensor_attr =
0323 to_sensor_dev_attr_2(attr);
0324 int index = sensor_attr->index;
0325
0326 return sprintf(buf, "%d\n", vid_from_reg(data->vid[index], data->vrm));
0327 }
0328
0329 static ssize_t
0330 vrm_store(struct device *dev, struct device_attribute *attr,
0331 const char *buf, size_t count)
0332 {
0333 struct w83793_data *data = dev_get_drvdata(dev);
0334 unsigned long val;
0335 int err;
0336
0337 err = kstrtoul(buf, 10, &val);
0338 if (err)
0339 return err;
0340
0341 if (val > 255)
0342 return -EINVAL;
0343
0344 data->vrm = val;
0345 return count;
0346 }
0347
0348 #define ALARM_STATUS 0
0349 #define BEEP_ENABLE 1
0350 static ssize_t
0351 show_alarm_beep(struct device *dev, struct device_attribute *attr, char *buf)
0352 {
0353 struct w83793_data *data = w83793_update_device(dev);
0354 struct sensor_device_attribute_2 *sensor_attr =
0355 to_sensor_dev_attr_2(attr);
0356 int nr = sensor_attr->nr;
0357 int index = sensor_attr->index >> 3;
0358 int bit = sensor_attr->index & 0x07;
0359 u8 val;
0360
0361 if (nr == ALARM_STATUS) {
0362 val = (data->alarms[index] >> (bit)) & 1;
0363 } else {
0364 val = (data->beeps[index] >> (bit)) & 1;
0365 }
0366
0367 return sprintf(buf, "%u\n", val);
0368 }
0369
0370 static ssize_t
0371 store_beep(struct device *dev, struct device_attribute *attr,
0372 const char *buf, size_t count)
0373 {
0374 struct i2c_client *client = to_i2c_client(dev);
0375 struct w83793_data *data = i2c_get_clientdata(client);
0376 struct sensor_device_attribute_2 *sensor_attr =
0377 to_sensor_dev_attr_2(attr);
0378 int index = sensor_attr->index >> 3;
0379 int shift = sensor_attr->index & 0x07;
0380 u8 beep_bit = 1 << shift;
0381 unsigned long val;
0382 int err;
0383
0384 err = kstrtoul(buf, 10, &val);
0385 if (err)
0386 return err;
0387
0388 if (val > 1)
0389 return -EINVAL;
0390
0391 mutex_lock(&data->update_lock);
0392 data->beeps[index] = w83793_read_value(client, W83793_REG_BEEP(index));
0393 data->beeps[index] &= ~beep_bit;
0394 data->beeps[index] |= val << shift;
0395 w83793_write_value(client, W83793_REG_BEEP(index), data->beeps[index]);
0396 mutex_unlock(&data->update_lock);
0397
0398 return count;
0399 }
0400
0401 static ssize_t
0402 show_beep_enable(struct device *dev, struct device_attribute *attr, char *buf)
0403 {
0404 struct w83793_data *data = w83793_update_device(dev);
0405 return sprintf(buf, "%u\n", (data->beep_enable >> 1) & 0x01);
0406 }
0407
0408 static ssize_t
0409 store_beep_enable(struct device *dev, struct device_attribute *attr,
0410 const char *buf, size_t count)
0411 {
0412 struct i2c_client *client = to_i2c_client(dev);
0413 struct w83793_data *data = i2c_get_clientdata(client);
0414 unsigned long val;
0415 int err;
0416
0417 err = kstrtoul(buf, 10, &val);
0418 if (err)
0419 return err;
0420
0421 if (val > 1)
0422 return -EINVAL;
0423
0424 mutex_lock(&data->update_lock);
0425 data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP)
0426 & 0xfd;
0427 data->beep_enable |= val << 1;
0428 w83793_write_value(client, W83793_REG_OVT_BEEP, data->beep_enable);
0429 mutex_unlock(&data->update_lock);
0430
0431 return count;
0432 }
0433
0434
0435 static ssize_t
0436 store_chassis_clear(struct device *dev,
0437 struct device_attribute *attr, const char *buf,
0438 size_t count)
0439 {
0440 struct i2c_client *client = to_i2c_client(dev);
0441 struct w83793_data *data = i2c_get_clientdata(client);
0442 unsigned long val;
0443 u8 reg;
0444 int err;
0445
0446 err = kstrtoul(buf, 10, &val);
0447 if (err)
0448 return err;
0449 if (val)
0450 return -EINVAL;
0451
0452 mutex_lock(&data->update_lock);
0453 reg = w83793_read_value(client, W83793_REG_CLR_CHASSIS);
0454 w83793_write_value(client, W83793_REG_CLR_CHASSIS, reg | 0x80);
0455 data->valid = false;
0456 mutex_unlock(&data->update_lock);
0457 return count;
0458 }
0459
0460 #define FAN_INPUT 0
0461 #define FAN_MIN 1
0462 static ssize_t
0463 show_fan(struct device *dev, struct device_attribute *attr, char *buf)
0464 {
0465 struct sensor_device_attribute_2 *sensor_attr =
0466 to_sensor_dev_attr_2(attr);
0467 int nr = sensor_attr->nr;
0468 int index = sensor_attr->index;
0469 struct w83793_data *data = w83793_update_device(dev);
0470 u16 val;
0471
0472 if (nr == FAN_INPUT)
0473 val = data->fan[index] & 0x0fff;
0474 else
0475 val = data->fan_min[index] & 0x0fff;
0476
0477 return sprintf(buf, "%lu\n", FAN_FROM_REG(val));
0478 }
0479
0480 static ssize_t
0481 store_fan_min(struct device *dev, struct device_attribute *attr,
0482 const char *buf, size_t count)
0483 {
0484 struct sensor_device_attribute_2 *sensor_attr =
0485 to_sensor_dev_attr_2(attr);
0486 int index = sensor_attr->index;
0487 struct i2c_client *client = to_i2c_client(dev);
0488 struct w83793_data *data = i2c_get_clientdata(client);
0489 unsigned long val;
0490 int err;
0491
0492 err = kstrtoul(buf, 10, &val);
0493 if (err)
0494 return err;
0495 val = FAN_TO_REG(val);
0496
0497 mutex_lock(&data->update_lock);
0498 data->fan_min[index] = val;
0499 w83793_write_value(client, W83793_REG_FAN_MIN(index),
0500 (val >> 8) & 0xff);
0501 w83793_write_value(client, W83793_REG_FAN_MIN(index) + 1, val & 0xff);
0502 mutex_unlock(&data->update_lock);
0503
0504 return count;
0505 }
0506
0507 static ssize_t
0508 show_pwm(struct device *dev, struct device_attribute *attr, char *buf)
0509 {
0510 struct sensor_device_attribute_2 *sensor_attr =
0511 to_sensor_dev_attr_2(attr);
0512 struct w83793_data *data = w83793_update_device(dev);
0513 u16 val;
0514 int nr = sensor_attr->nr;
0515 int index = sensor_attr->index;
0516
0517 if (nr == PWM_STOP_TIME)
0518 val = TIME_FROM_REG(data->pwm_stop_time[index]);
0519 else
0520 val = (data->pwm[index][nr] & 0x3f) << 2;
0521
0522 return sprintf(buf, "%d\n", val);
0523 }
0524
0525 static ssize_t
0526 store_pwm(struct device *dev, struct device_attribute *attr,
0527 const char *buf, size_t count)
0528 {
0529 struct i2c_client *client = to_i2c_client(dev);
0530 struct w83793_data *data = i2c_get_clientdata(client);
0531 struct sensor_device_attribute_2 *sensor_attr =
0532 to_sensor_dev_attr_2(attr);
0533 int nr = sensor_attr->nr;
0534 int index = sensor_attr->index;
0535 unsigned long val;
0536 int err;
0537
0538 err = kstrtoul(buf, 10, &val);
0539 if (err)
0540 return err;
0541
0542 mutex_lock(&data->update_lock);
0543 if (nr == PWM_STOP_TIME) {
0544 val = TIME_TO_REG(val);
0545 data->pwm_stop_time[index] = val;
0546 w83793_write_value(client, W83793_REG_PWM_STOP_TIME(index),
0547 val);
0548 } else {
0549 val = clamp_val(val, 0, 0xff) >> 2;
0550 data->pwm[index][nr] =
0551 w83793_read_value(client, W83793_REG_PWM(index, nr)) & 0xc0;
0552 data->pwm[index][nr] |= val;
0553 w83793_write_value(client, W83793_REG_PWM(index, nr),
0554 data->pwm[index][nr]);
0555 }
0556
0557 mutex_unlock(&data->update_lock);
0558 return count;
0559 }
0560
0561 static ssize_t
0562 show_temp(struct device *dev, struct device_attribute *attr, char *buf)
0563 {
0564 struct sensor_device_attribute_2 *sensor_attr =
0565 to_sensor_dev_attr_2(attr);
0566 int nr = sensor_attr->nr;
0567 int index = sensor_attr->index;
0568 struct w83793_data *data = w83793_update_device(dev);
0569 long temp = TEMP_FROM_REG(data->temp[index][nr]);
0570
0571 if (nr == TEMP_READ && index < 4) {
0572 int low = ((data->temp_low_bits >> (index * 2)) & 0x03) * 250;
0573 temp += temp > 0 ? low : -low;
0574 }
0575 return sprintf(buf, "%ld\n", temp);
0576 }
0577
0578 static ssize_t
0579 store_temp(struct device *dev, struct device_attribute *attr,
0580 const char *buf, size_t count)
0581 {
0582 struct sensor_device_attribute_2 *sensor_attr =
0583 to_sensor_dev_attr_2(attr);
0584 int nr = sensor_attr->nr;
0585 int index = sensor_attr->index;
0586 struct i2c_client *client = to_i2c_client(dev);
0587 struct w83793_data *data = i2c_get_clientdata(client);
0588 long tmp;
0589 int err;
0590
0591 err = kstrtol(buf, 10, &tmp);
0592 if (err)
0593 return err;
0594
0595 mutex_lock(&data->update_lock);
0596 data->temp[index][nr] = TEMP_TO_REG(tmp, -128, 127);
0597 w83793_write_value(client, W83793_REG_TEMP[index][nr],
0598 data->temp[index][nr]);
0599 mutex_unlock(&data->update_lock);
0600 return count;
0601 }
0602
0603
0604
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618 static u8 TO_TEMP_MODE[] = { 0, 0, 0, 6 };
0619
0620 static ssize_t
0621 show_temp_mode(struct device *dev, struct device_attribute *attr, char *buf)
0622 {
0623 struct w83793_data *data = w83793_update_device(dev);
0624 struct sensor_device_attribute_2 *sensor_attr =
0625 to_sensor_dev_attr_2(attr);
0626 int index = sensor_attr->index;
0627 u8 mask = (index < 4) ? 0x03 : 0x01;
0628 u8 shift = (index < 4) ? (2 * index) : (index - 4);
0629 u8 tmp;
0630 index = (index < 4) ? 0 : 1;
0631
0632 tmp = (data->temp_mode[index] >> shift) & mask;
0633
0634
0635 if (tmp == 1)
0636 tmp = index == 0 ? 3 : 4;
0637 else
0638 tmp = TO_TEMP_MODE[tmp];
0639
0640 return sprintf(buf, "%d\n", tmp);
0641 }
0642
0643 static ssize_t
0644 store_temp_mode(struct device *dev, struct device_attribute *attr,
0645 const char *buf, size_t count)
0646 {
0647 struct i2c_client *client = to_i2c_client(dev);
0648 struct w83793_data *data = i2c_get_clientdata(client);
0649 struct sensor_device_attribute_2 *sensor_attr =
0650 to_sensor_dev_attr_2(attr);
0651 int index = sensor_attr->index;
0652 u8 mask = (index < 4) ? 0x03 : 0x01;
0653 u8 shift = (index < 4) ? (2 * index) : (index - 4);
0654 unsigned long val;
0655 int err;
0656
0657 err = kstrtoul(buf, 10, &val);
0658 if (err)
0659 return err;
0660
0661
0662 if ((val == 6) && (index < 4)) {
0663 val -= 3;
0664 } else if ((val == 3 && index < 4)
0665 || (val == 4 && index >= 4)) {
0666
0667 val = !!val;
0668 } else {
0669 return -EINVAL;
0670 }
0671
0672 index = (index < 4) ? 0 : 1;
0673 mutex_lock(&data->update_lock);
0674 data->temp_mode[index] =
0675 w83793_read_value(client, W83793_REG_TEMP_MODE[index]);
0676 data->temp_mode[index] &= ~(mask << shift);
0677 data->temp_mode[index] |= val << shift;
0678 w83793_write_value(client, W83793_REG_TEMP_MODE[index],
0679 data->temp_mode[index]);
0680 mutex_unlock(&data->update_lock);
0681
0682 return count;
0683 }
0684
0685 #define SETUP_PWM_DEFAULT 0
0686 #define SETUP_PWM_UPTIME 1
0687 #define SETUP_PWM_DOWNTIME 2
0688 #define SETUP_TEMP_CRITICAL 3
0689 static ssize_t
0690 show_sf_setup(struct device *dev, struct device_attribute *attr, char *buf)
0691 {
0692 struct sensor_device_attribute_2 *sensor_attr =
0693 to_sensor_dev_attr_2(attr);
0694 int nr = sensor_attr->nr;
0695 struct w83793_data *data = w83793_update_device(dev);
0696 u32 val = 0;
0697
0698 if (nr == SETUP_PWM_DEFAULT)
0699 val = (data->pwm_default & 0x3f) << 2;
0700 else if (nr == SETUP_PWM_UPTIME)
0701 val = TIME_FROM_REG(data->pwm_uptime);
0702 else if (nr == SETUP_PWM_DOWNTIME)
0703 val = TIME_FROM_REG(data->pwm_downtime);
0704 else if (nr == SETUP_TEMP_CRITICAL)
0705 val = TEMP_FROM_REG(data->temp_critical & 0x7f);
0706
0707 return sprintf(buf, "%d\n", val);
0708 }
0709
0710 static ssize_t
0711 store_sf_setup(struct device *dev, struct device_attribute *attr,
0712 const char *buf, size_t count)
0713 {
0714 struct sensor_device_attribute_2 *sensor_attr =
0715 to_sensor_dev_attr_2(attr);
0716 int nr = sensor_attr->nr;
0717 struct i2c_client *client = to_i2c_client(dev);
0718 struct w83793_data *data = i2c_get_clientdata(client);
0719 long val;
0720 int err;
0721
0722 err = kstrtol(buf, 10, &val);
0723 if (err)
0724 return err;
0725
0726 mutex_lock(&data->update_lock);
0727 if (nr == SETUP_PWM_DEFAULT) {
0728 data->pwm_default =
0729 w83793_read_value(client, W83793_REG_PWM_DEFAULT) & 0xc0;
0730 data->pwm_default |= clamp_val(val, 0, 0xff) >> 2;
0731 w83793_write_value(client, W83793_REG_PWM_DEFAULT,
0732 data->pwm_default);
0733 } else if (nr == SETUP_PWM_UPTIME) {
0734 data->pwm_uptime = TIME_TO_REG(val);
0735 data->pwm_uptime += data->pwm_uptime == 0 ? 1 : 0;
0736 w83793_write_value(client, W83793_REG_PWM_UPTIME,
0737 data->pwm_uptime);
0738 } else if (nr == SETUP_PWM_DOWNTIME) {
0739 data->pwm_downtime = TIME_TO_REG(val);
0740 data->pwm_downtime += data->pwm_downtime == 0 ? 1 : 0;
0741 w83793_write_value(client, W83793_REG_PWM_DOWNTIME,
0742 data->pwm_downtime);
0743 } else {
0744 data->temp_critical =
0745 w83793_read_value(client, W83793_REG_TEMP_CRITICAL) & 0x80;
0746 data->temp_critical |= TEMP_TO_REG(val, 0, 0x7f);
0747 w83793_write_value(client, W83793_REG_TEMP_CRITICAL,
0748 data->temp_critical);
0749 }
0750
0751 mutex_unlock(&data->update_lock);
0752 return count;
0753 }
0754
0755
0756
0757
0758
0759
0760
0761
0762
0763
0764
0765
0766
0767
0768
0769
0770
0771
0772
0773
0774
0775
0776
0777
0778
0779
0780
0781
0782 #define TEMP_FAN_MAP 0
0783 #define TEMP_PWM_ENABLE 1
0784 #define TEMP_CRUISE 2
0785 #define TEMP_TOLERANCE 3
0786 static ssize_t
0787 show_sf_ctrl(struct device *dev, struct device_attribute *attr, char *buf)
0788 {
0789 struct sensor_device_attribute_2 *sensor_attr =
0790 to_sensor_dev_attr_2(attr);
0791 int nr = sensor_attr->nr;
0792 int index = sensor_attr->index;
0793 struct w83793_data *data = w83793_update_device(dev);
0794 u32 val;
0795
0796 if (nr == TEMP_FAN_MAP) {
0797 val = data->temp_fan_map[index];
0798 } else if (nr == TEMP_PWM_ENABLE) {
0799
0800 val = ((data->pwm_enable >> index) & 0x01) + 2;
0801 } else if (nr == TEMP_CRUISE) {
0802 val = TEMP_FROM_REG(data->temp_cruise[index] & 0x7f);
0803 } else {
0804 val = data->tolerance[index >> 1] >> ((index & 0x01) ? 4 : 0);
0805 val = TEMP_FROM_REG(val & 0x0f);
0806 }
0807 return sprintf(buf, "%d\n", val);
0808 }
0809
0810 static ssize_t
0811 store_sf_ctrl(struct device *dev, struct device_attribute *attr,
0812 const char *buf, size_t count)
0813 {
0814 struct sensor_device_attribute_2 *sensor_attr =
0815 to_sensor_dev_attr_2(attr);
0816 int nr = sensor_attr->nr;
0817 int index = sensor_attr->index;
0818 struct i2c_client *client = to_i2c_client(dev);
0819 struct w83793_data *data = i2c_get_clientdata(client);
0820 long val;
0821 int err;
0822
0823 err = kstrtol(buf, 10, &val);
0824 if (err)
0825 return err;
0826
0827 mutex_lock(&data->update_lock);
0828 if (nr == TEMP_FAN_MAP) {
0829 val = clamp_val(val, 0, 255);
0830 w83793_write_value(client, W83793_REG_TEMP_FAN_MAP(index), val);
0831 data->temp_fan_map[index] = val;
0832 } else if (nr == TEMP_PWM_ENABLE) {
0833 if (val == 2 || val == 3) {
0834 data->pwm_enable =
0835 w83793_read_value(client, W83793_REG_PWM_ENABLE);
0836 if (val - 2)
0837 data->pwm_enable |= 1 << index;
0838 else
0839 data->pwm_enable &= ~(1 << index);
0840 w83793_write_value(client, W83793_REG_PWM_ENABLE,
0841 data->pwm_enable);
0842 } else {
0843 mutex_unlock(&data->update_lock);
0844 return -EINVAL;
0845 }
0846 } else if (nr == TEMP_CRUISE) {
0847 data->temp_cruise[index] =
0848 w83793_read_value(client, W83793_REG_TEMP_CRUISE(index));
0849 data->temp_cruise[index] &= 0x80;
0850 data->temp_cruise[index] |= TEMP_TO_REG(val, 0, 0x7f);
0851
0852 w83793_write_value(client, W83793_REG_TEMP_CRUISE(index),
0853 data->temp_cruise[index]);
0854 } else {
0855 int i = index >> 1;
0856 u8 shift = (index & 0x01) ? 4 : 0;
0857 data->tolerance[i] =
0858 w83793_read_value(client, W83793_REG_TEMP_TOL(i));
0859
0860 data->tolerance[i] &= ~(0x0f << shift);
0861 data->tolerance[i] |= TEMP_TO_REG(val, 0, 0x0f) << shift;
0862 w83793_write_value(client, W83793_REG_TEMP_TOL(i),
0863 data->tolerance[i]);
0864 }
0865
0866 mutex_unlock(&data->update_lock);
0867 return count;
0868 }
0869
0870 static ssize_t
0871 show_sf2_pwm(struct device *dev, struct device_attribute *attr, char *buf)
0872 {
0873 struct sensor_device_attribute_2 *sensor_attr =
0874 to_sensor_dev_attr_2(attr);
0875 int nr = sensor_attr->nr;
0876 int index = sensor_attr->index;
0877 struct w83793_data *data = w83793_update_device(dev);
0878
0879 return sprintf(buf, "%d\n", (data->sf2_pwm[index][nr] & 0x3f) << 2);
0880 }
0881
0882 static ssize_t
0883 store_sf2_pwm(struct device *dev, struct device_attribute *attr,
0884 const char *buf, size_t count)
0885 {
0886 struct i2c_client *client = to_i2c_client(dev);
0887 struct w83793_data *data = i2c_get_clientdata(client);
0888 struct sensor_device_attribute_2 *sensor_attr =
0889 to_sensor_dev_attr_2(attr);
0890 int nr = sensor_attr->nr;
0891 int index = sensor_attr->index;
0892 unsigned long val;
0893 int err;
0894
0895 err = kstrtoul(buf, 10, &val);
0896 if (err)
0897 return err;
0898 val = clamp_val(val, 0, 0xff) >> 2;
0899
0900 mutex_lock(&data->update_lock);
0901 data->sf2_pwm[index][nr] =
0902 w83793_read_value(client, W83793_REG_SF2_PWM(index, nr)) & 0xc0;
0903 data->sf2_pwm[index][nr] |= val;
0904 w83793_write_value(client, W83793_REG_SF2_PWM(index, nr),
0905 data->sf2_pwm[index][nr]);
0906 mutex_unlock(&data->update_lock);
0907 return count;
0908 }
0909
0910 static ssize_t
0911 show_sf2_temp(struct device *dev, struct device_attribute *attr, char *buf)
0912 {
0913 struct sensor_device_attribute_2 *sensor_attr =
0914 to_sensor_dev_attr_2(attr);
0915 int nr = sensor_attr->nr;
0916 int index = sensor_attr->index;
0917 struct w83793_data *data = w83793_update_device(dev);
0918
0919 return sprintf(buf, "%ld\n",
0920 TEMP_FROM_REG(data->sf2_temp[index][nr] & 0x7f));
0921 }
0922
0923 static ssize_t
0924 store_sf2_temp(struct device *dev, struct device_attribute *attr,
0925 const char *buf, size_t count)
0926 {
0927 struct i2c_client *client = to_i2c_client(dev);
0928 struct w83793_data *data = i2c_get_clientdata(client);
0929 struct sensor_device_attribute_2 *sensor_attr =
0930 to_sensor_dev_attr_2(attr);
0931 int nr = sensor_attr->nr;
0932 int index = sensor_attr->index;
0933 long val;
0934 int err;
0935
0936 err = kstrtol(buf, 10, &val);
0937 if (err)
0938 return err;
0939 val = TEMP_TO_REG(val, 0, 0x7f);
0940
0941 mutex_lock(&data->update_lock);
0942 data->sf2_temp[index][nr] =
0943 w83793_read_value(client, W83793_REG_SF2_TEMP(index, nr)) & 0x80;
0944 data->sf2_temp[index][nr] |= val;
0945 w83793_write_value(client, W83793_REG_SF2_TEMP(index, nr),
0946 data->sf2_temp[index][nr]);
0947 mutex_unlock(&data->update_lock);
0948 return count;
0949 }
0950
0951
0952 static ssize_t
0953 show_in(struct device *dev, struct device_attribute *attr, char *buf)
0954 {
0955 struct sensor_device_attribute_2 *sensor_attr =
0956 to_sensor_dev_attr_2(attr);
0957 int nr = sensor_attr->nr;
0958 int index = sensor_attr->index;
0959 struct w83793_data *data = w83793_update_device(dev);
0960 u16 val = data->in[index][nr];
0961
0962 if (index < 3) {
0963 val <<= 2;
0964 val += (data->in_low_bits[nr] >> (index * 2)) & 0x3;
0965 }
0966
0967 val = val * scale_in[index] + scale_in_add[index];
0968 return sprintf(buf, "%d\n", val);
0969 }
0970
0971 static ssize_t
0972 store_in(struct device *dev, struct device_attribute *attr,
0973 const char *buf, size_t count)
0974 {
0975 struct sensor_device_attribute_2 *sensor_attr =
0976 to_sensor_dev_attr_2(attr);
0977 int nr = sensor_attr->nr;
0978 int index = sensor_attr->index;
0979 struct i2c_client *client = to_i2c_client(dev);
0980 struct w83793_data *data = i2c_get_clientdata(client);
0981 unsigned long val;
0982 int err;
0983
0984 err = kstrtoul(buf, 10, &val);
0985 if (err)
0986 return err;
0987 val = (val + scale_in[index] / 2) / scale_in[index];
0988
0989 mutex_lock(&data->update_lock);
0990 if (index > 2) {
0991
0992 if (nr == 1 || nr == 2)
0993 val -= scale_in_add[index] / scale_in[index];
0994 val = clamp_val(val, 0, 255);
0995 } else {
0996 val = clamp_val(val, 0, 0x3FF);
0997 data->in_low_bits[nr] =
0998 w83793_read_value(client, W83793_REG_IN_LOW_BITS[nr]);
0999 data->in_low_bits[nr] &= ~(0x03 << (2 * index));
1000 data->in_low_bits[nr] |= (val & 0x03) << (2 * index);
1001 w83793_write_value(client, W83793_REG_IN_LOW_BITS[nr],
1002 data->in_low_bits[nr]);
1003 val >>= 2;
1004 }
1005 data->in[index][nr] = val;
1006 w83793_write_value(client, W83793_REG_IN[index][nr],
1007 data->in[index][nr]);
1008 mutex_unlock(&data->update_lock);
1009 return count;
1010 }
1011
1012 #define NOT_USED -1
1013
1014 #define SENSOR_ATTR_IN(index) \
1015 SENSOR_ATTR_2(in##index##_input, S_IRUGO, show_in, NULL, \
1016 IN_READ, index), \
1017 SENSOR_ATTR_2(in##index##_max, S_IRUGO | S_IWUSR, show_in, \
1018 store_in, IN_MAX, index), \
1019 SENSOR_ATTR_2(in##index##_min, S_IRUGO | S_IWUSR, show_in, \
1020 store_in, IN_LOW, index), \
1021 SENSOR_ATTR_2(in##index##_alarm, S_IRUGO, show_alarm_beep, \
1022 NULL, ALARM_STATUS, index + ((index > 2) ? 1 : 0)), \
1023 SENSOR_ATTR_2(in##index##_beep, S_IWUSR | S_IRUGO, \
1024 show_alarm_beep, store_beep, BEEP_ENABLE, \
1025 index + ((index > 2) ? 1 : 0))
1026
1027 #define SENSOR_ATTR_FAN(index) \
1028 SENSOR_ATTR_2(fan##index##_alarm, S_IRUGO, show_alarm_beep, \
1029 NULL, ALARM_STATUS, index + 17), \
1030 SENSOR_ATTR_2(fan##index##_beep, S_IWUSR | S_IRUGO, \
1031 show_alarm_beep, store_beep, BEEP_ENABLE, index + 17), \
1032 SENSOR_ATTR_2(fan##index##_input, S_IRUGO, show_fan, \
1033 NULL, FAN_INPUT, index - 1), \
1034 SENSOR_ATTR_2(fan##index##_min, S_IWUSR | S_IRUGO, \
1035 show_fan, store_fan_min, FAN_MIN, index - 1)
1036
1037 #define SENSOR_ATTR_PWM(index) \
1038 SENSOR_ATTR_2(pwm##index, S_IWUSR | S_IRUGO, show_pwm, \
1039 store_pwm, PWM_DUTY, index - 1), \
1040 SENSOR_ATTR_2(pwm##index##_nonstop, S_IWUSR | S_IRUGO, \
1041 show_pwm, store_pwm, PWM_NONSTOP, index - 1), \
1042 SENSOR_ATTR_2(pwm##index##_start, S_IWUSR | S_IRUGO, \
1043 show_pwm, store_pwm, PWM_START, index - 1), \
1044 SENSOR_ATTR_2(pwm##index##_stop_time, S_IWUSR | S_IRUGO, \
1045 show_pwm, store_pwm, PWM_STOP_TIME, index - 1)
1046
1047 #define SENSOR_ATTR_TEMP(index) \
1048 SENSOR_ATTR_2(temp##index##_type, S_IRUGO | S_IWUSR, \
1049 show_temp_mode, store_temp_mode, NOT_USED, index - 1), \
1050 SENSOR_ATTR_2(temp##index##_input, S_IRUGO, show_temp, \
1051 NULL, TEMP_READ, index - 1), \
1052 SENSOR_ATTR_2(temp##index##_max, S_IRUGO | S_IWUSR, show_temp, \
1053 store_temp, TEMP_CRIT, index - 1), \
1054 SENSOR_ATTR_2(temp##index##_max_hyst, S_IRUGO | S_IWUSR, \
1055 show_temp, store_temp, TEMP_CRIT_HYST, index - 1), \
1056 SENSOR_ATTR_2(temp##index##_warn, S_IRUGO | S_IWUSR, show_temp, \
1057 store_temp, TEMP_WARN, index - 1), \
1058 SENSOR_ATTR_2(temp##index##_warn_hyst, S_IRUGO | S_IWUSR, \
1059 show_temp, store_temp, TEMP_WARN_HYST, index - 1), \
1060 SENSOR_ATTR_2(temp##index##_alarm, S_IRUGO, \
1061 show_alarm_beep, NULL, ALARM_STATUS, index + 11), \
1062 SENSOR_ATTR_2(temp##index##_beep, S_IWUSR | S_IRUGO, \
1063 show_alarm_beep, store_beep, BEEP_ENABLE, index + 11), \
1064 SENSOR_ATTR_2(temp##index##_auto_channels_pwm, \
1065 S_IRUGO | S_IWUSR, show_sf_ctrl, store_sf_ctrl, \
1066 TEMP_FAN_MAP, index - 1), \
1067 SENSOR_ATTR_2(temp##index##_pwm_enable, S_IWUSR | S_IRUGO, \
1068 show_sf_ctrl, store_sf_ctrl, TEMP_PWM_ENABLE, \
1069 index - 1), \
1070 SENSOR_ATTR_2(thermal_cruise##index, S_IRUGO | S_IWUSR, \
1071 show_sf_ctrl, store_sf_ctrl, TEMP_CRUISE, index - 1), \
1072 SENSOR_ATTR_2(tolerance##index, S_IRUGO | S_IWUSR, show_sf_ctrl,\
1073 store_sf_ctrl, TEMP_TOLERANCE, index - 1), \
1074 SENSOR_ATTR_2(temp##index##_auto_point1_pwm, S_IRUGO | S_IWUSR, \
1075 show_sf2_pwm, store_sf2_pwm, 0, index - 1), \
1076 SENSOR_ATTR_2(temp##index##_auto_point2_pwm, S_IRUGO | S_IWUSR, \
1077 show_sf2_pwm, store_sf2_pwm, 1, index - 1), \
1078 SENSOR_ATTR_2(temp##index##_auto_point3_pwm, S_IRUGO | S_IWUSR, \
1079 show_sf2_pwm, store_sf2_pwm, 2, index - 1), \
1080 SENSOR_ATTR_2(temp##index##_auto_point4_pwm, S_IRUGO | S_IWUSR, \
1081 show_sf2_pwm, store_sf2_pwm, 3, index - 1), \
1082 SENSOR_ATTR_2(temp##index##_auto_point5_pwm, S_IRUGO | S_IWUSR, \
1083 show_sf2_pwm, store_sf2_pwm, 4, index - 1), \
1084 SENSOR_ATTR_2(temp##index##_auto_point6_pwm, S_IRUGO | S_IWUSR, \
1085 show_sf2_pwm, store_sf2_pwm, 5, index - 1), \
1086 SENSOR_ATTR_2(temp##index##_auto_point7_pwm, S_IRUGO | S_IWUSR, \
1087 show_sf2_pwm, store_sf2_pwm, 6, index - 1), \
1088 SENSOR_ATTR_2(temp##index##_auto_point1_temp, S_IRUGO | S_IWUSR,\
1089 show_sf2_temp, store_sf2_temp, 0, index - 1), \
1090 SENSOR_ATTR_2(temp##index##_auto_point2_temp, S_IRUGO | S_IWUSR,\
1091 show_sf2_temp, store_sf2_temp, 1, index - 1), \
1092 SENSOR_ATTR_2(temp##index##_auto_point3_temp, S_IRUGO | S_IWUSR,\
1093 show_sf2_temp, store_sf2_temp, 2, index - 1), \
1094 SENSOR_ATTR_2(temp##index##_auto_point4_temp, S_IRUGO | S_IWUSR,\
1095 show_sf2_temp, store_sf2_temp, 3, index - 1), \
1096 SENSOR_ATTR_2(temp##index##_auto_point5_temp, S_IRUGO | S_IWUSR,\
1097 show_sf2_temp, store_sf2_temp, 4, index - 1), \
1098 SENSOR_ATTR_2(temp##index##_auto_point6_temp, S_IRUGO | S_IWUSR,\
1099 show_sf2_temp, store_sf2_temp, 5, index - 1), \
1100 SENSOR_ATTR_2(temp##index##_auto_point7_temp, S_IRUGO | S_IWUSR,\
1101 show_sf2_temp, store_sf2_temp, 6, index - 1)
1102
1103 static struct sensor_device_attribute_2 w83793_sensor_attr_2[] = {
1104 SENSOR_ATTR_IN(0),
1105 SENSOR_ATTR_IN(1),
1106 SENSOR_ATTR_IN(2),
1107 SENSOR_ATTR_IN(3),
1108 SENSOR_ATTR_IN(4),
1109 SENSOR_ATTR_IN(5),
1110 SENSOR_ATTR_IN(6),
1111 SENSOR_ATTR_IN(7),
1112 SENSOR_ATTR_IN(8),
1113 SENSOR_ATTR_IN(9),
1114 SENSOR_ATTR_FAN(1),
1115 SENSOR_ATTR_FAN(2),
1116 SENSOR_ATTR_FAN(3),
1117 SENSOR_ATTR_FAN(4),
1118 SENSOR_ATTR_FAN(5),
1119 SENSOR_ATTR_PWM(1),
1120 SENSOR_ATTR_PWM(2),
1121 SENSOR_ATTR_PWM(3),
1122 };
1123
1124 static struct sensor_device_attribute_2 w83793_temp[] = {
1125 SENSOR_ATTR_TEMP(1),
1126 SENSOR_ATTR_TEMP(2),
1127 SENSOR_ATTR_TEMP(3),
1128 SENSOR_ATTR_TEMP(4),
1129 SENSOR_ATTR_TEMP(5),
1130 SENSOR_ATTR_TEMP(6),
1131 };
1132
1133
1134 static struct sensor_device_attribute_2 w83793_left_fan[] = {
1135 SENSOR_ATTR_FAN(6),
1136 SENSOR_ATTR_FAN(7),
1137 SENSOR_ATTR_FAN(8),
1138 SENSOR_ATTR_FAN(9),
1139 SENSOR_ATTR_FAN(10),
1140 SENSOR_ATTR_FAN(11),
1141 SENSOR_ATTR_FAN(12),
1142 };
1143
1144
1145 static struct sensor_device_attribute_2 w83793_left_pwm[] = {
1146 SENSOR_ATTR_PWM(4),
1147 SENSOR_ATTR_PWM(5),
1148 SENSOR_ATTR_PWM(6),
1149 SENSOR_ATTR_PWM(7),
1150 SENSOR_ATTR_PWM(8),
1151 };
1152
1153 static struct sensor_device_attribute_2 w83793_vid[] = {
1154 SENSOR_ATTR_2(cpu0_vid, S_IRUGO, show_vid, NULL, NOT_USED, 0),
1155 SENSOR_ATTR_2(cpu1_vid, S_IRUGO, show_vid, NULL, NOT_USED, 1),
1156 };
1157 static DEVICE_ATTR_RW(vrm);
1158
1159 static struct sensor_device_attribute_2 sda_single_files[] = {
1160 SENSOR_ATTR_2(intrusion0_alarm, S_IWUSR | S_IRUGO, show_alarm_beep,
1161 store_chassis_clear, ALARM_STATUS, 30),
1162 SENSOR_ATTR_2(beep_enable, S_IWUSR | S_IRUGO, show_beep_enable,
1163 store_beep_enable, NOT_USED, NOT_USED),
1164 SENSOR_ATTR_2(pwm_default, S_IWUSR | S_IRUGO, show_sf_setup,
1165 store_sf_setup, SETUP_PWM_DEFAULT, NOT_USED),
1166 SENSOR_ATTR_2(pwm_uptime, S_IWUSR | S_IRUGO, show_sf_setup,
1167 store_sf_setup, SETUP_PWM_UPTIME, NOT_USED),
1168 SENSOR_ATTR_2(pwm_downtime, S_IWUSR | S_IRUGO, show_sf_setup,
1169 store_sf_setup, SETUP_PWM_DOWNTIME, NOT_USED),
1170 SENSOR_ATTR_2(temp_critical, S_IWUSR | S_IRUGO, show_sf_setup,
1171 store_sf_setup, SETUP_TEMP_CRITICAL, NOT_USED),
1172 };
1173
1174 static void w83793_init_client(struct i2c_client *client)
1175 {
1176 if (reset)
1177 w83793_write_value(client, W83793_REG_CONFIG, 0x80);
1178
1179
1180 w83793_write_value(client, W83793_REG_CONFIG,
1181 w83793_read_value(client, W83793_REG_CONFIG) | 0x01);
1182 }
1183
1184
1185
1186
1187
1188 static int watchdog_set_timeout(struct w83793_data *data, int timeout)
1189 {
1190 unsigned int mtimeout;
1191 int ret;
1192
1193 mtimeout = DIV_ROUND_UP(timeout, 60);
1194
1195 if (mtimeout > 255)
1196 return -EINVAL;
1197
1198 mutex_lock(&data->watchdog_lock);
1199 if (!data->client) {
1200 ret = -ENODEV;
1201 goto leave;
1202 }
1203
1204 data->watchdog_timeout = mtimeout;
1205
1206
1207 w83793_write_value(data->client, W83793_REG_WDT_TIMEOUT,
1208 data->watchdog_timeout);
1209
1210 ret = mtimeout * 60;
1211
1212 leave:
1213 mutex_unlock(&data->watchdog_lock);
1214 return ret;
1215 }
1216
1217 static int watchdog_get_timeout(struct w83793_data *data)
1218 {
1219 int timeout;
1220
1221 mutex_lock(&data->watchdog_lock);
1222 timeout = data->watchdog_timeout * 60;
1223 mutex_unlock(&data->watchdog_lock);
1224
1225 return timeout;
1226 }
1227
1228 static int watchdog_trigger(struct w83793_data *data)
1229 {
1230 int ret = 0;
1231
1232 mutex_lock(&data->watchdog_lock);
1233 if (!data->client) {
1234 ret = -ENODEV;
1235 goto leave;
1236 }
1237
1238
1239 w83793_write_value(data->client, W83793_REG_WDT_TIMEOUT,
1240 data->watchdog_timeout);
1241
1242 leave:
1243 mutex_unlock(&data->watchdog_lock);
1244 return ret;
1245 }
1246
1247 static int watchdog_enable(struct w83793_data *data)
1248 {
1249 int ret = 0;
1250
1251 mutex_lock(&data->watchdog_lock);
1252 if (!data->client) {
1253 ret = -ENODEV;
1254 goto leave;
1255 }
1256
1257
1258 w83793_write_value(data->client, W83793_REG_WDT_TIMEOUT,
1259 data->watchdog_timeout);
1260
1261
1262 w83793_write_value(data->client, W83793_REG_WDT_LOCK, 0x55);
1263
1264 leave:
1265 mutex_unlock(&data->watchdog_lock);
1266 return ret;
1267 }
1268
1269 static int watchdog_disable(struct w83793_data *data)
1270 {
1271 int ret = 0;
1272
1273 mutex_lock(&data->watchdog_lock);
1274 if (!data->client) {
1275 ret = -ENODEV;
1276 goto leave;
1277 }
1278
1279
1280 w83793_write_value(data->client, W83793_REG_WDT_LOCK, 0xAA);
1281
1282 leave:
1283 mutex_unlock(&data->watchdog_lock);
1284 return ret;
1285 }
1286
1287 static int watchdog_open(struct inode *inode, struct file *filp)
1288 {
1289 struct w83793_data *pos, *data = NULL;
1290 int watchdog_is_open;
1291
1292
1293
1294
1295
1296
1297
1298 if (!mutex_trylock(&watchdog_data_mutex))
1299 return -ERESTARTSYS;
1300 list_for_each_entry(pos, &watchdog_data_list, list) {
1301 if (pos->watchdog_miscdev.minor == iminor(inode)) {
1302 data = pos;
1303 break;
1304 }
1305 }
1306
1307
1308 watchdog_is_open = test_and_set_bit(0, &data->watchdog_is_open);
1309
1310
1311
1312
1313
1314 if (!watchdog_is_open)
1315 kref_get(&data->kref);
1316
1317 mutex_unlock(&watchdog_data_mutex);
1318
1319
1320 if (watchdog_is_open)
1321 return -EBUSY;
1322
1323
1324 watchdog_enable(data);
1325
1326
1327 filp->private_data = data;
1328
1329 return stream_open(inode, filp);
1330 }
1331
1332 static int watchdog_close(struct inode *inode, struct file *filp)
1333 {
1334 struct w83793_data *data = filp->private_data;
1335
1336 if (data->watchdog_expect_close) {
1337 watchdog_disable(data);
1338 data->watchdog_expect_close = 0;
1339 } else {
1340 watchdog_trigger(data);
1341 dev_crit(&data->client->dev,
1342 "unexpected close, not stopping watchdog!\n");
1343 }
1344
1345 clear_bit(0, &data->watchdog_is_open);
1346
1347
1348 mutex_lock(&watchdog_data_mutex);
1349 kref_put(&data->kref, w83793_release_resources);
1350 mutex_unlock(&watchdog_data_mutex);
1351
1352 return 0;
1353 }
1354
1355 static ssize_t watchdog_write(struct file *filp, const char __user *buf,
1356 size_t count, loff_t *offset)
1357 {
1358 ssize_t ret;
1359 struct w83793_data *data = filp->private_data;
1360
1361 if (count) {
1362 if (!nowayout) {
1363 size_t i;
1364
1365
1366 data->watchdog_expect_close = 0;
1367
1368 for (i = 0; i != count; i++) {
1369 char c;
1370 if (get_user(c, buf + i))
1371 return -EFAULT;
1372 if (c == 'V')
1373 data->watchdog_expect_close = 1;
1374 }
1375 }
1376 ret = watchdog_trigger(data);
1377 if (ret < 0)
1378 return ret;
1379 }
1380 return count;
1381 }
1382
1383 static long watchdog_ioctl(struct file *filp, unsigned int cmd,
1384 unsigned long arg)
1385 {
1386 struct watchdog_info ident = {
1387 .options = WDIOF_KEEPALIVEPING |
1388 WDIOF_SETTIMEOUT |
1389 WDIOF_CARDRESET,
1390 .identity = "w83793 watchdog"
1391 };
1392
1393 int val, ret = 0;
1394 struct w83793_data *data = filp->private_data;
1395
1396 switch (cmd) {
1397 case WDIOC_GETSUPPORT:
1398 if (!nowayout)
1399 ident.options |= WDIOF_MAGICCLOSE;
1400 if (copy_to_user((void __user *)arg, &ident, sizeof(ident)))
1401 ret = -EFAULT;
1402 break;
1403
1404 case WDIOC_GETSTATUS:
1405 val = data->watchdog_caused_reboot ? WDIOF_CARDRESET : 0;
1406 ret = put_user(val, (int __user *)arg);
1407 break;
1408
1409 case WDIOC_GETBOOTSTATUS:
1410 ret = put_user(0, (int __user *)arg);
1411 break;
1412
1413 case WDIOC_KEEPALIVE:
1414 ret = watchdog_trigger(data);
1415 break;
1416
1417 case WDIOC_GETTIMEOUT:
1418 val = watchdog_get_timeout(data);
1419 ret = put_user(val, (int __user *)arg);
1420 break;
1421
1422 case WDIOC_SETTIMEOUT:
1423 if (get_user(val, (int __user *)arg)) {
1424 ret = -EFAULT;
1425 break;
1426 }
1427 ret = watchdog_set_timeout(data, val);
1428 if (ret > 0)
1429 ret = put_user(ret, (int __user *)arg);
1430 break;
1431
1432 case WDIOC_SETOPTIONS:
1433 if (get_user(val, (int __user *)arg)) {
1434 ret = -EFAULT;
1435 break;
1436 }
1437
1438 if (val & WDIOS_DISABLECARD)
1439 ret = watchdog_disable(data);
1440 else if (val & WDIOS_ENABLECARD)
1441 ret = watchdog_enable(data);
1442 else
1443 ret = -EINVAL;
1444
1445 break;
1446 default:
1447 ret = -ENOTTY;
1448 }
1449 return ret;
1450 }
1451
1452 static const struct file_operations watchdog_fops = {
1453 .owner = THIS_MODULE,
1454 .llseek = no_llseek,
1455 .open = watchdog_open,
1456 .release = watchdog_close,
1457 .write = watchdog_write,
1458 .unlocked_ioctl = watchdog_ioctl,
1459 .compat_ioctl = compat_ptr_ioctl,
1460 };
1461
1462
1463
1464
1465
1466 static int watchdog_notify_sys(struct notifier_block *this, unsigned long code,
1467 void *unused)
1468 {
1469 struct w83793_data *data = NULL;
1470
1471 if (code == SYS_DOWN || code == SYS_HALT) {
1472
1473
1474 mutex_lock(&watchdog_data_mutex);
1475 list_for_each_entry(data, &watchdog_data_list, list) {
1476 if (data->watchdog_miscdev.minor)
1477 watchdog_disable(data);
1478 }
1479 mutex_unlock(&watchdog_data_mutex);
1480 }
1481
1482 return NOTIFY_DONE;
1483 }
1484
1485
1486
1487
1488
1489
1490 static struct notifier_block watchdog_notifier = {
1491 .notifier_call = watchdog_notify_sys,
1492 };
1493
1494
1495
1496
1497
1498 static int w83793_remove(struct i2c_client *client)
1499 {
1500 struct w83793_data *data = i2c_get_clientdata(client);
1501 struct device *dev = &client->dev;
1502 int i, tmp;
1503
1504
1505 if (data->watchdog_miscdev.minor) {
1506 misc_deregister(&data->watchdog_miscdev);
1507
1508 if (data->watchdog_is_open) {
1509 dev_warn(&client->dev,
1510 "i2c client detached with watchdog open! "
1511 "Stopping watchdog.\n");
1512 watchdog_disable(data);
1513 }
1514
1515 mutex_lock(&watchdog_data_mutex);
1516 list_del(&data->list);
1517 mutex_unlock(&watchdog_data_mutex);
1518
1519
1520 mutex_lock(&data->watchdog_lock);
1521 data->client = NULL;
1522 mutex_unlock(&data->watchdog_lock);
1523 }
1524
1525
1526 tmp = w83793_read_value(client, W83793_REG_CONFIG);
1527 w83793_write_value(client, W83793_REG_CONFIG, tmp & ~0x04);
1528
1529 unregister_reboot_notifier(&watchdog_notifier);
1530
1531 hwmon_device_unregister(data->hwmon_dev);
1532
1533 for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1534 device_remove_file(dev,
1535 &w83793_sensor_attr_2[i].dev_attr);
1536
1537 for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1538 device_remove_file(dev, &sda_single_files[i].dev_attr);
1539
1540 for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1541 device_remove_file(dev, &w83793_vid[i].dev_attr);
1542 device_remove_file(dev, &dev_attr_vrm);
1543
1544 for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1545 device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1546
1547 for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1548 device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1549
1550 for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1551 device_remove_file(dev, &w83793_temp[i].dev_attr);
1552
1553
1554 mutex_lock(&watchdog_data_mutex);
1555 kref_put(&data->kref, w83793_release_resources);
1556 mutex_unlock(&watchdog_data_mutex);
1557
1558 return 0;
1559 }
1560
1561 static int
1562 w83793_detect_subclients(struct i2c_client *client)
1563 {
1564 int i, id;
1565 int address = client->addr;
1566 u8 tmp;
1567 struct i2c_adapter *adapter = client->adapter;
1568
1569 id = i2c_adapter_id(adapter);
1570 if (force_subclients[0] == id && force_subclients[1] == address) {
1571 for (i = 2; i <= 3; i++) {
1572 if (force_subclients[i] < 0x48
1573 || force_subclients[i] > 0x4f) {
1574 dev_err(&client->dev,
1575 "invalid subclient "
1576 "address %d; must be 0x48-0x4f\n",
1577 force_subclients[i]);
1578 return -EINVAL;
1579 }
1580 }
1581 w83793_write_value(client, W83793_REG_I2C_SUBADDR,
1582 (force_subclients[2] & 0x07) |
1583 ((force_subclients[3] & 0x07) << 4));
1584 }
1585
1586 tmp = w83793_read_value(client, W83793_REG_I2C_SUBADDR);
1587
1588 if (!(tmp & 0x88) && (tmp & 0x7) == ((tmp >> 4) & 0x7)) {
1589 dev_err(&client->dev,
1590 "duplicate addresses 0x%x, use force_subclient\n", 0x48 + (tmp & 0x7));
1591 return -ENODEV;
1592 }
1593
1594 if (!(tmp & 0x08))
1595 devm_i2c_new_dummy_device(&client->dev, adapter, 0x48 + (tmp & 0x7));
1596
1597 if (!(tmp & 0x80))
1598 devm_i2c_new_dummy_device(&client->dev, adapter, 0x48 + ((tmp >> 4) & 0x7));
1599
1600 return 0;
1601 }
1602
1603
1604 static int w83793_detect(struct i2c_client *client,
1605 struct i2c_board_info *info)
1606 {
1607 u8 tmp, bank, chip_id;
1608 struct i2c_adapter *adapter = client->adapter;
1609 unsigned short address = client->addr;
1610
1611 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1612 return -ENODEV;
1613
1614 bank = i2c_smbus_read_byte_data(client, W83793_REG_BANKSEL);
1615
1616 tmp = bank & 0x80 ? 0x5c : 0xa3;
1617
1618 if (tmp != i2c_smbus_read_byte_data(client, W83793_REG_VENDORID)) {
1619 pr_debug("w83793: Detection failed at check vendor id\n");
1620 return -ENODEV;
1621 }
1622
1623
1624
1625
1626
1627 if ((bank & 0x07) == 0
1628 && i2c_smbus_read_byte_data(client, W83793_REG_I2C_ADDR) !=
1629 (address << 1)) {
1630 pr_debug("w83793: Detection failed at check i2c addr\n");
1631 return -ENODEV;
1632 }
1633
1634
1635 chip_id = i2c_smbus_read_byte_data(client, W83793_REG_CHIPID);
1636 if (chip_id != 0x7b)
1637 return -ENODEV;
1638
1639 strlcpy(info->type, "w83793", I2C_NAME_SIZE);
1640
1641 return 0;
1642 }
1643
1644 static int w83793_probe(struct i2c_client *client)
1645 {
1646 struct device *dev = &client->dev;
1647 static const int watchdog_minors[] = {
1648 WATCHDOG_MINOR, 212, 213, 214, 215
1649 };
1650 struct w83793_data *data;
1651 int i, tmp, val, err;
1652 int files_fan = ARRAY_SIZE(w83793_left_fan) / 7;
1653 int files_pwm = ARRAY_SIZE(w83793_left_pwm) / 5;
1654 int files_temp = ARRAY_SIZE(w83793_temp) / 6;
1655
1656 data = kzalloc(sizeof(struct w83793_data), GFP_KERNEL);
1657 if (!data) {
1658 err = -ENOMEM;
1659 goto exit;
1660 }
1661
1662 i2c_set_clientdata(client, data);
1663 data->bank = i2c_smbus_read_byte_data(client, W83793_REG_BANKSEL);
1664 mutex_init(&data->update_lock);
1665 mutex_init(&data->watchdog_lock);
1666 INIT_LIST_HEAD(&data->list);
1667 kref_init(&data->kref);
1668
1669
1670
1671
1672
1673
1674 data->client = client;
1675
1676 err = w83793_detect_subclients(client);
1677 if (err)
1678 goto free_mem;
1679
1680
1681 w83793_init_client(client);
1682
1683
1684
1685
1686
1687 data->has_fan = 0x1f;
1688 data->has_pwm = 0x07;
1689 tmp = w83793_read_value(client, W83793_REG_MFC);
1690 val = w83793_read_value(client, W83793_REG_FANIN_CTRL);
1691
1692
1693 if (tmp & 0x80) {
1694 data->has_vid |= 0x2;
1695 } else {
1696 data->has_pwm |= 0x18;
1697 if (val & 0x01) {
1698 data->has_fan |= 0x20;
1699 data->has_pwm |= 0x20;
1700 }
1701 if (val & 0x02) {
1702 data->has_fan |= 0x40;
1703 data->has_pwm |= 0x40;
1704 }
1705 if (!(tmp & 0x40) && (val & 0x04)) {
1706 data->has_fan |= 0x80;
1707 data->has_pwm |= 0x80;
1708 }
1709 }
1710
1711
1712 if (!(tmp & 0x29))
1713 data->has_vid |= 0x1;
1714 if (0x08 == (tmp & 0x0c)) {
1715 if (val & 0x08)
1716 data->has_fan |= 0x100;
1717 if (val & 0x10)
1718 data->has_fan |= 0x200;
1719 }
1720 if (0x20 == (tmp & 0x30)) {
1721 if (val & 0x20)
1722 data->has_fan |= 0x400;
1723 if (val & 0x40)
1724 data->has_fan |= 0x800;
1725 }
1726
1727 if ((tmp & 0x01) && (val & 0x04)) {
1728 data->has_fan |= 0x80;
1729 data->has_pwm |= 0x80;
1730 }
1731
1732 tmp = w83793_read_value(client, W83793_REG_FANIN_SEL);
1733 if ((tmp & 0x01) && (val & 0x08)) {
1734 data->has_fan |= 0x100;
1735 }
1736 if ((tmp & 0x02) && (val & 0x10)) {
1737 data->has_fan |= 0x200;
1738 }
1739 if ((tmp & 0x04) && (val & 0x20)) {
1740 data->has_fan |= 0x400;
1741 }
1742 if ((tmp & 0x08) && (val & 0x40)) {
1743 data->has_fan |= 0x800;
1744 }
1745
1746
1747 tmp = w83793_read_value(client, W83793_REG_TEMP_MODE[0]);
1748 if (tmp & 0x01)
1749 data->has_temp |= 0x01;
1750 if (tmp & 0x04)
1751 data->has_temp |= 0x02;
1752 if (tmp & 0x10)
1753 data->has_temp |= 0x04;
1754 if (tmp & 0x40)
1755 data->has_temp |= 0x08;
1756
1757 tmp = w83793_read_value(client, W83793_REG_TEMP_MODE[1]);
1758 if (tmp & 0x01)
1759 data->has_temp |= 0x10;
1760 if (tmp & 0x02)
1761 data->has_temp |= 0x20;
1762
1763
1764 for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++) {
1765 err = device_create_file(dev,
1766 &w83793_sensor_attr_2[i].dev_attr);
1767 if (err)
1768 goto exit_remove;
1769 }
1770
1771 for (i = 0; i < ARRAY_SIZE(w83793_vid); i++) {
1772 if (!(data->has_vid & (1 << i)))
1773 continue;
1774 err = device_create_file(dev, &w83793_vid[i].dev_attr);
1775 if (err)
1776 goto exit_remove;
1777 }
1778 if (data->has_vid) {
1779 data->vrm = vid_which_vrm();
1780 err = device_create_file(dev, &dev_attr_vrm);
1781 if (err)
1782 goto exit_remove;
1783 }
1784
1785 for (i = 0; i < ARRAY_SIZE(sda_single_files); i++) {
1786 err = device_create_file(dev, &sda_single_files[i].dev_attr);
1787 if (err)
1788 goto exit_remove;
1789
1790 }
1791
1792 for (i = 0; i < 6; i++) {
1793 int j;
1794 if (!(data->has_temp & (1 << i)))
1795 continue;
1796 for (j = 0; j < files_temp; j++) {
1797 err = device_create_file(dev,
1798 &w83793_temp[(i) * files_temp
1799 + j].dev_attr);
1800 if (err)
1801 goto exit_remove;
1802 }
1803 }
1804
1805 for (i = 5; i < 12; i++) {
1806 int j;
1807 if (!(data->has_fan & (1 << i)))
1808 continue;
1809 for (j = 0; j < files_fan; j++) {
1810 err = device_create_file(dev,
1811 &w83793_left_fan[(i - 5) * files_fan
1812 + j].dev_attr);
1813 if (err)
1814 goto exit_remove;
1815 }
1816 }
1817
1818 for (i = 3; i < 8; i++) {
1819 int j;
1820 if (!(data->has_pwm & (1 << i)))
1821 continue;
1822 for (j = 0; j < files_pwm; j++) {
1823 err = device_create_file(dev,
1824 &w83793_left_pwm[(i - 3) * files_pwm
1825 + j].dev_attr);
1826 if (err)
1827 goto exit_remove;
1828 }
1829 }
1830
1831 data->hwmon_dev = hwmon_device_register(dev);
1832 if (IS_ERR(data->hwmon_dev)) {
1833 err = PTR_ERR(data->hwmon_dev);
1834 goto exit_remove;
1835 }
1836
1837
1838
1839
1840 err = register_reboot_notifier(&watchdog_notifier);
1841 if (err != 0) {
1842 dev_err(&client->dev,
1843 "cannot register reboot notifier (err=%d)\n", err);
1844 goto exit_devunreg;
1845 }
1846
1847
1848
1849
1850
1851
1852 tmp = w83793_read_value(client, W83793_REG_CONFIG);
1853 w83793_write_value(client, W83793_REG_CONFIG, tmp | 0x04);
1854
1855
1856 data->watchdog_timeout = timeout;
1857
1858
1859 data->watchdog_caused_reboot =
1860 w83793_read_value(data->client, W83793_REG_WDT_STATUS) & 0x01;
1861
1862
1863 watchdog_disable(data);
1864
1865
1866
1867
1868
1869
1870 mutex_lock(&watchdog_data_mutex);
1871 for (i = 0; i < ARRAY_SIZE(watchdog_minors); i++) {
1872
1873 snprintf(data->watchdog_name, sizeof(data->watchdog_name),
1874 "watchdog%c", (i == 0) ? '\0' : ('0' + i));
1875 data->watchdog_miscdev.name = data->watchdog_name;
1876 data->watchdog_miscdev.fops = &watchdog_fops;
1877 data->watchdog_miscdev.minor = watchdog_minors[i];
1878
1879 err = misc_register(&data->watchdog_miscdev);
1880 if (err == -EBUSY)
1881 continue;
1882 if (err) {
1883 data->watchdog_miscdev.minor = 0;
1884 dev_err(&client->dev,
1885 "Registering watchdog chardev: %d\n", err);
1886 break;
1887 }
1888
1889 list_add(&data->list, &watchdog_data_list);
1890
1891 dev_info(&client->dev,
1892 "Registered watchdog chardev major 10, minor: %d\n",
1893 watchdog_minors[i]);
1894 break;
1895 }
1896 if (i == ARRAY_SIZE(watchdog_minors)) {
1897 data->watchdog_miscdev.minor = 0;
1898 dev_warn(&client->dev,
1899 "Couldn't register watchdog chardev (due to no free minor)\n");
1900 }
1901
1902 mutex_unlock(&watchdog_data_mutex);
1903
1904 return 0;
1905
1906
1907
1908 exit_devunreg:
1909
1910 hwmon_device_unregister(data->hwmon_dev);
1911
1912
1913
1914 exit_remove:
1915 for (i = 0; i < ARRAY_SIZE(w83793_sensor_attr_2); i++)
1916 device_remove_file(dev, &w83793_sensor_attr_2[i].dev_attr);
1917
1918 for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
1919 device_remove_file(dev, &sda_single_files[i].dev_attr);
1920
1921 for (i = 0; i < ARRAY_SIZE(w83793_vid); i++)
1922 device_remove_file(dev, &w83793_vid[i].dev_attr);
1923
1924 for (i = 0; i < ARRAY_SIZE(w83793_left_fan); i++)
1925 device_remove_file(dev, &w83793_left_fan[i].dev_attr);
1926
1927 for (i = 0; i < ARRAY_SIZE(w83793_left_pwm); i++)
1928 device_remove_file(dev, &w83793_left_pwm[i].dev_attr);
1929
1930 for (i = 0; i < ARRAY_SIZE(w83793_temp); i++)
1931 device_remove_file(dev, &w83793_temp[i].dev_attr);
1932 free_mem:
1933 kfree(data);
1934 exit:
1935 return err;
1936 }
1937
1938 static void w83793_update_nonvolatile(struct device *dev)
1939 {
1940 struct i2c_client *client = to_i2c_client(dev);
1941 struct w83793_data *data = i2c_get_clientdata(client);
1942 int i, j;
1943
1944
1945
1946
1947
1948 if (!(time_after(jiffies, data->last_nonvolatile + HZ * 300)
1949 || !data->valid))
1950 return;
1951
1952 for (i = 1; i < 3; i++) {
1953 for (j = 0; j < ARRAY_SIZE(data->in); j++) {
1954 data->in[j][i] =
1955 w83793_read_value(client, W83793_REG_IN[j][i]);
1956 }
1957 data->in_low_bits[i] =
1958 w83793_read_value(client, W83793_REG_IN_LOW_BITS[i]);
1959 }
1960
1961 for (i = 0; i < ARRAY_SIZE(data->fan_min); i++) {
1962
1963 if (!(data->has_fan & (1 << i)))
1964 continue;
1965 data->fan_min[i] =
1966 w83793_read_value(client, W83793_REG_FAN_MIN(i)) << 8;
1967 data->fan_min[i] |=
1968 w83793_read_value(client, W83793_REG_FAN_MIN(i) + 1);
1969 }
1970
1971 for (i = 0; i < ARRAY_SIZE(data->temp_fan_map); i++) {
1972 if (!(data->has_temp & (1 << i)))
1973 continue;
1974 data->temp_fan_map[i] =
1975 w83793_read_value(client, W83793_REG_TEMP_FAN_MAP(i));
1976 for (j = 1; j < 5; j++) {
1977 data->temp[i][j] =
1978 w83793_read_value(client, W83793_REG_TEMP[i][j]);
1979 }
1980 data->temp_cruise[i] =
1981 w83793_read_value(client, W83793_REG_TEMP_CRUISE(i));
1982 for (j = 0; j < 7; j++) {
1983 data->sf2_pwm[i][j] =
1984 w83793_read_value(client, W83793_REG_SF2_PWM(i, j));
1985 data->sf2_temp[i][j] =
1986 w83793_read_value(client,
1987 W83793_REG_SF2_TEMP(i, j));
1988 }
1989 }
1990
1991 for (i = 0; i < ARRAY_SIZE(data->temp_mode); i++)
1992 data->temp_mode[i] =
1993 w83793_read_value(client, W83793_REG_TEMP_MODE[i]);
1994
1995 for (i = 0; i < ARRAY_SIZE(data->tolerance); i++) {
1996 data->tolerance[i] =
1997 w83793_read_value(client, W83793_REG_TEMP_TOL(i));
1998 }
1999
2000 for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
2001 if (!(data->has_pwm & (1 << i)))
2002 continue;
2003 data->pwm[i][PWM_NONSTOP] =
2004 w83793_read_value(client, W83793_REG_PWM(i, PWM_NONSTOP));
2005 data->pwm[i][PWM_START] =
2006 w83793_read_value(client, W83793_REG_PWM(i, PWM_START));
2007 data->pwm_stop_time[i] =
2008 w83793_read_value(client, W83793_REG_PWM_STOP_TIME(i));
2009 }
2010
2011 data->pwm_default = w83793_read_value(client, W83793_REG_PWM_DEFAULT);
2012 data->pwm_enable = w83793_read_value(client, W83793_REG_PWM_ENABLE);
2013 data->pwm_uptime = w83793_read_value(client, W83793_REG_PWM_UPTIME);
2014 data->pwm_downtime = w83793_read_value(client, W83793_REG_PWM_DOWNTIME);
2015 data->temp_critical =
2016 w83793_read_value(client, W83793_REG_TEMP_CRITICAL);
2017 data->beep_enable = w83793_read_value(client, W83793_REG_OVT_BEEP);
2018
2019 for (i = 0; i < ARRAY_SIZE(data->beeps); i++)
2020 data->beeps[i] = w83793_read_value(client, W83793_REG_BEEP(i));
2021
2022 data->last_nonvolatile = jiffies;
2023 }
2024
2025 static struct w83793_data *w83793_update_device(struct device *dev)
2026 {
2027 struct i2c_client *client = to_i2c_client(dev);
2028 struct w83793_data *data = i2c_get_clientdata(client);
2029 int i;
2030
2031 mutex_lock(&data->update_lock);
2032
2033 if (!(time_after(jiffies, data->last_updated + HZ * 2)
2034 || !data->valid))
2035 goto END;
2036
2037
2038 for (i = 0; i < ARRAY_SIZE(data->in); i++)
2039 data->in[i][IN_READ] =
2040 w83793_read_value(client, W83793_REG_IN[i][IN_READ]);
2041
2042 data->in_low_bits[IN_READ] =
2043 w83793_read_value(client, W83793_REG_IN_LOW_BITS[IN_READ]);
2044
2045 for (i = 0; i < ARRAY_SIZE(data->fan); i++) {
2046 if (!(data->has_fan & (1 << i)))
2047 continue;
2048 data->fan[i] =
2049 w83793_read_value(client, W83793_REG_FAN(i)) << 8;
2050 data->fan[i] |=
2051 w83793_read_value(client, W83793_REG_FAN(i) + 1);
2052 }
2053
2054 for (i = 0; i < ARRAY_SIZE(data->temp); i++) {
2055 if (!(data->has_temp & (1 << i)))
2056 continue;
2057 data->temp[i][TEMP_READ] =
2058 w83793_read_value(client, W83793_REG_TEMP[i][TEMP_READ]);
2059 }
2060
2061 data->temp_low_bits =
2062 w83793_read_value(client, W83793_REG_TEMP_LOW_BITS);
2063
2064 for (i = 0; i < ARRAY_SIZE(data->pwm); i++) {
2065 if (data->has_pwm & (1 << i))
2066 data->pwm[i][PWM_DUTY] =
2067 w83793_read_value(client,
2068 W83793_REG_PWM(i, PWM_DUTY));
2069 }
2070
2071 for (i = 0; i < ARRAY_SIZE(data->alarms); i++)
2072 data->alarms[i] =
2073 w83793_read_value(client, W83793_REG_ALARM(i));
2074 if (data->has_vid & 0x01)
2075 data->vid[0] = w83793_read_value(client, W83793_REG_VID_INA);
2076 if (data->has_vid & 0x02)
2077 data->vid[1] = w83793_read_value(client, W83793_REG_VID_INB);
2078 w83793_update_nonvolatile(dev);
2079 data->last_updated = jiffies;
2080 data->valid = true;
2081
2082 END:
2083 mutex_unlock(&data->update_lock);
2084 return data;
2085 }
2086
2087
2088
2089
2090
2091 static u8 w83793_read_value(struct i2c_client *client, u16 reg)
2092 {
2093 struct w83793_data *data = i2c_get_clientdata(client);
2094 u8 res;
2095 u8 new_bank = reg >> 8;
2096
2097 new_bank |= data->bank & 0xfc;
2098 if (data->bank != new_bank) {
2099 if (i2c_smbus_write_byte_data
2100 (client, W83793_REG_BANKSEL, new_bank) >= 0)
2101 data->bank = new_bank;
2102 else {
2103 dev_err(&client->dev,
2104 "set bank to %d failed, fall back "
2105 "to bank %d, read reg 0x%x error\n",
2106 new_bank, data->bank, reg);
2107 res = 0x0;
2108 goto END;
2109 }
2110 }
2111 res = i2c_smbus_read_byte_data(client, reg & 0xff);
2112 END:
2113 return res;
2114 }
2115
2116
2117 static int w83793_write_value(struct i2c_client *client, u16 reg, u8 value)
2118 {
2119 struct w83793_data *data = i2c_get_clientdata(client);
2120 int res;
2121 u8 new_bank = reg >> 8;
2122
2123 new_bank |= data->bank & 0xfc;
2124 if (data->bank != new_bank) {
2125 res = i2c_smbus_write_byte_data(client, W83793_REG_BANKSEL,
2126 new_bank);
2127 if (res < 0) {
2128 dev_err(&client->dev,
2129 "set bank to %d failed, fall back "
2130 "to bank %d, write reg 0x%x error\n",
2131 new_bank, data->bank, reg);
2132 goto END;
2133 }
2134 data->bank = new_bank;
2135 }
2136
2137 res = i2c_smbus_write_byte_data(client, reg & 0xff, value);
2138 END:
2139 return res;
2140 }
2141
2142 module_i2c_driver(w83793_driver);
2143
2144 MODULE_AUTHOR("Yuan Mu, Sven Anders");
2145 MODULE_DESCRIPTION("w83793 driver");
2146 MODULE_LICENSE("GPL");