Linux Audio

Check our new training course

Loading...
v3.1
   1/*
   2 * vt1211.c - driver for the VIA VT1211 Super-I/O chip integrated hardware
   3 *            monitoring features
   4 * Copyright (C) 2006 Juerg Haefliger <juergh@gmail.com>
   5 *
   6 * This driver is based on the driver for kernel 2.4 by Mark D. Studebaker
   7 * and its port to kernel 2.6 by Lars Ekman.
   8 *
   9 * This program is free software; you can redistribute it and/or modify
  10 * it under the terms of the GNU General Public License as published by
  11 * the Free Software Foundation; either version 2 of the License, or
  12 * (at your option) any later version.
  13 *
  14 * This program is distributed in the hope that it will be useful,
  15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17 * GNU General Public License for more details.
  18 *
  19 * You should have received a copy of the GNU General Public License
  20 * along with this program; if not, write to the Free Software
  21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22 */
  23
  24#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  25
  26#include <linux/module.h>
  27#include <linux/init.h>
  28#include <linux/slab.h>
  29#include <linux/jiffies.h>
  30#include <linux/platform_device.h>
  31#include <linux/hwmon.h>
  32#include <linux/hwmon-sysfs.h>
  33#include <linux/hwmon-vid.h>
  34#include <linux/err.h>
  35#include <linux/mutex.h>
  36#include <linux/ioport.h>
  37#include <linux/acpi.h>
  38#include <linux/io.h>
  39
  40static int uch_config = -1;
  41module_param(uch_config, int, 0);
  42MODULE_PARM_DESC(uch_config, "Initialize the universal channel configuration");
  43
  44static int int_mode = -1;
  45module_param(int_mode, int, 0);
  46MODULE_PARM_DESC(int_mode, "Force the temperature interrupt mode");
  47
  48static unsigned short force_id;
  49module_param(force_id, ushort, 0);
  50MODULE_PARM_DESC(force_id, "Override the detected device ID");
  51
  52static struct platform_device *pdev;
  53
  54#define DRVNAME "vt1211"
  55
  56/* ---------------------------------------------------------------------
  57 * Registers
  58 *
  59 * The sensors are defined as follows.
  60 *
  61 * Sensor          Voltage Mode   Temp Mode   Notes (from the datasheet)
  62 * --------        ------------   ---------   --------------------------
  63 * Reading 1                      temp1       Intel thermal diode
  64 * Reading 3                      temp2       Internal thermal diode
  65 * UCH1/Reading2   in0            temp3       NTC type thermistor
  66 * UCH2            in1            temp4       +2.5V
  67 * UCH3            in2            temp5       VccP
  68 * UCH4            in3            temp6       +5V
  69 * UCH5            in4            temp7       +12V
  70 * 3.3V            in5                        Internal VDD (+3.3V)
  71 *
  72 * --------------------------------------------------------------------- */
  73
  74/* Voltages (in) numbered 0-5 (ix) */
  75#define VT1211_REG_IN(ix)		(0x21 + (ix))
  76#define VT1211_REG_IN_MIN(ix)		((ix) == 0 ? 0x3e : 0x2a + 2 * (ix))
  77#define VT1211_REG_IN_MAX(ix)		((ix) == 0 ? 0x3d : 0x29 + 2 * (ix))
  78
  79/* Temperatures (temp) numbered 0-6 (ix) */
  80static u8 regtemp[]	= {0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25};
  81static u8 regtempmax[]	= {0x39, 0x1d, 0x3d, 0x2b, 0x2d, 0x2f, 0x31};
  82static u8 regtemphyst[]	= {0x3a, 0x1e, 0x3e, 0x2c, 0x2e, 0x30, 0x32};
  83
  84/* Fans numbered 0-1 (ix) */
  85#define VT1211_REG_FAN(ix)		(0x29 + (ix))
  86#define VT1211_REG_FAN_MIN(ix)		(0x3b + (ix))
  87#define VT1211_REG_FAN_DIV		 0x47
  88
  89/* PWMs numbered 0-1 (ix) */
  90/* Auto points numbered 0-3 (ap) */
  91#define VT1211_REG_PWM(ix)		(0x60 + (ix))
  92#define VT1211_REG_PWM_CLK		 0x50
  93#define VT1211_REG_PWM_CTL		 0x51
  94#define VT1211_REG_PWM_AUTO_TEMP(ap)	(0x55 - (ap))
  95#define VT1211_REG_PWM_AUTO_PWM(ix, ap)	(0x58 + 2 * (ix) - (ap))
  96
  97/* Miscellaneous registers */
  98#define VT1211_REG_CONFIG		0x40
  99#define VT1211_REG_ALARM1		0x41
 100#define VT1211_REG_ALARM2		0x42
 101#define VT1211_REG_VID			0x45
 102#define VT1211_REG_UCH_CONFIG		0x4a
 103#define VT1211_REG_TEMP1_CONFIG		0x4b
 104#define VT1211_REG_TEMP2_CONFIG		0x4c
 105
 106/* In, temp & fan alarm bits */
 107static const u8 bitalarmin[]	= {11, 0, 1, 3, 8, 2, 9};
 108static const u8 bitalarmtemp[]	= {4, 15, 11, 0, 1, 3, 8};
 109static const u8 bitalarmfan[]	= {6, 7};
 110
 111/* ---------------------------------------------------------------------
 112 * Data structures and manipulation thereof
 113 * --------------------------------------------------------------------- */
 114
 115struct vt1211_data {
 116	unsigned short addr;
 117	const char *name;
 118	struct device *hwmon_dev;
 119
 120	struct mutex update_lock;
 121	char valid;			/* !=0 if following fields are valid */
 122	unsigned long last_updated;	/* In jiffies */
 123
 124	/* Register values */
 125	u8  in[6];
 126	u8  in_max[6];
 127	u8  in_min[6];
 128	u8  temp[7];
 129	u8  temp_max[7];
 130	u8  temp_hyst[7];
 131	u8  fan[2];
 132	u8  fan_min[2];
 133	u8  fan_div[2];
 134	u8  fan_ctl;
 135	u8  pwm[2];
 136	u8  pwm_ctl[2];
 137	u8  pwm_clk;
 138	u8  pwm_auto_temp[4];
 139	u8  pwm_auto_pwm[2][4];
 140	u8  vid;		/* Read once at init time */
 141	u8  vrm;
 142	u8  uch_config;		/* Read once at init time */
 143	u16 alarms;
 144};
 145
 146/* ix = [0-5] */
 147#define ISVOLT(ix, uch_config)	((ix) > 4 ? 1 : \
 148				 !(((uch_config) >> ((ix) + 2)) & 1))
 149
 150/* ix = [0-6] */
 151#define ISTEMP(ix, uch_config)	((ix) < 2 ? 1 : \
 152				 ((uch_config) >> (ix)) & 1)
 153
 154/* in5 (ix = 5) is special. It's the internal 3.3V so it's scaled in the
 155   driver according to the VT1211 BIOS porting guide */
 
 
 156#define IN_FROM_REG(ix, reg)	((reg) < 3 ? 0 : (ix) == 5 ? \
 157				 (((reg) - 3) * 15882 + 479) / 958 : \
 158				 (((reg) - 3) * 10000 + 479) / 958)
 159#define IN_TO_REG(ix, val)	(SENSORS_LIMIT((ix) == 5 ? \
 160				 ((val) * 958 + 7941) / 15882 + 3 : \
 161				 ((val) * 958 + 5000) / 10000 + 3, 0, 255))
 162
 163/* temp1 (ix = 0) is an intel thermal diode which is scaled in user space.
 164   temp2 (ix = 1) is the internal temp diode so it's scaled in the driver
 165   according to some measurements that I took on an EPIA M10000.
 166   temp3-7 are thermistor based so the driver returns the voltage measured at
 167   the pin (range 0V - 2.2V). */
 
 
 168#define TEMP_FROM_REG(ix, reg)	((ix) == 0 ? (reg) * 1000 : \
 169				 (ix) == 1 ? (reg) < 51 ? 0 : \
 170				 ((reg) - 51) * 1000 : \
 171				 ((253 - (reg)) * 2200 + 105) / 210)
 172#define TEMP_TO_REG(ix, val)	SENSORS_LIMIT( \
 173				 ((ix) == 0 ? ((val) + 500) / 1000 : \
 174				  (ix) == 1 ? ((val) + 500) / 1000 + 51 : \
 175				  253 - ((val) * 210 + 1100) / 2200), 0, 255)
 176
 177#define DIV_FROM_REG(reg)	(1 << (reg))
 178
 179#define RPM_FROM_REG(reg, div)	(((reg) == 0) || ((reg) == 255) ? 0 : \
 180				 1310720 / (reg) / DIV_FROM_REG(div))
 181#define RPM_TO_REG(val, div)	((val) == 0 ? 255 : \
 182				 SENSORS_LIMIT((1310720 / (val) / \
 183				 DIV_FROM_REG(div)), 1, 254))
 184
 185/* ---------------------------------------------------------------------
 186 * Super-I/O constants and functions
 187 * --------------------------------------------------------------------- */
 188
 189/* Configuration index port registers
 190 * The vt1211 can live at 2 different addresses so we need to probe both */
 
 
 191#define SIO_REG_CIP1		0x2e
 192#define SIO_REG_CIP2		0x4e
 193
 194/* Configuration registers */
 195#define SIO_VT1211_LDN		0x07	/* logical device number */
 196#define SIO_VT1211_DEVID	0x20	/* device ID */
 197#define SIO_VT1211_DEVREV	0x21	/* device revision */
 198#define SIO_VT1211_ACTIVE	0x30	/* HW monitor active */
 199#define SIO_VT1211_BADDR	0x60	/* base I/O address */
 200#define SIO_VT1211_ID		0x3c	/* VT1211 device ID */
 201
 202/* VT1211 logical device numbers */
 203#define SIO_VT1211_LDN_HWMON	0x0b	/* HW monitor */
 204
 205static inline void superio_outb(int sio_cip, int reg, int val)
 206{
 207	outb(reg, sio_cip);
 208	outb(val, sio_cip + 1);
 209}
 210
 211static inline int superio_inb(int sio_cip, int reg)
 212{
 213	outb(reg, sio_cip);
 214	return inb(sio_cip + 1);
 215}
 216
 217static inline void superio_select(int sio_cip, int ldn)
 218{
 219	outb(SIO_VT1211_LDN, sio_cip);
 220	outb(ldn, sio_cip + 1);
 221}
 222
 223static inline void superio_enter(int sio_cip)
 224{
 225	outb(0x87, sio_cip);
 226	outb(0x87, sio_cip);
 227}
 228
 229static inline void superio_exit(int sio_cip)
 230{
 231	outb(0xaa, sio_cip);
 232}
 233
 234/* ---------------------------------------------------------------------
 235 * Device I/O access
 236 * --------------------------------------------------------------------- */
 237
 238static inline u8 vt1211_read8(struct vt1211_data *data, u8 reg)
 239{
 240	return inb(data->addr + reg);
 241}
 242
 243static inline void vt1211_write8(struct vt1211_data *data, u8 reg, u8 val)
 244{
 245	outb(val, data->addr + reg);
 246}
 247
 248static struct vt1211_data *vt1211_update_device(struct device *dev)
 249{
 250	struct vt1211_data *data = dev_get_drvdata(dev);
 251	int ix, val;
 252
 253	mutex_lock(&data->update_lock);
 254
 255	/* registers cache is refreshed after 1 second */
 256	if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
 257		/* read VID */
 258		data->vid = vt1211_read8(data, VT1211_REG_VID) & 0x1f;
 259
 260		/* voltage (in) registers */
 261		for (ix = 0; ix < ARRAY_SIZE(data->in); ix++) {
 262			if (ISVOLT(ix, data->uch_config)) {
 263				data->in[ix] = vt1211_read8(data,
 264						VT1211_REG_IN(ix));
 265				data->in_min[ix] = vt1211_read8(data,
 266						VT1211_REG_IN_MIN(ix));
 267				data->in_max[ix] = vt1211_read8(data,
 268						VT1211_REG_IN_MAX(ix));
 269			}
 270		}
 271
 272		/* temp registers */
 273		for (ix = 0; ix < ARRAY_SIZE(data->temp); ix++) {
 274			if (ISTEMP(ix, data->uch_config)) {
 275				data->temp[ix] = vt1211_read8(data,
 276						regtemp[ix]);
 277				data->temp_max[ix] = vt1211_read8(data,
 278						regtempmax[ix]);
 279				data->temp_hyst[ix] = vt1211_read8(data,
 280						regtemphyst[ix]);
 281			}
 282		}
 283
 284		/* fan & pwm registers */
 285		for (ix = 0; ix < ARRAY_SIZE(data->fan); ix++) {
 286			data->fan[ix] = vt1211_read8(data,
 287						VT1211_REG_FAN(ix));
 288			data->fan_min[ix] = vt1211_read8(data,
 289						VT1211_REG_FAN_MIN(ix));
 290			data->pwm[ix] = vt1211_read8(data,
 291						VT1211_REG_PWM(ix));
 292		}
 293		val = vt1211_read8(data, VT1211_REG_FAN_DIV);
 294		data->fan_div[0] = (val >> 4) & 3;
 295		data->fan_div[1] = (val >> 6) & 3;
 296		data->fan_ctl = val & 0xf;
 297
 298		val = vt1211_read8(data, VT1211_REG_PWM_CTL);
 299		data->pwm_ctl[0] = val & 0xf;
 300		data->pwm_ctl[1] = (val >> 4) & 0xf;
 301
 302		data->pwm_clk = vt1211_read8(data, VT1211_REG_PWM_CLK);
 303
 304		/* pwm & temp auto point registers */
 305		data->pwm_auto_pwm[0][1] = vt1211_read8(data,
 306						VT1211_REG_PWM_AUTO_PWM(0, 1));
 307		data->pwm_auto_pwm[0][2] = vt1211_read8(data,
 308						VT1211_REG_PWM_AUTO_PWM(0, 2));
 309		data->pwm_auto_pwm[1][1] = vt1211_read8(data,
 310						VT1211_REG_PWM_AUTO_PWM(1, 1));
 311		data->pwm_auto_pwm[1][2] = vt1211_read8(data,
 312						VT1211_REG_PWM_AUTO_PWM(1, 2));
 313		for (ix = 0; ix < ARRAY_SIZE(data->pwm_auto_temp); ix++) {
 314			data->pwm_auto_temp[ix] = vt1211_read8(data,
 315						VT1211_REG_PWM_AUTO_TEMP(ix));
 316		}
 317
 318		/* alarm registers */
 319		data->alarms = (vt1211_read8(data, VT1211_REG_ALARM2) << 8) |
 320				vt1211_read8(data, VT1211_REG_ALARM1);
 321
 322		data->last_updated = jiffies;
 323		data->valid = 1;
 324	}
 325
 326	mutex_unlock(&data->update_lock);
 327
 328	return data;
 329}
 330
 331/* ---------------------------------------------------------------------
 332 * Voltage sysfs interfaces
 333 * ix = [0-5]
 334 * --------------------------------------------------------------------- */
 335
 336#define SHOW_IN_INPUT	0
 337#define SHOW_SET_IN_MIN	1
 338#define SHOW_SET_IN_MAX	2
 339#define SHOW_IN_ALARM	3
 340
 341static ssize_t show_in(struct device *dev, struct device_attribute *attr,
 342		       char *buf)
 343{
 344	struct vt1211_data *data = vt1211_update_device(dev);
 345	struct sensor_device_attribute_2 *sensor_attr_2 =
 346						to_sensor_dev_attr_2(attr);
 347	int ix = sensor_attr_2->index;
 348	int fn = sensor_attr_2->nr;
 349	int res;
 350
 351	switch (fn) {
 352	case SHOW_IN_INPUT:
 353		res = IN_FROM_REG(ix, data->in[ix]);
 354		break;
 355	case SHOW_SET_IN_MIN:
 356		res = IN_FROM_REG(ix, data->in_min[ix]);
 357		break;
 358	case SHOW_SET_IN_MAX:
 359		res = IN_FROM_REG(ix, data->in_max[ix]);
 360		break;
 361	case SHOW_IN_ALARM:
 362		res = (data->alarms >> bitalarmin[ix]) & 1;
 363		break;
 364	default:
 365		res = 0;
 366		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 367	}
 368
 369	return sprintf(buf, "%d\n", res);
 370}
 371
 372static ssize_t set_in(struct device *dev, struct device_attribute *attr,
 373		      const char *buf, size_t count)
 374{
 375	struct vt1211_data *data = dev_get_drvdata(dev);
 376	struct sensor_device_attribute_2 *sensor_attr_2 =
 377						to_sensor_dev_attr_2(attr);
 378	int ix = sensor_attr_2->index;
 379	int fn = sensor_attr_2->nr;
 380	long val = simple_strtol(buf, NULL, 10);
 
 
 
 
 
 381
 382	mutex_lock(&data->update_lock);
 383	switch (fn) {
 384	case SHOW_SET_IN_MIN:
 385		data->in_min[ix] = IN_TO_REG(ix, val);
 386		vt1211_write8(data, VT1211_REG_IN_MIN(ix), data->in_min[ix]);
 387		break;
 388	case SHOW_SET_IN_MAX:
 389		data->in_max[ix] = IN_TO_REG(ix, val);
 390		vt1211_write8(data, VT1211_REG_IN_MAX(ix), data->in_max[ix]);
 391		break;
 392	default:
 393		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 394	}
 395	mutex_unlock(&data->update_lock);
 396
 397	return count;
 398}
 399
 400/* ---------------------------------------------------------------------
 401 * Temperature sysfs interfaces
 402 * ix = [0-6]
 403 * --------------------------------------------------------------------- */
 404
 405#define SHOW_TEMP_INPUT		0
 406#define SHOW_SET_TEMP_MAX	1
 407#define SHOW_SET_TEMP_MAX_HYST	2
 408#define SHOW_TEMP_ALARM		3
 409
 410static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
 411			 char *buf)
 412{
 413	struct vt1211_data *data = vt1211_update_device(dev);
 414	struct sensor_device_attribute_2 *sensor_attr_2 =
 415						to_sensor_dev_attr_2(attr);
 416	int ix = sensor_attr_2->index;
 417	int fn = sensor_attr_2->nr;
 418	int res;
 419
 420	switch (fn) {
 421	case SHOW_TEMP_INPUT:
 422		res = TEMP_FROM_REG(ix, data->temp[ix]);
 423		break;
 424	case SHOW_SET_TEMP_MAX:
 425		res = TEMP_FROM_REG(ix, data->temp_max[ix]);
 426		break;
 427	case SHOW_SET_TEMP_MAX_HYST:
 428		res = TEMP_FROM_REG(ix, data->temp_hyst[ix]);
 429		break;
 430	case SHOW_TEMP_ALARM:
 431		res = (data->alarms >> bitalarmtemp[ix]) & 1;
 432		break;
 433	default:
 434		res = 0;
 435		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 436	}
 437
 438	return sprintf(buf, "%d\n", res);
 439}
 440
 441static ssize_t set_temp(struct device *dev, struct device_attribute *attr,
 442			const char *buf, size_t count)
 443{
 444	struct vt1211_data *data = dev_get_drvdata(dev);
 445	struct sensor_device_attribute_2 *sensor_attr_2 =
 446						to_sensor_dev_attr_2(attr);
 447	int ix = sensor_attr_2->index;
 448	int fn = sensor_attr_2->nr;
 449	long val = simple_strtol(buf, NULL, 10);
 
 
 
 
 
 450
 451	mutex_lock(&data->update_lock);
 452	switch (fn) {
 453	case SHOW_SET_TEMP_MAX:
 454		data->temp_max[ix] = TEMP_TO_REG(ix, val);
 455		vt1211_write8(data, regtempmax[ix],
 456			      data->temp_max[ix]);
 457		break;
 458	case SHOW_SET_TEMP_MAX_HYST:
 459		data->temp_hyst[ix] = TEMP_TO_REG(ix, val);
 460		vt1211_write8(data, regtemphyst[ix],
 461			      data->temp_hyst[ix]);
 462		break;
 463	default:
 464		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 465	}
 466	mutex_unlock(&data->update_lock);
 467
 468	return count;
 469}
 470
 471/* ---------------------------------------------------------------------
 472 * Fan sysfs interfaces
 473 * ix = [0-1]
 474 * --------------------------------------------------------------------- */
 475
 476#define SHOW_FAN_INPUT		0
 477#define SHOW_SET_FAN_MIN	1
 478#define SHOW_SET_FAN_DIV	2
 479#define SHOW_FAN_ALARM		3
 480
 481static ssize_t show_fan(struct device *dev, struct device_attribute *attr,
 482			char *buf)
 483{
 484	struct vt1211_data *data = vt1211_update_device(dev);
 485	struct sensor_device_attribute_2 *sensor_attr_2 =
 486						to_sensor_dev_attr_2(attr);
 487	int ix = sensor_attr_2->index;
 488	int fn = sensor_attr_2->nr;
 489	int res;
 490
 491	switch (fn) {
 492	case SHOW_FAN_INPUT:
 493		res = RPM_FROM_REG(data->fan[ix], data->fan_div[ix]);
 494		break;
 495	case SHOW_SET_FAN_MIN:
 496		res = RPM_FROM_REG(data->fan_min[ix], data->fan_div[ix]);
 497		break;
 498	case SHOW_SET_FAN_DIV:
 499		res = DIV_FROM_REG(data->fan_div[ix]);
 500		break;
 501	case SHOW_FAN_ALARM:
 502		res = (data->alarms >> bitalarmfan[ix]) & 1;
 503		break;
 504	default:
 505		res = 0;
 506		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 507	}
 508
 509	return sprintf(buf, "%d\n", res);
 510}
 511
 512static ssize_t set_fan(struct device *dev, struct device_attribute *attr,
 513		       const char *buf, size_t count)
 514{
 515	struct vt1211_data *data = dev_get_drvdata(dev);
 516	struct sensor_device_attribute_2 *sensor_attr_2 =
 517						to_sensor_dev_attr_2(attr);
 518	int ix = sensor_attr_2->index;
 519	int fn = sensor_attr_2->nr;
 520	long val = simple_strtol(buf, NULL, 10);
 521	int reg;
 
 
 
 
 
 
 522
 523	mutex_lock(&data->update_lock);
 524
 525	/* sync the data cache */
 526	reg = vt1211_read8(data, VT1211_REG_FAN_DIV);
 527	data->fan_div[0] = (reg >> 4) & 3;
 528	data->fan_div[1] = (reg >> 6) & 3;
 529	data->fan_ctl = reg & 0xf;
 530
 531	switch (fn) {
 532	case SHOW_SET_FAN_MIN:
 533		data->fan_min[ix] = RPM_TO_REG(val, data->fan_div[ix]);
 534		vt1211_write8(data, VT1211_REG_FAN_MIN(ix),
 535			      data->fan_min[ix]);
 536		break;
 537	case SHOW_SET_FAN_DIV:
 538		switch (val) {
 539			case 1: data->fan_div[ix] = 0; break;
 540			case 2: data->fan_div[ix] = 1; break;
 541			case 4: data->fan_div[ix] = 2; break;
 542			case 8: data->fan_div[ix] = 3; break;
 543			default:
 544				count = -EINVAL;
 545				dev_warn(dev, "fan div value %ld not "
 546					 "supported. Choose one of 1, 2, "
 547					 "4, or 8.\n", val);
 548				goto EXIT;
 
 
 
 
 
 
 
 
 549		}
 550		vt1211_write8(data, VT1211_REG_FAN_DIV,
 551			      ((data->fan_div[1] << 6) |
 552			       (data->fan_div[0] << 4) |
 553				data->fan_ctl));
 554		break;
 555	default:
 556		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 557	}
 558
 559EXIT:
 560	mutex_unlock(&data->update_lock);
 561	return count;
 562}
 563
 564/* ---------------------------------------------------------------------
 565 * PWM sysfs interfaces
 566 * ix = [0-1]
 567 * --------------------------------------------------------------------- */
 568
 569#define SHOW_PWM			0
 570#define SHOW_SET_PWM_ENABLE		1
 571#define SHOW_SET_PWM_FREQ		2
 572#define SHOW_SET_PWM_AUTO_CHANNELS_TEMP	3
 573
 574static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
 575			char *buf)
 576{
 577	struct vt1211_data *data = vt1211_update_device(dev);
 578	struct sensor_device_attribute_2 *sensor_attr_2 =
 579						to_sensor_dev_attr_2(attr);
 580	int ix = sensor_attr_2->index;
 581	int fn = sensor_attr_2->nr;
 582	int res;
 583
 584	switch (fn) {
 585	case SHOW_PWM:
 586		res = data->pwm[ix];
 587		break;
 588	case SHOW_SET_PWM_ENABLE:
 589		res = ((data->pwm_ctl[ix] >> 3) & 1) ? 2 : 0;
 590		break;
 591	case SHOW_SET_PWM_FREQ:
 592		res = 90000 >> (data->pwm_clk & 7);
 593		break;
 594	case SHOW_SET_PWM_AUTO_CHANNELS_TEMP:
 595		res = (data->pwm_ctl[ix] & 7) + 1;
 596		break;
 597	default:
 598		res = 0;
 599		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 600	}
 601
 602	return sprintf(buf, "%d\n", res);
 603}
 604
 605static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
 606		       const char *buf, size_t count)
 607{
 608	struct vt1211_data *data = dev_get_drvdata(dev);
 609	struct sensor_device_attribute_2 *sensor_attr_2 =
 610						to_sensor_dev_attr_2(attr);
 611	int ix = sensor_attr_2->index;
 612	int fn = sensor_attr_2->nr;
 613	long val = simple_strtol(buf, NULL, 10);
 614	int tmp, reg;
 
 
 
 
 
 
 615
 616	mutex_lock(&data->update_lock);
 617
 618	switch (fn) {
 619	case SHOW_SET_PWM_ENABLE:
 620		/* sync the data cache */
 621		reg = vt1211_read8(data, VT1211_REG_FAN_DIV);
 622		data->fan_div[0] = (reg >> 4) & 3;
 623		data->fan_div[1] = (reg >> 6) & 3;
 624		data->fan_ctl = reg & 0xf;
 625		reg = vt1211_read8(data, VT1211_REG_PWM_CTL);
 626		data->pwm_ctl[0] = reg & 0xf;
 627		data->pwm_ctl[1] = (reg >> 4) & 0xf;
 628		switch (val) {
 629		case 0:
 630			data->pwm_ctl[ix] &= 7;
 631			/* disable SmartGuardian if both PWM outputs are
 632			 * disabled */
 633			if ((data->pwm_ctl[ix ^ 1] & 1) == 0) {
 
 
 634				data->fan_ctl &= 0xe;
 635			}
 636			break;
 637		case 2:
 638			data->pwm_ctl[ix] |= 8;
 639			data->fan_ctl |= 1;
 640			break;
 641		default:
 642			count = -EINVAL;
 643			dev_warn(dev, "pwm mode %ld not supported. "
 644				 "Choose one of 0 or 2.\n", val);
 
 645			goto EXIT;
 646		}
 647		vt1211_write8(data, VT1211_REG_PWM_CTL,
 648			      ((data->pwm_ctl[1] << 4) |
 649				data->pwm_ctl[0]));
 650		vt1211_write8(data, VT1211_REG_FAN_DIV,
 651			      ((data->fan_div[1] << 6) |
 652			       (data->fan_div[0] << 4) |
 653				data->fan_ctl));
 654		break;
 655	case SHOW_SET_PWM_FREQ:
 656		val = 135000 / SENSORS_LIMIT(val, 135000 >> 7, 135000);
 657		/* calculate tmp = log2(val) */
 658		tmp = 0;
 659		for (val >>= 1; val > 0; val >>= 1) {
 660			tmp++;
 661		}
 662		/* sync the data cache */
 663		reg = vt1211_read8(data, VT1211_REG_PWM_CLK);
 664		data->pwm_clk = (reg & 0xf8) | tmp;
 665		vt1211_write8(data, VT1211_REG_PWM_CLK, data->pwm_clk);
 666		break;
 667	case SHOW_SET_PWM_AUTO_CHANNELS_TEMP:
 668		if ((val < 1) || (val > 7)) {
 669			count = -EINVAL;
 670			dev_warn(dev, "temp channel %ld not supported. "
 671				 "Choose a value between 1 and 7.\n", val);
 
 672			goto EXIT;
 673		}
 674		if (!ISTEMP(val - 1, data->uch_config)) {
 675			count = -EINVAL;
 676			dev_warn(dev, "temp channel %ld is not available.\n",
 677				 val);
 678			goto EXIT;
 679		}
 680		/* sync the data cache */
 681		reg = vt1211_read8(data, VT1211_REG_PWM_CTL);
 682		data->pwm_ctl[0] = reg & 0xf;
 683		data->pwm_ctl[1] = (reg >> 4) & 0xf;
 684		data->pwm_ctl[ix] = (data->pwm_ctl[ix] & 8) | (val - 1);
 685		vt1211_write8(data, VT1211_REG_PWM_CTL,
 686			      ((data->pwm_ctl[1] << 4) | data->pwm_ctl[0]));
 687		break;
 688	default:
 689		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 690	}
 691
 692EXIT:
 693	mutex_unlock(&data->update_lock);
 694	return count;
 695}
 696
 697/* ---------------------------------------------------------------------
 698 * PWM auto point definitions
 699 * ix = [0-1]
 700 * ap = [0-3]
 701 * --------------------------------------------------------------------- */
 702
 703/*
 704 * pwm[ix+1]_auto_point[ap+1]_temp mapping table:
 705 * Note that there is only a single set of temp auto points that controls both
 706 * PWM controllers. We still create 2 sets of sysfs files to make it look
 707 * more consistent even though they map to the same registers.
 708 *
 709 * ix ap : description
 710 * -------------------
 711 * 0  0  : pwm1/2 off temperature        (pwm_auto_temp[0])
 712 * 0  1  : pwm1/2 low speed temperature  (pwm_auto_temp[1])
 713 * 0  2  : pwm1/2 high speed temperature (pwm_auto_temp[2])
 714 * 0  3  : pwm1/2 full speed temperature (pwm_auto_temp[3])
 715 * 1  0  : pwm1/2 off temperature        (pwm_auto_temp[0])
 716 * 1  1  : pwm1/2 low speed temperature  (pwm_auto_temp[1])
 717 * 1  2  : pwm1/2 high speed temperature (pwm_auto_temp[2])
 718 * 1  3  : pwm1/2 full speed temperature (pwm_auto_temp[3])
 719 */
 720
 721static ssize_t show_pwm_auto_point_temp(struct device *dev,
 722					struct device_attribute *attr,
 723					char *buf)
 724{
 725	struct vt1211_data *data = vt1211_update_device(dev);
 726	struct sensor_device_attribute_2 *sensor_attr_2 =
 727						to_sensor_dev_attr_2(attr);
 728	int ix = sensor_attr_2->index;
 729	int ap = sensor_attr_2->nr;
 730
 731	return sprintf(buf, "%d\n", TEMP_FROM_REG(data->pwm_ctl[ix] & 7,
 732		       data->pwm_auto_temp[ap]));
 733}
 734
 735static ssize_t set_pwm_auto_point_temp(struct device *dev,
 736				       struct device_attribute *attr,
 737				       const char *buf, size_t count)
 738{
 739	struct vt1211_data *data = dev_get_drvdata(dev);
 740	struct sensor_device_attribute_2 *sensor_attr_2 =
 741						to_sensor_dev_attr_2(attr);
 742	int ix = sensor_attr_2->index;
 743	int ap = sensor_attr_2->nr;
 744	long val = simple_strtol(buf, NULL, 10);
 745	int reg;
 
 
 
 
 
 
 
 746
 747	mutex_lock(&data->update_lock);
 748
 749	/* sync the data cache */
 750	reg = vt1211_read8(data, VT1211_REG_PWM_CTL);
 751	data->pwm_ctl[0] = reg & 0xf;
 752	data->pwm_ctl[1] = (reg >> 4) & 0xf;
 753
 754	data->pwm_auto_temp[ap] = TEMP_TO_REG(data->pwm_ctl[ix] & 7, val);
 755	vt1211_write8(data, VT1211_REG_PWM_AUTO_TEMP(ap),
 756		      data->pwm_auto_temp[ap]);
 757	mutex_unlock(&data->update_lock);
 758
 759	return count;
 760}
 761
 762/*
 763 * pwm[ix+1]_auto_point[ap+1]_pwm mapping table:
 764 * Note that the PWM auto points 0 & 3 are hard-wired in the VT1211 and can't
 765 * be changed.
 766 *
 767 * ix ap : description
 768 * -------------------
 769 * 0  0  : pwm1 off                   (pwm_auto_pwm[0][0], hard-wired to 0)
 770 * 0  1  : pwm1 low speed duty cycle  (pwm_auto_pwm[0][1])
 771 * 0  2  : pwm1 high speed duty cycle (pwm_auto_pwm[0][2])
 772 * 0  3  : pwm1 full speed            (pwm_auto_pwm[0][3], hard-wired to 255)
 773 * 1  0  : pwm2 off                   (pwm_auto_pwm[1][0], hard-wired to 0)
 774 * 1  1  : pwm2 low speed duty cycle  (pwm_auto_pwm[1][1])
 775 * 1  2  : pwm2 high speed duty cycle (pwm_auto_pwm[1][2])
 776 * 1  3  : pwm2 full speed            (pwm_auto_pwm[1][3], hard-wired to 255)
 777*/
 778
 779static ssize_t show_pwm_auto_point_pwm(struct device *dev,
 780				       struct device_attribute *attr,
 781				       char *buf)
 782{
 783	struct vt1211_data *data = vt1211_update_device(dev);
 784	struct sensor_device_attribute_2 *sensor_attr_2 =
 785						to_sensor_dev_attr_2(attr);
 786	int ix = sensor_attr_2->index;
 787	int ap = sensor_attr_2->nr;
 788
 789	return sprintf(buf, "%d\n", data->pwm_auto_pwm[ix][ap]);
 790}
 791
 792static ssize_t set_pwm_auto_point_pwm(struct device *dev,
 793				      struct device_attribute *attr,
 794				      const char *buf, size_t count)
 795{
 796	struct vt1211_data *data = dev_get_drvdata(dev);
 797	struct sensor_device_attribute_2 *sensor_attr_2 =
 798						to_sensor_dev_attr_2(attr);
 799	int ix = sensor_attr_2->index;
 800	int ap = sensor_attr_2->nr;
 801	long val = simple_strtol(buf, NULL, 10);
 
 802
 803	if ((val < 0) || (val > 255)) {
 804		dev_err(dev, "pwm value %ld is out of range. "
 805			"Choose a value between 0 and 255.\n" , val);
 806		return -EINVAL;
 807	}
 808
 809	mutex_lock(&data->update_lock);
 810	data->pwm_auto_pwm[ix][ap] = val;
 811	vt1211_write8(data, VT1211_REG_PWM_AUTO_PWM(ix, ap),
 812		      data->pwm_auto_pwm[ix][ap]);
 813	mutex_unlock(&data->update_lock);
 814
 815	return count;
 816}
 817
 818/* ---------------------------------------------------------------------
 819 * Miscellaneous sysfs interfaces (VRM, VID, name, and (legacy) alarms)
 820 * --------------------------------------------------------------------- */
 821
 822static ssize_t show_vrm(struct device *dev, struct device_attribute *attr,
 823			char *buf)
 824{
 825	struct vt1211_data *data = dev_get_drvdata(dev);
 826
 827	return sprintf(buf, "%d\n", data->vrm);
 828}
 829
 830static ssize_t set_vrm(struct device *dev, struct device_attribute *attr,
 831		       const char *buf, size_t count)
 832{
 833	struct vt1211_data *data = dev_get_drvdata(dev);
 834	long val = simple_strtol(buf, NULL, 10);
 
 
 
 
 
 
 
 
 835
 836	data->vrm = val;
 837
 838	return count;
 839}
 840
 841static ssize_t show_vid(struct device *dev, struct device_attribute *attr,
 842			char *buf)
 843{
 844	struct vt1211_data *data = dev_get_drvdata(dev);
 845
 846	return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
 847}
 848
 849static ssize_t show_name(struct device *dev,
 850			 struct device_attribute *attr, char *buf)
 851{
 852	struct vt1211_data *data = dev_get_drvdata(dev);
 853
 854	return sprintf(buf, "%s\n", data->name);
 855}
 856
 857static ssize_t show_alarms(struct device *dev,
 858			   struct device_attribute *attr, char *buf)
 859{
 860	struct vt1211_data *data = vt1211_update_device(dev);
 861
 862	return sprintf(buf, "%d\n", data->alarms);
 863}
 864
 865/* ---------------------------------------------------------------------
 866 * Device attribute structs
 867 * --------------------------------------------------------------------- */
 868
 869#define SENSOR_ATTR_IN_INPUT(ix) \
 870	SENSOR_ATTR_2(in##ix##_input, S_IRUGO, \
 871		show_in, NULL, SHOW_IN_INPUT, ix)
 872
 873static struct sensor_device_attribute_2 vt1211_sysfs_in_input[] = {
 874	SENSOR_ATTR_IN_INPUT(0),
 875	SENSOR_ATTR_IN_INPUT(1),
 876	SENSOR_ATTR_IN_INPUT(2),
 877	SENSOR_ATTR_IN_INPUT(3),
 878	SENSOR_ATTR_IN_INPUT(4),
 879	SENSOR_ATTR_IN_INPUT(5),
 880};
 881
 882#define SENSOR_ATTR_IN_MIN(ix) \
 883	SENSOR_ATTR_2(in##ix##_min, S_IRUGO | S_IWUSR, \
 884		show_in, set_in, SHOW_SET_IN_MIN, ix)
 885
 886static struct sensor_device_attribute_2 vt1211_sysfs_in_min[] = {
 887	SENSOR_ATTR_IN_MIN(0),
 888	SENSOR_ATTR_IN_MIN(1),
 889	SENSOR_ATTR_IN_MIN(2),
 890	SENSOR_ATTR_IN_MIN(3),
 891	SENSOR_ATTR_IN_MIN(4),
 892	SENSOR_ATTR_IN_MIN(5),
 893};
 894
 895#define SENSOR_ATTR_IN_MAX(ix) \
 896	SENSOR_ATTR_2(in##ix##_max, S_IRUGO | S_IWUSR, \
 897		show_in, set_in, SHOW_SET_IN_MAX, ix)
 
 
 
 898
 899static struct sensor_device_attribute_2 vt1211_sysfs_in_max[] = {
 900	SENSOR_ATTR_IN_MAX(0),
 901	SENSOR_ATTR_IN_MAX(1),
 902	SENSOR_ATTR_IN_MAX(2),
 903	SENSOR_ATTR_IN_MAX(3),
 904	SENSOR_ATTR_IN_MAX(4),
 905	SENSOR_ATTR_IN_MAX(5),
 906};
 907
 908#define SENSOR_ATTR_IN_ALARM(ix) \
 909	SENSOR_ATTR_2(in##ix##_alarm, S_IRUGO, \
 910		show_in, NULL, SHOW_IN_ALARM, ix)
 
 
 
 
 911
 912static struct sensor_device_attribute_2 vt1211_sysfs_in_alarm[] = {
 913	SENSOR_ATTR_IN_ALARM(0),
 914	SENSOR_ATTR_IN_ALARM(1),
 915	SENSOR_ATTR_IN_ALARM(2),
 916	SENSOR_ATTR_IN_ALARM(3),
 917	SENSOR_ATTR_IN_ALARM(4),
 918	SENSOR_ATTR_IN_ALARM(5),
 919};
 920
 921#define SENSOR_ATTR_TEMP_INPUT(ix) \
 922	SENSOR_ATTR_2(temp##ix##_input, S_IRUGO, \
 923		show_temp, NULL, SHOW_TEMP_INPUT, ix-1)
 924
 925static struct sensor_device_attribute_2 vt1211_sysfs_temp_input[] = {
 926	SENSOR_ATTR_TEMP_INPUT(1),
 927	SENSOR_ATTR_TEMP_INPUT(2),
 928	SENSOR_ATTR_TEMP_INPUT(3),
 929	SENSOR_ATTR_TEMP_INPUT(4),
 930	SENSOR_ATTR_TEMP_INPUT(5),
 931	SENSOR_ATTR_TEMP_INPUT(6),
 932	SENSOR_ATTR_TEMP_INPUT(7),
 933};
 934
 935#define SENSOR_ATTR_TEMP_MAX(ix) \
 
 
 936	SENSOR_ATTR_2(temp##ix##_max, S_IRUGO | S_IWUSR, \
 937		show_temp, set_temp, SHOW_SET_TEMP_MAX, ix-1)
 938
 939static struct sensor_device_attribute_2 vt1211_sysfs_temp_max[] = {
 940	SENSOR_ATTR_TEMP_MAX(1),
 941	SENSOR_ATTR_TEMP_MAX(2),
 942	SENSOR_ATTR_TEMP_MAX(3),
 943	SENSOR_ATTR_TEMP_MAX(4),
 944	SENSOR_ATTR_TEMP_MAX(5),
 945	SENSOR_ATTR_TEMP_MAX(6),
 946	SENSOR_ATTR_TEMP_MAX(7),
 947};
 948
 949#define SENSOR_ATTR_TEMP_MAX_HYST(ix) \
 950	SENSOR_ATTR_2(temp##ix##_max_hyst, S_IRUGO | S_IWUSR, \
 951		show_temp, set_temp, SHOW_SET_TEMP_MAX_HYST, ix-1)
 
 
 
 952
 953static struct sensor_device_attribute_2 vt1211_sysfs_temp_max_hyst[] = {
 954	SENSOR_ATTR_TEMP_MAX_HYST(1),
 955	SENSOR_ATTR_TEMP_MAX_HYST(2),
 956	SENSOR_ATTR_TEMP_MAX_HYST(3),
 957	SENSOR_ATTR_TEMP_MAX_HYST(4),
 958	SENSOR_ATTR_TEMP_MAX_HYST(5),
 959	SENSOR_ATTR_TEMP_MAX_HYST(6),
 960	SENSOR_ATTR_TEMP_MAX_HYST(7),
 961};
 962
 963#define SENSOR_ATTR_TEMP_ALARM(ix) \
 964	SENSOR_ATTR_2(temp##ix##_alarm, S_IRUGO, \
 965		show_temp, NULL, SHOW_TEMP_ALARM, ix-1)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 966
 967static struct sensor_device_attribute_2 vt1211_sysfs_temp_alarm[] = {
 968	SENSOR_ATTR_TEMP_ALARM(1),
 969	SENSOR_ATTR_TEMP_ALARM(2),
 970	SENSOR_ATTR_TEMP_ALARM(3),
 971	SENSOR_ATTR_TEMP_ALARM(4),
 972	SENSOR_ATTR_TEMP_ALARM(5),
 973	SENSOR_ATTR_TEMP_ALARM(6),
 974	SENSOR_ATTR_TEMP_ALARM(7),
 975};
 976
 977#define SENSOR_ATTR_FAN(ix) \
 978	SENSOR_ATTR_2(fan##ix##_input, S_IRUGO, \
 979		show_fan, NULL, SHOW_FAN_INPUT, ix-1), \
 980	SENSOR_ATTR_2(fan##ix##_min, S_IRUGO | S_IWUSR, \
 981		show_fan, set_fan, SHOW_SET_FAN_MIN, ix-1), \
 982	SENSOR_ATTR_2(fan##ix##_div, S_IRUGO | S_IWUSR, \
 983		show_fan, set_fan, SHOW_SET_FAN_DIV, ix-1), \
 984	SENSOR_ATTR_2(fan##ix##_alarm, S_IRUGO, \
 985		show_fan, NULL, SHOW_FAN_ALARM, ix-1)
 986
 987#define SENSOR_ATTR_PWM(ix) \
 988	SENSOR_ATTR_2(pwm##ix, S_IRUGO, \
 989		show_pwm, NULL, SHOW_PWM, ix-1), \
 990	SENSOR_ATTR_2(pwm##ix##_enable, S_IRUGO | S_IWUSR, \
 991		show_pwm, set_pwm, SHOW_SET_PWM_ENABLE, ix-1), \
 992	SENSOR_ATTR_2(pwm##ix##_auto_channels_temp, S_IRUGO | S_IWUSR, \
 993		show_pwm, set_pwm, SHOW_SET_PWM_AUTO_CHANNELS_TEMP, ix-1)
 994
 995#define SENSOR_ATTR_PWM_FREQ(ix) \
 996	SENSOR_ATTR_2(pwm##ix##_freq, S_IRUGO | S_IWUSR, \
 997		show_pwm, set_pwm, SHOW_SET_PWM_FREQ, ix-1)
 998
 999#define SENSOR_ATTR_PWM_FREQ_RO(ix) \
