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