Linux Audio

Check our new training course

Loading...
v3.1
   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);
v3.5.6
   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");