1000	SENSOR_ATTR_2(pwm##ix##_freq, S_IRUGO, \
1001		show_pwm, NULL, SHOW_SET_PWM_FREQ, ix-1)
1002
1003#define SENSOR_ATTR_PWM_AUTO_POINT_TEMP(ix, ap) \
1004	SENSOR_ATTR_2(pwm##ix##_auto_point##ap##_temp, S_IRUGO | S_IWUSR, \
1005		show_pwm_auto_point_temp, set_pwm_auto_point_temp, \
1006		ap-1, ix-1)
1007
1008#define SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(ix, ap) \
1009	SENSOR_ATTR_2(pwm##ix##_auto_point##ap##_temp, S_IRUGO, \
1010		show_pwm_auto_point_temp, NULL, \
1011		ap-1, ix-1)
1012
1013#define SENSOR_ATTR_PWM_AUTO_POINT_PWM(ix, ap) \
1014	SENSOR_ATTR_2(pwm##ix##_auto_point##ap##_pwm, S_IRUGO | S_IWUSR, \
1015		show_pwm_auto_point_pwm, set_pwm_auto_point_pwm, \
1016		ap-1, ix-1)
1017
1018#define SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(ix, ap) \
1019	SENSOR_ATTR_2(pwm##ix##_auto_point##ap##_pwm, S_IRUGO, \
1020		show_pwm_auto_point_pwm, NULL, \
1021		ap-1, ix-1)
1022
1023static struct sensor_device_attribute_2 vt1211_sysfs_fan_pwm[] = {
1024	SENSOR_ATTR_FAN(1),
1025	SENSOR_ATTR_FAN(2),
1026	SENSOR_ATTR_PWM(1),
1027	SENSOR_ATTR_PWM(2),
1028	SENSOR_ATTR_PWM_FREQ(1),
1029	SENSOR_ATTR_PWM_FREQ_RO(2),
1030	SENSOR_ATTR_PWM_AUTO_POINT_TEMP(1, 1),
1031	SENSOR_ATTR_PWM_AUTO_POINT_TEMP(1, 2),
1032	SENSOR_ATTR_PWM_AUTO_POINT_TEMP(1, 3),
1033	SENSOR_ATTR_PWM_AUTO_POINT_TEMP(1, 4),
1034	SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(2, 1),
1035	SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(2, 2),
1036	SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(2, 3),
1037	SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(2, 4),
1038	SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(1, 1),
1039	SENSOR_ATTR_PWM_AUTO_POINT_PWM(1, 2),
1040	SENSOR_ATTR_PWM_AUTO_POINT_PWM(1, 3),
1041	SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(1, 4),
1042	SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(2, 1),
1043	SENSOR_ATTR_PWM_AUTO_POINT_PWM(2, 2),
1044	SENSOR_ATTR_PWM_AUTO_POINT_PWM(2, 3),
1045	SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(2, 4),
1046};
1047
1048static struct device_attribute vt1211_sysfs_misc[] = {
1049	__ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm, set_vrm),
1050	__ATTR(cpu0_vid, S_IRUGO, show_vid, NULL),
1051	__ATTR(name, S_IRUGO, show_name, NULL),
1052	__ATTR(alarms, S_IRUGO, show_alarms, NULL),
1053};
1054
1055/* ---------------------------------------------------------------------
1056 * Device registration and initialization
1057 * --------------------------------------------------------------------- */
1058
1059static void __devinit vt1211_init_device(struct vt1211_data *data)
1060{
1061	/* set VRM */
1062	data->vrm = vid_which_vrm();
1063
1064	/* Read (and initialize) UCH config */
1065	data->uch_config = vt1211_read8(data, VT1211_REG_UCH_CONFIG);
1066	if (uch_config > -1) {
1067		data->uch_config = (data->uch_config & 0x83) |
1068				   (uch_config << 2);
1069		vt1211_write8(data, VT1211_REG_UCH_CONFIG, data->uch_config);
1070	}
1071
1072	/* Initialize the interrupt mode (if request at module load time).
 
1073	 * The VT1211 implements 3 different modes for clearing interrupts:
1074	 * 0: Clear INT when status register is read. Regenerate INT as long
1075	 *    as temp stays above hysteresis limit.
1076	 * 1: Clear INT when status register is read. DON'T regenerate INT
1077	 *    until temp falls below hysteresis limit and exceeds hot limit
1078	 *    again.
1079	 * 2: Clear INT when temp falls below max limit.
1080	 *
1081	 * The driver only allows to force mode 0 since that's the only one
1082	 * that makes sense for 'sensors' */
 
1083	if (int_mode == 0) {
1084		vt1211_write8(data, VT1211_REG_TEMP1_CONFIG, 0);
1085		vt1211_write8(data, VT1211_REG_TEMP2_CONFIG, 0);
1086	}
1087
1088	/* Fill in some hard wired values into our data struct */
1089	data->pwm_auto_pwm[0][3] = 255;
1090	data->pwm_auto_pwm[1][3] = 255;
1091}
1092
1093static void vt1211_remove_sysfs(struct platform_device *pdev)
1094{
1095	struct device *dev = &pdev->dev;
1096	int i;
1097
1098	for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_in_input); i++) {
1099		device_remove_file(dev,
1100			&vt1211_sysfs_in_input[i].dev_attr);
1101		device_remove_file(dev,
1102			&vt1211_sysfs_in_min[i].dev_attr);
1103		device_remove_file(dev,
1104			&vt1211_sysfs_in_max[i].dev_attr);
1105		device_remove_file(dev,
1106			&vt1211_sysfs_in_alarm[i].dev_attr);
1107	}
1108	for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_temp_input); i++) {
1109		device_remove_file(dev,
1110			&vt1211_sysfs_temp_input[i].dev_attr);
1111		device_remove_file(dev,
1112			&vt1211_sysfs_temp_max[i].dev_attr);
1113		device_remove_file(dev,
1114			&vt1211_sysfs_temp_max_hyst[i].dev_attr);
1115		device_remove_file(dev,
1116			&vt1211_sysfs_temp_alarm[i].dev_attr);
1117	}
1118	for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_fan_pwm); i++) {
1119		device_remove_file(dev,
1120			&vt1211_sysfs_fan_pwm[i].dev_attr);
1121	}
1122	for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_misc); i++) {
1123		device_remove_file(dev, &vt1211_sysfs_misc[i]);
1124	}
1125}
1126
1127static int __devinit vt1211_probe(struct platform_device *pdev)
1128{
1129	struct device *dev = &pdev->dev;
1130	struct vt1211_data *data;
1131	struct resource *res;
1132	int i, err;
1133
1134	if (!(data = kzalloc(sizeof(struct vt1211_data), GFP_KERNEL))) {
1135		err = -ENOMEM;
1136		dev_err(dev, "Out of memory\n");
1137		goto EXIT;
1138	}
1139
1140	res = platform_get_resource(pdev, IORESOURCE_IO, 0);
1141	if (!request_region(res->start, resource_size(res), DRVNAME)) {
1142		err = -EBUSY;
1143		dev_err(dev, "Failed to request region 0x%lx-0x%lx\n",
1144			(unsigned long)res->start, (unsigned long)res->end);
1145		goto EXIT_KFREE;
1146	}
1147	data->addr = res->start;
1148	data->name = DRVNAME;
1149	mutex_init(&data->update_lock);
1150
1151	platform_set_drvdata(pdev, data);
1152
1153	/* Initialize the VT1211 chip */
1154	vt1211_init_device(data);
1155
1156	/* Create sysfs interface files */
1157	for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_in_input); i++) {
1158		if (ISVOLT(i, data->uch_config)) {
1159			if ((err = device_create_file(dev,
1160				&vt1211_sysfs_in_input[i].dev_attr)) ||
1161			    (err = device_create_file(dev,
1162				&vt1211_sysfs_in_min[i].dev_attr)) ||
1163			    (err = device_create_file(dev,
1164				&vt1211_sysfs_in_max[i].dev_attr)) ||
1165			    (err = device_create_file(dev,
1166				&vt1211_sysfs_in_alarm[i].dev_attr))) {
1167				goto EXIT_DEV_REMOVE;
1168			}
1169		}
1170	}
1171	for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_temp_input); i++) {
1172		if (ISTEMP(i, data->uch_config)) {
1173			if ((err = device_create_file(dev,
1174				&vt1211_sysfs_temp_input[i].dev_attr)) ||
1175			    (err = device_create_file(dev,
1176				&vt1211_sysfs_temp_max[i].dev_attr)) ||
1177			    (err = device_create_file(dev,
1178				&vt1211_sysfs_temp_max_hyst[i].dev_attr)) ||
1179			    (err = device_create_file(dev,
1180				&vt1211_sysfs_temp_alarm[i].dev_attr))) {
1181				goto EXIT_DEV_REMOVE;
1182			}
1183		}
1184	}
1185	for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_fan_pwm); i++) {
1186		err = device_create_file(dev,
1187			&vt1211_sysfs_fan_pwm[i].dev_attr);
1188		if (err) {
1189			goto EXIT_DEV_REMOVE;
1190		}
1191	}
1192	for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_misc); i++) {
1193		err = device_create_file(dev,
1194		       &vt1211_sysfs_misc[i]);
1195		if (err) {
1196			goto EXIT_DEV_REMOVE;
1197		}
1198	}
1199
1200	/* Register device */
1201	data->hwmon_dev = hwmon_device_register(dev);
1202	if (IS_ERR(data->hwmon_dev)) {
1203		err = PTR_ERR(data->hwmon_dev);
1204		dev_err(dev, "Class registration failed (%d)\n", err);
1205		goto EXIT_DEV_REMOVE_SILENT;
1206	}
1207
1208	return 0;
1209
1210EXIT_DEV_REMOVE:
1211	dev_err(dev, "Sysfs interface creation failed (%d)\n", err);
1212EXIT_DEV_REMOVE_SILENT:
1213	vt1211_remove_sysfs(pdev);
1214	release_region(res->start, resource_size(res));
1215EXIT_KFREE:
1216	platform_set_drvdata(pdev, NULL);
1217	kfree(data);
1218EXIT:
1219	return err;
1220}
1221
1222static int __devexit vt1211_remove(struct platform_device *pdev)
1223{
1224	struct vt1211_data *data = platform_get_drvdata(pdev);
1225	struct resource *res;
1226
1227	hwmon_device_unregister(data->hwmon_dev);
1228	vt1211_remove_sysfs(pdev);
1229	platform_set_drvdata(pdev, NULL);
1230	kfree(data);
1231
1232	res = platform_get_resource(pdev, IORESOURCE_IO, 0);
1233	release_region(res->start, resource_size(res));
1234
1235	return 0;
1236}
1237
1238static struct platform_driver vt1211_driver = {
1239	.driver = {
1240		.owner = THIS_MODULE,
1241		.name  = DRVNAME,
1242	},
1243	.probe  = vt1211_probe,
1244	.remove = __devexit_p(vt1211_remove),
1245};
1246
1247static int __init vt1211_device_add(unsigned short address)
1248{
1249	struct resource res = {
1250		.start	= address,
1251		.end	= address + 0x7f,
1252		.flags	= IORESOURCE_IO,
1253	};
1254	int err;
1255
1256	pdev = platform_device_alloc(DRVNAME, address);
1257	if (!pdev) {
1258		err = -ENOMEM;
1259		pr_err("Device allocation failed (%d)\n", err);
1260		goto EXIT;
1261	}
1262
1263	res.name = pdev->name;
1264	err = acpi_check_resource_conflict(&res);
1265	if (err)
1266		goto EXIT_DEV_PUT;
1267
1268	err = platform_device_add_resources(pdev, &res, 1);
1269	if (err) {
1270		pr_err("Device resource addition failed (%d)\n", err);
1271		goto EXIT_DEV_PUT;
1272	}
1273
1274	err = platform_device_add(pdev);
1275	if (err) {
1276		pr_err("Device addition failed (%d)\n", err);
1277		goto EXIT_DEV_PUT;
1278	}
1279
1280	return 0;
1281
1282EXIT_DEV_PUT:
1283	platform_device_put(pdev);
1284EXIT:
1285	return err;
1286}
1287
1288static int __init vt1211_find(int sio_cip, unsigned short *address)
1289{
1290	int err = -ENODEV;
1291	int devid;
1292
1293	superio_enter(sio_cip);
1294
1295	devid = force_id ? force_id : superio_inb(sio_cip, SIO_VT1211_DEVID);
1296	if (devid != SIO_VT1211_ID) {
1297		goto EXIT;
1298	}
1299
1300	superio_select(sio_cip, SIO_VT1211_LDN_HWMON);
1301
1302	if ((superio_inb(sio_cip, SIO_VT1211_ACTIVE) & 1) == 0) {
1303		pr_warn("HW monitor is disabled, skipping\n");
1304		goto EXIT;
1305	}
1306
1307	*address = ((superio_inb(sio_cip, SIO_VT1211_BADDR) << 8) |
1308		    (superio_inb(sio_cip, SIO_VT1211_BADDR + 1))) & 0xff00;
1309	if (*address == 0) {
1310		pr_warn("Base address is not set, skipping\n");
1311		goto EXIT;
1312	}
1313
1314	err = 0;
1315	pr_info("Found VT1211 chip at 0x%04x, revision %u\n",
1316		*address, superio_inb(sio_cip, SIO_VT1211_DEVREV));
1317
1318EXIT:
1319	superio_exit(sio_cip);
1320	return err;
1321}
1322
1323static int __init vt1211_init(void)
1324{
1325	int err;
1326	unsigned short address = 0;
1327
1328	if ((err = vt1211_find(SIO_REG_CIP1, &address)) &&
1329	    (err = vt1211_find(SIO_REG_CIP2, &address))) {
1330		goto EXIT;
 
 
1331	}
1332
1333	if ((uch_config < -1) || (uch_config > 31)) {
1334		err = -EINVAL;
1335		pr_warn("Invalid UCH configuration %d. "
1336			"Choose a value between 0 and 31.\n", uch_config);
1337	  goto EXIT;
1338	}
1339
1340	if ((int_mode < -1) || (int_mode > 0)) {
1341		err = -EINVAL;
1342		pr_warn("Invalid interrupt mode %d. "
1343			"Only mode 0 is supported.\n", int_mode);
1344	  goto EXIT;
1345	}
1346
1347	err = platform_driver_register(&vt1211_driver);
1348	if (err) {
1349		goto EXIT;
1350	}
1351
1352	/* Sets global pdev as a side effect */
1353	err = vt1211_device_add(address);
1354	if (err) {
1355		goto EXIT_DRV_UNREGISTER;
1356	}
1357
1358	return 0;
1359
1360EXIT_DRV_UNREGISTER:
1361	platform_driver_unregister(&vt1211_driver);
1362EXIT:
1363	return err;
1364}
1365
1366static void __exit vt1211_exit(void)
1367{
1368	platform_device_unregister(pdev);
1369	platform_driver_unregister(&vt1211_driver);
1370}
1371
1372MODULE_AUTHOR("Juerg Haefliger <juergh@gmail.com>");
1373MODULE_DESCRIPTION("VT1211 sensors");
1374MODULE_LICENSE("GPL");
1375
1376module_init(vt1211_init);
1377module_exit(vt1211_exit);
v4.6
   1/*
   2 * vt1211.c - driver for the VIA VT1211 Super-I/O chip integrated hardware
   3 *            monitoring features
   4 * Copyright (C) 2006 Juerg Haefliger <juergh@gmail.com>
   5 *
   6 * This driver is based on the driver for kernel 2.4 by Mark D. Studebaker
   7 * and its port to kernel 2.6 by Lars Ekman.
   8 *
   9 * This program is free software; you can redistribute it and/or modify
  10 * it under the terms of the GNU General Public License as published by
  11 * the Free Software Foundation; either version 2 of the License, or
  12 * (at your option) any later version.
  13 *
  14 * This program is distributed in the hope that it will be useful,
  15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17 * GNU General Public License for more details.
  18 *
  19 * You should have received a copy of the GNU General Public License
  20 * along with this program; if not, write to the Free Software
  21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22 */
  23
  24#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  25
  26#include <linux/module.h>
  27#include <linux/init.h>
  28#include <linux/slab.h>
  29#include <linux/jiffies.h>
  30#include <linux/platform_device.h>
  31#include <linux/hwmon.h>
  32#include <linux/hwmon-sysfs.h>
  33#include <linux/hwmon-vid.h>
  34#include <linux/err.h>
  35#include <linux/mutex.h>
  36#include <linux/ioport.h>
  37#include <linux/acpi.h>
  38#include <linux/io.h>
  39
  40static int uch_config = -1;
  41module_param(uch_config, int, 0);
  42MODULE_PARM_DESC(uch_config, "Initialize the universal channel configuration");
  43
  44static int int_mode = -1;
  45module_param(int_mode, int, 0);
  46MODULE_PARM_DESC(int_mode, "Force the temperature interrupt mode");
  47
  48static unsigned short force_id;
  49module_param(force_id, ushort, 0);
  50MODULE_PARM_DESC(force_id, "Override the detected device ID");
  51
  52static struct platform_device *pdev;
  53
  54#define DRVNAME "vt1211"
  55
  56/* ---------------------------------------------------------------------
  57 * Registers
  58 *
  59 * The sensors are defined as follows.
  60 *
  61 * Sensor          Voltage Mode   Temp Mode   Notes (from the datasheet)
  62 * --------        ------------   ---------   --------------------------
  63 * Reading 1                      temp1       Intel thermal diode
  64 * Reading 3                      temp2       Internal thermal diode
  65 * UCH1/Reading2   in0            temp3       NTC type thermistor
  66 * UCH2            in1            temp4       +2.5V
  67 * UCH3            in2            temp5       VccP
  68 * UCH4            in3            temp6       +5V
  69 * UCH5            in4            temp7       +12V
  70 * 3.3V            in5                        Internal VDD (+3.3V)
  71 *
  72 * --------------------------------------------------------------------- */
  73
  74/* Voltages (in) numbered 0-5 (ix) */
  75#define VT1211_REG_IN(ix)		(0x21 + (ix))
  76#define VT1211_REG_IN_MIN(ix)		((ix) == 0 ? 0x3e : 0x2a + 2 * (ix))
  77#define VT1211_REG_IN_MAX(ix)		((ix) == 0 ? 0x3d : 0x29 + 2 * (ix))
  78
  79/* Temperatures (temp) numbered 0-6 (ix) */
  80static u8 regtemp[]	= {0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25};
  81static u8 regtempmax[]	= {0x39, 0x1d, 0x3d, 0x2b, 0x2d, 0x2f, 0x31};
  82static u8 regtemphyst[]	= {0x3a, 0x1e, 0x3e, 0x2c, 0x2e, 0x30, 0x32};
  83
  84/* Fans numbered 0-1 (ix) */
  85#define VT1211_REG_FAN(ix)		(0x29 + (ix))
  86#define VT1211_REG_FAN_MIN(ix)		(0x3b + (ix))
  87#define VT1211_REG_FAN_DIV		 0x47
  88
  89/* PWMs numbered 0-1 (ix) */
  90/* Auto points numbered 0-3 (ap) */
  91#define VT1211_REG_PWM(ix)		(0x60 + (ix))
  92#define VT1211_REG_PWM_CLK		 0x50
  93#define VT1211_REG_PWM_CTL		 0x51
  94#define VT1211_REG_PWM_AUTO_TEMP(ap)	(0x55 - (ap))
  95#define VT1211_REG_PWM_AUTO_PWM(ix, ap)	(0x58 + 2 * (ix) - (ap))
  96
  97/* Miscellaneous registers */
  98#define VT1211_REG_CONFIG		0x40
  99#define VT1211_REG_ALARM1		0x41
 100#define VT1211_REG_ALARM2		0x42
 101#define VT1211_REG_VID			0x45
 102#define VT1211_REG_UCH_CONFIG		0x4a
 103#define VT1211_REG_TEMP1_CONFIG		0x4b
 104#define VT1211_REG_TEMP2_CONFIG		0x4c
 105
 106/* In, temp & fan alarm bits */
 107static const u8 bitalarmin[]	= {11, 0, 1, 3, 8, 2, 9};
 108static const u8 bitalarmtemp[]	= {4, 15, 11, 0, 1, 3, 8};
 109static const u8 bitalarmfan[]	= {6, 7};
 110
 111/* ---------------------------------------------------------------------
 112 * Data structures and manipulation thereof
 113 * --------------------------------------------------------------------- */
 114
 115struct vt1211_data {
 116	unsigned short addr;
 117	const char *name;
 118	struct device *hwmon_dev;
 119
 120	struct mutex update_lock;
 121	char valid;			/* !=0 if following fields are valid */
 122	unsigned long last_updated;	/* In jiffies */
 123
 124	/* Register values */
 125	u8  in[6];
 126	u8  in_max[6];
 127	u8  in_min[6];
 128	u8  temp[7];
 129	u8  temp_max[7];
 130	u8  temp_hyst[7];
 131	u8  fan[2];
 132	u8  fan_min[2];
 133	u8  fan_div[2];
 134	u8  fan_ctl;
 135	u8  pwm[2];
 136	u8  pwm_ctl[2];
 137	u8  pwm_clk;
 138	u8  pwm_auto_temp[4];
 139	u8  pwm_auto_pwm[2][4];
 140	u8  vid;		/* Read once at init time */
 141	u8  vrm;
 142	u8  uch_config;		/* Read once at init time */
 143	u16 alarms;
 144};
 145
 146/* ix = [0-5] */
 147#define ISVOLT(ix, uch_config)	((ix) > 4 ? 1 : \
 148				 !(((uch_config) >> ((ix) + 2)) & 1))
 149
 150/* ix = [0-6] */
 151#define ISTEMP(ix, uch_config)	((ix) < 2 ? 1 : \
 152				 ((uch_config) >> (ix)) & 1)
 153
 154/*
 155 * in5 (ix = 5) is special. It's the internal 3.3V so it's scaled in the
 156 * driver according to the VT1211 BIOS porting guide
 157 */
 158#define IN_FROM_REG(ix, reg)	((reg) < 3 ? 0 : (ix) == 5 ? \
 159				 (((reg) - 3) * 15882 + 479) / 958 : \
 160				 (((reg) - 3) * 10000 + 479) / 958)
 161#define IN_TO_REG(ix, val)	(clamp_val((ix) == 5 ? \
 162				 ((val) * 958 + 7941) / 15882 + 3 : \
 163				 ((val) * 958 + 5000) / 10000 + 3, 0, 255))
 164
 165/*
 166 * temp1 (ix = 0) is an intel thermal diode which is scaled in user space.
 167 * temp2 (ix = 1) is the internal temp diode so it's scaled in the driver
 168 * according to some measurements that I took on an EPIA M10000.
 169 * temp3-7 are thermistor based so the driver returns the voltage measured at
 170 * the pin (range 0V - 2.2V).
 171 */
 172#define TEMP_FROM_REG(ix, reg)	((ix) == 0 ? (reg) * 1000 : \
 173				 (ix) == 1 ? (reg) < 51 ? 0 : \
 174				 ((reg) - 51) * 1000 : \
 175				 ((253 - (reg)) * 2200 + 105) / 210)
 176#define TEMP_TO_REG(ix, val)	clamp_val( \
 177				 ((ix) == 0 ? ((val) + 500) / 1000 : \
 178				  (ix) == 1 ? ((val) + 500) / 1000 + 51 : \
 179				  253 - ((val) * 210 + 1100) / 2200), 0, 255)
 180
 181#define DIV_FROM_REG(reg)	(1 << (reg))
 182
 183#define RPM_FROM_REG(reg, div)	(((reg) == 0) || ((reg) == 255) ? 0 : \
 184				 1310720 / (reg) / DIV_FROM_REG(div))
 185#define RPM_TO_REG(val, div)	((val) == 0 ? 255 : \
 186				 clamp_val((1310720 / (val) / \
 187				 DIV_FROM_REG(div)), 1, 254))
 188
 189/* ---------------------------------------------------------------------
 190 * Super-I/O constants and functions
 191 * --------------------------------------------------------------------- */
 192
 193/*
 194 * Configuration index port registers
 195 * The vt1211 can live at 2 different addresses so we need to probe both
 196 */
 197#define SIO_REG_CIP1		0x2e
 198#define SIO_REG_CIP2		0x4e
 199
 200/* Configuration registers */
 201#define SIO_VT1211_LDN		0x07	/* logical device number */
 202#define SIO_VT1211_DEVID	0x20	/* device ID */
 203#define SIO_VT1211_DEVREV	0x21	/* device revision */
 204#define SIO_VT1211_ACTIVE	0x30	/* HW monitor active */
 205#define SIO_VT1211_BADDR	0x60	/* base I/O address */
 206#define SIO_VT1211_ID		0x3c	/* VT1211 device ID */
 207
 208/* VT1211 logical device numbers */
 209#define SIO_VT1211_LDN_HWMON	0x0b	/* HW monitor */
 210
 211static inline void superio_outb(int sio_cip, int reg, int val)
 212{
 213	outb(reg, sio_cip);
 214	outb(val, sio_cip + 1);
 215}
 216
 217static inline int superio_inb(int sio_cip, int reg)
 218{
 219	outb(reg, sio_cip);
 220	return inb(sio_cip + 1);
 221}
 222
 223static inline void superio_select(int sio_cip, int ldn)
 224{
 225	outb(SIO_VT1211_LDN, sio_cip);
 226	outb(ldn, sio_cip + 1);
 227}
 228
 229static inline void superio_enter(int sio_cip)
 230{
 231	outb(0x87, sio_cip);
 232	outb(0x87, sio_cip);
 233}
 234
 235static inline void superio_exit(int sio_cip)
 236{
 237	outb(0xaa, sio_cip);
 238}
 239
 240/* ---------------------------------------------------------------------
 241 * Device I/O access
 242 * --------------------------------------------------------------------- */
 243
 244static inline u8 vt1211_read8(struct vt1211_data *data, u8 reg)
 245{
 246	return inb(data->addr + reg);
 247}
 248
 249static inline void vt1211_write8(struct vt1211_data *data, u8 reg, u8 val)
 250{
 251	outb(val, data->addr + reg);
 252}
 253
 254static struct vt1211_data *vt1211_update_device(struct device *dev)
 255{
 256	struct vt1211_data *data = dev_get_drvdata(dev);
 257	int ix, val;
 258
 259	mutex_lock(&data->update_lock);
 260
 261	/* registers cache is refreshed after 1 second */
 262	if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
 263		/* read VID */
 264		data->vid = vt1211_read8(data, VT1211_REG_VID) & 0x1f;
 265
 266		/* voltage (in) registers */
 267		for (ix = 0; ix < ARRAY_SIZE(data->in); ix++) {
 268			if (ISVOLT(ix, data->uch_config)) {
 269				data->in[ix] = vt1211_read8(data,
 270						VT1211_REG_IN(ix));
 271				data->in_min[ix] = vt1211_read8(data,
 272						VT1211_REG_IN_MIN(ix));
 273				data->in_max[ix] = vt1211_read8(data,
 274						VT1211_REG_IN_MAX(ix));
 275			}
 276		}
 277
 278		/* temp registers */
 279		for (ix = 0; ix < ARRAY_SIZE(data->temp); ix++) {
 280			if (ISTEMP(ix, data->uch_config)) {
 281				data->temp[ix] = vt1211_read8(data,
 282						regtemp[ix]);
 283				data->temp_max[ix] = vt1211_read8(data,
 284						regtempmax[ix]);
 285				data->temp_hyst[ix] = vt1211_read8(data,
 286						regtemphyst[ix]);
 287			}
 288		}
 289
 290		/* fan & pwm registers */
 291		for (ix = 0; ix < ARRAY_SIZE(data->fan); ix++) {
 292			data->fan[ix] = vt1211_read8(data,
 293						VT1211_REG_FAN(ix));
 294			data->fan_min[ix] = vt1211_read8(data,
 295						VT1211_REG_FAN_MIN(ix));
 296			data->pwm[ix] = vt1211_read8(data,
 297						VT1211_REG_PWM(ix));
 298		}
 299		val = vt1211_read8(data, VT1211_REG_FAN_DIV);
 300		data->fan_div[0] = (val >> 4) & 3;
 301		data->fan_div[1] = (val >> 6) & 3;
 302		data->fan_ctl = val & 0xf;
 303
 304		val = vt1211_read8(data, VT1211_REG_PWM_CTL);
 305		data->pwm_ctl[0] = val & 0xf;
 306		data->pwm_ctl[1] = (val >> 4) & 0xf;
 307
 308		data->pwm_clk = vt1211_read8(data, VT1211_REG_PWM_CLK);
 309
 310		/* pwm & temp auto point registers */
 311		data->pwm_auto_pwm[0][1] = vt1211_read8(data,
 312						VT1211_REG_PWM_AUTO_PWM(0, 1));
 313		data->pwm_auto_pwm[0][2] = vt1211_read8(data,
 314						VT1211_REG_PWM_AUTO_PWM(0, 2));
 315		data->pwm_auto_pwm[1][1] = vt1211_read8(data,
 316						VT1211_REG_PWM_AUTO_PWM(1, 1));
 317		data->pwm_auto_pwm[1][2] = vt1211_read8(data,
 318						VT1211_REG_PWM_AUTO_PWM(1, 2));
 319		for (ix = 0; ix < ARRAY_SIZE(data->pwm_auto_temp); ix++) {
 320			data->pwm_auto_temp[ix] = vt1211_read8(data,
 321						VT1211_REG_PWM_AUTO_TEMP(ix));
 322		}
 323
 324		/* alarm registers */
 325		data->alarms = (vt1211_read8(data, VT1211_REG_ALARM2) << 8) |
 326				vt1211_read8(data, VT1211_REG_ALARM1);
 327
 328		data->last_updated = jiffies;
 329		data->valid = 1;
 330	}
 331
 332	mutex_unlock(&data->update_lock);
 333
 334	return data;
 335}
 336
 337/* ---------------------------------------------------------------------
 338 * Voltage sysfs interfaces
 339 * ix = [0-5]
 340 * --------------------------------------------------------------------- */
 341
 342#define SHOW_IN_INPUT	0
 343#define SHOW_SET_IN_MIN	1
 344#define SHOW_SET_IN_MAX	2
 345#define SHOW_IN_ALARM	3
 346
 347static ssize_t show_in(struct device *dev, struct device_attribute *attr,
 348		       char *buf)
 349{
 350	struct vt1211_data *data = vt1211_update_device(dev);
 351	struct sensor_device_attribute_2 *sensor_attr_2 =
 352						to_sensor_dev_attr_2(attr);
 353	int ix = sensor_attr_2->index;
 354	int fn = sensor_attr_2->nr;
 355	int res;
 356
 357	switch (fn) {
 358	case SHOW_IN_INPUT:
 359		res = IN_FROM_REG(ix, data->in[ix]);
 360		break;
 361	case SHOW_SET_IN_MIN:
 362		res = IN_FROM_REG(ix, data->in_min[ix]);
 363		break;
 364	case SHOW_SET_IN_MAX:
 365		res = IN_FROM_REG(ix, data->in_max[ix]);
 366		break;
 367	case SHOW_IN_ALARM:
 368		res = (data->alarms >> bitalarmin[ix]) & 1;
 369		break;
 370	default:
 371		res = 0;
 372		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 373	}
 374
 375	return sprintf(buf, "%d\n", res);
 376}
 377
 378static ssize_t set_in(struct device *dev, struct device_attribute *attr,
 379		      const char *buf, size_t count)
 380{
 381	struct vt1211_data *data = dev_get_drvdata(dev);
 382	struct sensor_device_attribute_2 *sensor_attr_2 =
 383						to_sensor_dev_attr_2(attr);
 384	int ix = sensor_attr_2->index;
 385	int fn = sensor_attr_2->nr;
 386	long val;
 387	int err;
 388
 389	err = kstrtol(buf, 10, &val);
 390	if (err)
 391		return err;
 392
 393	mutex_lock(&data->update_lock);
 394	switch (fn) {
 395	case SHOW_SET_IN_MIN:
 396		data->in_min[ix] = IN_TO_REG(ix, val);
 397		vt1211_write8(data, VT1211_REG_IN_MIN(ix), data->in_min[ix]);
 398		break;
 399	case SHOW_SET_IN_MAX:
 400		data->in_max[ix] = IN_TO_REG(ix, val);
 401		vt1211_write8(data, VT1211_REG_IN_MAX(ix), data->in_max[ix]);
 402		break;
 403	default:
 404		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 405	}
 406	mutex_unlock(&data->update_lock);
 407
 408	return count;
 409}
 410
 411/* ---------------------------------------------------------------------
 412 * Temperature sysfs interfaces
 413 * ix = [0-6]
 414 * --------------------------------------------------------------------- */
 415
 416#define SHOW_TEMP_INPUT		0
 417#define SHOW_SET_TEMP_MAX	1
 418#define SHOW_SET_TEMP_MAX_HYST	2
 419#define SHOW_TEMP_ALARM		3
 420
 421static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
 422			 char *buf)
 423{
 424	struct vt1211_data *data = vt1211_update_device(dev);
 425	struct sensor_device_attribute_2 *sensor_attr_2 =
 426						to_sensor_dev_attr_2(attr);
 427	int ix = sensor_attr_2->index;
 428	int fn = sensor_attr_2->nr;
 429	int res;
 430
 431	switch (fn) {
 432	case SHOW_TEMP_INPUT:
 433		res = TEMP_FROM_REG(ix, data->temp[ix]);
 434		break;
 435	case SHOW_SET_TEMP_MAX:
 436		res = TEMP_FROM_REG(ix, data->temp_max[ix]);
 437		break;
 438	case SHOW_SET_TEMP_MAX_HYST:
 439		res = TEMP_FROM_REG(ix, data->temp_hyst[ix]);
 440		break;
 441	case SHOW_TEMP_ALARM:
 442		res = (data->alarms >> bitalarmtemp[ix]) & 1;
 443		break;
 444	default:
 445		res = 0;
 446		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 447	}
 448
 449	return sprintf(buf, "%d\n", res);
 450}
 451
 452static ssize_t set_temp(struct device *dev, struct device_attribute *attr,
 453			const char *buf, size_t count)
 454{
 455	struct vt1211_data *data = dev_get_drvdata(dev);
 456	struct sensor_device_attribute_2 *sensor_attr_2 =
 457						to_sensor_dev_attr_2(attr);
 458	int ix = sensor_attr_2->index;
 459	int fn = sensor_attr_2->nr;
 460	long val;
 461	int err;
 462
 463	err = kstrtol(buf, 10, &val);
 464	if (err)
 465		return err;
 466
 467	mutex_lock(&data->update_lock);
 468	switch (fn) {
 469	case SHOW_SET_TEMP_MAX:
 470		data->temp_max[ix] = TEMP_TO_REG(ix, val);
 471		vt1211_write8(data, regtempmax[ix],
 472			      data->temp_max[ix]);
 473		break;
 474	case SHOW_SET_TEMP_MAX_HYST:
 475		data->temp_hyst[ix] = TEMP_TO_REG(ix, val);
 476		vt1211_write8(data, regtemphyst[ix],
 477			      data->temp_hyst[ix]);
 478		break;
 479	default:
 480		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 481	}
 482	mutex_unlock(&data->update_lock);
 483
 484	return count;
 485}
 486
 487/* ---------------------------------------------------------------------
 488 * Fan sysfs interfaces
 489 * ix = [0-1]
 490 * --------------------------------------------------------------------- */
 491
 492#define SHOW_FAN_INPUT		0
 493#define SHOW_SET_FAN_MIN	1
 494#define SHOW_SET_FAN_DIV	2
 495#define SHOW_FAN_ALARM		3
 496
 497static ssize_t show_fan(struct device *dev, struct device_attribute *attr,
 498			char *buf)
 499{
 500	struct vt1211_data *data = vt1211_update_device(dev);
 501	struct sensor_device_attribute_2 *sensor_attr_2 =
 502						to_sensor_dev_attr_2(attr);
 503	int ix = sensor_attr_2->index;
 504	int fn = sensor_attr_2->nr;
 505	int res;
 506
 507	switch (fn) {
 508	case SHOW_FAN_INPUT:
 509		res = RPM_FROM_REG(data->fan[ix], data->fan_div[ix]);
 510		break;
 511	case SHOW_SET_FAN_MIN:
 512		res = RPM_FROM_REG(data->fan_min[ix], data->fan_div[ix]);
 513		break;
 514	case SHOW_SET_FAN_DIV:
 515		res = DIV_FROM_REG(data->fan_div[ix]);
 516		break;
 517	case SHOW_FAN_ALARM:
 518		res = (data->alarms >> bitalarmfan[ix]) & 1;
 519		break;
 520	default:
 521		res = 0;
 522		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 523	}
 524
 525	return sprintf(buf, "%d\n", res);
 526}
 527
 528static ssize_t set_fan(struct device *dev, struct device_attribute *attr,
 529		       const char *buf, size_t count)
 530{
 531	struct vt1211_data *data = dev_get_drvdata(dev);
 532	struct sensor_device_attribute_2 *sensor_attr_2 =
 533						to_sensor_dev_attr_2(attr);
 534	int ix = sensor_attr_2->index;
 535	int fn = sensor_attr_2->nr;
 
 536	int reg;
 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
 546	/* sync the data cache */
 547	reg = vt1211_read8(data, VT1211_REG_FAN_DIV);
 548	data->fan_div[0] = (reg >> 4) & 3;
 549	data->fan_div[1] = (reg >> 6) & 3;
 550	data->fan_ctl = reg & 0xf;
 551
 552	switch (fn) {
 553	case SHOW_SET_FAN_MIN:
 554		data->fan_min[ix] = RPM_TO_REG(val, data->fan_div[ix]);
 555		vt1211_write8(data, VT1211_REG_FAN_MIN(ix),
 556			      data->fan_min[ix]);
 557		break;
 558	case SHOW_SET_FAN_DIV:
 559		switch (val) {
 560		case 1:
 561			data->fan_div[ix] = 0;
 562			break;
 563		case 2:
 564			data->fan_div[ix] = 1;
 565			break;
 566		case 4:
 567			data->fan_div[ix] = 2;
 568			break;
 569		case 8:
 570			data->fan_div[ix] = 3;
 571			break;
 572		default:
 573			count = -EINVAL;
 574			dev_warn(dev,
 575				 "fan div value %ld not supported. Choose one of 1, 2, 4, or 8.\n",
 576				 val);
 577			goto EXIT;
 578		}
 579		vt1211_write8(data, VT1211_REG_FAN_DIV,
 580			      ((data->fan_div[1] << 6) |
 581			       (data->fan_div[0] << 4) |
 582				data->fan_ctl));
 583		break;
 584	default:
 585		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 586	}
 587
 588EXIT:
 589	mutex_unlock(&data->update_lock);
 590	return count;
 591}
 592
 593/* ---------------------------------------------------------------------
 594 * PWM sysfs interfaces
 595 * ix = [0-1]
 596 * --------------------------------------------------------------------- */
 597
 598#define SHOW_PWM			0
 599#define SHOW_SET_PWM_ENABLE		1
 600#define SHOW_SET_PWM_FREQ		2
 601#define SHOW_SET_PWM_AUTO_CHANNELS_TEMP	3
 602
 603static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
 604			char *buf)
 605{
 606	struct vt1211_data *data = vt1211_update_device(dev);
 607	struct sensor_device_attribute_2 *sensor_attr_2 =
 608						to_sensor_dev_attr_2(attr);
 609	int ix = sensor_attr_2->index;
 610	int fn = sensor_attr_2->nr;
 611	int res;
 612
 613	switch (fn) {
 614	case SHOW_PWM:
 615		res = data->pwm[ix];
 616		break;
 617	case SHOW_SET_PWM_ENABLE:
 618		res = ((data->pwm_ctl[ix] >> 3) & 1) ? 2 : 0;
 619		break;
 620	case SHOW_SET_PWM_FREQ:
 621		res = 90000 >> (data->pwm_clk & 7);
 622		break;
 623	case SHOW_SET_PWM_AUTO_CHANNELS_TEMP:
 624		res = (data->pwm_ctl[ix] & 7) + 1;
 625		break;
 626	default:
 627		res = 0;
 628		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 629	}
 630
 631	return sprintf(buf, "%d\n", res);
 632}
 633
 634static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
 635		       const char *buf, size_t count)
 636{
 637	struct vt1211_data *data = dev_get_drvdata(dev);
 638	struct sensor_device_attribute_2 *sensor_attr_2 =
 639						to_sensor_dev_attr_2(attr);
 640	int ix = sensor_attr_2->index;
 641	int fn = sensor_attr_2->nr;
 
 642	int tmp, reg;
 643	unsigned long val;
 644	int err;
 645
 646	err = kstrtoul(buf, 10, &val);
 647	if (err)
 648		return err;
 649
 650	mutex_lock(&data->update_lock);
 651
 652	switch (fn) {
 653	case SHOW_SET_PWM_ENABLE:
 654		/* sync the data cache */
 655		reg = vt1211_read8(data, VT1211_REG_FAN_DIV);
 656		data->fan_div[0] = (reg >> 4) & 3;
 657		data->fan_div[1] = (reg >> 6) & 3;
 658		data->fan_ctl = reg & 0xf;
 659		reg = vt1211_read8(data, VT1211_REG_PWM_CTL);
 660		data->pwm_ctl[0] = reg & 0xf;
 661		data->pwm_ctl[1] = (reg >> 4) & 0xf;
 662		switch (val) {
 663		case 0:
 664			data->pwm_ctl[ix] &= 7;
 665			/*
 666			 * disable SmartGuardian if both PWM outputs are
 667			 * disabled
 668			 */
 669			if ((data->pwm_ctl[ix ^ 1] & 1) == 0)
 670				data->fan_ctl &= 0xe;
 
 671			break;
 672		case 2:
 673			data->pwm_ctl[ix] |= 8;
 674			data->fan_ctl |= 1;
 675			break;
 676		default:
 677			count = -EINVAL;
 678			dev_warn(dev,
 679				 "pwm mode %ld not supported. Choose one of 0 or 2.\n",
 680				 val);
 681			goto EXIT;
 682		}
 683		vt1211_write8(data, VT1211_REG_PWM_CTL,
 684			      ((data->pwm_ctl[1] << 4) |
 685				data->pwm_ctl[0]));
 686		vt1211_write8(data, VT1211_REG_FAN_DIV,
 687			      ((data->fan_div[1] << 6) |
 688			       (data->fan_div[0] << 4) |
 689				data->fan_ctl));
 690		break;
 691	case SHOW_SET_PWM_FREQ:
 692		val = 135000 / clamp_val(val, 135000 >> 7, 135000);
 693		/* calculate tmp = log2(val) */
 694		tmp = 0;
 695		for (val >>= 1; val > 0; val >>= 1)
 696			tmp++;
 
 697		/* sync the data cache */
 698		reg = vt1211_read8(data, VT1211_REG_PWM_CLK);
 699		data->pwm_clk = (reg & 0xf8) | tmp;
 700		vt1211_write8(data, VT1211_REG_PWM_CLK, data->pwm_clk);
 701		break;
 702	case SHOW_SET_PWM_AUTO_CHANNELS_TEMP:
 703		if (val < 1 || val > 7) {
 704			count = -EINVAL;
 705			dev_warn(dev,
 706				 "temp channel %ld not supported. Choose a value between 1 and 7.\n",
 707				 val);
 708			goto EXIT;
 709		}
 710		if (!ISTEMP(val - 1, data->uch_config)) {
 711			count = -EINVAL;
 712			dev_warn(dev, "temp channel %ld is not available.\n",
 713				 val);
 714			goto EXIT;
 715		}
 716		/* sync the data cache */
 717		reg = vt1211_read8(data, VT1211_REG_PWM_CTL);
 718		data->pwm_ctl[0] = reg & 0xf;
 719		data->pwm_ctl[1] = (reg >> 4) & 0xf;
 720		data->pwm_ctl[ix] = (data->pwm_ctl[ix] & 8) | (val - 1);
 721		vt1211_write8(data, VT1211_REG_PWM_CTL,
 722			      ((data->pwm_ctl[1] << 4) | data->pwm_ctl[0]));
 723		break;
 724	default:
 725		dev_dbg(dev, "Unknown attr fetch (%d)\n", fn);
 726	}
 727
 728EXIT:
 729	mutex_unlock(&data->update_lock);
 730	return count;
 731}
 732
 733/* ---------------------------------------------------------------------
 734 * PWM auto point definitions
 735 * ix = [0-1]
 736 * ap = [0-3]
 737 * --------------------------------------------------------------------- */
 738
 739/*
 740 * pwm[ix+1]_auto_point[ap+1]_temp mapping table:
 741 * Note that there is only a single set of temp auto points that controls both
 742 * PWM controllers. We still create 2 sets of sysfs files to make it look
 743 * more consistent even though they map to the same registers.
 744 *
 745 * ix ap : description
 746 * -------------------
 747 * 0  0  : pwm1/2 off temperature        (pwm_auto_temp[0])
 748 * 0  1  : pwm1/2 low speed temperature  (pwm_auto_temp[1])
 749 * 0  2  : pwm1/2 high speed temperature (pwm_auto_temp[2])
 750 * 0  3  : pwm1/2 full speed temperature (pwm_auto_temp[3])
 751 * 1  0  : pwm1/2 off temperature        (pwm_auto_temp[0])
 752 * 1  1  : pwm1/2 low speed temperature  (pwm_auto_temp[1])
 753 * 1  2  : pwm1/2 high speed temperature (pwm_auto_temp[2])
 754 * 1  3  : pwm1/2 full speed temperature (pwm_auto_temp[3])
 755 */
 756
 757static ssize_t show_pwm_auto_point_temp(struct device *dev,
 758					struct device_attribute *attr,
 759					char *buf)
 760{
 761	struct vt1211_data *data = vt1211_update_device(dev);
 762	struct sensor_device_attribute_2 *sensor_attr_2 =
 763						to_sensor_dev_attr_2(attr);
 764	int ix = sensor_attr_2->index;
 765	int ap = sensor_attr_2->nr;
 766
 767	return sprintf(buf, "%d\n", TEMP_FROM_REG(data->pwm_ctl[ix] & 7,
 768		       data->pwm_auto_temp[ap]));
 769}
 770
 771static ssize_t set_pwm_auto_point_temp(struct device *dev,
 772				       struct device_attribute *attr,
 773				       const char *buf, size_t count)
 774{
 775	struct vt1211_data *data = dev_get_drvdata(dev);
 776	struct sensor_device_attribute_2 *sensor_attr_2 =
 777						to_sensor_dev_attr_2(attr);
 778	int ix = sensor_attr_2->index;
 779	int ap = sensor_attr_2->nr;
 
 780	int reg;
 781	long val;
 782	int err;
 783
 784	err = kstrtol(buf, 10, &val);
 785	if (err)
 786		return err;
 787
 788
 789	mutex_lock(&data->update_lock);
 790
 791	/* sync the data cache */
 792	reg = vt1211_read8(data, VT1211_REG_PWM_CTL);
 793	data->pwm_ctl[0] = reg & 0xf;
 794	data->pwm_ctl[1] = (reg >> 4) & 0xf;
 795
 796	data->pwm_auto_temp[ap] = TEMP_TO_REG(data->pwm_ctl[ix] & 7, val);
 797	vt1211_write8(data, VT1211_REG_PWM_AUTO_TEMP(ap),
 798		      data->pwm_auto_temp[ap]);
 799	mutex_unlock(&data->update_lock);
 800
 801	return count;
 802}
 803
 804/*
 805 * pwm[ix+1]_auto_point[ap+1]_pwm mapping table:
 806 * Note that the PWM auto points 0 & 3 are hard-wired in the VT1211 and can't
 807 * be changed.
 808 *
 809 * ix ap : description
 810 * -------------------
 811 * 0  0  : pwm1 off                   (pwm_auto_pwm[0][0], hard-wired to 0)
 812 * 0  1  : pwm1 low speed duty cycle  (pwm_auto_pwm[0][1])
 813 * 0  2  : pwm1 high speed duty cycle (pwm_auto_pwm[0][2])
 814 * 0  3  : pwm1 full speed            (pwm_auto_pwm[0][3], hard-wired to 255)
 815 * 1  0  : pwm2 off                   (pwm_auto_pwm[1][0], hard-wired to 0)
 816 * 1  1  : pwm2 low speed duty cycle  (pwm_auto_pwm[1][1])
 817 * 1  2  : pwm2 high speed duty cycle (pwm_auto_pwm[1][2])
 818 * 1  3  : pwm2 full speed            (pwm_auto_pwm[1][3], hard-wired to 255)
 819 */
 820
 821static ssize_t show_pwm_auto_point_pwm(struct device *dev,
 822				       struct device_attribute *attr,
 823				       char *buf)
 824{
 825	struct vt1211_data *data = vt1211_update_device(dev);
 826	struct sensor_device_attribute_2 *sensor_attr_2 =
 827						to_sensor_dev_attr_2(attr);
 828	int ix = sensor_attr_2->index;
 829	int ap = sensor_attr_2->nr;
 830
 831	return sprintf(buf, "%d\n", data->pwm_auto_pwm[ix][ap]);
 832}
 833
 834static ssize_t set_pwm_auto_point_pwm(struct device *dev,
 835				      struct device_attribute *attr,
 836				      const char *buf, size_t count)
 837{
 838	struct vt1211_data *data = dev_get_drvdata(dev);
 839	struct sensor_device_attribute_2 *sensor_attr_2 =
 840						to_sensor_dev_attr_2(attr);
 841	int ix = sensor_attr_2->index;
 842	int ap = sensor_attr_2->nr;
 843	unsigned long val;
 844	int err;
 845
 846	err = kstrtoul(buf, 10, &val);
 847	if (err)
 848		return err;
 
 
 849
 850	mutex_lock(&data->update_lock);
 851	data->pwm_auto_pwm[ix][ap] = clamp_val(val, 0, 255);
 852	vt1211_write8(data, VT1211_REG_PWM_AUTO_PWM(ix, ap),
 853		      data->pwm_auto_pwm[ix][ap]);
 854	mutex_unlock(&data->update_lock);
 855
 856	return count;
 857}
 858
 859/* ---------------------------------------------------------------------
 860 * Miscellaneous sysfs interfaces (VRM, VID, name, and (legacy) alarms)
 861 * --------------------------------------------------------------------- */
 862
 863static ssize_t show_vrm(struct device *dev, struct device_attribute *attr,
 864			char *buf)
 865{
 866	struct vt1211_data *data = dev_get_drvdata(dev);
 867
 868	return sprintf(buf, "%d\n", data->vrm);
 869}
 870
 871static ssize_t set_vrm(struct device *dev, struct device_attribute *attr,
 872		       const char *buf, size_t count)
 873{
 874	struct vt1211_data *data = dev_get_drvdata(dev);
 875	unsigned long val;
 876	int err;
 877
 878	err = kstrtoul(buf, 10, &val);
 879	if (err)
 880		return err;
 881
 882	if (val > 255)
 883		return -EINVAL;
 884
 885	data->vrm = val;
 886
 887	return count;
 888}
 889
 890static ssize_t show_vid(struct device *dev, struct device_attribute *attr,
 891			char *buf)
 892{
 893	struct vt1211_data *data = dev_get_drvdata(dev);
 894
 895	return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
 896}
 897
 898static ssize_t show_name(struct device *dev,
 899			 struct device_attribute *attr, char *buf)
 900{
 901	struct vt1211_data *data = dev_get_drvdata(dev);
 902
 903	return sprintf(buf, "%s\n", data->name);
 904}
 905
 906static ssize_t show_alarms(struct device *dev,
 907			   struct device_attribute *attr, char *buf)
 908{
 909	struct vt1211_data *data = vt1211_update_device(dev);
 910
 911	return sprintf(buf, "%d\n", data->alarms);
 912}
 913
 914/* ---------------------------------------------------------------------
 915 * Device attribute structs
 916 * --------------------------------------------------------------------- */
 917
 918#define SENSOR_ATTR_IN(ix) \
 919{	SENSOR_ATTR_2(in##ix##_input, S_IRUGO, \
 920		show_in, NULL, SHOW_IN_INPUT, ix), \
 
 
 
 
 
 
 
 
 
 
 
 921	SENSOR_ATTR_2(in##ix##_min, S_IRUGO | S_IWUSR, \
 922		show_in, set_in, SHOW_SET_IN_MIN, ix), \
 
 
 
 
 
 
 
 
 
 
 
 923	SENSOR_ATTR_2(in##ix##_max, S_IRUGO | S_IWUSR, \
 924		show_in, set_in, SHOW_SET_IN_MAX, ix), \
 925	SENSOR_ATTR_2(in##ix##_alarm, S_IRUGO, \
 926		show_in, NULL, SHOW_IN_ALARM, ix) \
 927}
 928
 929static struct sensor_device_attribute_2 vt1211_sysfs_in[][4] = {
 930	SENSOR_ATTR_IN(0),
 931	SENSOR_ATTR_IN(1),
 932	SENSOR_ATTR_IN(2),
 933	SENSOR_ATTR_IN(3),
 934	SENSOR_ATTR_IN(4),
 935	SENSOR_ATTR_IN(5)
 936};
 937
 938#define IN_UNIT_ATTRS(X)			\
 939{	&vt1211_sysfs_in[X][0].dev_attr.attr,	\
 940	&vt1211_sysfs_in[X][1].dev_attr.attr,	\
 941	&vt1211_sysfs_in[X][2].dev_attr.attr,	\
 942	&vt1211_sysfs_in[X][3].dev_attr.attr,	\
 943	NULL					\
 944}
 945
 946static struct attribute *vt1211_in_attr[][5] = {
 947	IN_UNIT_ATTRS(0),
 948	IN_UNIT_ATTRS(1),
 949	IN_UNIT_ATTRS(2),
 950	IN_UNIT_ATTRS(3),
 951	IN_UNIT_ATTRS(4),
 952	IN_UNIT_ATTRS(5)
 953};
 954
 955static const struct attribute_group vt1211_in_attr_group[] = {
 956	{ .attrs = vt1211_in_attr[0] },
 957	{ .attrs = vt1211_in_attr[1] },
 958	{ .attrs = vt1211_in_attr[2] },
 959	{ .attrs = vt1211_in_attr[3] },
 960	{ .attrs = vt1211_in_attr[4] },
 961	{ .attrs = vt1211_in_attr[5] }
 
 
 
 
 
 962};
 963
 964#define SENSOR_ATTR_TEMP(ix) \
 965{	SENSOR_ATTR_2(temp##ix##_input, S_IRUGO, \
 966		show_temp, NULL, SHOW_TEMP_INPUT, ix-1), \
 967	SENSOR_ATTR_2(temp##ix##_max, S_IRUGO | S_IWUSR, \
 968		show_temp, set_temp, SHOW_SET_TEMP_MAX, ix-1), \
 
 
 
 
 
 
 
 
 
 
 
 
 969	SENSOR_ATTR_2(temp##ix##_max_hyst, S_IRUGO | S_IWUSR, \
 970		show_temp, set_temp, SHOW_SET_TEMP_MAX_HYST, ix-1), \
 971	SENSOR_ATTR_2(temp##ix##_alarm, S_IRUGO, \
 972		show_temp, NULL, SHOW_TEMP_ALARM, ix-1) \
 973}
 974
 975static struct sensor_device_attribute_2 vt1211_sysfs_temp[][4] = {
 976	SENSOR_ATTR_TEMP(1),
 977	SENSOR_ATTR_TEMP(2),
 978	SENSOR_ATTR_TEMP(3),
 979	SENSOR_ATTR_TEMP(4),
 980	SENSOR_ATTR_TEMP(5),
 981	SENSOR_ATTR_TEMP(6),
 982	SENSOR_ATTR_TEMP(7),
 983};
 984
 985#define TEMP_UNIT_ATTRS(X)			\
 986{	&vt1211_sysfs_temp[X][0].dev_attr.attr,	\
 987	&vt1211_sysfs_temp[X][1].dev_attr.attr,	\
 988	&vt1211_sysfs_temp[X][2].dev_attr.attr,	\
 989	&vt1211_sysfs_temp[X][3].dev_attr.attr,	\
 990	NULL					\
 991}
 992
 993static struct attribute *vt1211_temp_attr[][5] = {
 994	TEMP_UNIT_ATTRS(0),
 995	TEMP_UNIT_ATTRS(1),
 996	TEMP_UNIT_ATTRS(2),
 997	TEMP_UNIT_ATTRS(3),
 998	TEMP_UNIT_ATTRS(4),
 999	TEMP_UNIT_ATTRS(5),
1000	TEMP_UNIT_ATTRS(6)
1001};
1002
1003static const struct attribute_group vt1211_temp_attr_group[] = {
1004	{ .attrs = vt1211_temp_attr[0] },
1005	{ .attrs = vt1211_temp_attr[1] },
1006	{ .attrs = vt1211_temp_attr[2] },
1007	{ .attrs = vt1211_temp_attr[3] },
1008	{ .attrs = vt1211_temp_attr[4] },
1009	{ .attrs = vt1211_temp_attr[5] },
1010	{ .attrs = vt1211_temp_attr[6] }
1011};
1012
1013#define SENSOR_ATTR_FAN(ix) \
1014	SENSOR_ATTR_2(fan##ix##_input, S_IRUGO, \
1015		show_fan, NULL, SHOW_FAN_INPUT, ix-1), \
1016	SENSOR_ATTR_2(fan##ix##_min, S_IRUGO | S_IWUSR, \
1017		show_fan, set_fan, SHOW_SET_FAN_MIN, ix-1), \
1018	SENSOR_ATTR_2(fan##ix##_div, S_IRUGO | S_IWUSR, \
1019		show_fan, set_fan, SHOW_SET_FAN_DIV, ix-1), \
1020	SENSOR_ATTR_2(fan##ix##_alarm, S_IRUGO, \
1021		show_fan, NULL, SHOW_FAN_ALARM, ix-1)
1022
1023#define SENSOR_ATTR_PWM(ix) \
1024	SENSOR_ATTR_2(pwm##ix, S_IRUGO, \
1025		show_pwm, NULL, SHOW_PWM, ix-1), \
1026	SENSOR_ATTR_2(pwm##ix##_enable, S_IRUGO | S_IWUSR, \
1027		show_pwm, set_pwm, SHOW_SET_PWM_ENABLE, ix-1), \
1028	SENSOR_ATTR_2(pwm##ix##_auto_channels_temp, S_IRUGO | S_IWUSR, \
1029		show_pwm, set_pwm, SHOW_SET_PWM_AUTO_CHANNELS_TEMP, ix-1)
1030
1031#define SENSOR_ATTR_PWM_FREQ(ix) \
1032	SENSOR_ATTR_2(pwm##ix##_freq, S_IRUGO | S_IWUSR, \
1033		show_pwm, set_pwm, SHOW_SET_PWM_FREQ, ix-1)
1034
1035#define SENSOR_ATTR_PWM_FREQ_RO(ix) \
1036	SENSOR_ATTR_2(pwm##ix##_freq, S_IRUGO, \
1037		show_pwm, NULL, SHOW_SET_PWM_FREQ, ix-1)
1038
1039#define SENSOR_ATTR_PWM_AUTO_POINT_TEMP(ix, ap) \
1040	SENSOR_ATTR_2(pwm##ix##_auto_point##ap##_temp, S_IRUGO | S_IWUSR, \
1041		show_pwm_auto_point_temp, set_pwm_auto_point_temp, \
1042		ap-1, ix-1)
1043
1044#define SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(ix, ap) \
1045	SENSOR_ATTR_2(pwm##ix##_auto_point##ap##_temp, S_IRUGO, \
1046		show_pwm_auto_point_temp, NULL, \
1047		ap-1, ix-1)
1048
1049#define SENSOR_ATTR_PWM_AUTO_POINT_PWM(ix, ap) \
1050	SENSOR_ATTR_2(pwm##ix##_auto_point##ap##_pwm, S_IRUGO | S_IWUSR, \
1051		show_pwm_auto_point_pwm, set_pwm_auto_point_pwm, \
1052		ap-1, ix-1)
1053
1054#define SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(ix, ap) \
1055	SENSOR_ATTR_2(pwm##ix##_auto_point##ap##_pwm, S_IRUGO, \
1056		show_pwm_auto_point_pwm, NULL, \
1057		ap-1, ix-1)
1058
1059static struct sensor_device_attribute_2 vt1211_sysfs_fan_pwm[] = {
1060	SENSOR_ATTR_FAN(1),
1061	SENSOR_ATTR_FAN(2),
1062	SENSOR_ATTR_PWM(1),
1063	SENSOR_ATTR_PWM(2),
1064	SENSOR_ATTR_PWM_FREQ(1),
1065	SENSOR_ATTR_PWM_FREQ_RO(2),
1066	SENSOR_ATTR_PWM_AUTO_POINT_TEMP(1, 1),
1067	SENSOR_ATTR_PWM_AUTO_POINT_TEMP(1, 2),
1068	SENSOR_ATTR_PWM_AUTO_POINT_TEMP(1, 3),
1069	SENSOR_ATTR_PWM_AUTO_POINT_TEMP(1, 4),
1070	SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(2, 1),
1071	SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(2, 2),
1072	SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(2, 3),
1073	SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(2, 4),
1074	SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(1, 1),
1075	SENSOR_ATTR_PWM_AUTO_POINT_PWM(1, 2),
1076	SENSOR_ATTR_PWM_AUTO_POINT_PWM(1, 3),
1077	SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(1, 4),
1078	SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(2, 1),
1079	SENSOR_ATTR_PWM_AUTO_POINT_PWM(2, 2),
1080	SENSOR_ATTR_PWM_AUTO_POINT_PWM(2, 3),
1081	SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(2, 4),
1082};
1083
1084static struct device_attribute vt1211_sysfs_misc[] = {
1085	__ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm, set_vrm),
1086	__ATTR(cpu0_vid, S_IRUGO, show_vid, NULL),
1087	__ATTR(name, S_IRUGO, show_name, NULL),
1088	__ATTR(alarms, S_IRUGO, show_alarms, NULL),
1089};
1090
1091/* ---------------------------------------------------------------------
1092 * Device registration and initialization
1093 * --------------------------------------------------------------------- */
1094
1095static void vt1211_init_device(struct vt1211_data *data)
1096{
1097	/* set VRM */
1098	data->vrm = vid_which_vrm();
1099
1100	/* Read (and initialize) UCH config */
1101	data->uch_config = vt1211_read8(data, VT1211_REG_UCH_CONFIG);
1102	if (uch_config > -1) {
1103		data->uch_config = (data->uch_config & 0x83) |
1104				   (uch_config << 2);
1105		vt1211_write8(data, VT1211_REG_UCH_CONFIG, data->uch_config);
1106	}
1107
1108	/*
1109	 * Initialize the interrupt mode (if request at module load time).
1110	 * The VT1211 implements 3 different modes for clearing interrupts:
1111	 * 0: Clear INT when status register is read. Regenerate INT as long
1112	 *    as temp stays above hysteresis limit.
1113	 * 1: Clear INT when status register is read. DON'T regenerate INT
1114	 *    until temp falls below hysteresis limit and exceeds hot limit
1115	 *    again.
1116	 * 2: Clear INT when temp falls below max limit.
1117	 *
1118	 * The driver only allows to force mode 0 since that's the only one
1119	 * that makes sense for 'sensors'
1120	 */
1121	if (int_mode == 0) {
1122		vt1211_write8(data, VT1211_REG_TEMP1_CONFIG, 0);
1123		vt1211_write8(data, VT1211_REG_TEMP2_CONFIG, 0);
1124	}
1125
1126	/* Fill in some hard wired values into our data struct */
1127	data->pwm_auto_pwm[0][3] = 255;
1128	data->pwm_auto_pwm[1][3] = 255;
1129}
1130
1131static void vt1211_remove_sysfs(struct platform_device *pdev)
1132{
1133	struct device *dev = &pdev->dev;
1134	int i;
1135
1136	for (i = 0; i < ARRAY_SIZE(vt1211_in_attr_group); i++)
1137		sysfs_remove_group(&dev->kobj, &vt1211_in_attr_group[i]);
1138
1139	for (i = 0; i < ARRAY_SIZE(vt1211_temp_attr_group); i++)
1140		sysfs_remove_group(&dev->kobj, &vt1211_temp_attr_group[i]);
1141
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1142	for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_fan_pwm); i++) {
1143		device_remove_file(dev,
1144			&vt1211_sysfs_fan_pwm[i].dev_attr);
1145	}
1146	for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_misc); i++)
1147		device_remove_file(dev, &vt1211_sysfs_misc[i]);
 
