Linux Audio

Check our new training course

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