1148}
1149
1150static int vt1211_probe(struct platform_device *pdev)
1151{
1152	struct device *dev = &pdev->dev;
1153	struct vt1211_data *data;
1154	struct resource *res;
1155	int i, err;
1156
1157	data = devm_kzalloc(dev, sizeof(struct vt1211_data), GFP_KERNEL);
1158	if (!data)
1159		return -ENOMEM;
 
 
1160
1161	res = platform_get_resource(pdev, IORESOURCE_IO, 0);
1162	if (!devm_request_region(dev, res->start, resource_size(res),
1163				 DRVNAME)) {
1164		dev_err(dev, "Failed to request region 0x%lx-0x%lx\n",
1165			(unsigned long)res->start, (unsigned long)res->end);
1166		return -EBUSY;
1167	}
1168	data->addr = res->start;
1169	data->name = DRVNAME;
1170	mutex_init(&data->update_lock);
1171
1172	platform_set_drvdata(pdev, data);
1173
1174	/* Initialize the VT1211 chip */
1175	vt1211_init_device(data);
1176
1177	/* Create sysfs interface files */
1178	for (i = 0; i < ARRAY_SIZE(vt1211_in_attr_group); i++) {
1179		if (ISVOLT(i, data->uch_config)) {
1180			err = sysfs_create_group(&dev->kobj,
1181						 &vt1211_in_attr_group[i]);
1182			if (err)
 
 
 
 
 
1183				goto EXIT_DEV_REMOVE;
 
1184		}
1185	}
1186	for (i = 0; i < ARRAY_SIZE(vt1211_temp_attr_group); i++) {
1187		if (ISTEMP(i, data->uch_config)) {
1188			err = sysfs_create_group(&dev->kobj,
1189						 &vt1211_temp_attr_group[i]);
1190			if (err)
 
 
 
 
 
1191				goto EXIT_DEV_REMOVE;
 
1192		}
1193	}
1194	for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_fan_pwm); i++) {
1195		err = device_create_file(dev,
1196			&vt1211_sysfs_fan_pwm[i].dev_attr);
1197		if (err)
1198			goto EXIT_DEV_REMOVE;
 
1199	}
1200	for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_misc); i++) {
1201		err = device_create_file(dev,
1202		       &vt1211_sysfs_misc[i]);
1203		if (err)
1204			goto EXIT_DEV_REMOVE;
 
1205	}
1206
1207	/* Register device */
1208	data->hwmon_dev = hwmon_device_register(dev);
1209	if (IS_ERR(data->hwmon_dev)) {
1210		err = PTR_ERR(data->hwmon_dev);
1211		dev_err(dev, "Class registration failed (%d)\n", err);
1212		goto EXIT_DEV_REMOVE_SILENT;
1213	}
1214
1215	return 0;
1216
1217EXIT_DEV_REMOVE:
1218	dev_err(dev, "Sysfs interface creation failed (%d)\n", err);
1219EXIT_DEV_REMOVE_SILENT:
1220	vt1211_remove_sysfs(pdev);
 
 
 
 
 
1221	return err;
1222}
1223
1224static int vt1211_remove(struct platform_device *pdev)
1225{
1226	struct vt1211_data *data = platform_get_drvdata(pdev);
 
1227
1228	hwmon_device_unregister(data->hwmon_dev);
1229	vt1211_remove_sysfs(pdev);
 
 
 
 
 
1230
1231	return 0;
1232}
1233
1234static struct platform_driver vt1211_driver = {
1235	.driver = {
 
1236		.name  = DRVNAME,
1237	},
1238	.probe  = vt1211_probe,
1239	.remove = vt1211_remove,
1240};
1241
1242static int __init vt1211_device_add(unsigned short address)
1243{
1244	struct resource res = {
1245		.start	= address,
1246		.end	= address + 0x7f,
1247		.flags	= IORESOURCE_IO,
1248	};
1249	int err;
1250
1251	pdev = platform_device_alloc(DRVNAME, address);
1252	if (!pdev) {
1253		err = -ENOMEM;
1254		pr_err("Device allocation failed (%d)\n", err);
1255		goto EXIT;
1256	}
1257
1258	res.name = pdev->name;
1259	err = acpi_check_resource_conflict(&res);
1260	if (err)
1261		goto EXIT_DEV_PUT;
1262
1263	err = platform_device_add_resources(pdev, &res, 1);
1264	if (err) {
1265		pr_err("Device resource addition failed (%d)\n", err);
1266		goto EXIT_DEV_PUT;
1267	}
1268
1269	err = platform_device_add(pdev);
1270	if (err) {
1271		pr_err("Device addition failed (%d)\n", err);
1272		goto EXIT_DEV_PUT;
1273	}
1274
1275	return 0;
1276
1277EXIT_DEV_PUT:
1278	platform_device_put(pdev);
1279EXIT:
1280	return err;
1281}
1282
1283static int __init vt1211_find(int sio_cip, unsigned short *address)
1284{
1285	int err = -ENODEV;
1286	int devid;
1287
1288	superio_enter(sio_cip);
1289
1290	devid = force_id ? force_id : superio_inb(sio_cip, SIO_VT1211_DEVID);
1291	if (devid != SIO_VT1211_ID)
1292		goto EXIT;
 
1293
1294	superio_select(sio_cip, SIO_VT1211_LDN_HWMON);
1295
1296	if ((superio_inb(sio_cip, SIO_VT1211_ACTIVE) & 1) == 0) {
1297		pr_warn("HW monitor is disabled, skipping\n");
1298		goto EXIT;
1299	}
1300
1301	*address = ((superio_inb(sio_cip, SIO_VT1211_BADDR) << 8) |
1302		    (superio_inb(sio_cip, SIO_VT1211_BADDR + 1))) & 0xff00;
1303	if (*address == 0) {
1304		pr_warn("Base address is not set, skipping\n");
1305		goto EXIT;
1306	}
1307
1308	err = 0;
1309	pr_info("Found VT1211 chip at 0x%04x, revision %u\n",
1310		*address, superio_inb(sio_cip, SIO_VT1211_DEVREV));
1311
1312EXIT:
1313	superio_exit(sio_cip);
1314	return err;
1315}
1316
1317static int __init vt1211_init(void)
1318{
1319	int err;
1320	unsigned short address = 0;
1321
1322	err = vt1211_find(SIO_REG_CIP1, &address);
1323	if (err) {
1324		err = vt1211_find(SIO_REG_CIP2, &address);
1325		if (err)
1326			goto EXIT;
1327	}
1328
1329	if ((uch_config < -1) || (uch_config > 31)) {
1330		err = -EINVAL;
1331		pr_warn("Invalid UCH configuration %d. Choose a value between 0 and 31.\n",
1332			uch_config);
1333		goto EXIT;
1334	}
1335
1336	if ((int_mode < -1) || (int_mode > 0)) {
1337		err = -EINVAL;
1338		pr_warn("Invalid interrupt mode %d. Only mode 0 is supported.\n",
1339			int_mode);
1340		goto EXIT;
1341	}
1342
1343	err = platform_driver_register(&vt1211_driver);
1344	if (err)
1345		goto EXIT;
 
1346
1347	/* Sets global pdev as a side effect */
1348	err = vt1211_device_add(address);
1349	if (err)
1350		goto EXIT_DRV_UNREGISTER;
 
1351
1352	return 0;
1353
1354EXIT_DRV_UNREGISTER:
1355	platform_driver_unregister(&vt1211_driver);
1356EXIT:
1357	return err;
1358}
1359
1360static void __exit vt1211_exit(void)
1361{
1362	platform_device_unregister(pdev);
1363	platform_driver_unregister(&vt1211_driver);
1364}
1365
1366MODULE_AUTHOR("Juerg Haefliger <juergh@gmail.com>");
1367MODULE_DESCRIPTION("VT1211 sensors");
1368MODULE_LICENSE("GPL");
1369
1370module_init(vt1211_init);
1371module_exit(vt1211_exit);