Linux Audio

Check our new training course

Loading...
v3.1
 
   1/*
   2    lm93.c - Part of lm_sensors, Linux kernel modules for hardware monitoring
   3
   4    Author/Maintainer: Mark M. Hoffman <mhoffman@lightlink.com>
   5	Copyright (c) 2004 Utilitek Systems, Inc.
   6
   7    derived in part from lm78.c:
   8	Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>
   9
  10    derived in part from lm85.c:
  11	Copyright (c) 2002, 2003 Philip Pokorny <ppokorny@penguincomputing.com>
  12	Copyright (c) 2003       Margit Schubert-While <margitsw@t-online.de>
  13
  14    derived in part from w83l785ts.c:
  15	Copyright (c) 2003-2004 Jean Delvare <khali@linux-fr.org>
  16
  17    Ported to Linux 2.6 by Eric J. Bowersox <ericb@aspsys.com>
  18	Copyright (c) 2005 Aspen Systems, Inc.
  19
  20    Adapted to 2.6.20 by Carsten Emde <cbe@osadl.org>
  21        Copyright (c) 2006 Carsten Emde, Open Source Automation Development Lab
  22
  23    Modified for mainline integration by Hans J. Koch <hjk@hansjkoch.de>
  24        Copyright (c) 2007 Hans J. Koch, Linutronix GmbH
  25
  26    This program is free software; you can redistribute it and/or modify
  27    it under the terms of the GNU General Public License as published by
  28    the Free Software Foundation; either version 2 of the License, or
  29    (at your option) any later version.
  30
  31    This program is distributed in the hope that it will be useful,
  32    but WITHOUT ANY WARRANTY; without even the implied warranty of
  33    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  34    GNU General Public License for more details.
  35
  36    You should have received a copy of the GNU General Public License
  37    along with this program; if not, write to the Free Software
  38    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  39*/
  40
  41#include <linux/module.h>
  42#include <linux/init.h>
  43#include <linux/slab.h>
  44#include <linux/i2c.h>
  45#include <linux/hwmon.h>
  46#include <linux/hwmon-sysfs.h>
  47#include <linux/hwmon-vid.h>
  48#include <linux/err.h>
  49#include <linux/delay.h>
 
  50
  51/* LM93 REGISTER ADDRESSES */
  52
  53/* miscellaneous */
  54#define LM93_REG_MFR_ID			0x3e
  55#define LM93_REG_VER			0x3f
  56#define LM93_REG_STATUS_CONTROL		0xe2
  57#define LM93_REG_CONFIG			0xe3
  58#define LM93_REG_SLEEP_CONTROL		0xe4
  59
  60/* alarm values start here */
  61#define LM93_REG_HOST_ERROR_1		0x48
  62
  63/* voltage inputs: in1-in16 (nr => 0-15) */
  64#define LM93_REG_IN(nr)			(0x56 + (nr))
  65#define LM93_REG_IN_MIN(nr)		(0x90 + (nr) * 2)
  66#define LM93_REG_IN_MAX(nr)		(0x91 + (nr) * 2)
  67
  68/* temperature inputs: temp1-temp4 (nr => 0-3) */
  69#define LM93_REG_TEMP(nr)		(0x50 + (nr))
  70#define LM93_REG_TEMP_MIN(nr)		(0x78 + (nr) * 2)
  71#define LM93_REG_TEMP_MAX(nr)		(0x79 + (nr) * 2)
  72
  73/* temp[1-4]_auto_boost (nr => 0-3) */
  74#define LM93_REG_BOOST(nr)		(0x80 + (nr))
  75
  76/* #PROCHOT inputs: prochot1-prochot2 (nr => 0-1) */
  77#define LM93_REG_PROCHOT_CUR(nr)	(0x67 + (nr) * 2)
  78#define LM93_REG_PROCHOT_AVG(nr)	(0x68 + (nr) * 2)
  79#define LM93_REG_PROCHOT_MAX(nr)	(0xb0 + (nr))
  80
  81/* fan tach inputs: fan1-fan4 (nr => 0-3) */
  82#define LM93_REG_FAN(nr)		(0x6e + (nr) * 2)
  83#define LM93_REG_FAN_MIN(nr)		(0xb4 + (nr) * 2)
  84
  85/* pwm outputs: pwm1-pwm2 (nr => 0-1, reg => 0-3) */
  86#define LM93_REG_PWM_CTL(nr,reg)	(0xc8 + (reg) + (nr) * 4)
  87#define LM93_PWM_CTL1	0x0
  88#define LM93_PWM_CTL2	0x1
  89#define LM93_PWM_CTL3	0x2
  90#define LM93_PWM_CTL4	0x3
  91
  92/* GPIO input state */
  93#define LM93_REG_GPI			0x6b
  94
  95/* vid inputs: vid1-vid2 (nr => 0-1) */
  96#define LM93_REG_VID(nr)		(0x6c + (nr))
  97
  98/* vccp1 & vccp2: VID relative inputs (nr => 0-1) */
  99#define LM93_REG_VCCP_LIMIT_OFF(nr)	(0xb2 + (nr))
 100
 101/* temp[1-4]_auto_boost_hyst */
 102#define LM93_REG_BOOST_HYST_12		0xc0
 103#define LM93_REG_BOOST_HYST_34		0xc1
 104#define LM93_REG_BOOST_HYST(nr)		(0xc0 + (nr)/2)
 105
 106/* temp[1-4]_auto_pwm_[min|hyst] */
 107#define LM93_REG_PWM_MIN_HYST_12	0xc3
 108#define LM93_REG_PWM_MIN_HYST_34	0xc4
 109#define LM93_REG_PWM_MIN_HYST(nr)	(0xc3 + (nr)/2)
 110
 111/* prochot_override & prochot_interval */
 112#define LM93_REG_PROCHOT_OVERRIDE	0xc6
 113#define LM93_REG_PROCHOT_INTERVAL	0xc7
 114
 115/* temp[1-4]_auto_base (nr => 0-3) */
 116#define LM93_REG_TEMP_BASE(nr)		(0xd0 + (nr))
 117
 118/* temp[1-4]_auto_offsets (step => 0-11) */
 119#define LM93_REG_TEMP_OFFSET(step)	(0xd4 + (step))
 120
 121/* #PROCHOT & #VRDHOT PWM ramp control */
 122#define LM93_REG_PWM_RAMP_CTL		0xbf
 123
 124/* miscellaneous */
 125#define LM93_REG_SFC1		0xbc
 126#define LM93_REG_SFC2		0xbd
 127#define LM93_REG_GPI_VID_CTL	0xbe
 128#define LM93_REG_SF_TACH_TO_PWM	0xe0
 129
 130/* error masks */
 131#define LM93_REG_GPI_ERR_MASK	0xec
 132#define LM93_REG_MISC_ERR_MASK	0xed
 133
 134/* LM93 REGISTER VALUES */
 135#define LM93_MFR_ID		0x73
 136#define LM93_MFR_ID_PROTOTYPE	0x72
 137
 138/* LM94 REGISTER VALUES */
 139#define LM94_MFR_ID_2		0x7a
 140#define LM94_MFR_ID		0x79
 141#define LM94_MFR_ID_PROTOTYPE	0x78
 142
 143/* SMBus capabilities */
 144#define LM93_SMBUS_FUNC_FULL (I2C_FUNC_SMBUS_BYTE_DATA | \
 145		I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_BLOCK_DATA)
 146#define LM93_SMBUS_FUNC_MIN  (I2C_FUNC_SMBUS_BYTE_DATA | \
 147		I2C_FUNC_SMBUS_WORD_DATA)
 148
 149/* Addresses to scan */
 150static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
 151
 152/* Insmod parameters */
 153
 154static int disable_block;
 155module_param(disable_block, bool, 0);
 156MODULE_PARM_DESC(disable_block,
 157	"Set to non-zero to disable SMBus block data transactions.");
 158
 159static int init;
 160module_param(init, bool, 0);
 161MODULE_PARM_DESC(init, "Set to non-zero to force chip initialization.");
 162
 163static int vccp_limit_type[2] = {0,0};
 164module_param_array(vccp_limit_type, int, NULL, 0);
 165MODULE_PARM_DESC(vccp_limit_type, "Configures in7 and in8 limit modes.");
 166
 167static int vid_agtl;
 168module_param(vid_agtl, int, 0);
 169MODULE_PARM_DESC(vid_agtl, "Configures VID pin input thresholds.");
 170
 171/* Driver data */
 172static struct i2c_driver lm93_driver;
 173
 174/* LM93 BLOCK READ COMMANDS */
 175static const struct { u8 cmd; u8 len; } lm93_block_read_cmds[12] = {
 176	{ 0xf2,  8 },
 177	{ 0xf3,  8 },
 178	{ 0xf4,  6 },
 179	{ 0xf5, 16 },
 180	{ 0xf6,  4 },
 181	{ 0xf7,  8 },
 182	{ 0xf8, 12 },
 183	{ 0xf9, 32 },
 184	{ 0xfa,  8 },
 185	{ 0xfb,  8 },
 186	{ 0xfc, 16 },
 187	{ 0xfd,  9 },
 188};
 189
 190/* ALARMS: SYSCTL format described further below
 191   REG: 64 bits in 8 registers, as immediately below */
 
 
 192struct block1_t {
 193	u8 host_status_1;
 194	u8 host_status_2;
 195	u8 host_status_3;
 196	u8 host_status_4;
 197	u8 p1_prochot_status;
 198	u8 p2_prochot_status;
 199	u8 gpi_status;
 200	u8 fan_status;
 201};
 202
 203/*
 204 * Client-specific data
 205 */
 206struct lm93_data {
 207	struct device *hwmon_dev;
 208
 209	struct mutex update_lock;
 210	unsigned long last_updated;	/* In jiffies */
 211
 212	/* client update function */
 213	void (*update)(struct lm93_data *, struct i2c_client *);
 214
 215	char valid; /* !=0 if following fields are valid */
 216
 217	/* register values, arranged by block read groups */
 218	struct block1_t block1;
 219
 220	/* temp1 - temp4: unfiltered readings
 221	   temp1 - temp2: filtered readings */
 
 
 222	u8 block2[6];
 223
 224	/* vin1 - vin16: readings */
 225	u8 block3[16];
 226
 227	/* prochot1 - prochot2: readings */
 228	struct {
 229		u8 cur;
 230		u8 avg;
 231	} block4[2];
 232
 233	/* fan counts 1-4 => 14-bits, LE, *left* justified */
 234	u16 block5[4];
 235
 236	/* block6 has a lot of data we don't need */
 237	struct {
 238		u8 min;
 239		u8 max;
 240	} temp_lim[4];
 241
 242	/* vin1 - vin16: low and high limits */
 243	struct {
 244		u8 min;
 245		u8 max;
 246	} block7[16];
 247
 248	/* fan count limits 1-4 => same format as block5 */
 249	u16 block8[4];
 250
 251	/* pwm control registers (2 pwms, 4 regs) */
 252	u8 block9[2][4];
 253
 254	/* auto/pwm base temp and offset temp registers */
 255	struct {
 256		u8 base[4];
 257		u8 offset[12];
 258	} block10;
 259
 260	/* master config register */
 261	u8 config;
 262
 263	/* VID1 & VID2 => register format, 6-bits, right justified */
 264	u8 vid[2];
 265
 266	/* prochot1 - prochot2: limits */
 267	u8 prochot_max[2];
 268
 269	/* vccp1 & vccp2 (in7 & in8): VID relative limits (register format) */
 270	u8 vccp_limits[2];
 271
 272	/* GPIO input state (register format, i.e. inverted) */
 273	u8 gpi;
 274
 275	/* #PROCHOT override (register format) */
 276	u8 prochot_override;
 277
 278	/* #PROCHOT intervals (register format) */
 279	u8 prochot_interval;
 280
 281	/* Fan Boost Temperatures (register format) */
 282	u8 boost[4];
 283
 284	/* Fan Boost Hysteresis (register format) */
 285	u8 boost_hyst[2];
 286
 287	/* Temperature Zone Min. PWM & Hysteresis (register format) */
 288	u8 auto_pwm_min_hyst[2];
 289
 290	/* #PROCHOT & #VRDHOT PWM Ramp Control */
 291	u8 pwm_ramp_ctl;
 292
 293	/* miscellaneous setup regs */
 294	u8 sfc1;
 295	u8 sfc2;
 296	u8 sf_tach_to_pwm;
 297
 298	/* The two PWM CTL2  registers can read something other than what was
 299	   last written for the OVR_DC field (duty cycle override).  So, we
 300	   save the user-commanded value here. */
 
 
 301	u8 pwm_override[2];
 302};
 303
 304/* VID:	mV
 305   REG: 6-bits, right justified, *always* using Intel VRM/VRD 10 */
 
 
 306static int LM93_VID_FROM_REG(u8 reg)
 307{
 308	return vid_from_reg((reg & 0x3f), 100);
 309}
 310
 311/* min, max, and nominal register values, per channel (u8) */
 312static const u8 lm93_vin_reg_min[16] = {
 313	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 314	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae,
 315};
 316static const u8 lm93_vin_reg_max[16] = {
 317	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 318	0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1,
 319};
 320/* Values from the datasheet. They're here for documentation only.
 321static const u8 lm93_vin_reg_nom[16] = {
 322	0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
 323	0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x40, 0xc0,
 324};
 325*/
 
 326
 327/* min, max, and nominal voltage readings, per channel (mV)*/
 328static const unsigned long lm93_vin_val_min[16] = {
 329	0, 0, 0, 0, 0, 0, 0, 0,
 330	0, 0, 0, 0, 0, 0, 0, 3000,
 331};
 332
 333static const unsigned long lm93_vin_val_max[16] = {
 334	1236, 1236, 1236, 1600, 2000, 2000, 1600, 1600,
 335	4400, 6500, 3333, 2625, 1312, 1312, 1236, 3600,
 336};
 337/* Values from the datasheet. They're here for documentation only.
 338static const unsigned long lm93_vin_val_nom[16] = {
 339	 927,  927,  927, 1200, 1500, 1500, 1200, 1200,
 340	3300, 5000, 2500, 1969,  984,  984,  309, 3300,
 341};
 342*/
 
 343
 344static unsigned LM93_IN_FROM_REG(int nr, u8 reg)
 345{
 346	const long uV_max = lm93_vin_val_max[nr] * 1000;
 347	const long uV_min = lm93_vin_val_min[nr] * 1000;
 348
 349	const long slope = (uV_max - uV_min) /
 350		(lm93_vin_reg_max[nr] - lm93_vin_reg_min[nr]);
 351	const long intercept = uV_min - slope * lm93_vin_reg_min[nr];
 352
 353	return (slope * reg + intercept + 500) / 1000;
 354}
 355
 356/* IN: mV, limits determined by channel nr
 357   REG: scaling determined by channel nr */
 
 
 358static u8 LM93_IN_TO_REG(int nr, unsigned val)
 359{
 360	/* range limit */
 361	const long mV = SENSORS_LIMIT(val,
 362		lm93_vin_val_min[nr], lm93_vin_val_max[nr]);
 363
 364	/* try not to lose too much precision here */
 365	const long uV = mV * 1000;
 366	const long uV_max = lm93_vin_val_max[nr] * 1000;
 367	const long uV_min = lm93_vin_val_min[nr] * 1000;
 368
 369	/* convert */
 370	const long slope = (uV_max - uV_min) /
 371		(lm93_vin_reg_max[nr] - lm93_vin_reg_min[nr]);
 372	const long intercept = uV_min - slope * lm93_vin_reg_min[nr];
 373
 374	u8 result = ((uV - intercept + (slope/2)) / slope);
 375	result = SENSORS_LIMIT(result,
 376			lm93_vin_reg_min[nr], lm93_vin_reg_max[nr]);
 377	return result;
 378}
 379
 380/* vid in mV, upper == 0 indicates low limit, otherwise upper limit */
 381static unsigned LM93_IN_REL_FROM_REG(u8 reg, int upper, int vid)
 382{
 383	const long uV_offset = upper ? (((reg >> 4 & 0x0f) + 1) * 12500) :
 384				(((reg >> 0 & 0x0f) + 1) * -25000);
 385	const long uV_vid = vid * 1000;
 386	return (uV_vid + uV_offset + 5000) / 10000;
 387}
 388
 389#define LM93_IN_MIN_FROM_REG(reg,vid)	LM93_IN_REL_FROM_REG(reg,0,vid)
 390#define LM93_IN_MAX_FROM_REG(reg,vid)	LM93_IN_REL_FROM_REG(reg,1,vid)
 391
 392/* vid in mV , upper == 0 indicates low limit, otherwise upper limit
 393   upper also determines which nibble of the register is returned
 394   (the other nibble will be 0x0) */
 
 
 395static u8 LM93_IN_REL_TO_REG(unsigned val, int upper, int vid)
 396{
 397	long uV_offset = vid * 1000 - val * 10000;
 398	if (upper) {
 399		uV_offset = SENSORS_LIMIT(uV_offset, 12500, 200000);
 400		return (u8)((uV_offset /  12500 - 1) << 4);
 401	} else {
 402		uV_offset = SENSORS_LIMIT(uV_offset, -400000, -25000);
 403		return (u8)((uV_offset / -25000 - 1) << 0);
 404	}
 405}
 406
 407/* TEMP: 1/1000 degrees C (-128C to +127C)
 408   REG: 1C/bit, two's complement */
 
 
 409static int LM93_TEMP_FROM_REG(u8 reg)
 410{
 411	return (s8)reg * 1000;
 412}
 413
 414#define LM93_TEMP_MIN (-128000)
 415#define LM93_TEMP_MAX ( 127000)
 416
 417/* TEMP: 1/1000 degrees C (-128C to +127C)
 418   REG: 1C/bit, two's complement */
 
 
 419static u8 LM93_TEMP_TO_REG(long temp)
 420{
 421	int ntemp = SENSORS_LIMIT(temp, LM93_TEMP_MIN, LM93_TEMP_MAX);
 422	ntemp += (ntemp<0 ? -500 : 500);
 423	return (u8)(ntemp / 1000);
 424}
 425
 426/* Determine 4-bit temperature offset resolution */
 427static int LM93_TEMP_OFFSET_MODE_FROM_REG(u8 sfc2, int nr)
 428{
 429	/* mode: 0 => 1C/bit, nonzero => 0.5C/bit */
 430	return sfc2 & (nr < 2 ? 0x10 : 0x20);
 431}
 432
 433/* This function is common to all 4-bit temperature offsets
 434   reg is 4 bits right justified
 435   mode 0 => 1C/bit, mode !0 => 0.5C/bit */
 
 
 436static int LM93_TEMP_OFFSET_FROM_REG(u8 reg, int mode)
 437{
 438	return (reg & 0x0f) * (mode ? 5 : 10);
 439}
 440
 441#define LM93_TEMP_OFFSET_MIN  (  0)
 442#define LM93_TEMP_OFFSET_MAX0 (150)
 443#define LM93_TEMP_OFFSET_MAX1 ( 75)
 444
 445/* This function is common to all 4-bit temperature offsets
 446   returns 4 bits right justified
 447   mode 0 => 1C/bit, mode !0 => 0.5C/bit */
 
 
 448static u8 LM93_TEMP_OFFSET_TO_REG(int off, int mode)
 449{
 450	int factor = mode ? 5 : 10;
 451
 452	off = SENSORS_LIMIT(off, LM93_TEMP_OFFSET_MIN,
 453		mode ? LM93_TEMP_OFFSET_MAX1 : LM93_TEMP_OFFSET_MAX0);
 454	return (u8)((off + factor/2) / factor);
 455}
 456
 457/* 0 <= nr <= 3 */
 458static int LM93_TEMP_AUTO_OFFSET_FROM_REG(u8 reg, int nr, int mode)
 459{
 460	/* temp1-temp2 (nr=0,1) use lower nibble */
 461	if (nr < 2)
 462		return LM93_TEMP_OFFSET_FROM_REG(reg & 0x0f, mode);
 463
 464	/* temp3-temp4 (nr=2,3) use upper nibble */
 465	else
 466		return LM93_TEMP_OFFSET_FROM_REG(reg >> 4 & 0x0f, mode);
 467}
 468
 469/* TEMP: 1/10 degrees C (0C to +15C (mode 0) or +7.5C (mode non-zero))
 470   REG: 1.0C/bit (mode 0) or 0.5C/bit (mode non-zero)
 471   0 <= nr <= 3 */
 
 
 472static u8 LM93_TEMP_AUTO_OFFSET_TO_REG(u8 old, int off, int nr, int mode)
 473{
 474	u8 new = LM93_TEMP_OFFSET_TO_REG(off, mode);
 475
 476	/* temp1-temp2 (nr=0,1) use lower nibble */
 477	if (nr < 2)
 478		return (old & 0xf0) | (new & 0x0f);
 479
 480	/* temp3-temp4 (nr=2,3) use upper nibble */
 481	else
 482		return (new << 4 & 0xf0) | (old & 0x0f);
 483}
 484
 485static int LM93_AUTO_BOOST_HYST_FROM_REGS(struct lm93_data *data, int nr,
 486		int mode)
 487{
 488	u8 reg;
 489
 490	switch (nr) {
 491	case 0:
 492		reg = data->boost_hyst[0] & 0x0f;
 493		break;
 494	case 1:
 495		reg = data->boost_hyst[0] >> 4 & 0x0f;
 496		break;
 497	case 2:
 498		reg = data->boost_hyst[1] & 0x0f;
 499		break;
 500	case 3:
 501	default:
 502		reg = data->boost_hyst[1] >> 4 & 0x0f;
 503		break;
 504	}
 505
 506	return LM93_TEMP_FROM_REG(data->boost[nr]) -
 507			LM93_TEMP_OFFSET_FROM_REG(reg, mode);
 508}
 509
 510static u8 LM93_AUTO_BOOST_HYST_TO_REG(struct lm93_data *data, long hyst,
 511		int nr, int mode)
 512{
 513	u8 reg = LM93_TEMP_OFFSET_TO_REG(
 514			(LM93_TEMP_FROM_REG(data->boost[nr]) - hyst), mode);
 515
 516	switch (nr) {
 517	case 0:
 518		reg = (data->boost_hyst[0] & 0xf0) | (reg & 0x0f);
 519		break;
 520	case 1:
 521		reg = (reg << 4 & 0xf0) | (data->boost_hyst[0] & 0x0f);
 522		break;
 523	case 2:
 524		reg = (data->boost_hyst[1] & 0xf0) | (reg & 0x0f);
 525		break;
 526	case 3:
 527	default:
 528		reg = (reg << 4 & 0xf0) | (data->boost_hyst[1] & 0x0f);
 529		break;
 530	}
 531
 532	return reg;
 533}
 534
 535/* PWM: 0-255 per sensors documentation
 536   REG: 0-13 as mapped below... right justified */
 537typedef enum { LM93_PWM_MAP_HI_FREQ, LM93_PWM_MAP_LO_FREQ } pwm_freq_t;
 
 
 
 538static int lm93_pwm_map[2][16] = {
 539	{
 540		0x00, /*   0.00% */ 0x40, /*  25.00% */
 541		0x50, /*  31.25% */ 0x60, /*  37.50% */
 542		0x70, /*  43.75% */ 0x80, /*  50.00% */
 543		0x90, /*  56.25% */ 0xa0, /*  62.50% */
 544		0xb0, /*  68.75% */ 0xc0, /*  75.00% */
 545		0xd0, /*  81.25% */ 0xe0, /*  87.50% */
 546		0xf0, /*  93.75% */ 0xff, /* 100.00% */
 547		0xff, 0xff, /* 14, 15 are reserved and should never occur */
 548	},
 549	{
 550		0x00, /*   0.00% */ 0x40, /*  25.00% */
 551		0x49, /*  28.57% */ 0x52, /*  32.14% */
 552		0x5b, /*  35.71% */ 0x64, /*  39.29% */
 553		0x6d, /*  42.86% */ 0x76, /*  46.43% */
 554		0x80, /*  50.00% */ 0x89, /*  53.57% */
 555		0x92, /*  57.14% */ 0xb6, /*  71.43% */
 556		0xdb, /*  85.71% */ 0xff, /* 100.00% */
 557		0xff, 0xff, /* 14, 15 are reserved and should never occur */
 558	},
 559};
 560
 561static int LM93_PWM_FROM_REG(u8 reg, pwm_freq_t freq)
 562{
 563	return lm93_pwm_map[freq][reg & 0x0f];
 564}
 565
 566/* round up to nearest match */
 567static u8 LM93_PWM_TO_REG(int pwm, pwm_freq_t freq)
 568{
 569	int i;
 570	for (i = 0; i < 13; i++)
 571		if (pwm <= lm93_pwm_map[freq][i])
 572			break;
 573
 574	/* can fall through with i==13 */
 575	return (u8)i;
 576}
 577
 578static int LM93_FAN_FROM_REG(u16 regs)
 579{
 580	const u16 count = le16_to_cpu(regs) >> 2;
 581	return count==0 ? -1 : count==0x3fff ? 0: 1350000 / count;
 582}
 583
 584/*
 585 * RPM: (82.5 to 1350000)
 586 * REG: 14-bits, LE, *left* justified
 587 */
 588static u16 LM93_FAN_TO_REG(long rpm)
 589{
 590	u16 count, regs;
 591
 592	if (rpm == 0) {
 593		count = 0x3fff;
 594	} else {
 595		rpm = SENSORS_LIMIT(rpm, 1, 1000000);
 596		count = SENSORS_LIMIT((1350000 + rpm) / rpm, 1, 0x3ffe);
 597	}
 598
 599	regs = count << 2;
 600	return cpu_to_le16(regs);
 601}
 602
 603/* PWM FREQ: HZ
 604   REG: 0-7 as mapped below */
 
 
 605static int lm93_pwm_freq_map[8] = {
 606	22500, 96, 84, 72, 60, 48, 36, 12
 607};
 608
 609static int LM93_PWM_FREQ_FROM_REG(u8 reg)
 610{
 611	return lm93_pwm_freq_map[reg & 0x07];
 612}
 613
 614/* round up to nearest match */
 615static u8 LM93_PWM_FREQ_TO_REG(int freq)
 616{
 617	int i;
 618	for (i = 7; i > 0; i--)
 619		if (freq <= lm93_pwm_freq_map[i])
 620			break;
 621
 622	/* can fall through with i==0 */
 623	return (u8)i;
 624}
 625
 626/* TIME: 1/100 seconds
 627 * REG: 0-7 as mapped below */
 
 
 628static int lm93_spinup_time_map[8] = {
 629	0, 10, 25, 40, 70, 100, 200, 400,
 630};
 631
 632static int LM93_SPINUP_TIME_FROM_REG(u8 reg)
 633{
 634	return lm93_spinup_time_map[reg >> 5 & 0x07];
 635}
 636
 637/* round up to nearest match */
 638static u8 LM93_SPINUP_TIME_TO_REG(int time)
 639{
 640	int i;
 641	for (i = 0; i < 7; i++)
 642		if (time <= lm93_spinup_time_map[i])
 643			break;
 644
 645	/* can fall through with i==8 */
 646	return (u8)i;
 647}
 648
 649#define LM93_RAMP_MIN 0
 650#define LM93_RAMP_MAX 75
 651
 652static int LM93_RAMP_FROM_REG(u8 reg)
 653{
 654	return (reg & 0x0f) * 5;
 655}
 656
 657/* RAMP: 1/100 seconds
 658   REG: 50mS/bit 4-bits right justified */
 
 
 659static u8 LM93_RAMP_TO_REG(int ramp)
 660{
 661	ramp = SENSORS_LIMIT(ramp, LM93_RAMP_MIN, LM93_RAMP_MAX);
 662	return (u8)((ramp + 2) / 5);
 663}
 664
 665/* PROCHOT: 0-255, 0 => 0%, 255 => > 96.6%
 666 * REG: (same) */
 
 
 667static u8 LM93_PROCHOT_TO_REG(long prochot)
 668{
 669	prochot = SENSORS_LIMIT(prochot, 0, 255);
 670	return (u8)prochot;
 671}
 672
 673/* PROCHOT-INTERVAL: 73 - 37200 (1/100 seconds)
 674 * REG: 0-9 as mapped below */
 
 
 675static int lm93_interval_map[10] = {
 676	73, 146, 290, 580, 1170, 2330, 4660, 9320, 18600, 37200,
 677};
 678
 679static int LM93_INTERVAL_FROM_REG(u8 reg)
 680{
 681	return lm93_interval_map[reg & 0x0f];
 682}
 683
 684/* round up to nearest match */
 685static u8 LM93_INTERVAL_TO_REG(long interval)
 686{
 687	int i;
 688	for (i = 0; i < 9; i++)
 689		if (interval <= lm93_interval_map[i])
 690			break;
 691
 692	/* can fall through with i==9 */
 693	return (u8)i;
 694}
 695
 696/* GPIO: 0-255, GPIO0 is LSB
 697 * REG: inverted */
 
 
 698static unsigned LM93_GPI_FROM_REG(u8 reg)
 699{
 700	return ~reg & 0xff;
 701}
 702
 703/* alarm bitmask definitions
 704   The LM93 has nearly 64 bits of error status... I've pared that down to
 705   what I think is a useful subset in order to fit it into 32 bits.
 706
 707   Especially note that the #VRD_HOT alarms are missing because we provide
 708   that information as values in another sysfs file.
 709
 710   If libsensors is extended to support 64 bit values, this could be revisited.
 711*/
 
 712#define LM93_ALARM_IN1		0x00000001
 713#define LM93_ALARM_IN2		0x00000002
 714#define LM93_ALARM_IN3		0x00000004
 715#define LM93_ALARM_IN4		0x00000008
 716#define LM93_ALARM_IN5		0x00000010
 717#define LM93_ALARM_IN6		0x00000020
 718#define LM93_ALARM_IN7		0x00000040
 719#define LM93_ALARM_IN8		0x00000080
 720#define LM93_ALARM_IN9		0x00000100
 721#define LM93_ALARM_IN10		0x00000200
 722#define LM93_ALARM_IN11		0x00000400
 723#define LM93_ALARM_IN12		0x00000800
 724#define LM93_ALARM_IN13		0x00001000
 725#define LM93_ALARM_IN14		0x00002000
 726#define LM93_ALARM_IN15		0x00004000
 727#define LM93_ALARM_IN16		0x00008000
 728#define LM93_ALARM_FAN1		0x00010000
 729#define LM93_ALARM_FAN2		0x00020000
 730#define LM93_ALARM_FAN3		0x00040000
 731#define LM93_ALARM_FAN4		0x00080000
 732#define LM93_ALARM_PH1_ERR	0x00100000
 733#define LM93_ALARM_PH2_ERR	0x00200000
 734#define LM93_ALARM_SCSI1_ERR	0x00400000
 735#define LM93_ALARM_SCSI2_ERR	0x00800000
 736#define LM93_ALARM_DVDDP1_ERR	0x01000000
 737#define LM93_ALARM_DVDDP2_ERR	0x02000000
 738#define LM93_ALARM_D1_ERR	0x04000000
 739#define LM93_ALARM_D2_ERR	0x08000000
 740#define LM93_ALARM_TEMP1	0x10000000
 741#define LM93_ALARM_TEMP2	0x20000000
 742#define LM93_ALARM_TEMP3	0x40000000
 743
 744static unsigned LM93_ALARMS_FROM_REG(struct block1_t b1)
 745{
 746	unsigned result;
 747	result  = b1.host_status_2 & 0x3f;
 748
 749	if (vccp_limit_type[0])
 750		result |= (b1.host_status_4 & 0x10) << 2;
 751	else
 752		result |= b1.host_status_2 & 0x40;
 753
 754	if (vccp_limit_type[1])
 755		result |= (b1.host_status_4 & 0x20) << 2;
 756	else
 757		result |= b1.host_status_2 & 0x80;
 758
 759	result |= b1.host_status_3 << 8;
 760	result |= (b1.fan_status & 0x0f) << 16;
 761	result |= (b1.p1_prochot_status & 0x80) << 13;
 762	result |= (b1.p2_prochot_status & 0x80) << 14;
 763	result |= (b1.host_status_4 & 0xfc) << 20;
 764	result |= (b1.host_status_1 & 0x07) << 28;
 765	return result;
 766}
 767
 768#define MAX_RETRIES 5
 769
 770static u8 lm93_read_byte(struct i2c_client *client, u8 reg)
 771{
 772	int value, i;
 773
 774	/* retry in case of read errors */
 775	for (i=1; i<=MAX_RETRIES; i++) {
 776		if ((value = i2c_smbus_read_byte_data(client, reg)) >= 0) {
 
 777			return value;
 778		} else {
 779			dev_warn(&client->dev,"lm93: read byte data failed, "
 780				"address 0x%02x.\n", reg);
 
 781			mdelay(i + 3);
 782		}
 783
 784	}
 785
 786	/* <TODO> what to return in case of error? */
 787	dev_err(&client->dev,"lm93: All read byte retries failed!!\n");
 788	return 0;
 789}
 790
 791static int lm93_write_byte(struct i2c_client *client, u8 reg, u8 value)
 792{
 793	int result;
 794
 795	/* <TODO> how to handle write errors? */
 796	result = i2c_smbus_write_byte_data(client, reg, value);
 797
 798	if (result < 0)
 799		dev_warn(&client->dev,"lm93: write byte data failed, "
 800			 "0x%02x at address 0x%02x.\n", value, reg);
 
 801
 802	return result;
 803}
 804
 805static u16 lm93_read_word(struct i2c_client *client, u8 reg)
 806{
 807	int value, i;
 808
 809	/* retry in case of read errors */
 810	for (i=1; i<=MAX_RETRIES; i++) {
 811		if ((value = i2c_smbus_read_word_data(client, reg)) >= 0) {
 
 812			return value;
 813		} else {
 814			dev_warn(&client->dev,"lm93: read word data failed, "
 815				 "address 0x%02x.\n", reg);
 
 816			mdelay(i + 3);
 817		}
 818
 819	}
 820
 821	/* <TODO> what to return in case of error? */
 822	dev_err(&client->dev,"lm93: All read word retries failed!!\n");
 823	return 0;
 824}
 825
 826static int lm93_write_word(struct i2c_client *client, u8 reg, u16 value)
 827{
 828	int result;
 829
 830	/* <TODO> how to handle write errors? */
 831	result = i2c_smbus_write_word_data(client, reg, value);
 832
 833	if (result < 0)
 834		dev_warn(&client->dev,"lm93: write word data failed, "
 835			 "0x%04x at address 0x%02x.\n", value, reg);
 
 836
 837	return result;
 838}
 839
 840static u8 lm93_block_buffer[I2C_SMBUS_BLOCK_MAX];
 841
 842/*
 843	read block data into values, retry if not expected length
 844	fbn => index to lm93_block_read_cmds table
 845		(Fixed Block Number - section 14.5.2 of LM93 datasheet)
 846*/
 847static void lm93_read_block(struct i2c_client *client, u8 fbn, u8 *values)
 848{
 849	int i, result=0;
 850
 851	for (i = 1; i <= MAX_RETRIES; i++) {
 852		result = i2c_smbus_read_block_data(client,
 853			lm93_block_read_cmds[fbn].cmd, lm93_block_buffer);
 854
 855		if (result == lm93_block_read_cmds[fbn].len) {
 856			break;
 857		} else {
 858			dev_warn(&client->dev,"lm93: block read data failed, "
 859				 "command 0x%02x.\n",
 860				 lm93_block_read_cmds[fbn].cmd);
 861			mdelay(i + 3);
 862		}
 863	}
 864
 865	if (result == lm93_block_read_cmds[fbn].len) {
 866		memcpy(values,lm93_block_buffer,lm93_block_read_cmds[fbn].len);
 
 867	} else {
 868		/* <TODO> what to do in case of error? */
 869	}
 870}
 871
 872static struct lm93_data *lm93_update_device(struct device *dev)
 873{
 874	struct i2c_client *client = to_i2c_client(dev);
 875	struct lm93_data *data = i2c_get_clientdata(client);
 876	const unsigned long interval = HZ + (HZ / 2);
 877
 878	mutex_lock(&data->update_lock);
 879
 880	if (time_after(jiffies, data->last_updated + interval) ||
 881		!data->valid) {
 882
 883		data->update(data, client);
 884		data->last_updated = jiffies;
 885		data->valid = 1;
 886	}
 887
 888	mutex_unlock(&data->update_lock);
 889	return data;
 890}
 891
 892/* update routine for data that has no corresponding SMBus block command */
 893static void lm93_update_client_common(struct lm93_data *data,
 894				      struct i2c_client *client)
 895{
 896	int i;
 897	u8 *ptr;
 898
 899	/* temp1 - temp4: limits */
 900	for (i = 0; i < 4; i++) {
 901		data->temp_lim[i].min =
 902			lm93_read_byte(client, LM93_REG_TEMP_MIN(i));
 903		data->temp_lim[i].max =
 904			lm93_read_byte(client, LM93_REG_TEMP_MAX(i));
 905	}
 906
 907	/* config register */
 908	data->config = lm93_read_byte(client, LM93_REG_CONFIG);
 909
 910	/* vid1 - vid2: values */
 911	for (i = 0; i < 2; i++)
 912		data->vid[i] = lm93_read_byte(client, LM93_REG_VID(i));
 913
 914	/* prochot1 - prochot2: limits */
 915	for (i = 0; i < 2; i++)
 916		data->prochot_max[i] = lm93_read_byte(client,
 917				LM93_REG_PROCHOT_MAX(i));
 918
 919	/* vccp1 - vccp2: VID relative limits */
 920	for (i = 0; i < 2; i++)
 921		data->vccp_limits[i] = lm93_read_byte(client,
 922				LM93_REG_VCCP_LIMIT_OFF(i));
 923
 924	/* GPIO input state */
 925	data->gpi = lm93_read_byte(client, LM93_REG_GPI);
 926
 927	/* #PROCHOT override state */
 928	data->prochot_override = lm93_read_byte(client,
 929			LM93_REG_PROCHOT_OVERRIDE);
 930
 931	/* #PROCHOT intervals */
 932	data->prochot_interval = lm93_read_byte(client,
 933			LM93_REG_PROCHOT_INTERVAL);
 934
 935	/* Fan Boost Temperature registers */
 936	for (i = 0; i < 4; i++)
 937		data->boost[i] = lm93_read_byte(client, LM93_REG_BOOST(i));
 938
 939	/* Fan Boost Temperature Hyst. registers */
 940	data->boost_hyst[0] = lm93_read_byte(client, LM93_REG_BOOST_HYST_12);
 941	data->boost_hyst[1] = lm93_read_byte(client, LM93_REG_BOOST_HYST_34);
 942
 943	/* Temperature Zone Min. PWM & Hysteresis registers */
 944	data->auto_pwm_min_hyst[0] =
 945			lm93_read_byte(client, LM93_REG_PWM_MIN_HYST_12);
 946	data->auto_pwm_min_hyst[1] =
 947			lm93_read_byte(client, LM93_REG_PWM_MIN_HYST_34);
 948
 949	/* #PROCHOT & #VRDHOT PWM Ramp Control register */
 950	data->pwm_ramp_ctl = lm93_read_byte(client, LM93_REG_PWM_RAMP_CTL);
 951
 952	/* misc setup registers */
 953	data->sfc1 = lm93_read_byte(client, LM93_REG_SFC1);
 954	data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
 955	data->sf_tach_to_pwm = lm93_read_byte(client,
 956			LM93_REG_SF_TACH_TO_PWM);
 957
 958	/* write back alarm values to clear */
 959	for (i = 0, ptr = (u8 *)(&data->block1); i < 8; i++)
 960		lm93_write_byte(client, LM93_REG_HOST_ERROR_1 + i, *(ptr + i));
 961}
 962
 963/* update routine which uses SMBus block data commands */
 964static void lm93_update_client_full(struct lm93_data *data,
 965				    struct i2c_client *client)
 966{
 967	dev_dbg(&client->dev,"starting device update (block data enabled)\n");
 968
 969	/* in1 - in16: values & limits */
 970	lm93_read_block(client, 3, (u8 *)(data->block3));
 971	lm93_read_block(client, 7, (u8 *)(data->block7));
 972
 973	/* temp1 - temp4: values */
 974	lm93_read_block(client, 2, (u8 *)(data->block2));
 975
 976	/* prochot1 - prochot2: values */
 977	lm93_read_block(client, 4, (u8 *)(data->block4));
 978
 979	/* fan1 - fan4: values & limits */
 980	lm93_read_block(client, 5, (u8 *)(data->block5));
 981	lm93_read_block(client, 8, (u8 *)(data->block8));
 982
 983	/* pmw control registers */
 984	lm93_read_block(client, 9, (u8 *)(data->block9));
 985
 986	/* alarm values */
 987	lm93_read_block(client, 1, (u8 *)(&data->block1));
 988
 989	/* auto/pwm registers */
 990	lm93_read_block(client, 10, (u8 *)(&data->block10));
 991
 992	lm93_update_client_common(data, client);
 993}
 994
 995/* update routine which uses SMBus byte/word data commands only */
 996static void lm93_update_client_min(struct lm93_data *data,
 997				   struct i2c_client *client)
 998{
 999	int i,j;
1000	u8 *ptr;
1001
1002	dev_dbg(&client->dev,"starting device update (block data disabled)\n");
1003
1004	/* in1 - in16: values & limits */
1005	for (i = 0; i < 16; i++) {
1006		data->block3[i] =
1007			lm93_read_byte(client, LM93_REG_IN(i));
1008		data->block7[i].min =
1009			lm93_read_byte(client, LM93_REG_IN_MIN(i));
1010		data->block7[i].max =
1011			lm93_read_byte(client, LM93_REG_IN_MAX(i));
1012	}
1013
1014	/* temp1 - temp4: values */
1015	for (i = 0; i < 4; i++) {
1016		data->block2[i] =
1017			lm93_read_byte(client, LM93_REG_TEMP(i));
1018	}
1019
1020	/* prochot1 - prochot2: values */
1021	for (i = 0; i < 2; i++) {
1022		data->block4[i].cur =
1023			lm93_read_byte(client, LM93_REG_PROCHOT_CUR(i));
1024		data->block4[i].avg =
1025			lm93_read_byte(client, LM93_REG_PROCHOT_AVG(i));
1026	}
1027
1028	/* fan1 - fan4: values & limits */
1029	for (i = 0; i < 4; i++) {
1030		data->block5[i] =
1031			lm93_read_word(client, LM93_REG_FAN(i));
1032		data->block8[i] =
1033			lm93_read_word(client, LM93_REG_FAN_MIN(i));
1034	}
1035
1036	/* pwm control registers */
1037	for (i = 0; i < 2; i++) {
1038		for (j = 0; j < 4; j++) {
1039			data->block9[i][j] =
1040				lm93_read_byte(client, LM93_REG_PWM_CTL(i,j));
1041		}
1042	}
1043
1044	/* alarm values */
1045	for (i = 0, ptr = (u8 *)(&data->block1); i < 8; i++) {
1046		*(ptr + i) =
1047			lm93_read_byte(client, LM93_REG_HOST_ERROR_1 + i);
1048	}
1049
1050	/* auto/pwm (base temp) registers */
1051	for (i = 0; i < 4; i++) {
1052		data->block10.base[i] =
1053			lm93_read_byte(client, LM93_REG_TEMP_BASE(i));
1054	}
1055
1056	/* auto/pwm (offset temp) registers */
1057	for (i = 0; i < 12; i++) {
1058		data->block10.offset[i] =
1059			lm93_read_byte(client, LM93_REG_TEMP_OFFSET(i));
1060	}
1061
1062	lm93_update_client_common(data, client);
1063}
1064
1065/* following are the sysfs callback functions */
1066static ssize_t show_in(struct device *dev, struct device_attribute *attr,
1067			char *buf)
1068{
1069	int nr = (to_sensor_dev_attr(attr))->index;
1070
1071	struct lm93_data *data = lm93_update_device(dev);
1072	return sprintf(buf, "%d\n", LM93_IN_FROM_REG(nr, data->block3[nr]));
1073}
1074
1075static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_in, NULL, 0);
1076static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_in, NULL, 1);
1077static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_in, NULL, 2);
1078static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_in, NULL, 3);
1079static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, show_in, NULL, 4);
1080static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, show_in, NULL, 5);
1081static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, show_in, NULL, 6);
1082static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, show_in, NULL, 7);
1083static SENSOR_DEVICE_ATTR(in9_input, S_IRUGO, show_in, NULL, 8);
1084static SENSOR_DEVICE_ATTR(in10_input, S_IRUGO, show_in, NULL, 9);
1085static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, show_in, NULL, 10);
1086static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, show_in, NULL, 11);
1087static SENSOR_DEVICE_ATTR(in13_input, S_IRUGO, show_in, NULL, 12);
1088static SENSOR_DEVICE_ATTR(in14_input, S_IRUGO, show_in, NULL, 13);
1089static SENSOR_DEVICE_ATTR(in15_input, S_IRUGO, show_in, NULL, 14);
1090static SENSOR_DEVICE_ATTR(in16_input, S_IRUGO, show_in, NULL, 15);
1091
1092static ssize_t show_in_min(struct device *dev,
1093			struct device_attribute *attr, char *buf)
1094{
1095	int nr = (to_sensor_dev_attr(attr))->index;
1096	struct lm93_data *data = lm93_update_device(dev);
1097	int vccp = nr - 6;
1098	long rc, vid;
1099
1100	if ((nr==6 || nr==7) && (vccp_limit_type[vccp])) {
1101		vid = LM93_VID_FROM_REG(data->vid[vccp]);
1102		rc = LM93_IN_MIN_FROM_REG(data->vccp_limits[vccp], vid);
 
 
1103	}
1104	else {
1105		rc = LM93_IN_FROM_REG(nr, data->block7[nr].min); \
1106	}
1107	return sprintf(buf, "%ld\n", rc); \
1108}
1109
1110static ssize_t store_in_min(struct device *dev, struct device_attribute *attr,
1111			    const char *buf, size_t count)
1112{
1113	int nr = (to_sensor_dev_attr(attr))->index;
1114	struct i2c_client *client = to_i2c_client(dev);
1115	struct lm93_data *data = i2c_get_clientdata(client);
1116	u32 val = simple_strtoul(buf, NULL, 10);
1117	int vccp = nr - 6;
1118	long vid;
 
 
 
 
 
 
1119
1120	mutex_lock(&data->update_lock);
1121	if ((nr==6 || nr==7) && (vccp_limit_type[vccp])) {
1122		vid = LM93_VID_FROM_REG(data->vid[vccp]);
1123		data->vccp_limits[vccp] = (data->vccp_limits[vccp] & 0xf0) |
1124				LM93_IN_REL_TO_REG(val, 0, vid);
1125		lm93_write_byte(client, LM93_REG_VCCP_LIMIT_OFF(vccp),
1126				data->vccp_limits[vccp]);
1127	}
1128	else {
1129		data->block7[nr].min = LM93_IN_TO_REG(nr,val);
1130		lm93_write_byte(client, LM93_REG_IN_MIN(nr),
1131				data->block7[nr].min);
1132	}
1133	mutex_unlock(&data->update_lock);
1134	return count;
1135}
1136
1137static SENSOR_DEVICE_ATTR(in1_min, S_IWUSR | S_IRUGO,
1138			  show_in_min, store_in_min, 0);
1139static SENSOR_DEVICE_ATTR(in2_min, S_IWUSR | S_IRUGO,
1140			  show_in_min, store_in_min, 1);
1141static SENSOR_DEVICE_ATTR(in3_min, S_IWUSR | S_IRUGO,
1142			  show_in_min, store_in_min, 2);
1143static SENSOR_DEVICE_ATTR(in4_min, S_IWUSR | S_IRUGO,
1144			  show_in_min, store_in_min, 3);
1145static SENSOR_DEVICE_ATTR(in5_min, S_IWUSR | S_IRUGO,
1146			  show_in_min, store_in_min, 4);
1147static SENSOR_DEVICE_ATTR(in6_min, S_IWUSR | S_IRUGO,
1148			  show_in_min, store_in_min, 5);
1149static SENSOR_DEVICE_ATTR(in7_min, S_IWUSR | S_IRUGO,
1150			  show_in_min, store_in_min, 6);
1151static SENSOR_DEVICE_ATTR(in8_min, S_IWUSR | S_IRUGO,
1152			  show_in_min, store_in_min, 7);
1153static SENSOR_DEVICE_ATTR(in9_min, S_IWUSR | S_IRUGO,
1154			  show_in_min, store_in_min, 8);
1155static SENSOR_DEVICE_ATTR(in10_min, S_IWUSR | S_IRUGO,
1156			  show_in_min, store_in_min, 9);
1157static SENSOR_DEVICE_ATTR(in11_min, S_IWUSR | S_IRUGO,
1158			  show_in_min, store_in_min, 10);
1159static SENSOR_DEVICE_ATTR(in12_min, S_IWUSR | S_IRUGO,
1160			  show_in_min, store_in_min, 11);
1161static SENSOR_DEVICE_ATTR(in13_min, S_IWUSR | S_IRUGO,
1162			  show_in_min, store_in_min, 12);
1163static SENSOR_DEVICE_ATTR(in14_min, S_IWUSR | S_IRUGO,
1164			  show_in_min, store_in_min, 13);
1165static SENSOR_DEVICE_ATTR(in15_min, S_IWUSR | S_IRUGO,
1166			  show_in_min, store_in_min, 14);
1167static SENSOR_DEVICE_ATTR(in16_min, S_IWUSR | S_IRUGO,
1168			  show_in_min, store_in_min, 15);
1169
1170static ssize_t show_in_max(struct device *dev,
1171			   struct device_attribute *attr, char *buf)
1172{
1173	int nr = (to_sensor_dev_attr(attr))->index;
1174	struct lm93_data *data = lm93_update_device(dev);
1175	int vccp = nr - 6;
1176	long rc, vid;
1177
1178	if ((nr==6 || nr==7) && (vccp_limit_type[vccp])) {
1179		vid = LM93_VID_FROM_REG(data->vid[vccp]);
1180		rc = LM93_IN_MAX_FROM_REG(data->vccp_limits[vccp],vid);
1181	}
1182	else {
1183		rc = LM93_IN_FROM_REG(nr,data->block7[nr].max); \
1184	}
1185	return sprintf(buf,"%ld\n",rc); \
1186}
1187
1188static ssize_t store_in_max(struct device *dev, struct device_attribute *attr,
1189			    const char *buf, size_t count)
1190{
1191	int nr = (to_sensor_dev_attr(attr))->index;
1192	struct i2c_client *client = to_i2c_client(dev);
1193	struct lm93_data *data = i2c_get_clientdata(client);
1194	u32 val = simple_strtoul(buf, NULL, 10);
1195	int vccp = nr - 6;
1196	long vid;
 
 
 
 
 
 
1197
1198	mutex_lock(&data->update_lock);
1199	if ((nr==6 || nr==7) && (vccp_limit_type[vccp])) {
1200		vid = LM93_VID_FROM_REG(data->vid[vccp]);
1201		data->vccp_limits[vccp] = (data->vccp_limits[vccp] & 0x0f) |
1202				LM93_IN_REL_TO_REG(val, 1, vid);
1203		lm93_write_byte(client, LM93_REG_VCCP_LIMIT_OFF(vccp),
1204				data->vccp_limits[vccp]);
1205	}
1206	else {
1207		data->block7[nr].max = LM93_IN_TO_REG(nr,val);
1208		lm93_write_byte(client, LM93_REG_IN_MAX(nr),
1209				data->block7[nr].max);
1210	}
1211	mutex_unlock(&data->update_lock);
1212	return count;
1213}
1214
1215static SENSOR_DEVICE_ATTR(in1_max, S_IWUSR | S_IRUGO,
1216			  show_in_max, store_in_max, 0);
1217static SENSOR_DEVICE_ATTR(in2_max, S_IWUSR | S_IRUGO,
1218			  show_in_max, store_in_max, 1);
1219static SENSOR_DEVICE_ATTR(in3_max, S_IWUSR | S_IRUGO,
1220			  show_in_max, store_in_max, 2);
1221static SENSOR_DEVICE_ATTR(in4_max, S_IWUSR | S_IRUGO,
1222			  show_in_max, store_in_max, 3);
1223static SENSOR_DEVICE_ATTR(in5_max, S_IWUSR | S_IRUGO,
1224			  show_in_max, store_in_max, 4);
1225static SENSOR_DEVICE_ATTR(in6_max, S_IWUSR | S_IRUGO,
1226			  show_in_max, store_in_max, 5);
1227static SENSOR_DEVICE_ATTR(in7_max, S_IWUSR | S_IRUGO,
1228			  show_in_max, store_in_max, 6);
1229static SENSOR_DEVICE_ATTR(in8_max, S_IWUSR | S_IRUGO,
1230			  show_in_max, store_in_max, 7);
1231static SENSOR_DEVICE_ATTR(in9_max, S_IWUSR | S_IRUGO,
1232			  show_in_max, store_in_max, 8);
1233static SENSOR_DEVICE_ATTR(in10_max, S_IWUSR | S_IRUGO,
1234			  show_in_max, store_in_max, 9);
1235static SENSOR_DEVICE_ATTR(in11_max, S_IWUSR | S_IRUGO,
1236			  show_in_max, store_in_max, 10);
1237static SENSOR_DEVICE_ATTR(in12_max, S_IWUSR | S_IRUGO,
1238			  show_in_max, store_in_max, 11);
1239static SENSOR_DEVICE_ATTR(in13_max, S_IWUSR | S_IRUGO,
1240			  show_in_max, store_in_max, 12);
1241static SENSOR_DEVICE_ATTR(in14_max, S_IWUSR | S_IRUGO,
1242			  show_in_max, store_in_max, 13);
1243static SENSOR_DEVICE_ATTR(in15_max, S_IWUSR | S_IRUGO,
1244			  show_in_max, store_in_max, 14);
1245static SENSOR_DEVICE_ATTR(in16_max, S_IWUSR | S_IRUGO,
1246			  show_in_max, store_in_max, 15);
1247
1248static ssize_t show_temp(struct device *dev,
1249			 struct device_attribute *attr, char *buf)
1250{
1251	int nr = (to_sensor_dev_attr(attr))->index;
1252	struct lm93_data *data = lm93_update_device(dev);
1253	return sprintf(buf,"%d\n",LM93_TEMP_FROM_REG(data->block2[nr]));
1254}
1255
1256static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
1257static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1);
1258static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2);
1259
1260static ssize_t show_temp_min(struct device *dev,
1261				struct device_attribute *attr, char *buf)
1262{
1263	int nr = (to_sensor_dev_attr(attr))->index;
1264	struct lm93_data *data = lm93_update_device(dev);
1265	return sprintf(buf,"%d\n",LM93_TEMP_FROM_REG(data->temp_lim[nr].min));
1266}
1267
1268static ssize_t store_temp_min(struct device *dev, struct device_attribute *attr,
1269			      const char *buf, size_t count)
 
1270{
1271	int nr = (to_sensor_dev_attr(attr))->index;
1272	struct i2c_client *client = to_i2c_client(dev);
1273	struct lm93_data *data = i2c_get_clientdata(client);
1274	long val = simple_strtol(buf, NULL, 10);
 
 
 
 
 
1275
1276	mutex_lock(&data->update_lock);
1277	data->temp_lim[nr].min = LM93_TEMP_TO_REG(val);
1278	lm93_write_byte(client, LM93_REG_TEMP_MIN(nr), data->temp_lim[nr].min);
1279	mutex_unlock(&data->update_lock);
1280	return count;
1281}
1282
1283static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO,
1284			  show_temp_min, store_temp_min, 0);
1285static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO,
1286			  show_temp_min, store_temp_min, 1);
1287static SENSOR_DEVICE_ATTR(temp3_min, S_IWUSR | S_IRUGO,
1288			  show_temp_min, store_temp_min, 2);
1289
1290static ssize_t show_temp_max(struct device *dev,
1291			     struct device_attribute *attr, char *buf)
1292{
1293	int nr = (to_sensor_dev_attr(attr))->index;
1294	struct lm93_data *data = lm93_update_device(dev);
1295	return sprintf(buf,"%d\n",LM93_TEMP_FROM_REG(data->temp_lim[nr].max));
1296}
1297
1298static ssize_t store_temp_max(struct device *dev, struct device_attribute *attr,
1299			      const char *buf, size_t count)
 
1300{
1301	int nr = (to_sensor_dev_attr(attr))->index;
1302	struct i2c_client *client = to_i2c_client(dev);
1303	struct lm93_data *data = i2c_get_clientdata(client);
1304	long val = simple_strtol(buf, NULL, 10);
 
 
 
 
 
1305
1306	mutex_lock(&data->update_lock);
1307	data->temp_lim[nr].max = LM93_TEMP_TO_REG(val);
1308	lm93_write_byte(client, LM93_REG_TEMP_MAX(nr), data->temp_lim[nr].max);
1309	mutex_unlock(&data->update_lock);
1310	return count;
1311}
1312
1313static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO,
1314			  show_temp_max, store_temp_max, 0);
1315static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO,
1316			  show_temp_max, store_temp_max, 1);
1317static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO,
1318			  show_temp_max, store_temp_max, 2);
1319
1320static ssize_t show_temp_auto_base(struct device *dev,
1321				struct device_attribute *attr, char *buf)
1322{
1323	int nr = (to_sensor_dev_attr(attr))->index;
1324	struct lm93_data *data = lm93_update_device(dev);
1325	return sprintf(buf,"%d\n",LM93_TEMP_FROM_REG(data->block10.base[nr]));
1326}
1327
1328static ssize_t store_temp_auto_base(struct device *dev,
1329					struct device_attribute *attr,
1330					const char *buf, size_t count)
1331{
1332	int nr = (to_sensor_dev_attr(attr))->index;
1333	struct i2c_client *client = to_i2c_client(dev);
1334	struct lm93_data *data = i2c_get_clientdata(client);
1335	long val = simple_strtol(buf, NULL, 10);
 
 
 
 
 
1336
1337	mutex_lock(&data->update_lock);
1338	data->block10.base[nr] = LM93_TEMP_TO_REG(val);
1339	lm93_write_byte(client, LM93_REG_TEMP_BASE(nr), data->block10.base[nr]);
1340	mutex_unlock(&data->update_lock);
1341	return count;
1342}
1343
1344static SENSOR_DEVICE_ATTR(temp1_auto_base, S_IWUSR | S_IRUGO,
1345			  show_temp_auto_base, store_temp_auto_base, 0);
1346static SENSOR_DEVICE_ATTR(temp2_auto_base, S_IWUSR | S_IRUGO,
1347			  show_temp_auto_base, store_temp_auto_base, 1);
1348static SENSOR_DEVICE_ATTR(temp3_auto_base, S_IWUSR | S_IRUGO,
1349			  show_temp_auto_base, store_temp_auto_base, 2);
1350
1351static ssize_t show_temp_auto_boost(struct device *dev,
1352				    struct device_attribute *attr,char *buf)
1353{
1354	int nr = (to_sensor_dev_attr(attr))->index;
1355	struct lm93_data *data = lm93_update_device(dev);
1356	return sprintf(buf,"%d\n",LM93_TEMP_FROM_REG(data->boost[nr]));
1357}
1358
1359static ssize_t store_temp_auto_boost(struct device *dev,
1360				     struct device_attribute *attr,
1361				     const char *buf, size_t count)
1362{
1363	int nr = (to_sensor_dev_attr(attr))->index;
1364	struct i2c_client *client = to_i2c_client(dev);
1365	struct lm93_data *data = i2c_get_clientdata(client);
1366	long val = simple_strtol(buf, NULL, 10);
 
 
 
 
 
1367
1368	mutex_lock(&data->update_lock);
1369	data->boost[nr] = LM93_TEMP_TO_REG(val);
1370	lm93_write_byte(client, LM93_REG_BOOST(nr), data->boost[nr]);
1371	mutex_unlock(&data->update_lock);
1372	return count;
1373}
1374
1375static SENSOR_DEVICE_ATTR(temp1_auto_boost, S_IWUSR | S_IRUGO,
1376			  show_temp_auto_boost, store_temp_auto_boost, 0);
1377static SENSOR_DEVICE_ATTR(temp2_auto_boost, S_IWUSR | S_IRUGO,
1378			  show_temp_auto_boost, store_temp_auto_boost, 1);
1379static SENSOR_DEVICE_ATTR(temp3_auto_boost, S_IWUSR | S_IRUGO,
1380			  show_temp_auto_boost, store_temp_auto_boost, 2);
1381
1382static ssize_t show_temp_auto_boost_hyst(struct device *dev,
1383					 struct device_attribute *attr,
1384					 char *buf)
1385{
1386	int nr = (to_sensor_dev_attr(attr))->index;
1387	struct lm93_data *data = lm93_update_device(dev);
1388	int mode = LM93_TEMP_OFFSET_MODE_FROM_REG(data->sfc2, nr);
1389	return sprintf(buf,"%d\n",
1390		       LM93_AUTO_BOOST_HYST_FROM_REGS(data, nr, mode));
1391}
1392
1393static ssize_t store_temp_auto_boost_hyst(struct device *dev,
1394					  struct device_attribute *attr,
1395					  const char *buf, size_t count)
1396{
1397	int nr = (to_sensor_dev_attr(attr))->index;
1398	struct i2c_client *client = to_i2c_client(dev);
1399	struct lm93_data *data = i2c_get_clientdata(client);
1400	u32 val = simple_strtoul(buf, NULL, 10);
 
 
 
 
 
1401
1402	mutex_lock(&data->update_lock);
1403	/* force 0.5C/bit mode */
1404	data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1405	data->sfc2 |= ((nr < 2) ? 0x10 : 0x20);
1406	lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1407	data->boost_hyst[nr/2] = LM93_AUTO_BOOST_HYST_TO_REG(data, val, nr, 1);
1408	lm93_write_byte(client, LM93_REG_BOOST_HYST(nr),
1409			data->boost_hyst[nr/2]);
1410	mutex_unlock(&data->update_lock);
1411	return count;
1412}
1413
1414static SENSOR_DEVICE_ATTR(temp1_auto_boost_hyst, S_IWUSR | S_IRUGO,
1415			  show_temp_auto_boost_hyst,
1416			  store_temp_auto_boost_hyst, 0);
1417static SENSOR_DEVICE_ATTR(temp2_auto_boost_hyst, S_IWUSR | S_IRUGO,
1418			  show_temp_auto_boost_hyst,
1419			  store_temp_auto_boost_hyst, 1);
1420static SENSOR_DEVICE_ATTR(temp3_auto_boost_hyst, S_IWUSR | S_IRUGO,
1421			  show_temp_auto_boost_hyst,
1422			  store_temp_auto_boost_hyst, 2);
1423
1424static ssize_t show_temp_auto_offset(struct device *dev,
1425				struct device_attribute *attr, char *buf)
1426{
1427	struct sensor_device_attribute_2 *s_attr = to_sensor_dev_attr_2(attr);
1428	int nr = s_attr->index;
1429	int ofs = s_attr->nr;
1430	struct lm93_data *data = lm93_update_device(dev);
1431	int mode = LM93_TEMP_OFFSET_MODE_FROM_REG(data->sfc2, nr);
1432	return sprintf(buf,"%d\n",
1433	       LM93_TEMP_AUTO_OFFSET_FROM_REG(data->block10.offset[ofs],
1434					      nr,mode));
1435}
1436
1437static ssize_t store_temp_auto_offset(struct device *dev,
1438					struct device_attribute *attr,
1439					const char *buf, size_t count)
1440{
1441	struct sensor_device_attribute_2 *s_attr = to_sensor_dev_attr_2(attr);
1442	int nr = s_attr->index;
1443	int ofs = s_attr->nr;
1444	struct i2c_client *client = to_i2c_client(dev);
1445	struct lm93_data *data = i2c_get_clientdata(client);
1446	u32 val = simple_strtoul(buf, NULL, 10);
 
 
 
 
 
1447
1448	mutex_lock(&data->update_lock);
1449	/* force 0.5C/bit mode */
1450	data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1451	data->sfc2 |= ((nr < 2) ? 0x10 : 0x20);
1452	lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1453	data->block10.offset[ofs] = LM93_TEMP_AUTO_OFFSET_TO_REG(
1454			data->block10.offset[ofs], val, nr, 1);
1455	lm93_write_byte(client, LM93_REG_TEMP_OFFSET(ofs),
1456			data->block10.offset[ofs]);
1457	mutex_unlock(&data->update_lock);
1458	return count;
1459}
1460
1461static SENSOR_DEVICE_ATTR_2(temp1_auto_offset1, S_IWUSR | S_IRUGO,
1462			  show_temp_auto_offset, store_temp_auto_offset, 0, 0);
1463static SENSOR_DEVICE_ATTR_2(temp1_auto_offset2, S_IWUSR | S_IRUGO,
1464			  show_temp_auto_offset, store_temp_auto_offset, 1, 0);
1465static SENSOR_DEVICE_ATTR_2(temp1_auto_offset3, S_IWUSR | S_IRUGO,
1466			  show_temp_auto_offset, store_temp_auto_offset, 2, 0);
1467static SENSOR_DEVICE_ATTR_2(temp1_auto_offset4, S_IWUSR | S_IRUGO,
1468			  show_temp_auto_offset, store_temp_auto_offset, 3, 0);
1469static SENSOR_DEVICE_ATTR_2(temp1_auto_offset5, S_IWUSR | S_IRUGO,
1470			  show_temp_auto_offset, store_temp_auto_offset, 4, 0);
1471static SENSOR_DEVICE_ATTR_2(temp1_auto_offset6, S_IWUSR | S_IRUGO,
1472			  show_temp_auto_offset, store_temp_auto_offset, 5, 0);
1473static SENSOR_DEVICE_ATTR_2(temp1_auto_offset7, S_IWUSR | S_IRUGO,
1474			  show_temp_auto_offset, store_temp_auto_offset, 6, 0);
1475static SENSOR_DEVICE_ATTR_2(temp1_auto_offset8, S_IWUSR | S_IRUGO,
1476			  show_temp_auto_offset, store_temp_auto_offset, 7, 0);
1477static SENSOR_DEVICE_ATTR_2(temp1_auto_offset9, S_IWUSR | S_IRUGO,
1478			  show_temp_auto_offset, store_temp_auto_offset, 8, 0);
1479static SENSOR_DEVICE_ATTR_2(temp1_auto_offset10, S_IWUSR | S_IRUGO,
1480			  show_temp_auto_offset, store_temp_auto_offset, 9, 0);
1481static SENSOR_DEVICE_ATTR_2(temp1_auto_offset11, S_IWUSR | S_IRUGO,
1482			  show_temp_auto_offset, store_temp_auto_offset, 10, 0);
1483static SENSOR_DEVICE_ATTR_2(temp1_auto_offset12, S_IWUSR | S_IRUGO,
1484			  show_temp_auto_offset, store_temp_auto_offset, 11, 0);
1485static SENSOR_DEVICE_ATTR_2(temp2_auto_offset1, S_IWUSR | S_IRUGO,
1486			  show_temp_auto_offset, store_temp_auto_offset, 0, 1);
1487static SENSOR_DEVICE_ATTR_2(temp2_auto_offset2, S_IWUSR | S_IRUGO,
1488			  show_temp_auto_offset, store_temp_auto_offset, 1, 1);
1489static SENSOR_DEVICE_ATTR_2(temp2_auto_offset3, S_IWUSR | S_IRUGO,
1490			  show_temp_auto_offset, store_temp_auto_offset, 2, 1);
1491static SENSOR_DEVICE_ATTR_2(temp2_auto_offset4, S_IWUSR | S_IRUGO,
1492			  show_temp_auto_offset, store_temp_auto_offset, 3, 1);
1493static SENSOR_DEVICE_ATTR_2(temp2_auto_offset5, S_IWUSR | S_IRUGO,
1494			  show_temp_auto_offset, store_temp_auto_offset, 4, 1);
1495static SENSOR_DEVICE_ATTR_2(temp2_auto_offset6, S_IWUSR | S_IRUGO,
1496			  show_temp_auto_offset, store_temp_auto_offset, 5, 1);
1497static SENSOR_DEVICE_ATTR_2(temp2_auto_offset7, S_IWUSR | S_IRUGO,
1498			  show_temp_auto_offset, store_temp_auto_offset, 6, 1);
1499static SENSOR_DEVICE_ATTR_2(temp2_auto_offset8, S_IWUSR | S_IRUGO,
1500			  show_temp_auto_offset, store_temp_auto_offset, 7, 1);
1501static SENSOR_DEVICE_ATTR_2(temp2_auto_offset9, S_IWUSR | S_IRUGO,
1502			  show_temp_auto_offset, store_temp_auto_offset, 8, 1);
1503static SENSOR_DEVICE_ATTR_2(temp2_auto_offset10, S_IWUSR | S_IRUGO,
1504			  show_temp_auto_offset, store_temp_auto_offset, 9, 1);
1505static SENSOR_DEVICE_ATTR_2(temp2_auto_offset11, S_IWUSR | S_IRUGO,
1506			  show_temp_auto_offset, store_temp_auto_offset, 10, 1);
1507static SENSOR_DEVICE_ATTR_2(temp2_auto_offset12, S_IWUSR | S_IRUGO,
1508			  show_temp_auto_offset, store_temp_auto_offset, 11, 1);
1509static SENSOR_DEVICE_ATTR_2(temp3_auto_offset1, S_IWUSR | S_IRUGO,
1510			  show_temp_auto_offset, store_temp_auto_offset, 0, 2);
1511static SENSOR_DEVICE_ATTR_2(temp3_auto_offset2, S_IWUSR | S_IRUGO,
1512			  show_temp_auto_offset, store_temp_auto_offset, 1, 2);
1513static SENSOR_DEVICE_ATTR_2(temp3_auto_offset3, S_IWUSR | S_IRUGO,
1514			  show_temp_auto_offset, store_temp_auto_offset, 2, 2);
1515static SENSOR_DEVICE_ATTR_2(temp3_auto_offset4, S_IWUSR | S_IRUGO,
1516			  show_temp_auto_offset, store_temp_auto_offset, 3, 2);
1517static SENSOR_DEVICE_ATTR_2(temp3_auto_offset5, S_IWUSR | S_IRUGO,
1518			  show_temp_auto_offset, store_temp_auto_offset, 4, 2);
1519static SENSOR_DEVICE_ATTR_2(temp3_auto_offset6, S_IWUSR | S_IRUGO,
1520			  show_temp_auto_offset, store_temp_auto_offset, 5, 2);
1521static SENSOR_DEVICE_ATTR_2(temp3_auto_offset7, S_IWUSR | S_IRUGO,
1522			  show_temp_auto_offset, store_temp_auto_offset, 6, 2);
1523static SENSOR_DEVICE_ATTR_2(temp3_auto_offset8, S_IWUSR | S_IRUGO,
1524			  show_temp_auto_offset, store_temp_auto_offset, 7, 2);
1525static SENSOR_DEVICE_ATTR_2(temp3_auto_offset9, S_IWUSR | S_IRUGO,
1526			  show_temp_auto_offset, store_temp_auto_offset, 8, 2);
1527static SENSOR_DEVICE_ATTR_2(temp3_auto_offset10, S_IWUSR | S_IRUGO,
1528			  show_temp_auto_offset, store_temp_auto_offset, 9, 2);
1529static SENSOR_DEVICE_ATTR_2(temp3_auto_offset11, S_IWUSR | S_IRUGO,
1530			  show_temp_auto_offset, store_temp_auto_offset, 10, 2);
1531static SENSOR_DEVICE_ATTR_2(temp3_auto_offset12, S_IWUSR | S_IRUGO,
1532			  show_temp_auto_offset, store_temp_auto_offset, 11, 2);
1533
1534static ssize_t show_temp_auto_pwm_min(struct device *dev,
1535				struct device_attribute *attr, char *buf)
1536{
1537	int nr = (to_sensor_dev_attr(attr))->index;
1538	u8 reg, ctl4;
1539	struct lm93_data *data = lm93_update_device(dev);
1540	reg = data->auto_pwm_min_hyst[nr/2] >> 4 & 0x0f;
1541	ctl4 = data->block9[nr][LM93_PWM_CTL4];
1542	return sprintf(buf,"%d\n",LM93_PWM_FROM_REG(reg, (ctl4 & 0x07) ?
1543				LM93_PWM_MAP_LO_FREQ : LM93_PWM_MAP_HI_FREQ));
1544}
1545
1546static ssize_t store_temp_auto_pwm_min(struct device *dev,
1547					struct device_attribute *attr,
1548					const char *buf, size_t count)
1549{
1550	int nr = (to_sensor_dev_attr(attr))->index;
1551	struct i2c_client *client = to_i2c_client(dev);
1552	struct lm93_data *data = i2c_get_clientdata(client);
1553	u32 val = simple_strtoul(buf, NULL, 10);
1554	u8 reg, ctl4;
 
 
 
 
 
 
1555
1556	mutex_lock(&data->update_lock);
1557	reg = lm93_read_byte(client, LM93_REG_PWM_MIN_HYST(nr));
1558	ctl4 = lm93_read_byte(client, LM93_REG_PWM_CTL(nr,LM93_PWM_CTL4));
1559	reg = (reg & 0x0f) |
1560		LM93_PWM_TO_REG(val, (ctl4 & 0x07) ?
1561				LM93_PWM_MAP_LO_FREQ :
1562				LM93_PWM_MAP_HI_FREQ) << 4;
1563	data->auto_pwm_min_hyst[nr/2] = reg;
1564	lm93_write_byte(client, LM93_REG_PWM_MIN_HYST(nr), reg);
1565	mutex_unlock(&data->update_lock);
1566	return count;
1567}
1568
1569static SENSOR_DEVICE_ATTR(temp1_auto_pwm_min, S_IWUSR | S_IRUGO,
1570			  show_temp_auto_pwm_min,
1571			  store_temp_auto_pwm_min, 0);
1572static SENSOR_DEVICE_ATTR(temp2_auto_pwm_min, S_IWUSR | S_IRUGO,
1573			  show_temp_auto_pwm_min,
1574			  store_temp_auto_pwm_min, 1);
1575static SENSOR_DEVICE_ATTR(temp3_auto_pwm_min, S_IWUSR | S_IRUGO,
1576			  show_temp_auto_pwm_min,
1577			  store_temp_auto_pwm_min, 2);
1578
1579static ssize_t show_temp_auto_offset_hyst(struct device *dev,
1580				struct device_attribute *attr, char *buf)
 
1581{
1582	int nr = (to_sensor_dev_attr(attr))->index;
1583	struct lm93_data *data = lm93_update_device(dev);
1584	int mode = LM93_TEMP_OFFSET_MODE_FROM_REG(data->sfc2, nr);
1585	return sprintf(buf,"%d\n",LM93_TEMP_OFFSET_FROM_REG(
1586					data->auto_pwm_min_hyst[nr/2], mode));
1587}
1588
1589static ssize_t store_temp_auto_offset_hyst(struct device *dev,
1590						struct device_attribute *attr,
1591						const char *buf, size_t count)
1592{
1593	int nr = (to_sensor_dev_attr(attr))->index;
1594	struct i2c_client *client = to_i2c_client(dev);
1595	struct lm93_data *data = i2c_get_clientdata(client);
1596	u32 val = simple_strtoul(buf, NULL, 10);
1597	u8 reg;
 
 
 
 
 
 
1598
1599	mutex_lock(&data->update_lock);
1600	/* force 0.5C/bit mode */
1601	data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1602	data->sfc2 |= ((nr < 2) ? 0x10 : 0x20);
1603	lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1604	reg = data->auto_pwm_min_hyst[nr/2];
1605	reg = (reg & 0xf0) | (LM93_TEMP_OFFSET_TO_REG(val, 1) & 0x0f);
1606	data->auto_pwm_min_hyst[nr/2] = reg;
1607	lm93_write_byte(client, LM93_REG_PWM_MIN_HYST(nr), reg);
1608	mutex_unlock(&data->update_lock);
1609	return count;
1610}
1611
1612static SENSOR_DEVICE_ATTR(temp1_auto_offset_hyst, S_IWUSR | S_IRUGO,
1613			  show_temp_auto_offset_hyst,
1614			  store_temp_auto_offset_hyst, 0);
1615static SENSOR_DEVICE_ATTR(temp2_auto_offset_hyst, S_IWUSR | S_IRUGO,
1616			  show_temp_auto_offset_hyst,
1617			  store_temp_auto_offset_hyst, 1);
1618static SENSOR_DEVICE_ATTR(temp3_auto_offset_hyst, S_IWUSR | S_IRUGO,
1619			  show_temp_auto_offset_hyst,
1620			  store_temp_auto_offset_hyst, 2);
1621
1622static ssize_t show_fan_input(struct device *dev,
1623		struct device_attribute *attr, char *buf)
1624{
1625	struct sensor_device_attribute *s_attr = to_sensor_dev_attr(attr);
1626	int nr = s_attr->index;
1627	struct lm93_data *data = lm93_update_device(dev);
1628
1629	return sprintf(buf,"%d\n",LM93_FAN_FROM_REG(data->block5[nr]));
1630}
1631
1632static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan_input, NULL, 0);
1633static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan_input, NULL, 1);
1634static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan_input, NULL, 2);
1635static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan_input, NULL, 3);
1636
1637static ssize_t show_fan_min(struct device *dev,
1638			      struct device_attribute *attr, char *buf)
1639{
1640	int nr = (to_sensor_dev_attr(attr))->index;
1641	struct lm93_data *data = lm93_update_device(dev);
1642
1643	return sprintf(buf,"%d\n",LM93_FAN_FROM_REG(data->block8[nr]));
1644}
1645
1646static ssize_t store_fan_min(struct device *dev, struct device_attribute *attr,
1647				const char *buf, size_t count)
 
1648{
1649	int nr = (to_sensor_dev_attr(attr))->index;
1650	struct i2c_client *client = to_i2c_client(dev);
1651	struct lm93_data *data = i2c_get_clientdata(client);
1652	u32 val = simple_strtoul(buf, NULL, 10);
 
 
 
 
 
1653
1654	mutex_lock(&data->update_lock);
1655	data->block8[nr] = LM93_FAN_TO_REG(val);
1656	lm93_write_word(client,LM93_REG_FAN_MIN(nr),data->block8[nr]);
1657	mutex_unlock(&data->update_lock);
1658	return count;
1659}
1660
1661static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO,
1662			  show_fan_min, store_fan_min, 0);
1663static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO,
1664			  show_fan_min, store_fan_min, 1);
1665static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO,
1666			  show_fan_min, store_fan_min, 2);
1667static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO,
1668			  show_fan_min, store_fan_min, 3);
1669
1670/* some tedious bit-twiddling here to deal with the register format:
1671
1672	data->sf_tach_to_pwm: (tach to pwm mapping bits)
1673
1674		bit |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0
1675		     T4:P2 T4:P1 T3:P2 T3:P1 T2:P2 T2:P1 T1:P2 T1:P1
1676
1677	data->sfc2: (enable bits)
1678
1679		bit |  3  |  2  |  1  |  0
1680		       T4    T3    T2    T1
1681*/
 
 
 
 
 
1682
1683static ssize_t show_fan_smart_tach(struct device *dev,
1684				struct device_attribute *attr, char *buf)
1685{
1686	int nr = (to_sensor_dev_attr(attr))->index;
1687	struct lm93_data *data = lm93_update_device(dev);
1688	long rc = 0;
1689	int mapping;
1690
1691	/* extract the relevant mapping */
1692	mapping = (data->sf_tach_to_pwm >> (nr * 2)) & 0x03;
1693
1694	/* if there's a mapping and it's enabled */
1695	if (mapping && ((data->sfc2 >> nr) & 0x01))
1696		rc = mapping;
1697	return sprintf(buf,"%ld\n",rc);
1698}
1699
1700/* helper function - must grab data->update_lock before calling
1701   fan is 0-3, indicating fan1-fan4 */
 
 
1702static void lm93_write_fan_smart_tach(struct i2c_client *client,
1703	struct lm93_data *data, int fan, long value)
1704{
1705	/* insert the new mapping and write it out */
1706	data->sf_tach_to_pwm = lm93_read_byte(client, LM93_REG_SF_TACH_TO_PWM);
1707	data->sf_tach_to_pwm &= ~(0x3 << fan * 2);
1708	data->sf_tach_to_pwm |= value << fan * 2;
1709	lm93_write_byte(client, LM93_REG_SF_TACH_TO_PWM, data->sf_tach_to_pwm);
1710
1711	/* insert the enable bit and write it out */
1712	data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1713	if (value)
1714		data->sfc2 |= 1 << fan;
1715	else
1716		data->sfc2 &= ~(1 << fan);
1717	lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1718}
1719
1720static ssize_t store_fan_smart_tach(struct device *dev,
1721					struct device_attribute *attr,
1722					const char *buf, size_t count)
1723{
1724	int nr = (to_sensor_dev_attr(attr))->index;
1725	struct i2c_client *client = to_i2c_client(dev);
1726	struct lm93_data *data = i2c_get_clientdata(client);
1727	u32 val = simple_strtoul(buf, NULL, 10);
 
 
 
 
 
1728
1729	mutex_lock(&data->update_lock);
1730	/* sanity test, ignore the write otherwise */
1731	if (0 <= val && val <= 2) {
1732		/* can't enable if pwm freq is 22.5KHz */
1733		if (val) {
1734			u8 ctl4 = lm93_read_byte(client,
1735				LM93_REG_PWM_CTL(val-1,LM93_PWM_CTL4));
1736			if ((ctl4 & 0x07) == 0)
1737				val = 0;
1738		}
1739		lm93_write_fan_smart_tach(client, data, nr, val);
1740	}
1741	mutex_unlock(&data->update_lock);
1742	return count;
1743}
1744
1745static SENSOR_DEVICE_ATTR(fan1_smart_tach, S_IWUSR | S_IRUGO,
1746			  show_fan_smart_tach, store_fan_smart_tach, 0);
1747static SENSOR_DEVICE_ATTR(fan2_smart_tach, S_IWUSR | S_IRUGO,
1748			  show_fan_smart_tach, store_fan_smart_tach, 1);
1749static SENSOR_DEVICE_ATTR(fan3_smart_tach, S_IWUSR | S_IRUGO,
1750			  show_fan_smart_tach, store_fan_smart_tach, 2);
1751static SENSOR_DEVICE_ATTR(fan4_smart_tach, S_IWUSR | S_IRUGO,
1752			  show_fan_smart_tach, store_fan_smart_tach, 3);
1753
1754static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
1755			char *buf)
1756{
1757	int nr = (to_sensor_dev_attr(attr))->index;
1758	struct lm93_data *data = lm93_update_device(dev);
1759	u8 ctl2, ctl4;
1760	long rc;
1761
1762	ctl2 = data->block9[nr][LM93_PWM_CTL2];
1763	ctl4 = data->block9[nr][LM93_PWM_CTL4];
1764	if (ctl2 & 0x01) /* show user commanded value if enabled */
1765		rc = data->pwm_override[nr];
1766	else /* show present h/w value if manual pwm disabled */
1767		rc = LM93_PWM_FROM_REG(ctl2 >> 4, (ctl4 & 0x07) ?
1768			LM93_PWM_MAP_LO_FREQ : LM93_PWM_MAP_HI_FREQ);
1769	return sprintf(buf,"%ld\n",rc);
1770}
1771
1772static ssize_t store_pwm(struct device *dev, struct device_attribute *attr,
1773				const char *buf, size_t count)
1774{
1775	int nr = (to_sensor_dev_attr(attr))->index;
1776	struct i2c_client *client = to_i2c_client(dev);
1777	struct lm93_data *data = i2c_get_clientdata(client);
1778	u32 val = simple_strtoul(buf, NULL, 10);
1779	u8 ctl2, ctl4;
 
 
 
 
 
 
1780
1781	mutex_lock(&data->update_lock);
1782	ctl2 = lm93_read_byte(client,LM93_REG_PWM_CTL(nr,LM93_PWM_CTL2));
1783	ctl4 = lm93_read_byte(client, LM93_REG_PWM_CTL(nr,LM93_PWM_CTL4));
1784	ctl2 = (ctl2 & 0x0f) | LM93_PWM_TO_REG(val,(ctl4 & 0x07) ?
1785			LM93_PWM_MAP_LO_FREQ : LM93_PWM_MAP_HI_FREQ) << 4;
1786	/* save user commanded value */
1787	data->pwm_override[nr] = LM93_PWM_FROM_REG(ctl2 >> 4,
1788			(ctl4 & 0x07) ?  LM93_PWM_MAP_LO_FREQ :
1789			LM93_PWM_MAP_HI_FREQ);
1790	lm93_write_byte(client,LM93_REG_PWM_CTL(nr,LM93_PWM_CTL2),ctl2);
1791	mutex_unlock(&data->update_lock);
1792	return count;
1793}
1794
1795static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 0);
1796static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 1);
1797
1798static ssize_t show_pwm_enable(struct device *dev,
1799				struct device_attribute *attr, char *buf)
1800{
1801	int nr = (to_sensor_dev_attr(attr))->index;
1802	struct lm93_data *data = lm93_update_device(dev);
1803	u8 ctl2;
1804	long rc;
1805
1806	ctl2 = data->block9[nr][LM93_PWM_CTL2];
1807	if (ctl2 & 0x01) /* manual override enabled ? */
1808		rc = ((ctl2 & 0xF0) == 0xF0) ? 0 : 1;
1809	else
1810		rc = 2;
1811	return sprintf(buf,"%ld\n",rc);
1812}
1813
1814static ssize_t store_pwm_enable(struct device *dev,
1815				struct device_attribute *attr,
1816				const char *buf, size_t count)
1817{
1818	int nr = (to_sensor_dev_attr(attr))->index;
1819	struct i2c_client *client = to_i2c_client(dev);
1820	struct lm93_data *data = i2c_get_clientdata(client);
1821	u32 val = simple_strtoul(buf, NULL, 10);
1822	u8 ctl2;
 
 
 
 
 
 
1823
1824	mutex_lock(&data->update_lock);
1825	ctl2 = lm93_read_byte(client,LM93_REG_PWM_CTL(nr,LM93_PWM_CTL2));
1826
1827	switch (val) {
1828	case 0:
1829		ctl2 |= 0xF1; /* enable manual override, set PWM to max */
1830		break;
1831	case 1: ctl2 |= 0x01; /* enable manual override */
 
1832		break;
1833	case 2: ctl2 &= ~0x01; /* disable manual override */
 
1834		break;
1835	default:
1836		mutex_unlock(&data->update_lock);
1837		return -EINVAL;
1838	}
1839
1840	lm93_write_byte(client,LM93_REG_PWM_CTL(nr,LM93_PWM_CTL2),ctl2);
1841	mutex_unlock(&data->update_lock);
1842	return count;
1843}
1844
1845static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO,
1846				show_pwm_enable, store_pwm_enable, 0);
1847static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO,
1848				show_pwm_enable, store_pwm_enable, 1);
1849
1850static ssize_t show_pwm_freq(struct device *dev, struct device_attribute *attr,
1851				char *buf)
1852{
1853	int nr = (to_sensor_dev_attr(attr))->index;
1854	struct lm93_data *data = lm93_update_device(dev);
1855	u8 ctl4;
1856
1857	ctl4 = data->block9[nr][LM93_PWM_CTL4];
1858	return sprintf(buf,"%d\n",LM93_PWM_FREQ_FROM_REG(ctl4));
1859}
1860
1861/* helper function - must grab data->update_lock before calling
1862   pwm is 0-1, indicating pwm1-pwm2
1863   this disables smart tach for all tach channels bound to the given pwm */
 
 
1864static void lm93_disable_fan_smart_tach(struct i2c_client *client,
1865	struct lm93_data *data, int pwm)
1866{
1867	int mapping = lm93_read_byte(client, LM93_REG_SF_TACH_TO_PWM);
1868	int mask;
1869
1870	/* collapse the mapping into a mask of enable bits */
1871	mapping = (mapping >> pwm) & 0x55;
1872	mask = mapping & 0x01;
1873	mask |= (mapping & 0x04) >> 1;
1874	mask |= (mapping & 0x10) >> 2;
1875	mask |= (mapping & 0x40) >> 3;
1876
1877	/* disable smart tach according to the mask */
1878	data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1879	data->sfc2 &= ~mask;
1880	lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1881}
1882
1883static ssize_t store_pwm_freq(struct device *dev,
1884				struct device_attribute *attr,
1885				const char *buf, size_t count)
1886{
1887	int nr = (to_sensor_dev_attr(attr))->index;
1888	struct i2c_client *client = to_i2c_client(dev);
1889	struct lm93_data *data = i2c_get_clientdata(client);
1890	u32 val = simple_strtoul(buf, NULL, 10);
1891	u8 ctl4;
 
 
 
 
 
 
1892
1893	mutex_lock(&data->update_lock);
1894	ctl4 = lm93_read_byte(client,LM93_REG_PWM_CTL(nr,LM93_PWM_CTL4));
1895	ctl4 = (ctl4 & 0xf8) | LM93_PWM_FREQ_TO_REG(val);
1896	data->block9[nr][LM93_PWM_CTL4] = ctl4;
1897	/* ctl4 == 0 -> 22.5KHz -> disable smart tach */
1898	if (!ctl4)
1899		lm93_disable_fan_smart_tach(client, data, nr);
1900	lm93_write_byte(client,	LM93_REG_PWM_CTL(nr,LM93_PWM_CTL4), ctl4);
1901	mutex_unlock(&data->update_lock);
1902	return count;
1903}
1904
1905static SENSOR_DEVICE_ATTR(pwm1_freq, S_IWUSR | S_IRUGO,
1906			  show_pwm_freq, store_pwm_freq, 0);
1907static SENSOR_DEVICE_ATTR(pwm2_freq, S_IWUSR | S_IRUGO,
1908			  show_pwm_freq, store_pwm_freq, 1);
1909
1910static ssize_t show_pwm_auto_channels(struct device *dev,
1911				struct device_attribute *attr, char *buf)
 
1912{
1913	int nr = (to_sensor_dev_attr(attr))->index;
1914	struct lm93_data *data = lm93_update_device(dev);
1915	return sprintf(buf,"%d\n",data->block9[nr][LM93_PWM_CTL1]);
1916}
1917
1918static ssize_t store_pwm_auto_channels(struct device *dev,
1919					struct device_attribute *attr,
1920					const char *buf, size_t count)
1921{
1922	int nr = (to_sensor_dev_attr(attr))->index;
1923	struct i2c_client *client = to_i2c_client(dev);
1924	struct lm93_data *data = i2c_get_clientdata(client);
1925	u32 val = simple_strtoul(buf, NULL, 10);
 
 
 
 
 
1926
1927	mutex_lock(&data->update_lock);
1928	data->block9[nr][LM93_PWM_CTL1] = SENSORS_LIMIT(val, 0, 255);
1929	lm93_write_byte(client,	LM93_REG_PWM_CTL(nr,LM93_PWM_CTL1),
1930				data->block9[nr][LM93_PWM_CTL1]);
1931	mutex_unlock(&data->update_lock);
1932	return count;
1933}
1934
1935static SENSOR_DEVICE_ATTR(pwm1_auto_channels, S_IWUSR | S_IRUGO,
1936			  show_pwm_auto_channels, store_pwm_auto_channels, 0);
1937static SENSOR_DEVICE_ATTR(pwm2_auto_channels, S_IWUSR | S_IRUGO,
1938			  show_pwm_auto_channels, store_pwm_auto_channels, 1);
1939
1940static ssize_t show_pwm_auto_spinup_min(struct device *dev,
1941				struct device_attribute *attr,char *buf)
 
1942{
1943	int nr = (to_sensor_dev_attr(attr))->index;
1944	struct lm93_data *data = lm93_update_device(dev);
1945	u8 ctl3, ctl4;
1946
1947	ctl3 = data->block9[nr][LM93_PWM_CTL3];
1948	ctl4 = data->block9[nr][LM93_PWM_CTL4];
1949	return sprintf(buf,"%d\n",
1950		       LM93_PWM_FROM_REG(ctl3 & 0x0f, (ctl4 & 0x07) ?
1951			LM93_PWM_MAP_LO_FREQ : LM93_PWM_MAP_HI_FREQ));
1952}
1953
1954static ssize_t store_pwm_auto_spinup_min(struct device *dev,
1955						struct device_attribute *attr,
1956						const char *buf, size_t count)
1957{
1958	int nr = (to_sensor_dev_attr(attr))->index;
1959	struct i2c_client *client = to_i2c_client(dev);
1960	struct lm93_data *data = i2c_get_clientdata(client);
1961	u32 val = simple_strtoul(buf, NULL, 10);
1962	u8 ctl3, ctl4;
 
 
 
 
 
 
1963
1964	mutex_lock(&data->update_lock);
1965	ctl3 = lm93_read_byte(client,LM93_REG_PWM_CTL(nr, LM93_PWM_CTL3));
1966	ctl4 = lm93_read_byte(client,LM93_REG_PWM_CTL(nr, LM93_PWM_CTL4));
1967	ctl3 = (ctl3 & 0xf0) | 	LM93_PWM_TO_REG(val, (ctl4 & 0x07) ?
1968			LM93_PWM_MAP_LO_FREQ :
1969			LM93_PWM_MAP_HI_FREQ);
1970	data->block9[nr][LM93_PWM_CTL3] = ctl3;
1971	lm93_write_byte(client,LM93_REG_PWM_CTL(nr, LM93_PWM_CTL3), ctl3);
1972	mutex_unlock(&data->update_lock);
1973	return count;
1974}
1975
1976static SENSOR_DEVICE_ATTR(pwm1_auto_spinup_min, S_IWUSR | S_IRUGO,
1977			  show_pwm_auto_spinup_min,
1978			  store_pwm_auto_spinup_min, 0);
1979static SENSOR_DEVICE_ATTR(pwm2_auto_spinup_min, S_IWUSR | S_IRUGO,
1980			  show_pwm_auto_spinup_min,
1981			  store_pwm_auto_spinup_min, 1);
1982
1983static ssize_t show_pwm_auto_spinup_time(struct device *dev,
1984				struct device_attribute *attr, char *buf)
 
1985{
1986	int nr = (to_sensor_dev_attr(attr))->index;
1987	struct lm93_data *data = lm93_update_device(dev);
1988	return sprintf(buf,"%d\n",LM93_SPINUP_TIME_FROM_REG(
1989				data->block9[nr][LM93_PWM_CTL3]));
1990}
1991
1992static ssize_t store_pwm_auto_spinup_time(struct device *dev,
1993						struct device_attribute *attr,
1994						const char *buf, size_t count)
1995{
1996	int nr = (to_sensor_dev_attr(attr))->index;
1997	struct i2c_client *client = to_i2c_client(dev);
1998	struct lm93_data *data = i2c_get_clientdata(client);
1999	u32 val = simple_strtoul(buf, NULL, 10);
2000	u8 ctl3;
 
 
 
 
 
 
2001
2002	mutex_lock(&data->update_lock);
2003	ctl3 = lm93_read_byte(client,LM93_REG_PWM_CTL(nr, LM93_PWM_CTL3));
2004	ctl3 = (ctl3 & 0x1f) | (LM93_SPINUP_TIME_TO_REG(val) << 5 & 0xe0);
2005	data->block9[nr][LM93_PWM_CTL3] = ctl3;
2006	lm93_write_byte(client,LM93_REG_PWM_CTL(nr, LM93_PWM_CTL3), ctl3);
2007	mutex_unlock(&data->update_lock);
2008	return count;
2009}
2010
2011static SENSOR_DEVICE_ATTR(pwm1_auto_spinup_time, S_IWUSR | S_IRUGO,
2012			  show_pwm_auto_spinup_time,
2013			  store_pwm_auto_spinup_time, 0);
2014static SENSOR_DEVICE_ATTR(pwm2_auto_spinup_time, S_IWUSR | S_IRUGO,
2015			  show_pwm_auto_spinup_time,
2016			  store_pwm_auto_spinup_time, 1);
2017
2018static ssize_t show_pwm_auto_prochot_ramp(struct device *dev,
2019				struct device_attribute *attr, char *buf)
2020{
2021	struct lm93_data *data = lm93_update_device(dev);
2022	return sprintf(buf,"%d\n",
2023		       LM93_RAMP_FROM_REG(data->pwm_ramp_ctl >> 4 & 0x0f));
2024}
2025
2026static ssize_t store_pwm_auto_prochot_ramp(struct device *dev,
2027						struct device_attribute *attr,
2028						const char *buf, size_t count)
2029{
2030	struct i2c_client *client = to_i2c_client(dev);
2031	struct lm93_data *data = i2c_get_clientdata(client);
2032	u32 val = simple_strtoul(buf, NULL, 10);
2033	u8 ramp;
 
 
 
 
 
 
2034
2035	mutex_lock(&data->update_lock);
2036	ramp = lm93_read_byte(client, LM93_REG_PWM_RAMP_CTL);
2037	ramp = (ramp & 0x0f) | (LM93_RAMP_TO_REG(val) << 4 & 0xf0);
2038	lm93_write_byte(client, LM93_REG_PWM_RAMP_CTL, ramp);
2039	mutex_unlock(&data->update_lock);
2040	return count;
2041}
2042
2043static DEVICE_ATTR(pwm_auto_prochot_ramp, S_IRUGO | S_IWUSR,
2044			show_pwm_auto_prochot_ramp,
2045			store_pwm_auto_prochot_ramp);
2046
2047static ssize_t show_pwm_auto_vrdhot_ramp(struct device *dev,
2048				struct device_attribute *attr, char *buf)
2049{
2050	struct lm93_data *data = lm93_update_device(dev);
2051	return sprintf(buf,"%d\n",
2052		       LM93_RAMP_FROM_REG(data->pwm_ramp_ctl & 0x0f));
2053}
2054
2055static ssize_t store_pwm_auto_vrdhot_ramp(struct device *dev,
2056						struct device_attribute *attr,
2057						const char *buf, size_t count)
2058{
2059	struct i2c_client *client = to_i2c_client(dev);
2060	struct lm93_data *data = i2c_get_clientdata(client);
2061	u32 val = simple_strtoul(buf, NULL, 10);
2062	u8 ramp;
 
 
 
 
 
 
2063
2064	mutex_lock(&data->update_lock);
2065	ramp = lm93_read_byte(client, LM93_REG_PWM_RAMP_CTL);
2066	ramp = (ramp & 0xf0) | (LM93_RAMP_TO_REG(val) & 0x0f);
2067	lm93_write_byte(client, LM93_REG_PWM_RAMP_CTL, ramp);
2068	mutex_unlock(&data->update_lock);
2069	return 0;
2070}
2071
2072static DEVICE_ATTR(pwm_auto_vrdhot_ramp, S_IRUGO | S_IWUSR,
2073			show_pwm_auto_vrdhot_ramp,
2074			store_pwm_auto_vrdhot_ramp);
2075
2076static ssize_t show_vid(struct device *dev, struct device_attribute *attr,
2077			char *buf)
2078{
2079	int nr = (to_sensor_dev_attr(attr))->index;
2080	struct lm93_data *data = lm93_update_device(dev);
2081	return sprintf(buf,"%d\n",LM93_VID_FROM_REG(data->vid[nr]));
2082}
2083
2084static SENSOR_DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL, 0);
2085static SENSOR_DEVICE_ATTR(cpu1_vid, S_IRUGO, show_vid, NULL, 1);
2086
2087static ssize_t show_prochot(struct device *dev, struct device_attribute *attr,
2088				char *buf)
2089{
2090	int nr = (to_sensor_dev_attr(attr))->index;
2091	struct lm93_data *data = lm93_update_device(dev);
2092	return sprintf(buf,"%d\n",data->block4[nr].cur);
2093}
2094
2095static SENSOR_DEVICE_ATTR(prochot1, S_IRUGO, show_prochot, NULL, 0);
2096static SENSOR_DEVICE_ATTR(prochot2, S_IRUGO, show_prochot, NULL, 1);
2097
2098static ssize_t show_prochot_avg(struct device *dev,
2099				struct device_attribute *attr, char *buf)
2100{
2101	int nr = (to_sensor_dev_attr(attr))->index;
2102	struct lm93_data *data = lm93_update_device(dev);
2103	return sprintf(buf,"%d\n",data->block4[nr].avg);
2104}
2105
2106static SENSOR_DEVICE_ATTR(prochot1_avg, S_IRUGO, show_prochot_avg, NULL, 0);
2107static SENSOR_DEVICE_ATTR(prochot2_avg, S_IRUGO, show_prochot_avg, NULL, 1);
2108
2109static ssize_t show_prochot_max(struct device *dev,
2110				struct device_attribute *attr, char *buf)
2111{
2112	int nr = (to_sensor_dev_attr(attr))->index;
2113	struct lm93_data *data = lm93_update_device(dev);
2114	return sprintf(buf,"%d\n",data->prochot_max[nr]);
2115}
2116
2117static ssize_t store_prochot_max(struct device *dev,
2118					struct device_attribute *attr,
2119					const char *buf, size_t count)
2120{
2121	int nr = (to_sensor_dev_attr(attr))->index;
2122	struct i2c_client *client = to_i2c_client(dev);
2123	struct lm93_data *data = i2c_get_clientdata(client);
2124	u32 val = simple_strtoul(buf, NULL, 10);
 
 
 
 
 
2125
2126	mutex_lock(&data->update_lock);
2127	data->prochot_max[nr] = LM93_PROCHOT_TO_REG(val);
2128	lm93_write_byte(client, LM93_REG_PROCHOT_MAX(nr),
2129			data->prochot_max[nr]);
2130	mutex_unlock(&data->update_lock);
2131	return count;
2132}
2133
2134static SENSOR_DEVICE_ATTR(prochot1_max, S_IWUSR | S_IRUGO,
2135			  show_prochot_max, store_prochot_max, 0);
2136static SENSOR_DEVICE_ATTR(prochot2_max, S_IWUSR | S_IRUGO,
2137			  show_prochot_max, store_prochot_max, 1);
2138
2139static const u8 prochot_override_mask[] = { 0x80, 0x40 };
2140
2141static ssize_t show_prochot_override(struct device *dev,
2142				struct device_attribute *attr, char *buf)
2143{
2144	int nr = (to_sensor_dev_attr(attr))->index;
2145	struct lm93_data *data = lm93_update_device(dev);
2146	return sprintf(buf,"%d\n",
2147		(data->prochot_override & prochot_override_mask[nr]) ? 1 : 0);
2148}
2149
2150static ssize_t store_prochot_override(struct device *dev,
2151					struct device_attribute *attr,
2152					const char *buf, size_t count)
2153{
2154	int nr = (to_sensor_dev_attr(attr))->index;
2155	struct i2c_client *client = to_i2c_client(dev);
2156	struct lm93_data *data = i2c_get_clientdata(client);
2157	u32 val = simple_strtoul(buf, NULL, 10);
 
 
 
 
 
2158
2159	mutex_lock(&data->update_lock);
2160	if (val)
2161		data->prochot_override |= prochot_override_mask[nr];
2162	else
2163		data->prochot_override &= (~prochot_override_mask[nr]);
2164	lm93_write_byte(client, LM93_REG_PROCHOT_OVERRIDE,
2165			data->prochot_override);
2166	mutex_unlock(&data->update_lock);
2167	return count;
2168}
2169
2170static SENSOR_DEVICE_ATTR(prochot1_override, S_IWUSR | S_IRUGO,
2171			  show_prochot_override, store_prochot_override, 0);
2172static SENSOR_DEVICE_ATTR(prochot2_override, S_IWUSR | S_IRUGO,
2173			  show_prochot_override, store_prochot_override, 1);
2174
2175static ssize_t show_prochot_interval(struct device *dev,
2176				struct device_attribute *attr, char *buf)
2177{
2178	int nr = (to_sensor_dev_attr(attr))->index;
2179	struct lm93_data *data = lm93_update_device(dev);
2180	u8 tmp;
2181	if (nr==1)
2182		tmp = (data->prochot_interval & 0xf0) >> 4;
2183	else
2184		tmp = data->prochot_interval & 0x0f;
2185	return sprintf(buf,"%d\n",LM93_INTERVAL_FROM_REG(tmp));
2186}
2187
2188static ssize_t store_prochot_interval(struct device *dev,
2189					struct device_attribute *attr,
2190					const char *buf, size_t count)
2191{
2192	int nr = (to_sensor_dev_attr(attr))->index;
2193	struct i2c_client *client = to_i2c_client(dev);
2194	struct lm93_data *data = i2c_get_clientdata(client);
2195	u32 val = simple_strtoul(buf, NULL, 10);
2196	u8 tmp;
 
 
 
 
 
 
2197
2198	mutex_lock(&data->update_lock);
2199	tmp = lm93_read_byte(client, LM93_REG_PROCHOT_INTERVAL);
2200	if (nr==1)
2201		tmp = (tmp & 0x0f) | (LM93_INTERVAL_TO_REG(val) << 4);
2202	else
2203		tmp = (tmp & 0xf0) | LM93_INTERVAL_TO_REG(val);
2204	data->prochot_interval = tmp;
2205	lm93_write_byte(client, LM93_REG_PROCHOT_INTERVAL, tmp);
2206	mutex_unlock(&data->update_lock);
2207	return count;
2208}
2209
2210static SENSOR_DEVICE_ATTR(prochot1_interval, S_IWUSR | S_IRUGO,
2211			  show_prochot_interval, store_prochot_interval, 0);
2212static SENSOR_DEVICE_ATTR(prochot2_interval, S_IWUSR | S_IRUGO,
2213			  show_prochot_interval, store_prochot_interval, 1);
2214
2215static ssize_t show_prochot_override_duty_cycle(struct device *dev,
2216						struct device_attribute *attr,
2217						char *buf)
2218{
2219	struct lm93_data *data = lm93_update_device(dev);
2220	return sprintf(buf,"%d\n",data->prochot_override & 0x0f);
2221}
2222
2223static ssize_t store_prochot_override_duty_cycle(struct device *dev,
2224						struct device_attribute *attr,
2225						const char *buf, size_t count)
2226{
2227	struct i2c_client *client = to_i2c_client(dev);
2228	struct lm93_data *data = i2c_get_clientdata(client);
2229	u32 val = simple_strtoul(buf, NULL, 10);
 
 
 
 
 
2230
2231	mutex_lock(&data->update_lock);
2232	data->prochot_override = (data->prochot_override & 0xf0) |
2233					SENSORS_LIMIT(val, 0, 15);
2234	lm93_write_byte(client, LM93_REG_PROCHOT_OVERRIDE,
2235			data->prochot_override);
2236	mutex_unlock(&data->update_lock);
2237	return count;
2238}
2239
2240static DEVICE_ATTR(prochot_override_duty_cycle, S_IRUGO | S_IWUSR,
2241			show_prochot_override_duty_cycle,
2242			store_prochot_override_duty_cycle);
2243
2244static ssize_t show_prochot_short(struct device *dev,
2245				struct device_attribute *attr, char *buf)
2246{
2247	struct lm93_data *data = lm93_update_device(dev);
2248	return sprintf(buf,"%d\n",(data->config & 0x10) ? 1 : 0);
2249}
2250
2251static ssize_t store_prochot_short(struct device *dev,
2252					struct device_attribute *attr,
2253					const char *buf, size_t count)
2254{
2255	struct i2c_client *client = to_i2c_client(dev);
2256	struct lm93_data *data = i2c_get_clientdata(client);
2257	u32 val = simple_strtoul(buf, NULL, 10);
 
 
 
 
 
2258
2259	mutex_lock(&data->update_lock);
2260	if (val)
2261		data->config |= 0x10;
2262	else
2263		data->config &= ~0x10;
2264	lm93_write_byte(client, LM93_REG_CONFIG, data->config);
2265	mutex_unlock(&data->update_lock);
2266	return count;
2267}
2268
2269static DEVICE_ATTR(prochot_short, S_IRUGO | S_IWUSR,
2270		   show_prochot_short, store_prochot_short);
2271
2272static ssize_t show_vrdhot(struct device *dev, struct device_attribute *attr,
2273				char *buf)
2274{
2275	int nr = (to_sensor_dev_attr(attr))->index;
2276	struct lm93_data *data = lm93_update_device(dev);
2277	return sprintf(buf,"%d\n",
2278		       data->block1.host_status_1 & (1 << (nr+4)) ? 1 : 0);
2279}
2280
2281static SENSOR_DEVICE_ATTR(vrdhot1, S_IRUGO, show_vrdhot, NULL, 0);
2282static SENSOR_DEVICE_ATTR(vrdhot2, S_IRUGO, show_vrdhot, NULL, 1);
2283
2284static ssize_t show_gpio(struct device *dev, struct device_attribute *attr,
2285				char *buf)
2286{
2287	struct lm93_data *data = lm93_update_device(dev);
2288	return sprintf(buf,"%d\n",LM93_GPI_FROM_REG(data->gpi));
2289}
2290
2291static DEVICE_ATTR(gpio, S_IRUGO, show_gpio, NULL);
2292
2293static ssize_t show_alarms(struct device *dev, struct device_attribute *attr,
2294				char *buf)
2295{
2296	struct lm93_data *data = lm93_update_device(dev);
2297	return sprintf(buf,"%d\n",LM93_ALARMS_FROM_REG(data->block1));
2298}
2299
2300static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
2301
2302static struct attribute *lm93_attrs[] = {
2303	&sensor_dev_attr_in1_input.dev_attr.attr,
2304	&sensor_dev_attr_in2_input.dev_attr.attr,
2305	&sensor_dev_attr_in3_input.dev_attr.attr,
2306	&sensor_dev_attr_in4_input.dev_attr.attr,
2307	&sensor_dev_attr_in5_input.dev_attr.attr,
2308	&sensor_dev_attr_in6_input.dev_attr.attr,
2309	&sensor_dev_attr_in7_input.dev_attr.attr,
2310	&sensor_dev_attr_in8_input.dev_attr.attr,
2311	&sensor_dev_attr_in9_input.dev_attr.attr,
2312	&sensor_dev_attr_in10_input.dev_attr.attr,
2313	&sensor_dev_attr_in11_input.dev_attr.attr,
2314	&sensor_dev_attr_in12_input.dev_attr.attr,
2315	&sensor_dev_attr_in13_input.dev_attr.attr,
2316	&sensor_dev_attr_in14_input.dev_attr.attr,
2317	&sensor_dev_attr_in15_input.dev_attr.attr,
2318	&sensor_dev_attr_in16_input.dev_attr.attr,
2319	&sensor_dev_attr_in1_min.dev_attr.attr,
2320	&sensor_dev_attr_in2_min.dev_attr.attr,
2321	&sensor_dev_attr_in3_min.dev_attr.attr,
2322	&sensor_dev_attr_in4_min.dev_attr.attr,
2323	&sensor_dev_attr_in5_min.dev_attr.attr,
2324	&sensor_dev_attr_in6_min.dev_attr.attr,
2325	&sensor_dev_attr_in7_min.dev_attr.attr,
2326	&sensor_dev_attr_in8_min.dev_attr.attr,
2327	&sensor_dev_attr_in9_min.dev_attr.attr,
2328	&sensor_dev_attr_in10_min.dev_attr.attr,
2329	&sensor_dev_attr_in11_min.dev_attr.attr,
2330	&sensor_dev_attr_in12_min.dev_attr.attr,
2331	&sensor_dev_attr_in13_min.dev_attr.attr,
2332	&sensor_dev_attr_in14_min.dev_attr.attr,
2333	&sensor_dev_attr_in15_min.dev_attr.attr,
2334	&sensor_dev_attr_in16_min.dev_attr.attr,
2335	&sensor_dev_attr_in1_max.dev_attr.attr,
2336	&sensor_dev_attr_in2_max.dev_attr.attr,
2337	&sensor_dev_attr_in3_max.dev_attr.attr,
2338	&sensor_dev_attr_in4_max.dev_attr.attr,
2339	&sensor_dev_attr_in5_max.dev_attr.attr,
2340	&sensor_dev_attr_in6_max.dev_attr.attr,
2341	&sensor_dev_attr_in7_max.dev_attr.attr,
2342	&sensor_dev_attr_in8_max.dev_attr.attr,
2343	&sensor_dev_attr_in9_max.dev_attr.attr,
2344	&sensor_dev_attr_in10_max.dev_attr.attr,
2345	&sensor_dev_attr_in11_max.dev_attr.attr,
2346	&sensor_dev_attr_in12_max.dev_attr.attr,
2347	&sensor_dev_attr_in13_max.dev_attr.attr,
2348	&sensor_dev_attr_in14_max.dev_attr.attr,
2349	&sensor_dev_attr_in15_max.dev_attr.attr,
2350	&sensor_dev_attr_in16_max.dev_attr.attr,
2351	&sensor_dev_attr_temp1_input.dev_attr.attr,
2352	&sensor_dev_attr_temp2_input.dev_attr.attr,
2353	&sensor_dev_attr_temp3_input.dev_attr.attr,
2354	&sensor_dev_attr_temp1_min.dev_attr.attr,
2355	&sensor_dev_attr_temp2_min.dev_attr.attr,
2356	&sensor_dev_attr_temp3_min.dev_attr.attr,
2357	&sensor_dev_attr_temp1_max.dev_attr.attr,
2358	&sensor_dev_attr_temp2_max.dev_attr.attr,
2359	&sensor_dev_attr_temp3_max.dev_attr.attr,
2360	&sensor_dev_attr_temp1_auto_base.dev_attr.attr,
2361	&sensor_dev_attr_temp2_auto_base.dev_attr.attr,
2362	&sensor_dev_attr_temp3_auto_base.dev_attr.attr,
2363	&sensor_dev_attr_temp1_auto_boost.dev_attr.attr,
2364	&sensor_dev_attr_temp2_auto_boost.dev_attr.attr,
2365	&sensor_dev_attr_temp3_auto_boost.dev_attr.attr,
2366	&sensor_dev_attr_temp1_auto_boost_hyst.dev_attr.attr,
2367	&sensor_dev_attr_temp2_auto_boost_hyst.dev_attr.attr,
2368	&sensor_dev_attr_temp3_auto_boost_hyst.dev_attr.attr,
2369	&sensor_dev_attr_temp1_auto_offset1.dev_attr.attr,
2370	&sensor_dev_attr_temp1_auto_offset2.dev_attr.attr,
2371	&sensor_dev_attr_temp1_auto_offset3.dev_attr.attr,
2372	&sensor_dev_attr_temp1_auto_offset4.dev_attr.attr,
2373	&sensor_dev_attr_temp1_auto_offset5.dev_attr.attr,
2374	&sensor_dev_attr_temp1_auto_offset6.dev_attr.attr,
2375	&sensor_dev_attr_temp1_auto_offset7.dev_attr.attr,
2376	&sensor_dev_attr_temp1_auto_offset8.dev_attr.attr,
2377	&sensor_dev_attr_temp1_auto_offset9.dev_attr.attr,
2378	&sensor_dev_attr_temp1_auto_offset10.dev_attr.attr,
2379	&sensor_dev_attr_temp1_auto_offset11.dev_attr.attr,
2380	&sensor_dev_attr_temp1_auto_offset12.dev_attr.attr,
2381	&sensor_dev_attr_temp2_auto_offset1.dev_attr.attr,
2382	&sensor_dev_attr_temp2_auto_offset2.dev_attr.attr,
2383	&sensor_dev_attr_temp2_auto_offset3.dev_attr.attr,
2384	&sensor_dev_attr_temp2_auto_offset4.dev_attr.attr,
2385	&sensor_dev_attr_temp2_auto_offset5.dev_attr.attr,
2386	&sensor_dev_attr_temp2_auto_offset6.dev_attr.attr,
2387	&sensor_dev_attr_temp2_auto_offset7.dev_attr.attr,
2388	&sensor_dev_attr_temp2_auto_offset8.dev_attr.attr,
2389	&sensor_dev_attr_temp2_auto_offset9.dev_attr.attr,
2390	&sensor_dev_attr_temp2_auto_offset10.dev_attr.attr,
2391	&sensor_dev_attr_temp2_auto_offset11.dev_attr.attr,
2392	&sensor_dev_attr_temp2_auto_offset12.dev_attr.attr,
2393	&sensor_dev_attr_temp3_auto_offset1.dev_attr.attr,
2394	&sensor_dev_attr_temp3_auto_offset2.dev_attr.attr,
2395	&sensor_dev_attr_temp3_auto_offset3.dev_attr.attr,
2396	&sensor_dev_attr_temp3_auto_offset4.dev_attr.attr,
2397	&sensor_dev_attr_temp3_auto_offset5.dev_attr.attr,
2398	&sensor_dev_attr_temp3_auto_offset6.dev_attr.attr,
2399	&sensor_dev_attr_temp3_auto_offset7.dev_attr.attr,
2400	&sensor_dev_attr_temp3_auto_offset8.dev_attr.attr,
2401	&sensor_dev_attr_temp3_auto_offset9.dev_attr.attr,
2402	&sensor_dev_attr_temp3_auto_offset10.dev_attr.attr,
2403	&sensor_dev_attr_temp3_auto_offset11.dev_attr.attr,
2404	&sensor_dev_attr_temp3_auto_offset12.dev_attr.attr,
2405	&sensor_dev_attr_temp1_auto_pwm_min.dev_attr.attr,
2406	&sensor_dev_attr_temp2_auto_pwm_min.dev_attr.attr,
2407	&sensor_dev_attr_temp3_auto_pwm_min.dev_attr.attr,
2408	&sensor_dev_attr_temp1_auto_offset_hyst.dev_attr.attr,
2409	&sensor_dev_attr_temp2_auto_offset_hyst.dev_attr.attr,
2410	&sensor_dev_attr_temp3_auto_offset_hyst.dev_attr.attr,
2411	&sensor_dev_attr_fan1_input.dev_attr.attr,
2412	&sensor_dev_attr_fan2_input.dev_attr.attr,
2413	&sensor_dev_attr_fan3_input.dev_attr.attr,
2414	&sensor_dev_attr_fan4_input.dev_attr.attr,
2415	&sensor_dev_attr_fan1_min.dev_attr.attr,
2416	&sensor_dev_attr_fan2_min.dev_attr.attr,
2417	&sensor_dev_attr_fan3_min.dev_attr.attr,
2418	&sensor_dev_attr_fan4_min.dev_attr.attr,
2419	&sensor_dev_attr_fan1_smart_tach.dev_attr.attr,
2420	&sensor_dev_attr_fan2_smart_tach.dev_attr.attr,
2421	&sensor_dev_attr_fan3_smart_tach.dev_attr.attr,
2422	&sensor_dev_attr_fan4_smart_tach.dev_attr.attr,
2423	&sensor_dev_attr_pwm1.dev_attr.attr,
2424	&sensor_dev_attr_pwm2.dev_attr.attr,
2425	&sensor_dev_attr_pwm1_enable.dev_attr.attr,
2426	&sensor_dev_attr_pwm2_enable.dev_attr.attr,
2427	&sensor_dev_attr_pwm1_freq.dev_attr.attr,
2428	&sensor_dev_attr_pwm2_freq.dev_attr.attr,
2429	&sensor_dev_attr_pwm1_auto_channels.dev_attr.attr,
2430	&sensor_dev_attr_pwm2_auto_channels.dev_attr.attr,
2431	&sensor_dev_attr_pwm1_auto_spinup_min.dev_attr.attr,
2432	&sensor_dev_attr_pwm2_auto_spinup_min.dev_attr.attr,
2433	&sensor_dev_attr_pwm1_auto_spinup_time.dev_attr.attr,
2434	&sensor_dev_attr_pwm2_auto_spinup_time.dev_attr.attr,
2435	&dev_attr_pwm_auto_prochot_ramp.attr,
2436	&dev_attr_pwm_auto_vrdhot_ramp.attr,
2437	&sensor_dev_attr_cpu0_vid.dev_attr.attr,
2438	&sensor_dev_attr_cpu1_vid.dev_attr.attr,
2439	&sensor_dev_attr_prochot1.dev_attr.attr,
2440	&sensor_dev_attr_prochot2.dev_attr.attr,
2441	&sensor_dev_attr_prochot1_avg.dev_attr.attr,
2442	&sensor_dev_attr_prochot2_avg.dev_attr.attr,
2443	&sensor_dev_attr_prochot1_max.dev_attr.attr,
2444	&sensor_dev_attr_prochot2_max.dev_attr.attr,
2445	&sensor_dev_attr_prochot1_override.dev_attr.attr,
2446	&sensor_dev_attr_prochot2_override.dev_attr.attr,
2447	&sensor_dev_attr_prochot1_interval.dev_attr.attr,
2448	&sensor_dev_attr_prochot2_interval.dev_attr.attr,
2449	&dev_attr_prochot_override_duty_cycle.attr,
2450	&dev_attr_prochot_short.attr,
2451	&sensor_dev_attr_vrdhot1.dev_attr.attr,
2452	&sensor_dev_attr_vrdhot2.dev_attr.attr,
2453	&dev_attr_gpio.attr,
2454	&dev_attr_alarms.attr,
2455	NULL
2456};
2457
2458static struct attribute_group lm93_attr_grp = {
2459	.attrs = lm93_attrs,
2460};
2461
2462static void lm93_init_client(struct i2c_client *client)
2463{
2464	int i;
2465	u8 reg;
2466
2467	/* configure VID pin input thresholds */
2468	reg = lm93_read_byte(client, LM93_REG_GPI_VID_CTL);
2469	lm93_write_byte(client, LM93_REG_GPI_VID_CTL,
2470			reg | (vid_agtl ? 0x03 : 0x00));
2471
2472	if (init) {
2473		/* enable #ALERT pin */
2474		reg = lm93_read_byte(client, LM93_REG_CONFIG);
2475		lm93_write_byte(client, LM93_REG_CONFIG, reg | 0x08);
2476
2477		/* enable ASF mode for BMC status registers */
2478		reg = lm93_read_byte(client, LM93_REG_STATUS_CONTROL);
2479		lm93_write_byte(client, LM93_REG_STATUS_CONTROL, reg | 0x02);
2480
2481		/* set sleep state to S0 */
2482		lm93_write_byte(client, LM93_REG_SLEEP_CONTROL, 0);
2483
2484		/* unmask #VRDHOT and dynamic VCCP (if nec) error events */
2485		reg = lm93_read_byte(client, LM93_REG_MISC_ERR_MASK);
2486		reg &= ~0x03;
2487		reg &= ~(vccp_limit_type[0] ? 0x10 : 0);
2488		reg &= ~(vccp_limit_type[1] ? 0x20 : 0);
2489		lm93_write_byte(client, LM93_REG_MISC_ERR_MASK, reg);
2490	}
2491
2492	/* start monitoring */
2493	reg = lm93_read_byte(client, LM93_REG_CONFIG);
2494	lm93_write_byte(client, LM93_REG_CONFIG, reg | 0x01);
2495
2496	/* spin until ready */
2497	for (i=0; i<20; i++) {
2498		msleep(10);
2499		if ((lm93_read_byte(client, LM93_REG_CONFIG) & 0x80) == 0x80)
2500			return;
2501	}
2502
2503	dev_warn(&client->dev,"timed out waiting for sensor "
2504		 "chip to signal ready!\n");
2505}
2506
2507/* Return 0 if detection is successful, -ENODEV otherwise */
2508static int lm93_detect(struct i2c_client *client, struct i2c_board_info *info)
2509{
2510	struct i2c_adapter *adapter = client->adapter;
2511	int mfr, ver;
2512	const char *name;
2513
2514	if (!i2c_check_functionality(adapter, LM93_SMBUS_FUNC_MIN))
2515		return -ENODEV;
2516
2517	/* detection */
2518	mfr = lm93_read_byte(client, LM93_REG_MFR_ID);
2519	if (mfr != 0x01) {
2520		dev_dbg(&adapter->dev,
2521			"detect failed, bad manufacturer id 0x%02x!\n", mfr);
2522		return -ENODEV;
2523	}
2524
2525	ver = lm93_read_byte(client, LM93_REG_VER);
2526	switch (ver) {
2527	case LM93_MFR_ID:
2528	case LM93_MFR_ID_PROTOTYPE:
2529		name = "lm93";
2530		break;
2531	case LM94_MFR_ID_2:
2532	case LM94_MFR_ID:
2533	case LM94_MFR_ID_PROTOTYPE:
2534		name = "lm94";
2535		break;
2536	default:
2537		dev_dbg(&adapter->dev,
2538			"detect failed, bad version id 0x%02x!\n", ver);
2539		return -ENODEV;
2540	}
2541
2542	strlcpy(info->type, name, I2C_NAME_SIZE);
2543	dev_dbg(&adapter->dev,"loading %s at %d,0x%02x\n",
2544		client->name, i2c_adapter_id(client->adapter),
2545		client->addr);
2546
2547	return 0;
2548}
2549
2550static int lm93_probe(struct i2c_client *client,
2551		      const struct i2c_device_id *id)
2552{
 
2553	struct lm93_data *data;
2554	int err, func;
 
2555	void (*update)(struct lm93_data *, struct i2c_client *);
2556
2557	/* choose update routine based on bus capabilities */
2558	func = i2c_get_functionality(client->adapter);
2559	if (((LM93_SMBUS_FUNC_FULL & func) == LM93_SMBUS_FUNC_FULL) &&
2560			(!disable_block)) {
2561		dev_dbg(&client->dev, "using SMBus block data transactions\n");
2562		update = lm93_update_client_full;
2563	} else if ((LM93_SMBUS_FUNC_MIN & func) == LM93_SMBUS_FUNC_MIN) {
2564		dev_dbg(&client->dev, "disabled SMBus block data "
2565			"transactions\n");
2566		update = lm93_update_client_min;
2567	} else {
2568		dev_dbg(&client->dev, "detect failed, "
2569			"smbus byte and/or word data not supported!\n");
2570		err = -ENODEV;
2571		goto err_out;
2572	}
2573
2574	data = kzalloc(sizeof(struct lm93_data), GFP_KERNEL);
2575	if (!data) {
2576		dev_dbg(&client->dev, "out of memory!\n");
2577		err = -ENOMEM;
2578		goto err_out;
2579	}
2580	i2c_set_clientdata(client, data);
2581
2582	/* housekeeping */
2583	data->valid = 0;
2584	data->update = update;
2585	mutex_init(&data->update_lock);
2586
2587	/* initialize the chip */
2588	lm93_init_client(client);
2589
2590	err = sysfs_create_group(&client->dev.kobj, &lm93_attr_grp);
2591	if (err)
2592		goto err_free;
2593
2594	/* Register hwmon driver class */
2595	data->hwmon_dev = hwmon_device_register(&client->dev);
2596	if ( !IS_ERR(data->hwmon_dev))
2597		return 0;
2598
2599	err = PTR_ERR(data->hwmon_dev);
2600	dev_err(&client->dev, "error registering hwmon device.\n");
2601	sysfs_remove_group(&client->dev.kobj, &lm93_attr_grp);
2602err_free:
2603	kfree(data);
2604err_out:
2605	return err;
2606}
2607
2608static int lm93_remove(struct i2c_client *client)
2609{
2610	struct lm93_data *data = i2c_get_clientdata(client);
2611
2612	hwmon_device_unregister(data->hwmon_dev);
2613	sysfs_remove_group(&client->dev.kobj, &lm93_attr_grp);
2614
2615	kfree(data);
2616	return 0;
2617}
2618
2619static const struct i2c_device_id lm93_id[] = {
2620	{ "lm93", 0 },
2621	{ "lm94", 0 },
2622	{ }
2623};
2624MODULE_DEVICE_TABLE(i2c, lm93_id);
2625
2626static struct i2c_driver lm93_driver = {
2627	.class		= I2C_CLASS_HWMON,
2628	.driver = {
2629		.name	= "lm93",
2630	},
2631	.probe		= lm93_probe,
2632	.remove		= lm93_remove,
2633	.id_table	= lm93_id,
2634	.detect		= lm93_detect,
2635	.address_list	= normal_i2c,
2636};
2637
2638static int __init lm93_init(void)
2639{
2640	return i2c_add_driver(&lm93_driver);
2641}
2642
2643static void __exit lm93_exit(void)
2644{
2645	i2c_del_driver(&lm93_driver);
2646}
2647
2648MODULE_AUTHOR("Mark M. Hoffman <mhoffman@lightlink.com>, "
2649		"Hans J. Koch <hjk@hansjkoch.de>");
2650MODULE_DESCRIPTION("LM93 driver");
2651MODULE_LICENSE("GPL");
2652
2653module_init(lm93_init);
2654module_exit(lm93_exit);
v5.9
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * lm93.c - Part of lm_sensors, Linux kernel modules for hardware monitoring
   4 *
   5 * Author/Maintainer: Mark M. Hoffman <mhoffman@lightlink.com>
   6 *	Copyright (c) 2004 Utilitek Systems, Inc.
   7 *
   8 * derived in part from lm78.c:
   9 *	Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>
  10 *
  11 * derived in part from lm85.c:
  12 *	Copyright (c) 2002, 2003 Philip Pokorny <ppokorny@penguincomputing.com>
  13 *	Copyright (c) 2003       Margit Schubert-While <margitsw@t-online.de>
  14 *
  15 * derived in part from w83l785ts.c:
  16 *	Copyright (c) 2003-2004 Jean Delvare <jdelvare@suse.de>
  17 *
  18 * Ported to Linux 2.6 by Eric J. Bowersox <ericb@aspsys.com>
  19 *	Copyright (c) 2005 Aspen Systems, Inc.
  20 *
  21 * Adapted to 2.6.20 by Carsten Emde <cbe@osadl.org>
  22 *	Copyright (c) 2006 Carsten Emde, Open Source Automation Development Lab
  23 *
  24 * Modified for mainline integration by Hans J. Koch <hjk@hansjkoch.de>
  25 *	Copyright (c) 2007 Hans J. Koch, Linutronix GmbH
  26 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  27
  28#include <linux/module.h>
  29#include <linux/init.h>
  30#include <linux/slab.h>
  31#include <linux/i2c.h>
  32#include <linux/hwmon.h>
  33#include <linux/hwmon-sysfs.h>
  34#include <linux/hwmon-vid.h>
  35#include <linux/err.h>
  36#include <linux/delay.h>
  37#include <linux/jiffies.h>
  38
  39/* LM93 REGISTER ADDRESSES */
  40
  41/* miscellaneous */
  42#define LM93_REG_MFR_ID			0x3e
  43#define LM93_REG_VER			0x3f
  44#define LM93_REG_STATUS_CONTROL		0xe2
  45#define LM93_REG_CONFIG			0xe3
  46#define LM93_REG_SLEEP_CONTROL		0xe4
  47
  48/* alarm values start here */
  49#define LM93_REG_HOST_ERROR_1		0x48
  50
  51/* voltage inputs: in1-in16 (nr => 0-15) */
  52#define LM93_REG_IN(nr)			(0x56 + (nr))
  53#define LM93_REG_IN_MIN(nr)		(0x90 + (nr) * 2)
  54#define LM93_REG_IN_MAX(nr)		(0x91 + (nr) * 2)
  55
  56/* temperature inputs: temp1-temp4 (nr => 0-3) */
  57#define LM93_REG_TEMP(nr)		(0x50 + (nr))
  58#define LM93_REG_TEMP_MIN(nr)		(0x78 + (nr) * 2)
  59#define LM93_REG_TEMP_MAX(nr)		(0x79 + (nr) * 2)
  60
  61/* temp[1-4]_auto_boost (nr => 0-3) */
  62#define LM93_REG_BOOST(nr)		(0x80 + (nr))
  63
  64/* #PROCHOT inputs: prochot1-prochot2 (nr => 0-1) */
  65#define LM93_REG_PROCHOT_CUR(nr)	(0x67 + (nr) * 2)
  66#define LM93_REG_PROCHOT_AVG(nr)	(0x68 + (nr) * 2)
  67#define LM93_REG_PROCHOT_MAX(nr)	(0xb0 + (nr))
  68
  69/* fan tach inputs: fan1-fan4 (nr => 0-3) */
  70#define LM93_REG_FAN(nr)		(0x6e + (nr) * 2)
  71#define LM93_REG_FAN_MIN(nr)		(0xb4 + (nr) * 2)
  72
  73/* pwm outputs: pwm1-pwm2 (nr => 0-1, reg => 0-3) */
  74#define LM93_REG_PWM_CTL(nr, reg)	(0xc8 + (reg) + (nr) * 4)
  75#define LM93_PWM_CTL1	0x0
  76#define LM93_PWM_CTL2	0x1
  77#define LM93_PWM_CTL3	0x2
  78#define LM93_PWM_CTL4	0x3
  79
  80/* GPIO input state */
  81#define LM93_REG_GPI			0x6b
  82
  83/* vid inputs: vid1-vid2 (nr => 0-1) */
  84#define LM93_REG_VID(nr)		(0x6c + (nr))
  85
  86/* vccp1 & vccp2: VID relative inputs (nr => 0-1) */
  87#define LM93_REG_VCCP_LIMIT_OFF(nr)	(0xb2 + (nr))
  88
  89/* temp[1-4]_auto_boost_hyst */
  90#define LM93_REG_BOOST_HYST_12		0xc0
  91#define LM93_REG_BOOST_HYST_34		0xc1
  92#define LM93_REG_BOOST_HYST(nr)		(0xc0 + (nr)/2)
  93
  94/* temp[1-4]_auto_pwm_[min|hyst] */
  95#define LM93_REG_PWM_MIN_HYST_12	0xc3
  96#define LM93_REG_PWM_MIN_HYST_34	0xc4
  97#define LM93_REG_PWM_MIN_HYST(nr)	(0xc3 + (nr)/2)
  98
  99/* prochot_override & prochot_interval */
 100#define LM93_REG_PROCHOT_OVERRIDE	0xc6
 101#define LM93_REG_PROCHOT_INTERVAL	0xc7
 102
 103/* temp[1-4]_auto_base (nr => 0-3) */
 104#define LM93_REG_TEMP_BASE(nr)		(0xd0 + (nr))
 105
 106/* temp[1-4]_auto_offsets (step => 0-11) */
 107#define LM93_REG_TEMP_OFFSET(step)	(0xd4 + (step))
 108
 109/* #PROCHOT & #VRDHOT PWM ramp control */
 110#define LM93_REG_PWM_RAMP_CTL		0xbf
 111
 112/* miscellaneous */
 113#define LM93_REG_SFC1		0xbc
 114#define LM93_REG_SFC2		0xbd
 115#define LM93_REG_GPI_VID_CTL	0xbe
 116#define LM93_REG_SF_TACH_TO_PWM	0xe0
 117
 118/* error masks */
 119#define LM93_REG_GPI_ERR_MASK	0xec
 120#define LM93_REG_MISC_ERR_MASK	0xed
 121
 122/* LM93 REGISTER VALUES */
 123#define LM93_MFR_ID		0x73
 124#define LM93_MFR_ID_PROTOTYPE	0x72
 125
 126/* LM94 REGISTER VALUES */
 127#define LM94_MFR_ID_2		0x7a
 128#define LM94_MFR_ID		0x79
 129#define LM94_MFR_ID_PROTOTYPE	0x78
 130
 131/* SMBus capabilities */
 132#define LM93_SMBUS_FUNC_FULL (I2C_FUNC_SMBUS_BYTE_DATA | \
 133		I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_BLOCK_DATA)
 134#define LM93_SMBUS_FUNC_MIN  (I2C_FUNC_SMBUS_BYTE_DATA | \
 135		I2C_FUNC_SMBUS_WORD_DATA)
 136
 137/* Addresses to scan */
 138static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
 139
 140/* Insmod parameters */
 141
 142static bool disable_block;
 143module_param(disable_block, bool, 0);
 144MODULE_PARM_DESC(disable_block,
 145	"Set to non-zero to disable SMBus block data transactions.");
 146
 147static bool init;
 148module_param(init, bool, 0);
 149MODULE_PARM_DESC(init, "Set to non-zero to force chip initialization.");
 150
 151static int vccp_limit_type[2] = {0, 0};
 152module_param_array(vccp_limit_type, int, NULL, 0);
 153MODULE_PARM_DESC(vccp_limit_type, "Configures in7 and in8 limit modes.");
 154
 155static int vid_agtl;
 156module_param(vid_agtl, int, 0);
 157MODULE_PARM_DESC(vid_agtl, "Configures VID pin input thresholds.");
 158
 159/* Driver data */
 160static struct i2c_driver lm93_driver;
 161
 162/* LM93 BLOCK READ COMMANDS */
 163static const struct { u8 cmd; u8 len; } lm93_block_read_cmds[12] = {
 164	{ 0xf2,  8 },
 165	{ 0xf3,  8 },
 166	{ 0xf4,  6 },
 167	{ 0xf5, 16 },
 168	{ 0xf6,  4 },
 169	{ 0xf7,  8 },
 170	{ 0xf8, 12 },
 171	{ 0xf9, 32 },
 172	{ 0xfa,  8 },
 173	{ 0xfb,  8 },
 174	{ 0xfc, 16 },
 175	{ 0xfd,  9 },
 176};
 177
 178/*
 179 * ALARMS: SYSCTL format described further below
 180 * REG: 64 bits in 8 registers, as immediately below
 181 */
 182struct block1_t {
 183	u8 host_status_1;
 184	u8 host_status_2;
 185	u8 host_status_3;
 186	u8 host_status_4;
 187	u8 p1_prochot_status;
 188	u8 p2_prochot_status;
 189	u8 gpi_status;
 190	u8 fan_status;
 191};
 192
 193/*
 194 * Client-specific data
 195 */
 196struct lm93_data {
 197	struct i2c_client *client;
 198
 199	struct mutex update_lock;
 200	unsigned long last_updated;	/* In jiffies */
 201
 202	/* client update function */
 203	void (*update)(struct lm93_data *, struct i2c_client *);
 204
 205	char valid; /* !=0 if following fields are valid */
 206
 207	/* register values, arranged by block read groups */
 208	struct block1_t block1;
 209
 210	/*
 211	 * temp1 - temp4: unfiltered readings
 212	 * temp1 - temp2: filtered readings
 213	 */
 214	u8 block2[6];
 215
 216	/* vin1 - vin16: readings */
 217	u8 block3[16];
 218
 219	/* prochot1 - prochot2: readings */
 220	struct {
 221		u8 cur;
 222		u8 avg;
 223	} block4[2];
 224
 225	/* fan counts 1-4 => 14-bits, LE, *left* justified */
 226	u16 block5[4];
 227
 228	/* block6 has a lot of data we don't need */
 229	struct {
 230		u8 min;
 231		u8 max;
 232	} temp_lim[4];
 233
 234	/* vin1 - vin16: low and high limits */
 235	struct {
 236		u8 min;
 237		u8 max;
 238	} block7[16];
 239
 240	/* fan count limits 1-4 => same format as block5 */
 241	u16 block8[4];
 242
 243	/* pwm control registers (2 pwms, 4 regs) */
 244	u8 block9[2][4];
 245
 246	/* auto/pwm base temp and offset temp registers */
 247	struct {
 248		u8 base[4];
 249		u8 offset[12];
 250	} block10;
 251
 252	/* master config register */
 253	u8 config;
 254
 255	/* VID1 & VID2 => register format, 6-bits, right justified */
 256	u8 vid[2];
 257
 258	/* prochot1 - prochot2: limits */
 259	u8 prochot_max[2];
 260
 261	/* vccp1 & vccp2 (in7 & in8): VID relative limits (register format) */
 262	u8 vccp_limits[2];
 263
 264	/* GPIO input state (register format, i.e. inverted) */
 265	u8 gpi;
 266
 267	/* #PROCHOT override (register format) */
 268	u8 prochot_override;
 269
 270	/* #PROCHOT intervals (register format) */
 271	u8 prochot_interval;
 272
 273	/* Fan Boost Temperatures (register format) */
 274	u8 boost[4];
 275
 276	/* Fan Boost Hysteresis (register format) */
 277	u8 boost_hyst[2];
 278
 279	/* Temperature Zone Min. PWM & Hysteresis (register format) */
 280	u8 auto_pwm_min_hyst[2];
 281
 282	/* #PROCHOT & #VRDHOT PWM Ramp Control */
 283	u8 pwm_ramp_ctl;
 284
 285	/* miscellaneous setup regs */
 286	u8 sfc1;
 287	u8 sfc2;
 288	u8 sf_tach_to_pwm;
 289
 290	/*
 291	 * The two PWM CTL2  registers can read something other than what was
 292	 * last written for the OVR_DC field (duty cycle override).  So, we
 293	 * save the user-commanded value here.
 294	 */
 295	u8 pwm_override[2];
 296};
 297
 298/*
 299 * VID:	mV
 300 * REG: 6-bits, right justified, *always* using Intel VRM/VRD 10
 301 */
 302static int LM93_VID_FROM_REG(u8 reg)
 303{
 304	return vid_from_reg((reg & 0x3f), 100);
 305}
 306
 307/* min, max, and nominal register values, per channel (u8) */
 308static const u8 lm93_vin_reg_min[16] = {
 309	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 310	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae,
 311};
 312static const u8 lm93_vin_reg_max[16] = {
 313	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 314	0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1,
 315};
 316/*
 317 * Values from the datasheet. They're here for documentation only.
 318 * static const u8 lm93_vin_reg_nom[16] = {
 319 * 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
 320 * 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x40, 0xc0,
 321 * };
 322 */
 323
 324/* min, max, and nominal voltage readings, per channel (mV)*/
 325static const unsigned long lm93_vin_val_min[16] = {
 326	0, 0, 0, 0, 0, 0, 0, 0,
 327	0, 0, 0, 0, 0, 0, 0, 3000,
 328};
 329
 330static const unsigned long lm93_vin_val_max[16] = {
 331	1236, 1236, 1236, 1600, 2000, 2000, 1600, 1600,
 332	4400, 6500, 3333, 2625, 1312, 1312, 1236, 3600,
 333};
 334/*
 335 * Values from the datasheet. They're here for documentation only.
 336 * static const unsigned long lm93_vin_val_nom[16] = {
 337 * 927,  927,  927, 1200, 1500, 1500, 1200, 1200,
 338 * 3300, 5000, 2500, 1969,  984,  984,  309, 3300,
 339 * };
 340 */
 341
 342static unsigned LM93_IN_FROM_REG(int nr, u8 reg)
 343{
 344	const long uv_max = lm93_vin_val_max[nr] * 1000;
 345	const long uv_min = lm93_vin_val_min[nr] * 1000;
 346
 347	const long slope = (uv_max - uv_min) /
 348		(lm93_vin_reg_max[nr] - lm93_vin_reg_min[nr]);
 349	const long intercept = uv_min - slope * lm93_vin_reg_min[nr];
 350
 351	return (slope * reg + intercept + 500) / 1000;
 352}
 353
 354/*
 355 * IN: mV, limits determined by channel nr
 356 * REG: scaling determined by channel nr
 357 */
 358static u8 LM93_IN_TO_REG(int nr, unsigned val)
 359{
 360	/* range limit */
 361	const long mv = clamp_val(val,
 362				  lm93_vin_val_min[nr], lm93_vin_val_max[nr]);
 363
 364	/* try not to lose too much precision here */
 365	const long uv = mv * 1000;
 366	const long uv_max = lm93_vin_val_max[nr] * 1000;
 367	const long uv_min = lm93_vin_val_min[nr] * 1000;
 368
 369	/* convert */
 370	const long slope = (uv_max - uv_min) /
 371		(lm93_vin_reg_max[nr] - lm93_vin_reg_min[nr]);
 372	const long intercept = uv_min - slope * lm93_vin_reg_min[nr];
 373
 374	u8 result = ((uv - intercept + (slope/2)) / slope);
 375	result = clamp_val(result,
 376			   lm93_vin_reg_min[nr], lm93_vin_reg_max[nr]);
 377	return result;
 378}
 379
 380/* vid in mV, upper == 0 indicates low limit, otherwise upper limit */
 381static unsigned LM93_IN_REL_FROM_REG(u8 reg, int upper, int vid)
 382{
 383	const long uv_offset = upper ? (((reg >> 4 & 0x0f) + 1) * 12500) :
 384				(((reg >> 0 & 0x0f) + 1) * -25000);
 385	const long uv_vid = vid * 1000;
 386	return (uv_vid + uv_offset + 5000) / 10000;
 387}
 388
 389#define LM93_IN_MIN_FROM_REG(reg, vid)	LM93_IN_REL_FROM_REG((reg), 0, (vid))
 390#define LM93_IN_MAX_FROM_REG(reg, vid)	LM93_IN_REL_FROM_REG((reg), 1, (vid))
 391
 392/*
 393 * vid in mV , upper == 0 indicates low limit, otherwise upper limit
 394 * upper also determines which nibble of the register is returned
 395 * (the other nibble will be 0x0)
 396 */
 397static u8 LM93_IN_REL_TO_REG(unsigned val, int upper, int vid)
 398{
 399	long uv_offset = vid * 1000 - val * 10000;
 400	if (upper) {
 401		uv_offset = clamp_val(uv_offset, 12500, 200000);
 402		return (u8)((uv_offset /  12500 - 1) << 4);
 403	} else {
 404		uv_offset = clamp_val(uv_offset, -400000, -25000);
 405		return (u8)((uv_offset / -25000 - 1) << 0);
 406	}
 407}
 408
 409/*
 410 * TEMP: 1/1000 degrees C (-128C to +127C)
 411 * REG: 1C/bit, two's complement
 412 */
 413static int LM93_TEMP_FROM_REG(u8 reg)
 414{
 415	return (s8)reg * 1000;
 416}
 417
 418#define LM93_TEMP_MIN (-128000)
 419#define LM93_TEMP_MAX (127000)
 420
 421/*
 422 * TEMP: 1/1000 degrees C (-128C to +127C)
 423 * REG: 1C/bit, two's complement
 424 */
 425static u8 LM93_TEMP_TO_REG(long temp)
 426{
 427	int ntemp = clamp_val(temp, LM93_TEMP_MIN, LM93_TEMP_MAX);
 428	ntemp += (ntemp < 0 ? -500 : 500);
 429	return (u8)(ntemp / 1000);
 430}
 431
 432/* Determine 4-bit temperature offset resolution */
 433static int LM93_TEMP_OFFSET_MODE_FROM_REG(u8 sfc2, int nr)
 434{
 435	/* mode: 0 => 1C/bit, nonzero => 0.5C/bit */
 436	return sfc2 & (nr < 2 ? 0x10 : 0x20);
 437}
 438
 439/*
 440 * This function is common to all 4-bit temperature offsets
 441 * reg is 4 bits right justified
 442 * mode 0 => 1C/bit, mode !0 => 0.5C/bit
 443 */
 444static int LM93_TEMP_OFFSET_FROM_REG(u8 reg, int mode)
 445{
 446	return (reg & 0x0f) * (mode ? 5 : 10);
 447}
 448
 449#define LM93_TEMP_OFFSET_MIN  (0)
 450#define LM93_TEMP_OFFSET_MAX0 (150)
 451#define LM93_TEMP_OFFSET_MAX1 (75)
 452
 453/*
 454 * This function is common to all 4-bit temperature offsets
 455 * returns 4 bits right justified
 456 * mode 0 => 1C/bit, mode !0 => 0.5C/bit
 457 */
 458static u8 LM93_TEMP_OFFSET_TO_REG(int off, int mode)
 459{
 460	int factor = mode ? 5 : 10;
 461
 462	off = clamp_val(off, LM93_TEMP_OFFSET_MIN,
 463		mode ? LM93_TEMP_OFFSET_MAX1 : LM93_TEMP_OFFSET_MAX0);
 464	return (u8)((off + factor/2) / factor);
 465}
 466
 467/* 0 <= nr <= 3 */
 468static int LM93_TEMP_AUTO_OFFSET_FROM_REG(u8 reg, int nr, int mode)
 469{
 470	/* temp1-temp2 (nr=0,1) use lower nibble */
 471	if (nr < 2)
 472		return LM93_TEMP_OFFSET_FROM_REG(reg & 0x0f, mode);
 473
 474	/* temp3-temp4 (nr=2,3) use upper nibble */
 475	else
 476		return LM93_TEMP_OFFSET_FROM_REG(reg >> 4 & 0x0f, mode);
 477}
 478
 479/*
 480 * TEMP: 1/10 degrees C (0C to +15C (mode 0) or +7.5C (mode non-zero))
 481 * REG: 1.0C/bit (mode 0) or 0.5C/bit (mode non-zero)
 482 * 0 <= nr <= 3
 483 */
 484static u8 LM93_TEMP_AUTO_OFFSET_TO_REG(u8 old, int off, int nr, int mode)
 485{
 486	u8 new = LM93_TEMP_OFFSET_TO_REG(off, mode);
 487
 488	/* temp1-temp2 (nr=0,1) use lower nibble */
 489	if (nr < 2)
 490		return (old & 0xf0) | (new & 0x0f);
 491
 492	/* temp3-temp4 (nr=2,3) use upper nibble */
 493	else
 494		return (new << 4 & 0xf0) | (old & 0x0f);
 495}
 496
 497static int LM93_AUTO_BOOST_HYST_FROM_REGS(struct lm93_data *data, int nr,
 498		int mode)
 499{
 500	u8 reg;
 501
 502	switch (nr) {
 503	case 0:
 504		reg = data->boost_hyst[0] & 0x0f;
 505		break;
 506	case 1:
 507		reg = data->boost_hyst[0] >> 4 & 0x0f;
 508		break;
 509	case 2:
 510		reg = data->boost_hyst[1] & 0x0f;
 511		break;
 512	case 3:
 513	default:
 514		reg = data->boost_hyst[1] >> 4 & 0x0f;
 515		break;
 516	}
 517
 518	return LM93_TEMP_FROM_REG(data->boost[nr]) -
 519			LM93_TEMP_OFFSET_FROM_REG(reg, mode);
 520}
 521
 522static u8 LM93_AUTO_BOOST_HYST_TO_REG(struct lm93_data *data, long hyst,
 523		int nr, int mode)
 524{
 525	u8 reg = LM93_TEMP_OFFSET_TO_REG(
 526			(LM93_TEMP_FROM_REG(data->boost[nr]) - hyst), mode);
 527
 528	switch (nr) {
 529	case 0:
 530		reg = (data->boost_hyst[0] & 0xf0) | (reg & 0x0f);
 531		break;
 532	case 1:
 533		reg = (reg << 4 & 0xf0) | (data->boost_hyst[0] & 0x0f);
 534		break;
 535	case 2:
 536		reg = (data->boost_hyst[1] & 0xf0) | (reg & 0x0f);
 537		break;
 538	case 3:
 539	default:
 540		reg = (reg << 4 & 0xf0) | (data->boost_hyst[1] & 0x0f);
 541		break;
 542	}
 543
 544	return reg;
 545}
 546
 547/*
 548 * PWM: 0-255 per sensors documentation
 549 * REG: 0-13 as mapped below... right justified
 550 */
 551enum pwm_freq { LM93_PWM_MAP_HI_FREQ, LM93_PWM_MAP_LO_FREQ };
 552
 553static int lm93_pwm_map[2][16] = {
 554	{
 555		0x00, /*   0.00% */ 0x40, /*  25.00% */
 556		0x50, /*  31.25% */ 0x60, /*  37.50% */
 557		0x70, /*  43.75% */ 0x80, /*  50.00% */
 558		0x90, /*  56.25% */ 0xa0, /*  62.50% */
 559		0xb0, /*  68.75% */ 0xc0, /*  75.00% */
 560		0xd0, /*  81.25% */ 0xe0, /*  87.50% */
 561		0xf0, /*  93.75% */ 0xff, /* 100.00% */
 562		0xff, 0xff, /* 14, 15 are reserved and should never occur */
 563	},
 564	{
 565		0x00, /*   0.00% */ 0x40, /*  25.00% */
 566		0x49, /*  28.57% */ 0x52, /*  32.14% */
 567		0x5b, /*  35.71% */ 0x64, /*  39.29% */
 568		0x6d, /*  42.86% */ 0x76, /*  46.43% */
 569		0x80, /*  50.00% */ 0x89, /*  53.57% */
 570		0x92, /*  57.14% */ 0xb6, /*  71.43% */
 571		0xdb, /*  85.71% */ 0xff, /* 100.00% */
 572		0xff, 0xff, /* 14, 15 are reserved and should never occur */
 573	},
 574};
 575
 576static int LM93_PWM_FROM_REG(u8 reg, enum pwm_freq freq)
 577{
 578	return lm93_pwm_map[freq][reg & 0x0f];
 579}
 580
 581/* round up to nearest match */
 582static u8 LM93_PWM_TO_REG(int pwm, enum pwm_freq freq)
 583{
 584	int i;
 585	for (i = 0; i < 13; i++)
 586		if (pwm <= lm93_pwm_map[freq][i])
 587			break;
 588
 589	/* can fall through with i==13 */
 590	return (u8)i;
 591}
 592
 593static int LM93_FAN_FROM_REG(u16 regs)
 594{
 595	const u16 count = le16_to_cpu(regs) >> 2;
 596	return count == 0 ? -1 : count == 0x3fff ? 0 : 1350000 / count;
 597}
 598
 599/*
 600 * RPM: (82.5 to 1350000)
 601 * REG: 14-bits, LE, *left* justified
 602 */
 603static u16 LM93_FAN_TO_REG(long rpm)
 604{
 605	u16 count, regs;
 606
 607	if (rpm == 0) {
 608		count = 0x3fff;
 609	} else {
 610		rpm = clamp_val(rpm, 1, 1000000);
 611		count = clamp_val((1350000 + rpm) / rpm, 1, 0x3ffe);
 612	}
 613
 614	regs = count << 2;
 615	return cpu_to_le16(regs);
 616}
 617
 618/*
 619 * PWM FREQ: HZ
 620 * REG: 0-7 as mapped below
 621 */
 622static int lm93_pwm_freq_map[8] = {
 623	22500, 96, 84, 72, 60, 48, 36, 12
 624};
 625
 626static int LM93_PWM_FREQ_FROM_REG(u8 reg)
 627{
 628	return lm93_pwm_freq_map[reg & 0x07];
 629}
 630
 631/* round up to nearest match */
 632static u8 LM93_PWM_FREQ_TO_REG(int freq)
 633{
 634	int i;
 635	for (i = 7; i > 0; i--)
 636		if (freq <= lm93_pwm_freq_map[i])
 637			break;
 638
 639	/* can fall through with i==0 */
 640	return (u8)i;
 641}
 642
 643/*
 644 * TIME: 1/100 seconds
 645 * REG: 0-7 as mapped below
 646 */
 647static int lm93_spinup_time_map[8] = {
 648	0, 10, 25, 40, 70, 100, 200, 400,
 649};
 650
 651static int LM93_SPINUP_TIME_FROM_REG(u8 reg)
 652{
 653	return lm93_spinup_time_map[reg >> 5 & 0x07];
 654}
 655
 656/* round up to nearest match */
 657static u8 LM93_SPINUP_TIME_TO_REG(int time)
 658{
 659	int i;
 660	for (i = 0; i < 7; i++)
 661		if (time <= lm93_spinup_time_map[i])
 662			break;
 663
 664	/* can fall through with i==8 */
 665	return (u8)i;
 666}
 667
 668#define LM93_RAMP_MIN 0
 669#define LM93_RAMP_MAX 75
 670
 671static int LM93_RAMP_FROM_REG(u8 reg)
 672{
 673	return (reg & 0x0f) * 5;
 674}
 675
 676/*
 677 * RAMP: 1/100 seconds
 678 * REG: 50mS/bit 4-bits right justified
 679 */
 680static u8 LM93_RAMP_TO_REG(int ramp)
 681{
 682	ramp = clamp_val(ramp, LM93_RAMP_MIN, LM93_RAMP_MAX);
 683	return (u8)((ramp + 2) / 5);
 684}
 685
 686/*
 687 * PROCHOT: 0-255, 0 => 0%, 255 => > 96.6%
 688 * REG: (same)
 689 */
 690static u8 LM93_PROCHOT_TO_REG(long prochot)
 691{
 692	prochot = clamp_val(prochot, 0, 255);
 693	return (u8)prochot;
 694}
 695
 696/*
 697 * PROCHOT-INTERVAL: 73 - 37200 (1/100 seconds)
 698 * REG: 0-9 as mapped below
 699 */
 700static int lm93_interval_map[10] = {
 701	73, 146, 290, 580, 1170, 2330, 4660, 9320, 18600, 37200,
 702};
 703
 704static int LM93_INTERVAL_FROM_REG(u8 reg)
 705{
 706	return lm93_interval_map[reg & 0x0f];
 707}
 708
 709/* round up to nearest match */
 710static u8 LM93_INTERVAL_TO_REG(long interval)
 711{
 712	int i;
 713	for (i = 0; i < 9; i++)
 714		if (interval <= lm93_interval_map[i])
 715			break;
 716
 717	/* can fall through with i==9 */
 718	return (u8)i;
 719}
 720
 721/*
 722 * GPIO: 0-255, GPIO0 is LSB
 723 * REG: inverted
 724 */
 725static unsigned LM93_GPI_FROM_REG(u8 reg)
 726{
 727	return ~reg & 0xff;
 728}
 729
 730/*
 731 * alarm bitmask definitions
 732 * The LM93 has nearly 64 bits of error status... I've pared that down to
 733 * what I think is a useful subset in order to fit it into 32 bits.
 734 *
 735 * Especially note that the #VRD_HOT alarms are missing because we provide
 736 * that information as values in another sysfs file.
 737 *
 738 * If libsensors is extended to support 64 bit values, this could be revisited.
 739 */
 740#define LM93_ALARM_IN1		0x00000001
 741#define LM93_ALARM_IN2		0x00000002
 742#define LM93_ALARM_IN3		0x00000004
 743#define LM93_ALARM_IN4		0x00000008
 744#define LM93_ALARM_IN5		0x00000010
 745#define LM93_ALARM_IN6		0x00000020
 746#define LM93_ALARM_IN7		0x00000040
 747#define LM93_ALARM_IN8		0x00000080
 748#define LM93_ALARM_IN9		0x00000100
 749#define LM93_ALARM_IN10		0x00000200
 750#define LM93_ALARM_IN11		0x00000400
 751#define LM93_ALARM_IN12		0x00000800
 752#define LM93_ALARM_IN13		0x00001000
 753#define LM93_ALARM_IN14		0x00002000
 754#define LM93_ALARM_IN15		0x00004000
 755#define LM93_ALARM_IN16		0x00008000
 756#define LM93_ALARM_FAN1		0x00010000
 757#define LM93_ALARM_FAN2		0x00020000
 758#define LM93_ALARM_FAN3		0x00040000
 759#define LM93_ALARM_FAN4		0x00080000
 760#define LM93_ALARM_PH1_ERR	0x00100000
 761#define LM93_ALARM_PH2_ERR	0x00200000
 762#define LM93_ALARM_SCSI1_ERR	0x00400000
 763#define LM93_ALARM_SCSI2_ERR	0x00800000
 764#define LM93_ALARM_DVDDP1_ERR	0x01000000
 765#define LM93_ALARM_DVDDP2_ERR	0x02000000
 766#define LM93_ALARM_D1_ERR	0x04000000
 767#define LM93_ALARM_D2_ERR	0x08000000
 768#define LM93_ALARM_TEMP1	0x10000000
 769#define LM93_ALARM_TEMP2	0x20000000
 770#define LM93_ALARM_TEMP3	0x40000000
 771
 772static unsigned LM93_ALARMS_FROM_REG(struct block1_t b1)
 773{
 774	unsigned result;
 775	result  = b1.host_status_2 & 0x3f;
 776
 777	if (vccp_limit_type[0])
 778		result |= (b1.host_status_4 & 0x10) << 2;
 779	else
 780		result |= b1.host_status_2 & 0x40;
 781
 782	if (vccp_limit_type[1])
 783		result |= (b1.host_status_4 & 0x20) << 2;
 784	else
 785		result |= b1.host_status_2 & 0x80;
 786
 787	result |= b1.host_status_3 << 8;
 788	result |= (b1.fan_status & 0x0f) << 16;
 789	result |= (b1.p1_prochot_status & 0x80) << 13;
 790	result |= (b1.p2_prochot_status & 0x80) << 14;
 791	result |= (b1.host_status_4 & 0xfc) << 20;
 792	result |= (b1.host_status_1 & 0x07) << 28;
 793	return result;
 794}
 795
 796#define MAX_RETRIES 5
 797
 798static u8 lm93_read_byte(struct i2c_client *client, u8 reg)
 799{
 800	int value, i;
 801
 802	/* retry in case of read errors */
 803	for (i = 1; i <= MAX_RETRIES; i++) {
 804		value = i2c_smbus_read_byte_data(client, reg);
 805		if (value >= 0) {
 806			return value;
 807		} else {
 808			dev_warn(&client->dev,
 809				 "lm93: read byte data failed, address 0x%02x.\n",
 810				 reg);
 811			mdelay(i + 3);
 812		}
 813
 814	}
 815
 816	/* <TODO> what to return in case of error? */
 817	dev_err(&client->dev, "lm93: All read byte retries failed!!\n");
 818	return 0;
 819}
 820
 821static int lm93_write_byte(struct i2c_client *client, u8 reg, u8 value)
 822{
 823	int result;
 824
 825	/* <TODO> how to handle write errors? */
 826	result = i2c_smbus_write_byte_data(client, reg, value);
 827
 828	if (result < 0)
 829		dev_warn(&client->dev,
 830			 "lm93: write byte data failed, 0x%02x at address 0x%02x.\n",
 831			 value, reg);
 832
 833	return result;
 834}
 835
 836static u16 lm93_read_word(struct i2c_client *client, u8 reg)
 837{
 838	int value, i;
 839
 840	/* retry in case of read errors */
 841	for (i = 1; i <= MAX_RETRIES; i++) {
 842		value = i2c_smbus_read_word_data(client, reg);
 843		if (value >= 0) {
 844			return value;
 845		} else {
 846			dev_warn(&client->dev,
 847				 "lm93: read word data failed, address 0x%02x.\n",
 848				 reg);
 849			mdelay(i + 3);
 850		}
 851
 852	}
 853
 854	/* <TODO> what to return in case of error? */
 855	dev_err(&client->dev, "lm93: All read word retries failed!!\n");
 856	return 0;
 857}
 858
 859static int lm93_write_word(struct i2c_client *client, u8 reg, u16 value)
 860{
 861	int result;
 862
 863	/* <TODO> how to handle write errors? */
 864	result = i2c_smbus_write_word_data(client, reg, value);
 865
 866	if (result < 0)
 867		dev_warn(&client->dev,
 868			 "lm93: write word data failed, 0x%04x at address 0x%02x.\n",
 869			 value, reg);
 870
 871	return result;
 872}
 873
 874static u8 lm93_block_buffer[I2C_SMBUS_BLOCK_MAX];
 875
 876/*
 877 * read block data into values, retry if not expected length
 878 * fbn => index to lm93_block_read_cmds table
 879 * (Fixed Block Number - section 14.5.2 of LM93 datasheet)
 880 */
 881static void lm93_read_block(struct i2c_client *client, u8 fbn, u8 *values)
 882{
 883	int i, result = 0;
 884
 885	for (i = 1; i <= MAX_RETRIES; i++) {
 886		result = i2c_smbus_read_block_data(client,
 887			lm93_block_read_cmds[fbn].cmd, lm93_block_buffer);
 888
 889		if (result == lm93_block_read_cmds[fbn].len) {
 890			break;
 891		} else {
 892			dev_warn(&client->dev,
 893				 "lm93: block read data failed, command 0x%02x.\n",
 894				 lm93_block_read_cmds[fbn].cmd);
 895			mdelay(i + 3);
 896		}
 897	}
 898
 899	if (result == lm93_block_read_cmds[fbn].len) {
 900		memcpy(values, lm93_block_buffer,
 901		       lm93_block_read_cmds[fbn].len);
 902	} else {
 903		/* <TODO> what to do in case of error? */
 904	}
 905}
 906
 907static struct lm93_data *lm93_update_device(struct device *dev)
 908{
 909	struct lm93_data *data = dev_get_drvdata(dev);
 910	struct i2c_client *client = data->client;
 911	const unsigned long interval = HZ + (HZ / 2);
 912
 913	mutex_lock(&data->update_lock);
 914
 915	if (time_after(jiffies, data->last_updated + interval) ||
 916		!data->valid) {
 917
 918		data->update(data, client);
 919		data->last_updated = jiffies;
 920		data->valid = 1;
 921	}
 922
 923	mutex_unlock(&data->update_lock);
 924	return data;
 925}
 926
 927/* update routine for data that has no corresponding SMBus block command */
 928static void lm93_update_client_common(struct lm93_data *data,
 929				      struct i2c_client *client)
 930{
 931	int i;
 932	u8 *ptr;
 933
 934	/* temp1 - temp4: limits */
 935	for (i = 0; i < 4; i++) {
 936		data->temp_lim[i].min =
 937			lm93_read_byte(client, LM93_REG_TEMP_MIN(i));
 938		data->temp_lim[i].max =
 939			lm93_read_byte(client, LM93_REG_TEMP_MAX(i));
 940	}
 941
 942	/* config register */
 943	data->config = lm93_read_byte(client, LM93_REG_CONFIG);
 944
 945	/* vid1 - vid2: values */
 946	for (i = 0; i < 2; i++)
 947		data->vid[i] = lm93_read_byte(client, LM93_REG_VID(i));
 948
 949	/* prochot1 - prochot2: limits */
 950	for (i = 0; i < 2; i++)
 951		data->prochot_max[i] = lm93_read_byte(client,
 952				LM93_REG_PROCHOT_MAX(i));
 953
 954	/* vccp1 - vccp2: VID relative limits */
 955	for (i = 0; i < 2; i++)
 956		data->vccp_limits[i] = lm93_read_byte(client,
 957				LM93_REG_VCCP_LIMIT_OFF(i));
 958
 959	/* GPIO input state */
 960	data->gpi = lm93_read_byte(client, LM93_REG_GPI);
 961
 962	/* #PROCHOT override state */
 963	data->prochot_override = lm93_read_byte(client,
 964			LM93_REG_PROCHOT_OVERRIDE);
 965
 966	/* #PROCHOT intervals */
 967	data->prochot_interval = lm93_read_byte(client,
 968			LM93_REG_PROCHOT_INTERVAL);
 969
 970	/* Fan Boost Temperature registers */
 971	for (i = 0; i < 4; i++)
 972		data->boost[i] = lm93_read_byte(client, LM93_REG_BOOST(i));
 973
 974	/* Fan Boost Temperature Hyst. registers */
 975	data->boost_hyst[0] = lm93_read_byte(client, LM93_REG_BOOST_HYST_12);
 976	data->boost_hyst[1] = lm93_read_byte(client, LM93_REG_BOOST_HYST_34);
 977
 978	/* Temperature Zone Min. PWM & Hysteresis registers */
 979	data->auto_pwm_min_hyst[0] =
 980			lm93_read_byte(client, LM93_REG_PWM_MIN_HYST_12);
 981	data->auto_pwm_min_hyst[1] =
 982			lm93_read_byte(client, LM93_REG_PWM_MIN_HYST_34);
 983
 984	/* #PROCHOT & #VRDHOT PWM Ramp Control register */
 985	data->pwm_ramp_ctl = lm93_read_byte(client, LM93_REG_PWM_RAMP_CTL);
 986
 987	/* misc setup registers */
 988	data->sfc1 = lm93_read_byte(client, LM93_REG_SFC1);
 989	data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
 990	data->sf_tach_to_pwm = lm93_read_byte(client,
 991			LM93_REG_SF_TACH_TO_PWM);
 992
 993	/* write back alarm values to clear */
 994	for (i = 0, ptr = (u8 *)(&data->block1); i < 8; i++)
 995		lm93_write_byte(client, LM93_REG_HOST_ERROR_1 + i, *(ptr + i));
 996}
 997
 998/* update routine which uses SMBus block data commands */
 999static void lm93_update_client_full(struct lm93_data *data,
1000				    struct i2c_client *client)
1001{
1002	dev_dbg(&client->dev, "starting device update (block data enabled)\n");
1003
1004	/* in1 - in16: values & limits */
1005	lm93_read_block(client, 3, (u8 *)(data->block3));
1006	lm93_read_block(client, 7, (u8 *)(data->block7));
1007
1008	/* temp1 - temp4: values */
1009	lm93_read_block(client, 2, (u8 *)(data->block2));
1010
1011	/* prochot1 - prochot2: values */
1012	lm93_read_block(client, 4, (u8 *)(data->block4));
1013
1014	/* fan1 - fan4: values & limits */
1015	lm93_read_block(client, 5, (u8 *)(data->block5));
1016	lm93_read_block(client, 8, (u8 *)(data->block8));
1017
1018	/* pmw control registers */
1019	lm93_read_block(client, 9, (u8 *)(data->block9));
1020
1021	/* alarm values */
1022	lm93_read_block(client, 1, (u8 *)(&data->block1));
1023
1024	/* auto/pwm registers */
1025	lm93_read_block(client, 10, (u8 *)(&data->block10));
1026
1027	lm93_update_client_common(data, client);
1028}
1029
1030/* update routine which uses SMBus byte/word data commands only */
1031static void lm93_update_client_min(struct lm93_data *data,
1032				   struct i2c_client *client)
1033{
1034	int i, j;
1035	u8 *ptr;
1036
1037	dev_dbg(&client->dev, "starting device update (block data disabled)\n");
1038
1039	/* in1 - in16: values & limits */
1040	for (i = 0; i < 16; i++) {
1041		data->block3[i] =
1042			lm93_read_byte(client, LM93_REG_IN(i));
1043		data->block7[i].min =
1044			lm93_read_byte(client, LM93_REG_IN_MIN(i));
1045		data->block7[i].max =
1046			lm93_read_byte(client, LM93_REG_IN_MAX(i));
1047	}
1048
1049	/* temp1 - temp4: values */
1050	for (i = 0; i < 4; i++) {
1051		data->block2[i] =
1052			lm93_read_byte(client, LM93_REG_TEMP(i));
1053	}
1054
1055	/* prochot1 - prochot2: values */
1056	for (i = 0; i < 2; i++) {
1057		data->block4[i].cur =
1058			lm93_read_byte(client, LM93_REG_PROCHOT_CUR(i));
1059		data->block4[i].avg =
1060			lm93_read_byte(client, LM93_REG_PROCHOT_AVG(i));
1061	}
1062
1063	/* fan1 - fan4: values & limits */
1064	for (i = 0; i < 4; i++) {
1065		data->block5[i] =
1066			lm93_read_word(client, LM93_REG_FAN(i));
1067		data->block8[i] =
1068			lm93_read_word(client, LM93_REG_FAN_MIN(i));
1069	}
1070
1071	/* pwm control registers */
1072	for (i = 0; i < 2; i++) {
1073		for (j = 0; j < 4; j++) {
1074			data->block9[i][j] =
1075				lm93_read_byte(client, LM93_REG_PWM_CTL(i, j));
1076		}
1077	}
1078
1079	/* alarm values */
1080	for (i = 0, ptr = (u8 *)(&data->block1); i < 8; i++) {
1081		*(ptr + i) =
1082			lm93_read_byte(client, LM93_REG_HOST_ERROR_1 + i);
1083	}
1084
1085	/* auto/pwm (base temp) registers */
1086	for (i = 0; i < 4; i++) {
1087		data->block10.base[i] =
1088			lm93_read_byte(client, LM93_REG_TEMP_BASE(i));
1089	}
1090
1091	/* auto/pwm (offset temp) registers */
1092	for (i = 0; i < 12; i++) {
1093		data->block10.offset[i] =
1094			lm93_read_byte(client, LM93_REG_TEMP_OFFSET(i));
1095	}
1096
1097	lm93_update_client_common(data, client);
1098}
1099
1100/* following are the sysfs callback functions */
1101static ssize_t in_show(struct device *dev, struct device_attribute *attr,
1102		       char *buf)
1103{
1104	int nr = (to_sensor_dev_attr(attr))->index;
1105
1106	struct lm93_data *data = lm93_update_device(dev);
1107	return sprintf(buf, "%d\n", LM93_IN_FROM_REG(nr, data->block3[nr]));
1108}
1109
1110static SENSOR_DEVICE_ATTR_RO(in1_input, in, 0);
1111static SENSOR_DEVICE_ATTR_RO(in2_input, in, 1);
1112static SENSOR_DEVICE_ATTR_RO(in3_input, in, 2);
1113static SENSOR_DEVICE_ATTR_RO(in4_input, in, 3);
1114static SENSOR_DEVICE_ATTR_RO(in5_input, in, 4);
1115static SENSOR_DEVICE_ATTR_RO(in6_input, in, 5);
1116static SENSOR_DEVICE_ATTR_RO(in7_input, in, 6);
1117static SENSOR_DEVICE_ATTR_RO(in8_input, in, 7);
1118static SENSOR_DEVICE_ATTR_RO(in9_input, in, 8);
1119static SENSOR_DEVICE_ATTR_RO(in10_input, in, 9);
1120static SENSOR_DEVICE_ATTR_RO(in11_input, in, 10);
1121static SENSOR_DEVICE_ATTR_RO(in12_input, in, 11);
1122static SENSOR_DEVICE_ATTR_RO(in13_input, in, 12);
1123static SENSOR_DEVICE_ATTR_RO(in14_input, in, 13);
1124static SENSOR_DEVICE_ATTR_RO(in15_input, in, 14);
1125static SENSOR_DEVICE_ATTR_RO(in16_input, in, 15);
1126
1127static ssize_t in_min_show(struct device *dev, struct device_attribute *attr,
1128			   char *buf)
1129{
1130	int nr = (to_sensor_dev_attr(attr))->index;
1131	struct lm93_data *data = lm93_update_device(dev);
1132	int vccp = nr - 6;
1133	long rc, vid;
1134
1135	if ((nr == 6 || nr == 7) && vccp_limit_type[vccp]) {
1136		vid = LM93_VID_FROM_REG(data->vid[vccp]);
1137		rc = LM93_IN_MIN_FROM_REG(data->vccp_limits[vccp], vid);
1138	} else {
1139		rc = LM93_IN_FROM_REG(nr, data->block7[nr].min);
1140	}
1141	return sprintf(buf, "%ld\n", rc);
 
 
 
1142}
1143
1144static ssize_t in_min_store(struct device *dev, struct device_attribute *attr,
1145			    const char *buf, size_t count)
1146{
1147	int nr = (to_sensor_dev_attr(attr))->index;
1148	struct lm93_data *data = dev_get_drvdata(dev);
1149	struct i2c_client *client = data->client;
 
1150	int vccp = nr - 6;
1151	long vid;
1152	unsigned long val;
1153	int err;
1154
1155	err = kstrtoul(buf, 10, &val);
1156	if (err)
1157		return err;
1158
1159	mutex_lock(&data->update_lock);
1160	if ((nr == 6 || nr == 7) && vccp_limit_type[vccp]) {
1161		vid = LM93_VID_FROM_REG(data->vid[vccp]);
1162		data->vccp_limits[vccp] = (data->vccp_limits[vccp] & 0xf0) |
1163				LM93_IN_REL_TO_REG(val, 0, vid);
1164		lm93_write_byte(client, LM93_REG_VCCP_LIMIT_OFF(vccp),
1165				data->vccp_limits[vccp]);
1166	} else {
1167		data->block7[nr].min = LM93_IN_TO_REG(nr, val);
 
1168		lm93_write_byte(client, LM93_REG_IN_MIN(nr),
1169				data->block7[nr].min);
1170	}
1171	mutex_unlock(&data->update_lock);
1172	return count;
1173}
1174
1175static SENSOR_DEVICE_ATTR_RW(in1_min, in_min, 0);
1176static SENSOR_DEVICE_ATTR_RW(in2_min, in_min, 1);
1177static SENSOR_DEVICE_ATTR_RW(in3_min, in_min, 2);
1178static SENSOR_DEVICE_ATTR_RW(in4_min, in_min, 3);
1179static SENSOR_DEVICE_ATTR_RW(in5_min, in_min, 4);
1180static SENSOR_DEVICE_ATTR_RW(in6_min, in_min, 5);
1181static SENSOR_DEVICE_ATTR_RW(in7_min, in_min, 6);
1182static SENSOR_DEVICE_ATTR_RW(in8_min, in_min, 7);
1183static SENSOR_DEVICE_ATTR_RW(in9_min, in_min, 8);
1184static SENSOR_DEVICE_ATTR_RW(in10_min, in_min, 9);
1185static SENSOR_DEVICE_ATTR_RW(in11_min, in_min, 10);
1186static SENSOR_DEVICE_ATTR_RW(in12_min, in_min, 11);
1187static SENSOR_DEVICE_ATTR_RW(in13_min, in_min, 12);
1188static SENSOR_DEVICE_ATTR_RW(in14_min, in_min, 13);
1189static SENSOR_DEVICE_ATTR_RW(in15_min, in_min, 14);
1190static SENSOR_DEVICE_ATTR_RW(in16_min, in_min, 15);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1191
1192static ssize_t in_max_show(struct device *dev, struct device_attribute *attr,
1193			   char *buf)
1194{
1195	int nr = (to_sensor_dev_attr(attr))->index;
1196	struct lm93_data *data = lm93_update_device(dev);
1197	int vccp = nr - 6;
1198	long rc, vid;
1199
1200	if ((nr == 6 || nr == 7) && vccp_limit_type[vccp]) {
1201		vid = LM93_VID_FROM_REG(data->vid[vccp]);
1202		rc = LM93_IN_MAX_FROM_REG(data->vccp_limits[vccp], vid);
1203	} else {
1204		rc = LM93_IN_FROM_REG(nr, data->block7[nr].max);
 
1205	}
1206	return sprintf(buf, "%ld\n", rc);
1207}
1208
1209static ssize_t in_max_store(struct device *dev, struct device_attribute *attr,
1210			    const char *buf, size_t count)
1211{
1212	int nr = (to_sensor_dev_attr(attr))->index;
1213	struct lm93_data *data = dev_get_drvdata(dev);
1214	struct i2c_client *client = data->client;
 
1215	int vccp = nr - 6;
1216	long vid;
1217	unsigned long val;
1218	int err;
1219
1220	err = kstrtoul(buf, 10, &val);
1221	if (err)
1222		return err;
1223
1224	mutex_lock(&data->update_lock);
1225	if ((nr == 6 || nr == 7) && vccp_limit_type[vccp]) {
1226		vid = LM93_VID_FROM_REG(data->vid[vccp]);
1227		data->vccp_limits[vccp] = (data->vccp_limits[vccp] & 0x0f) |
1228				LM93_IN_REL_TO_REG(val, 1, vid);
1229		lm93_write_byte(client, LM93_REG_VCCP_LIMIT_OFF(vccp),
1230				data->vccp_limits[vccp]);
1231	} else {
1232		data->block7[nr].max = LM93_IN_TO_REG(nr, val);
 
1233		lm93_write_byte(client, LM93_REG_IN_MAX(nr),
1234				data->block7[nr].max);
1235	}
1236	mutex_unlock(&data->update_lock);
1237	return count;
1238}
1239
1240static SENSOR_DEVICE_ATTR_RW(in1_max, in_max, 0);
1241static SENSOR_DEVICE_ATTR_RW(in2_max, in_max, 1);
1242static SENSOR_DEVICE_ATTR_RW(in3_max, in_max, 2);
1243static SENSOR_DEVICE_ATTR_RW(in4_max, in_max, 3);
1244static SENSOR_DEVICE_ATTR_RW(in5_max, in_max, 4);
1245static SENSOR_DEVICE_ATTR_RW(in6_max, in_max, 5);
1246static SENSOR_DEVICE_ATTR_RW(in7_max, in_max, 6);
1247static SENSOR_DEVICE_ATTR_RW(in8_max, in_max, 7);
1248static SENSOR_DEVICE_ATTR_RW(in9_max, in_max, 8);
1249static SENSOR_DEVICE_ATTR_RW(in10_max, in_max, 9);
1250static SENSOR_DEVICE_ATTR_RW(in11_max, in_max, 10);
1251static SENSOR_DEVICE_ATTR_RW(in12_max, in_max, 11);
1252static SENSOR_DEVICE_ATTR_RW(in13_max, in_max, 12);
1253static SENSOR_DEVICE_ATTR_RW(in14_max, in_max, 13);
1254static SENSOR_DEVICE_ATTR_RW(in15_max, in_max, 14);
1255static SENSOR_DEVICE_ATTR_RW(in16_max, in_max, 15);
1256
1257static ssize_t temp_show(struct device *dev, struct device_attribute *attr,
1258			 char *buf)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1259{
1260	int nr = (to_sensor_dev_attr(attr))->index;
1261	struct lm93_data *data = lm93_update_device(dev);
1262	return sprintf(buf, "%d\n", LM93_TEMP_FROM_REG(data->block2[nr]));
1263}
1264
1265static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, 0);
1266static SENSOR_DEVICE_ATTR_RO(temp2_input, temp, 1);
1267static SENSOR_DEVICE_ATTR_RO(temp3_input, temp, 2);
1268
1269static ssize_t temp_min_show(struct device *dev,
1270			     struct device_attribute *attr, char *buf)
1271{
1272	int nr = (to_sensor_dev_attr(attr))->index;
1273	struct lm93_data *data = lm93_update_device(dev);
1274	return sprintf(buf, "%d\n", LM93_TEMP_FROM_REG(data->temp_lim[nr].min));
1275}
1276
1277static ssize_t temp_min_store(struct device *dev,
1278			      struct device_attribute *attr, const char *buf,
1279			      size_t count)
1280{
1281	int nr = (to_sensor_dev_attr(attr))->index;
1282	struct lm93_data *data = dev_get_drvdata(dev);
1283	struct i2c_client *client = data->client;
1284	long val;
1285	int err;
1286
1287	err = kstrtol(buf, 10, &val);
1288	if (err)
1289		return err;
1290
1291	mutex_lock(&data->update_lock);
1292	data->temp_lim[nr].min = LM93_TEMP_TO_REG(val);
1293	lm93_write_byte(client, LM93_REG_TEMP_MIN(nr), data->temp_lim[nr].min);
1294	mutex_unlock(&data->update_lock);
1295	return count;
1296}
1297
1298static SENSOR_DEVICE_ATTR_RW(temp1_min, temp_min, 0);
1299static SENSOR_DEVICE_ATTR_RW(temp2_min, temp_min, 1);
1300static SENSOR_DEVICE_ATTR_RW(temp3_min, temp_min, 2);
 
 
 
1301
1302static ssize_t temp_max_show(struct device *dev,
1303			     struct device_attribute *attr, char *buf)
1304{
1305	int nr = (to_sensor_dev_attr(attr))->index;
1306	struct lm93_data *data = lm93_update_device(dev);
1307	return sprintf(buf, "%d\n", LM93_TEMP_FROM_REG(data->temp_lim[nr].max));
1308}
1309
1310static ssize_t temp_max_store(struct device *dev,
1311			      struct device_attribute *attr, const char *buf,
1312			      size_t count)
1313{
1314	int nr = (to_sensor_dev_attr(attr))->index;
1315	struct lm93_data *data = dev_get_drvdata(dev);
1316	struct i2c_client *client = data->client;
1317	long val;
1318	int err;
1319
1320	err = kstrtol(buf, 10, &val);
1321	if (err)
1322		return err;
1323
1324	mutex_lock(&data->update_lock);
1325	data->temp_lim[nr].max = LM93_TEMP_TO_REG(val);
1326	lm93_write_byte(client, LM93_REG_TEMP_MAX(nr), data->temp_lim[nr].max);
1327	mutex_unlock(&data->update_lock);
1328	return count;
1329}
1330
1331static SENSOR_DEVICE_ATTR_RW(temp1_max, temp_max, 0);
1332static SENSOR_DEVICE_ATTR_RW(temp2_max, temp_max, 1);
1333static SENSOR_DEVICE_ATTR_RW(temp3_max, temp_max, 2);
 
 
 
1334
1335static ssize_t temp_auto_base_show(struct device *dev,
1336				   struct device_attribute *attr, char *buf)
1337{
1338	int nr = (to_sensor_dev_attr(attr))->index;
1339	struct lm93_data *data = lm93_update_device(dev);
1340	return sprintf(buf, "%d\n", LM93_TEMP_FROM_REG(data->block10.base[nr]));
1341}
1342
1343static ssize_t temp_auto_base_store(struct device *dev,
1344				    struct device_attribute *attr,
1345				    const char *buf, size_t count)
1346{
1347	int nr = (to_sensor_dev_attr(attr))->index;
1348	struct lm93_data *data = dev_get_drvdata(dev);
1349	struct i2c_client *client = data->client;
1350	long val;
1351	int err;
1352
1353	err = kstrtol(buf, 10, &val);
1354	if (err)
1355		return err;
1356
1357	mutex_lock(&data->update_lock);
1358	data->block10.base[nr] = LM93_TEMP_TO_REG(val);
1359	lm93_write_byte(client, LM93_REG_TEMP_BASE(nr), data->block10.base[nr]);
1360	mutex_unlock(&data->update_lock);
1361	return count;
1362}
1363
1364static SENSOR_DEVICE_ATTR_RW(temp1_auto_base, temp_auto_base, 0);
1365static SENSOR_DEVICE_ATTR_RW(temp2_auto_base, temp_auto_base, 1);
1366static SENSOR_DEVICE_ATTR_RW(temp3_auto_base, temp_auto_base, 2);
 
 
 
1367
1368static ssize_t temp_auto_boost_show(struct device *dev,
1369				    struct device_attribute *attr, char *buf)
1370{
1371	int nr = (to_sensor_dev_attr(attr))->index;
1372	struct lm93_data *data = lm93_update_device(dev);
1373	return sprintf(buf, "%d\n", LM93_TEMP_FROM_REG(data->boost[nr]));
1374}
1375
1376static ssize_t temp_auto_boost_store(struct device *dev,
1377				     struct device_attribute *attr,
1378				     const char *buf, size_t count)
1379{
1380	int nr = (to_sensor_dev_attr(attr))->index;
1381	struct lm93_data *data = dev_get_drvdata(dev);
1382	struct i2c_client *client = data->client;
1383	long val;
1384	int err;
1385
1386	err = kstrtol(buf, 10, &val);
1387	if (err)
1388		return err;
1389
1390	mutex_lock(&data->update_lock);
1391	data->boost[nr] = LM93_TEMP_TO_REG(val);
1392	lm93_write_byte(client, LM93_REG_BOOST(nr), data->boost[nr]);
1393	mutex_unlock(&data->update_lock);
1394	return count;
1395}
1396
1397static SENSOR_DEVICE_ATTR_RW(temp1_auto_boost, temp_auto_boost, 0);
1398static SENSOR_DEVICE_ATTR_RW(temp2_auto_boost, temp_auto_boost, 1);
1399static SENSOR_DEVICE_ATTR_RW(temp3_auto_boost, temp_auto_boost, 2);
 
 
 
1400
1401static ssize_t temp_auto_boost_hyst_show(struct device *dev,
1402					 struct device_attribute *attr,
1403					 char *buf)
1404{
1405	int nr = (to_sensor_dev_attr(attr))->index;
1406	struct lm93_data *data = lm93_update_device(dev);
1407	int mode = LM93_TEMP_OFFSET_MODE_FROM_REG(data->sfc2, nr);
1408	return sprintf(buf, "%d\n",
1409		       LM93_AUTO_BOOST_HYST_FROM_REGS(data, nr, mode));
1410}
1411
1412static ssize_t temp_auto_boost_hyst_store(struct device *dev,
1413					  struct device_attribute *attr,
1414					  const char *buf, size_t count)
1415{
1416	int nr = (to_sensor_dev_attr(attr))->index;
1417	struct lm93_data *data = dev_get_drvdata(dev);
1418	struct i2c_client *client = data->client;
1419	unsigned long val;
1420	int err;
1421
1422	err = kstrtoul(buf, 10, &val);
1423	if (err)
1424		return err;
1425
1426	mutex_lock(&data->update_lock);
1427	/* force 0.5C/bit mode */
1428	data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1429	data->sfc2 |= ((nr < 2) ? 0x10 : 0x20);
1430	lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1431	data->boost_hyst[nr/2] = LM93_AUTO_BOOST_HYST_TO_REG(data, val, nr, 1);
1432	lm93_write_byte(client, LM93_REG_BOOST_HYST(nr),
1433			data->boost_hyst[nr/2]);
1434	mutex_unlock(&data->update_lock);
1435	return count;
1436}
1437
1438static SENSOR_DEVICE_ATTR_RW(temp1_auto_boost_hyst, temp_auto_boost_hyst, 0);
1439static SENSOR_DEVICE_ATTR_RW(temp2_auto_boost_hyst, temp_auto_boost_hyst, 1);
1440static SENSOR_DEVICE_ATTR_RW(temp3_auto_boost_hyst, temp_auto_boost_hyst, 2);
 
 
 
 
 
 
1441
1442static ssize_t temp_auto_offset_show(struct device *dev,
1443				     struct device_attribute *attr, char *buf)
1444{
1445	struct sensor_device_attribute_2 *s_attr = to_sensor_dev_attr_2(attr);
1446	int nr = s_attr->index;
1447	int ofs = s_attr->nr;
1448	struct lm93_data *data = lm93_update_device(dev);
1449	int mode = LM93_TEMP_OFFSET_MODE_FROM_REG(data->sfc2, nr);
1450	return sprintf(buf, "%d\n",
1451	       LM93_TEMP_AUTO_OFFSET_FROM_REG(data->block10.offset[ofs],
1452					      nr, mode));
1453}
1454
1455static ssize_t temp_auto_offset_store(struct device *dev,
1456				      struct device_attribute *attr,
1457				      const char *buf, size_t count)
1458{
1459	struct sensor_device_attribute_2 *s_attr = to_sensor_dev_attr_2(attr);
1460	int nr = s_attr->index;
1461	int ofs = s_attr->nr;
1462	struct lm93_data *data = dev_get_drvdata(dev);
1463	struct i2c_client *client = data->client;
1464	unsigned long val;
1465	int err;
1466
1467	err = kstrtoul(buf, 10, &val);
1468	if (err)
1469		return err;
1470
1471	mutex_lock(&data->update_lock);
1472	/* force 0.5C/bit mode */
1473	data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1474	data->sfc2 |= ((nr < 2) ? 0x10 : 0x20);
1475	lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1476	data->block10.offset[ofs] = LM93_TEMP_AUTO_OFFSET_TO_REG(
1477			data->block10.offset[ofs], val, nr, 1);
1478	lm93_write_byte(client, LM93_REG_TEMP_OFFSET(ofs),
1479			data->block10.offset[ofs]);
1480	mutex_unlock(&data->update_lock);
1481	return count;
1482}
1483
1484static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_offset1, temp_auto_offset, 0, 0);
1485static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_offset2, temp_auto_offset, 1, 0);
1486static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_offset3, temp_auto_offset, 2, 0);
1487static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_offset4, temp_auto_offset, 3, 0);
1488static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_offset5, temp_auto_offset, 4, 0);
1489static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_offset6, temp_auto_offset, 5, 0);
1490static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_offset7, temp_auto_offset, 6, 0);
1491static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_offset8, temp_auto_offset, 7, 0);
1492static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_offset9, temp_auto_offset, 8, 0);
1493static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_offset10, temp_auto_offset, 9, 0);
1494static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_offset11, temp_auto_offset, 10, 0);
1495static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_offset12, temp_auto_offset, 11, 0);
1496static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_offset1, temp_auto_offset, 0, 1);
1497static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_offset2, temp_auto_offset, 1, 1);
1498static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_offset3, temp_auto_offset, 2, 1);
1499static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_offset4, temp_auto_offset, 3, 1);
1500static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_offset5, temp_auto_offset, 4, 1);
1501static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_offset6, temp_auto_offset, 5, 1);
1502static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_offset7, temp_auto_offset, 6, 1);
1503static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_offset8, temp_auto_offset, 7, 1);
1504static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_offset9, temp_auto_offset, 8, 1);
1505static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_offset10, temp_auto_offset, 9, 1);
1506static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_offset11, temp_auto_offset, 10, 1);
1507static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_offset12, temp_auto_offset, 11, 1);
1508static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_offset1, temp_auto_offset, 0, 2);
1509static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_offset2, temp_auto_offset, 1, 2);
1510static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_offset3, temp_auto_offset, 2, 2);
1511static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_offset4, temp_auto_offset, 3, 2);
1512static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_offset5, temp_auto_offset, 4, 2);
1513static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_offset6, temp_auto_offset, 5, 2);
1514static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_offset7, temp_auto_offset, 6, 2);
1515static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_offset8, temp_auto_offset, 7, 2);
1516static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_offset9, temp_auto_offset, 8, 2);
1517static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_offset10, temp_auto_offset, 9, 2);
1518static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_offset11, temp_auto_offset, 10, 2);
1519static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_offset12, temp_auto_offset, 11, 2);
1520
1521static ssize_t temp_auto_pwm_min_show(struct device *dev,
1522				      struct device_attribute *attr,
1523				      char *buf)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1524{
1525	int nr = (to_sensor_dev_attr(attr))->index;
1526	u8 reg, ctl4;
1527	struct lm93_data *data = lm93_update_device(dev);
1528	reg = data->auto_pwm_min_hyst[nr/2] >> 4 & 0x0f;
1529	ctl4 = data->block9[nr][LM93_PWM_CTL4];
1530	return sprintf(buf, "%d\n", LM93_PWM_FROM_REG(reg, (ctl4 & 0x07) ?
1531				LM93_PWM_MAP_LO_FREQ : LM93_PWM_MAP_HI_FREQ));
1532}
1533
1534static ssize_t temp_auto_pwm_min_store(struct device *dev,
1535				       struct device_attribute *attr,
1536				       const char *buf, size_t count)
1537{
1538	int nr = (to_sensor_dev_attr(attr))->index;
1539	struct lm93_data *data = dev_get_drvdata(dev);
1540	struct i2c_client *client = data->client;
 
1541	u8 reg, ctl4;
1542	unsigned long val;
1543	int err;
1544
1545	err = kstrtoul(buf, 10, &val);
1546	if (err)
1547		return err;
1548
1549	mutex_lock(&data->update_lock);
1550	reg = lm93_read_byte(client, LM93_REG_PWM_MIN_HYST(nr));
1551	ctl4 = lm93_read_byte(client, LM93_REG_PWM_CTL(nr, LM93_PWM_CTL4));
1552	reg = (reg & 0x0f) |
1553		LM93_PWM_TO_REG(val, (ctl4 & 0x07) ?
1554				LM93_PWM_MAP_LO_FREQ :
1555				LM93_PWM_MAP_HI_FREQ) << 4;
1556	data->auto_pwm_min_hyst[nr/2] = reg;
1557	lm93_write_byte(client, LM93_REG_PWM_MIN_HYST(nr), reg);
1558	mutex_unlock(&data->update_lock);
1559	return count;
1560}
1561
1562static SENSOR_DEVICE_ATTR_RW(temp1_auto_pwm_min, temp_auto_pwm_min, 0);
1563static SENSOR_DEVICE_ATTR_RW(temp2_auto_pwm_min, temp_auto_pwm_min, 1);
1564static SENSOR_DEVICE_ATTR_RW(temp3_auto_pwm_min, temp_auto_pwm_min, 2);
 
 
 
 
 
 
1565
1566static ssize_t temp_auto_offset_hyst_show(struct device *dev,
1567					  struct device_attribute *attr,
1568					  char *buf)
1569{
1570	int nr = (to_sensor_dev_attr(attr))->index;
1571	struct lm93_data *data = lm93_update_device(dev);
1572	int mode = LM93_TEMP_OFFSET_MODE_FROM_REG(data->sfc2, nr);
1573	return sprintf(buf, "%d\n", LM93_TEMP_OFFSET_FROM_REG(
1574					data->auto_pwm_min_hyst[nr / 2], mode));
1575}
1576
1577static ssize_t temp_auto_offset_hyst_store(struct device *dev,
1578					   struct device_attribute *attr,
1579					   const char *buf, size_t count)
1580{
1581	int nr = (to_sensor_dev_attr(attr))->index;
1582	struct lm93_data *data = dev_get_drvdata(dev);
1583	struct i2c_client *client = data->client;
 
1584	u8 reg;
1585	unsigned long val;
1586	int err;
1587
1588	err = kstrtoul(buf, 10, &val);
1589	if (err)
1590		return err;
1591
1592	mutex_lock(&data->update_lock);
1593	/* force 0.5C/bit mode */
1594	data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1595	data->sfc2 |= ((nr < 2) ? 0x10 : 0x20);
1596	lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1597	reg = data->auto_pwm_min_hyst[nr/2];
1598	reg = (reg & 0xf0) | (LM93_TEMP_OFFSET_TO_REG(val, 1) & 0x0f);
1599	data->auto_pwm_min_hyst[nr/2] = reg;
1600	lm93_write_byte(client, LM93_REG_PWM_MIN_HYST(nr), reg);
1601	mutex_unlock(&data->update_lock);
1602	return count;
1603}
1604
1605static SENSOR_DEVICE_ATTR_RW(temp1_auto_offset_hyst, temp_auto_offset_hyst, 0);
1606static SENSOR_DEVICE_ATTR_RW(temp2_auto_offset_hyst, temp_auto_offset_hyst, 1);
1607static SENSOR_DEVICE_ATTR_RW(temp3_auto_offset_hyst, temp_auto_offset_hyst, 2);
 
 
 
 
 
 
1608
1609static ssize_t fan_input_show(struct device *dev,
1610			      struct device_attribute *attr, char *buf)
1611{
1612	struct sensor_device_attribute *s_attr = to_sensor_dev_attr(attr);
1613	int nr = s_attr->index;
1614	struct lm93_data *data = lm93_update_device(dev);
1615
1616	return sprintf(buf, "%d\n", LM93_FAN_FROM_REG(data->block5[nr]));
1617}
1618
1619static SENSOR_DEVICE_ATTR_RO(fan1_input, fan_input, 0);
1620static SENSOR_DEVICE_ATTR_RO(fan2_input, fan_input, 1);
1621static SENSOR_DEVICE_ATTR_RO(fan3_input, fan_input, 2);
1622static SENSOR_DEVICE_ATTR_RO(fan4_input, fan_input, 3);
1623
1624static ssize_t fan_min_show(struct device *dev, struct device_attribute *attr,
1625			    char *buf)
1626{
1627	int nr = (to_sensor_dev_attr(attr))->index;
1628	struct lm93_data *data = lm93_update_device(dev);
1629
1630	return sprintf(buf, "%d\n", LM93_FAN_FROM_REG(data->block8[nr]));
1631}
1632
1633static ssize_t fan_min_store(struct device *dev,
1634			     struct device_attribute *attr, const char *buf,
1635			     size_t count)
1636{
1637	int nr = (to_sensor_dev_attr(attr))->index;
1638	struct lm93_data *data = dev_get_drvdata(dev);
1639	struct i2c_client *client = data->client;
1640	unsigned long val;
1641	int err;
1642
1643	err = kstrtoul(buf, 10, &val);
1644	if (err)
1645		return err;
1646
1647	mutex_lock(&data->update_lock);
1648	data->block8[nr] = LM93_FAN_TO_REG(val);
1649	lm93_write_word(client, LM93_REG_FAN_MIN(nr), data->block8[nr]);
1650	mutex_unlock(&data->update_lock);
1651	return count;
1652}
1653
1654static SENSOR_DEVICE_ATTR_RW(fan1_min, fan_min, 0);
1655static SENSOR_DEVICE_ATTR_RW(fan2_min, fan_min, 1);
1656static SENSOR_DEVICE_ATTR_RW(fan3_min, fan_min, 2);
1657static SENSOR_DEVICE_ATTR_RW(fan4_min, fan_min, 3);
 
 
 
 
 
 
 
 
1658
1659/*
1660 * some tedious bit-twiddling here to deal with the register format:
1661 *
1662 *	data->sf_tach_to_pwm: (tach to pwm mapping bits)
1663 *
1664 *		bit |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0
1665 *		     T4:P2 T4:P1 T3:P2 T3:P1 T2:P2 T2:P1 T1:P2 T1:P1
1666 *
1667 *	data->sfc2: (enable bits)
1668 *
1669 *		bit |  3  |  2  |  1  |  0
1670 *		       T4    T3    T2    T1
1671 */
1672
1673static ssize_t fan_smart_tach_show(struct device *dev,
1674				   struct device_attribute *attr, char *buf)
1675{
1676	int nr = (to_sensor_dev_attr(attr))->index;
1677	struct lm93_data *data = lm93_update_device(dev);
1678	long rc = 0;
1679	int mapping;
1680
1681	/* extract the relevant mapping */
1682	mapping = (data->sf_tach_to_pwm >> (nr * 2)) & 0x03;
1683
1684	/* if there's a mapping and it's enabled */
1685	if (mapping && ((data->sfc2 >> nr) & 0x01))
1686		rc = mapping;
1687	return sprintf(buf, "%ld\n", rc);
1688}
1689
1690/*
1691 * helper function - must grab data->update_lock before calling
1692 * fan is 0-3, indicating fan1-fan4
1693 */
1694static void lm93_write_fan_smart_tach(struct i2c_client *client,
1695	struct lm93_data *data, int fan, long value)
1696{
1697	/* insert the new mapping and write it out */
1698	data->sf_tach_to_pwm = lm93_read_byte(client, LM93_REG_SF_TACH_TO_PWM);
1699	data->sf_tach_to_pwm &= ~(0x3 << fan * 2);
1700	data->sf_tach_to_pwm |= value << fan * 2;
1701	lm93_write_byte(client, LM93_REG_SF_TACH_TO_PWM, data->sf_tach_to_pwm);
1702
1703	/* insert the enable bit and write it out */
1704	data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1705	if (value)
1706		data->sfc2 |= 1 << fan;
1707	else
1708		data->sfc2 &= ~(1 << fan);
1709	lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1710}
1711
1712static ssize_t fan_smart_tach_store(struct device *dev,
1713				    struct device_attribute *attr,
1714				    const char *buf, size_t count)
1715{
1716	int nr = (to_sensor_dev_attr(attr))->index;
1717	struct lm93_data *data = dev_get_drvdata(dev);
1718	struct i2c_client *client = data->client;
1719	unsigned long val;
1720	int err;
1721
1722	err = kstrtoul(buf, 10, &val);
1723	if (err)
1724		return err;
1725
1726	mutex_lock(&data->update_lock);
1727	/* sanity test, ignore the write otherwise */
1728	if (val <= 2) {
1729		/* can't enable if pwm freq is 22.5KHz */
1730		if (val) {
1731			u8 ctl4 = lm93_read_byte(client,
1732				LM93_REG_PWM_CTL(val - 1, LM93_PWM_CTL4));
1733			if ((ctl4 & 0x07) == 0)
1734				val = 0;
1735		}
1736		lm93_write_fan_smart_tach(client, data, nr, val);
1737	}
1738	mutex_unlock(&data->update_lock);
1739	return count;
1740}
1741
1742static SENSOR_DEVICE_ATTR_RW(fan1_smart_tach, fan_smart_tach, 0);
1743static SENSOR_DEVICE_ATTR_RW(fan2_smart_tach, fan_smart_tach, 1);
1744static SENSOR_DEVICE_ATTR_RW(fan3_smart_tach, fan_smart_tach, 2);
1745static SENSOR_DEVICE_ATTR_RW(fan4_smart_tach, fan_smart_tach, 3);
 
 
 
 
1746
1747static ssize_t pwm_show(struct device *dev, struct device_attribute *attr,
1748			char *buf)
1749{
1750	int nr = (to_sensor_dev_attr(attr))->index;
1751	struct lm93_data *data = lm93_update_device(dev);
1752	u8 ctl2, ctl4;
1753	long rc;
1754
1755	ctl2 = data->block9[nr][LM93_PWM_CTL2];
1756	ctl4 = data->block9[nr][LM93_PWM_CTL4];
1757	if (ctl2 & 0x01) /* show user commanded value if enabled */
1758		rc = data->pwm_override[nr];
1759	else /* show present h/w value if manual pwm disabled */
1760		rc = LM93_PWM_FROM_REG(ctl2 >> 4, (ctl4 & 0x07) ?
1761			LM93_PWM_MAP_LO_FREQ : LM93_PWM_MAP_HI_FREQ);
1762	return sprintf(buf, "%ld\n", rc);
1763}
1764
1765static ssize_t pwm_store(struct device *dev, struct device_attribute *attr,
1766			 const char *buf, size_t count)
1767{
1768	int nr = (to_sensor_dev_attr(attr))->index;
1769	struct lm93_data *data = dev_get_drvdata(dev);
1770	struct i2c_client *client = data->client;
 
1771	u8 ctl2, ctl4;
1772	unsigned long val;
1773	int err;
1774
1775	err = kstrtoul(buf, 10, &val);
1776	if (err)
1777		return err;
1778
1779	mutex_lock(&data->update_lock);
1780	ctl2 = lm93_read_byte(client, LM93_REG_PWM_CTL(nr, LM93_PWM_CTL2));
1781	ctl4 = lm93_read_byte(client, LM93_REG_PWM_CTL(nr, LM93_PWM_CTL4));
1782	ctl2 = (ctl2 & 0x0f) | LM93_PWM_TO_REG(val, (ctl4 & 0x07) ?
1783			LM93_PWM_MAP_LO_FREQ : LM93_PWM_MAP_HI_FREQ) << 4;
1784	/* save user commanded value */
1785	data->pwm_override[nr] = LM93_PWM_FROM_REG(ctl2 >> 4,
1786			(ctl4 & 0x07) ?  LM93_PWM_MAP_LO_FREQ :
1787			LM93_PWM_MAP_HI_FREQ);
1788	lm93_write_byte(client, LM93_REG_PWM_CTL(nr, LM93_PWM_CTL2), ctl2);
1789	mutex_unlock(&data->update_lock);
1790	return count;
1791}
1792
1793static SENSOR_DEVICE_ATTR_RW(pwm1, pwm, 0);
1794static SENSOR_DEVICE_ATTR_RW(pwm2, pwm, 1);
1795
1796static ssize_t pwm_enable_show(struct device *dev,
1797			       struct device_attribute *attr, char *buf)
1798{
1799	int nr = (to_sensor_dev_attr(attr))->index;
1800	struct lm93_data *data = lm93_update_device(dev);
1801	u8 ctl2;
1802	long rc;
1803
1804	ctl2 = data->block9[nr][LM93_PWM_CTL2];
1805	if (ctl2 & 0x01) /* manual override enabled ? */
1806		rc = ((ctl2 & 0xF0) == 0xF0) ? 0 : 1;
1807	else
1808		rc = 2;
1809	return sprintf(buf, "%ld\n", rc);
1810}
1811
1812static ssize_t pwm_enable_store(struct device *dev,
1813				struct device_attribute *attr,
1814				const char *buf, size_t count)
1815{
1816	int nr = (to_sensor_dev_attr(attr))->index;
1817	struct lm93_data *data = dev_get_drvdata(dev);
1818	struct i2c_client *client = data->client;
 
1819	u8 ctl2;
1820	unsigned long val;
1821	int err;
1822
1823	err = kstrtoul(buf, 10, &val);
1824	if (err)
1825		return err;
1826
1827	mutex_lock(&data->update_lock);
1828	ctl2 = lm93_read_byte(client, LM93_REG_PWM_CTL(nr, LM93_PWM_CTL2));
1829
1830	switch (val) {
1831	case 0:
1832		ctl2 |= 0xF1; /* enable manual override, set PWM to max */
1833		break;
1834	case 1:
1835		ctl2 |= 0x01; /* enable manual override */
1836		break;
1837	case 2:
1838		ctl2 &= ~0x01; /* disable manual override */
1839		break;
1840	default:
1841		mutex_unlock(&data->update_lock);
1842		return -EINVAL;
1843	}
1844
1845	lm93_write_byte(client, LM93_REG_PWM_CTL(nr, LM93_PWM_CTL2), ctl2);
1846	mutex_unlock(&data->update_lock);
1847	return count;
1848}
1849
1850static SENSOR_DEVICE_ATTR_RW(pwm1_enable, pwm_enable, 0);
1851static SENSOR_DEVICE_ATTR_RW(pwm2_enable, pwm_enable, 1);
 
 
1852
1853static ssize_t pwm_freq_show(struct device *dev,
1854			     struct device_attribute *attr, char *buf)
1855{
1856	int nr = (to_sensor_dev_attr(attr))->index;
1857	struct lm93_data *data = lm93_update_device(dev);
1858	u8 ctl4;
1859
1860	ctl4 = data->block9[nr][LM93_PWM_CTL4];
1861	return sprintf(buf, "%d\n", LM93_PWM_FREQ_FROM_REG(ctl4));
1862}
1863
1864/*
1865 * helper function - must grab data->update_lock before calling
1866 * pwm is 0-1, indicating pwm1-pwm2
1867 * this disables smart tach for all tach channels bound to the given pwm
1868 */
1869static void lm93_disable_fan_smart_tach(struct i2c_client *client,
1870	struct lm93_data *data, int pwm)
1871{
1872	int mapping = lm93_read_byte(client, LM93_REG_SF_TACH_TO_PWM);
1873	int mask;
1874
1875	/* collapse the mapping into a mask of enable bits */
1876	mapping = (mapping >> pwm) & 0x55;
1877	mask = mapping & 0x01;
1878	mask |= (mapping & 0x04) >> 1;
1879	mask |= (mapping & 0x10) >> 2;
1880	mask |= (mapping & 0x40) >> 3;
1881
1882	/* disable smart tach according to the mask */
1883	data->sfc2 = lm93_read_byte(client, LM93_REG_SFC2);
1884	data->sfc2 &= ~mask;
1885	lm93_write_byte(client, LM93_REG_SFC2, data->sfc2);
1886}
1887
1888static ssize_t pwm_freq_store(struct device *dev,
1889			      struct device_attribute *attr, const char *buf,
1890			      size_t count)
1891{
1892	int nr = (to_sensor_dev_attr(attr))->index;
1893	struct lm93_data *data = dev_get_drvdata(dev);
1894	struct i2c_client *client = data->client;
 
1895	u8 ctl4;
1896	unsigned long val;
1897	int err;
1898
1899	err = kstrtoul(buf, 10, &val);
1900	if (err)
1901		return err;
1902
1903	mutex_lock(&data->update_lock);
1904	ctl4 = lm93_read_byte(client, LM93_REG_PWM_CTL(nr, LM93_PWM_CTL4));
1905	ctl4 = (ctl4 & 0xf8) | LM93_PWM_FREQ_TO_REG(val);
1906	data->block9[nr][LM93_PWM_CTL4] = ctl4;
1907	/* ctl4 == 0 -> 22.5KHz -> disable smart tach */
1908	if (!ctl4)
1909		lm93_disable_fan_smart_tach(client, data, nr);
1910	lm93_write_byte(client, LM93_REG_PWM_CTL(nr, LM93_PWM_CTL4), ctl4);
1911	mutex_unlock(&data->update_lock);
1912	return count;
1913}
1914
1915static SENSOR_DEVICE_ATTR_RW(pwm1_freq, pwm_freq, 0);
1916static SENSOR_DEVICE_ATTR_RW(pwm2_freq, pwm_freq, 1);
 
 
1917
1918static ssize_t pwm_auto_channels_show(struct device *dev,
1919				      struct device_attribute *attr,
1920				      char *buf)
1921{
1922	int nr = (to_sensor_dev_attr(attr))->index;
1923	struct lm93_data *data = lm93_update_device(dev);
1924	return sprintf(buf, "%d\n", data->block9[nr][LM93_PWM_CTL1]);
1925}
1926
1927static ssize_t pwm_auto_channels_store(struct device *dev,
1928				       struct device_attribute *attr,
1929				       const char *buf, size_t count)
1930{
1931	int nr = (to_sensor_dev_attr(attr))->index;
1932	struct lm93_data *data = dev_get_drvdata(dev);
1933	struct i2c_client *client = data->client;
1934	unsigned long val;
1935	int err;
1936
1937	err = kstrtoul(buf, 10, &val);
1938	if (err)
1939		return err;
1940
1941	mutex_lock(&data->update_lock);
1942	data->block9[nr][LM93_PWM_CTL1] = clamp_val(val, 0, 255);
1943	lm93_write_byte(client, LM93_REG_PWM_CTL(nr, LM93_PWM_CTL1),
1944				data->block9[nr][LM93_PWM_CTL1]);
1945	mutex_unlock(&data->update_lock);
1946	return count;
1947}
1948
1949static SENSOR_DEVICE_ATTR_RW(pwm1_auto_channels, pwm_auto_channels, 0);
1950static SENSOR_DEVICE_ATTR_RW(pwm2_auto_channels, pwm_auto_channels, 1);
 
 
1951
1952static ssize_t pwm_auto_spinup_min_show(struct device *dev,
1953					struct device_attribute *attr,
1954					char *buf)
1955{
1956	int nr = (to_sensor_dev_attr(attr))->index;
1957	struct lm93_data *data = lm93_update_device(dev);
1958	u8 ctl3, ctl4;
1959
1960	ctl3 = data->block9[nr][LM93_PWM_CTL3];
1961	ctl4 = data->block9[nr][LM93_PWM_CTL4];
1962	return sprintf(buf, "%d\n",
1963		       LM93_PWM_FROM_REG(ctl3 & 0x0f, (ctl4 & 0x07) ?
1964			LM93_PWM_MAP_LO_FREQ : LM93_PWM_MAP_HI_FREQ));
1965}
1966
1967static ssize_t pwm_auto_spinup_min_store(struct device *dev,
1968					 struct device_attribute *attr,
1969					 const char *buf, size_t count)
1970{
1971	int nr = (to_sensor_dev_attr(attr))->index;
1972	struct lm93_data *data = dev_get_drvdata(dev);
1973	struct i2c_client *client = data->client;
 
1974	u8 ctl3, ctl4;
1975	unsigned long val;
1976	int err;
1977
1978	err = kstrtoul(buf, 10, &val);
1979	if (err)
1980		return err;
1981
1982	mutex_lock(&data->update_lock);
1983	ctl3 = lm93_read_byte(client, LM93_REG_PWM_CTL(nr, LM93_PWM_CTL3));
1984	ctl4 = lm93_read_byte(client, LM93_REG_PWM_CTL(nr, LM93_PWM_CTL4));
1985	ctl3 = (ctl3 & 0xf0) | LM93_PWM_TO_REG(val, (ctl4 & 0x07) ?
1986			LM93_PWM_MAP_LO_FREQ :
1987			LM93_PWM_MAP_HI_FREQ);
1988	data->block9[nr][LM93_PWM_CTL3] = ctl3;
1989	lm93_write_byte(client, LM93_REG_PWM_CTL(nr, LM93_PWM_CTL3), ctl3);
1990	mutex_unlock(&data->update_lock);
1991	return count;
1992}
1993
1994static SENSOR_DEVICE_ATTR_RW(pwm1_auto_spinup_min, pwm_auto_spinup_min, 0);
1995static SENSOR_DEVICE_ATTR_RW(pwm2_auto_spinup_min, pwm_auto_spinup_min, 1);
 
 
 
 
1996
1997static ssize_t pwm_auto_spinup_time_show(struct device *dev,
1998					 struct device_attribute *attr,
1999					 char *buf)
2000{
2001	int nr = (to_sensor_dev_attr(attr))->index;
2002	struct lm93_data *data = lm93_update_device(dev);
2003	return sprintf(buf, "%d\n", LM93_SPINUP_TIME_FROM_REG(
2004				data->block9[nr][LM93_PWM_CTL3]));
2005}
2006
2007static ssize_t pwm_auto_spinup_time_store(struct device *dev,
2008					  struct device_attribute *attr,
2009					  const char *buf, size_t count)
2010{
2011	int nr = (to_sensor_dev_attr(attr))->index;
2012	struct lm93_data *data = dev_get_drvdata(dev);
2013	struct i2c_client *client = data->client;
 
2014	u8 ctl3;
2015	unsigned long val;
2016	int err;
2017
2018	err = kstrtoul(buf, 10, &val);
2019	if (err)
2020		return err;
2021
2022	mutex_lock(&data->update_lock);
2023	ctl3 = lm93_read_byte(client, LM93_REG_PWM_CTL(nr, LM93_PWM_CTL3));
2024	ctl3 = (ctl3 & 0x1f) | (LM93_SPINUP_TIME_TO_REG(val) << 5 & 0xe0);
2025	data->block9[nr][LM93_PWM_CTL3] = ctl3;
2026	lm93_write_byte(client, LM93_REG_PWM_CTL(nr, LM93_PWM_CTL3), ctl3);
2027	mutex_unlock(&data->update_lock);
2028	return count;
2029}
2030
2031static SENSOR_DEVICE_ATTR_RW(pwm1_auto_spinup_time, pwm_auto_spinup_time, 0);
2032static SENSOR_DEVICE_ATTR_RW(pwm2_auto_spinup_time, pwm_auto_spinup_time, 1);
 
 
 
 
2033
2034static ssize_t pwm_auto_prochot_ramp_show(struct device *dev,
2035				struct device_attribute *attr, char *buf)
2036{
2037	struct lm93_data *data = lm93_update_device(dev);
2038	return sprintf(buf, "%d\n",
2039		       LM93_RAMP_FROM_REG(data->pwm_ramp_ctl >> 4 & 0x0f));
2040}
2041
2042static ssize_t pwm_auto_prochot_ramp_store(struct device *dev,
2043						struct device_attribute *attr,
2044						const char *buf, size_t count)
2045{
2046	struct lm93_data *data = dev_get_drvdata(dev);
2047	struct i2c_client *client = data->client;
 
2048	u8 ramp;
2049	unsigned long val;
2050	int err;
2051
2052	err = kstrtoul(buf, 10, &val);
2053	if (err)
2054		return err;
2055
2056	mutex_lock(&data->update_lock);
2057	ramp = lm93_read_byte(client, LM93_REG_PWM_RAMP_CTL);
2058	ramp = (ramp & 0x0f) | (LM93_RAMP_TO_REG(val) << 4 & 0xf0);
2059	lm93_write_byte(client, LM93_REG_PWM_RAMP_CTL, ramp);
2060	mutex_unlock(&data->update_lock);
2061	return count;
2062}
2063
2064static DEVICE_ATTR_RW(pwm_auto_prochot_ramp);
 
 
2065
2066static ssize_t pwm_auto_vrdhot_ramp_show(struct device *dev,
2067				struct device_attribute *attr, char *buf)
2068{
2069	struct lm93_data *data = lm93_update_device(dev);
2070	return sprintf(buf, "%d\n",
2071		       LM93_RAMP_FROM_REG(data->pwm_ramp_ctl & 0x0f));
2072}
2073
2074static ssize_t pwm_auto_vrdhot_ramp_store(struct device *dev,
2075						struct device_attribute *attr,
2076						const char *buf, size_t count)
2077{
2078	struct lm93_data *data = dev_get_drvdata(dev);
2079	struct i2c_client *client = data->client;
 
2080	u8 ramp;
2081	unsigned long val;
2082	int err;
2083
2084	err = kstrtoul(buf, 10, &val);
2085	if (err)
2086		return err;
2087
2088	mutex_lock(&data->update_lock);
2089	ramp = lm93_read_byte(client, LM93_REG_PWM_RAMP_CTL);
2090	ramp = (ramp & 0xf0) | (LM93_RAMP_TO_REG(val) & 0x0f);
2091	lm93_write_byte(client, LM93_REG_PWM_RAMP_CTL, ramp);
2092	mutex_unlock(&data->update_lock);
2093	return 0;
2094}
2095
2096static DEVICE_ATTR_RW(pwm_auto_vrdhot_ramp);
 
 
2097
2098static ssize_t vid_show(struct device *dev, struct device_attribute *attr,
2099			char *buf)
2100{
2101	int nr = (to_sensor_dev_attr(attr))->index;
2102	struct lm93_data *data = lm93_update_device(dev);
2103	return sprintf(buf, "%d\n", LM93_VID_FROM_REG(data->vid[nr]));
2104}
2105
2106static SENSOR_DEVICE_ATTR_RO(cpu0_vid, vid, 0);
2107static SENSOR_DEVICE_ATTR_RO(cpu1_vid, vid, 1);
2108
2109static ssize_t prochot_show(struct device *dev, struct device_attribute *attr,
2110			    char *buf)
2111{
2112	int nr = (to_sensor_dev_attr(attr))->index;
2113	struct lm93_data *data = lm93_update_device(dev);
2114	return sprintf(buf, "%d\n", data->block4[nr].cur);
2115}
2116
2117static SENSOR_DEVICE_ATTR_RO(prochot1, prochot, 0);
2118static SENSOR_DEVICE_ATTR_RO(prochot2, prochot, 1);
2119
2120static ssize_t prochot_avg_show(struct device *dev,
2121				struct device_attribute *attr, char *buf)
2122{
2123	int nr = (to_sensor_dev_attr(attr))->index;
2124	struct lm93_data *data = lm93_update_device(dev);
2125	return sprintf(buf, "%d\n", data->block4[nr].avg);
2126}
2127
2128static SENSOR_DEVICE_ATTR_RO(prochot1_avg, prochot_avg, 0);
2129static SENSOR_DEVICE_ATTR_RO(prochot2_avg, prochot_avg, 1);
2130
2131static ssize_t prochot_max_show(struct device *dev,
2132				struct device_attribute *attr, char *buf)
2133{
2134	int nr = (to_sensor_dev_attr(attr))->index;
2135	struct lm93_data *data = lm93_update_device(dev);
2136	return sprintf(buf, "%d\n", data->prochot_max[nr]);
2137}
2138
2139static ssize_t prochot_max_store(struct device *dev,
2140				 struct device_attribute *attr,
2141				 const char *buf, size_t count)
2142{
2143	int nr = (to_sensor_dev_attr(attr))->index;
2144	struct lm93_data *data = dev_get_drvdata(dev);
2145	struct i2c_client *client = data->client;
2146	unsigned long val;
2147	int err;
2148
2149	err = kstrtoul(buf, 10, &val);
2150	if (err)
2151		return err;
2152
2153	mutex_lock(&data->update_lock);
2154	data->prochot_max[nr] = LM93_PROCHOT_TO_REG(val);
2155	lm93_write_byte(client, LM93_REG_PROCHOT_MAX(nr),
2156			data->prochot_max[nr]);
2157	mutex_unlock(&data->update_lock);
2158	return count;
2159}
2160
2161static SENSOR_DEVICE_ATTR_RW(prochot1_max, prochot_max, 0);
2162static SENSOR_DEVICE_ATTR_RW(prochot2_max, prochot_max, 1);
 
 
2163
2164static const u8 prochot_override_mask[] = { 0x80, 0x40 };
2165
2166static ssize_t prochot_override_show(struct device *dev,
2167				     struct device_attribute *attr, char *buf)
2168{
2169	int nr = (to_sensor_dev_attr(attr))->index;
2170	struct lm93_data *data = lm93_update_device(dev);
2171	return sprintf(buf, "%d\n",
2172		(data->prochot_override & prochot_override_mask[nr]) ? 1 : 0);
2173}
2174
2175static ssize_t prochot_override_store(struct device *dev,
2176				      struct device_attribute *attr,
2177				      const char *buf, size_t count)
2178{
2179	int nr = (to_sensor_dev_attr(attr))->index;
2180	struct lm93_data *data = dev_get_drvdata(dev);
2181	struct i2c_client *client = data->client;
2182	unsigned long val;
2183	int err;
2184
2185	err = kstrtoul(buf, 10, &val);
2186	if (err)
2187		return err;
2188
2189	mutex_lock(&data->update_lock);
2190	if (val)
2191		data->prochot_override |= prochot_override_mask[nr];
2192	else
2193		data->prochot_override &= (~prochot_override_mask[nr]);
2194	lm93_write_byte(client, LM93_REG_PROCHOT_OVERRIDE,
2195			data->prochot_override);
2196	mutex_unlock(&data->update_lock);
2197	return count;
2198}
2199
2200static SENSOR_DEVICE_ATTR_RW(prochot1_override, prochot_override, 0);
2201static SENSOR_DEVICE_ATTR_RW(prochot2_override, prochot_override, 1);
 
 
2202
2203static ssize_t prochot_interval_show(struct device *dev,
2204				     struct device_attribute *attr, char *buf)
2205{
2206	int nr = (to_sensor_dev_attr(attr))->index;
2207	struct lm93_data *data = lm93_update_device(dev);
2208	u8 tmp;
2209	if (nr == 1)
2210		tmp = (data->prochot_interval & 0xf0) >> 4;
2211	else
2212		tmp = data->prochot_interval & 0x0f;
2213	return sprintf(buf, "%d\n", LM93_INTERVAL_FROM_REG(tmp));
2214}
2215
2216static ssize_t prochot_interval_store(struct device *dev,
2217				      struct device_attribute *attr,
2218				      const char *buf, size_t count)
2219{
2220	int nr = (to_sensor_dev_attr(attr))->index;
2221	struct lm93_data *data = dev_get_drvdata(dev);
2222	struct i2c_client *client = data->client;
 
2223	u8 tmp;
2224	unsigned long val;
2225	int err;
2226
2227	err = kstrtoul(buf, 10, &val);
2228	if (err)
2229		return err;
2230
2231	mutex_lock(&data->update_lock);
2232	tmp = lm93_read_byte(client, LM93_REG_PROCHOT_INTERVAL);
2233	if (nr == 1)
2234		tmp = (tmp & 0x0f) | (LM93_INTERVAL_TO_REG(val) << 4);
2235	else
2236		tmp = (tmp & 0xf0) | LM93_INTERVAL_TO_REG(val);
2237	data->prochot_interval = tmp;
2238	lm93_write_byte(client, LM93_REG_PROCHOT_INTERVAL, tmp);
2239	mutex_unlock(&data->update_lock);
2240	return count;
2241}
2242
2243static SENSOR_DEVICE_ATTR_RW(prochot1_interval, prochot_interval, 0);
2244static SENSOR_DEVICE_ATTR_RW(prochot2_interval, prochot_interval, 1);
 
 
2245
2246static ssize_t prochot_override_duty_cycle_show(struct device *dev,
2247						struct device_attribute *attr,
2248						char *buf)
2249{
2250	struct lm93_data *data = lm93_update_device(dev);
2251	return sprintf(buf, "%d\n", data->prochot_override & 0x0f);
2252}
2253
2254static ssize_t prochot_override_duty_cycle_store(struct device *dev,
2255						struct device_attribute *attr,
2256						const char *buf, size_t count)
2257{
2258	struct lm93_data *data = dev_get_drvdata(dev);
2259	struct i2c_client *client = data->client;
2260	unsigned long val;
2261	int err;
2262
2263	err = kstrtoul(buf, 10, &val);
2264	if (err)
2265		return err;
2266
2267	mutex_lock(&data->update_lock);
2268	data->prochot_override = (data->prochot_override & 0xf0) |
2269					clamp_val(val, 0, 15);
2270	lm93_write_byte(client, LM93_REG_PROCHOT_OVERRIDE,
2271			data->prochot_override);
2272	mutex_unlock(&data->update_lock);
2273	return count;
2274}
2275
2276static DEVICE_ATTR_RW(prochot_override_duty_cycle);
 
 
2277
2278static ssize_t prochot_short_show(struct device *dev,
2279				struct device_attribute *attr, char *buf)
2280{
2281	struct lm93_data *data = lm93_update_device(dev);
2282	return sprintf(buf, "%d\n", (data->config & 0x10) ? 1 : 0);
2283}
2284
2285static ssize_t prochot_short_store(struct device *dev,
2286					struct device_attribute *attr,
2287					const char *buf, size_t count)
2288{
2289	struct lm93_data *data = dev_get_drvdata(dev);
2290	struct i2c_client *client = data->client;
2291	unsigned long val;
2292	int err;
2293
2294	err = kstrtoul(buf, 10, &val);
2295	if (err)
2296		return err;
2297
2298	mutex_lock(&data->update_lock);
2299	if (val)
2300		data->config |= 0x10;
2301	else
2302		data->config &= ~0x10;
2303	lm93_write_byte(client, LM93_REG_CONFIG, data->config);
2304	mutex_unlock(&data->update_lock);
2305	return count;
2306}
2307
2308static DEVICE_ATTR_RW(prochot_short);
 
2309
2310static ssize_t vrdhot_show(struct device *dev, struct device_attribute *attr,
2311			   char *buf)
2312{
2313	int nr = (to_sensor_dev_attr(attr))->index;
2314	struct lm93_data *data = lm93_update_device(dev);
2315	return sprintf(buf, "%d\n",
2316		       data->block1.host_status_1 & (1 << (nr + 4)) ? 1 : 0);
2317}
2318
2319static SENSOR_DEVICE_ATTR_RO(vrdhot1, vrdhot, 0);
2320static SENSOR_DEVICE_ATTR_RO(vrdhot2, vrdhot, 1);
2321
2322static ssize_t gpio_show(struct device *dev, struct device_attribute *attr,
2323				char *buf)
2324{
2325	struct lm93_data *data = lm93_update_device(dev);
2326	return sprintf(buf, "%d\n", LM93_GPI_FROM_REG(data->gpi));
2327}
2328
2329static DEVICE_ATTR_RO(gpio);
2330
2331static ssize_t alarms_show(struct device *dev, struct device_attribute *attr,
2332				char *buf)
2333{
2334	struct lm93_data *data = lm93_update_device(dev);
2335	return sprintf(buf, "%d\n", LM93_ALARMS_FROM_REG(data->block1));
2336}
2337
2338static DEVICE_ATTR_RO(alarms);
2339
2340static struct attribute *lm93_attrs[] = {
2341	&sensor_dev_attr_in1_input.dev_attr.attr,
2342	&sensor_dev_attr_in2_input.dev_attr.attr,
2343	&sensor_dev_attr_in3_input.dev_attr.attr,
2344	&sensor_dev_attr_in4_input.dev_attr.attr,
2345	&sensor_dev_attr_in5_input.dev_attr.attr,
2346	&sensor_dev_attr_in6_input.dev_attr.attr,
2347	&sensor_dev_attr_in7_input.dev_attr.attr,
2348	&sensor_dev_attr_in8_input.dev_attr.attr,
2349	&sensor_dev_attr_in9_input.dev_attr.attr,
2350	&sensor_dev_attr_in10_input.dev_attr.attr,
2351	&sensor_dev_attr_in11_input.dev_attr.attr,
2352	&sensor_dev_attr_in12_input.dev_attr.attr,
2353	&sensor_dev_attr_in13_input.dev_attr.attr,
2354	&sensor_dev_attr_in14_input.dev_attr.attr,
2355	&sensor_dev_attr_in15_input.dev_attr.attr,
2356	&sensor_dev_attr_in16_input.dev_attr.attr,
2357	&sensor_dev_attr_in1_min.dev_attr.attr,
2358	&sensor_dev_attr_in2_min.dev_attr.attr,
2359	&sensor_dev_attr_in3_min.dev_attr.attr,
2360	&sensor_dev_attr_in4_min.dev_attr.attr,
2361	&sensor_dev_attr_in5_min.dev_attr.attr,
2362	&sensor_dev_attr_in6_min.dev_attr.attr,
2363	&sensor_dev_attr_in7_min.dev_attr.attr,
2364	&sensor_dev_attr_in8_min.dev_attr.attr,
2365	&sensor_dev_attr_in9_min.dev_attr.attr,
2366	&sensor_dev_attr_in10_min.dev_attr.attr,
2367	&sensor_dev_attr_in11_min.dev_attr.attr,
2368	&sensor_dev_attr_in12_min.dev_attr.attr,
2369	&sensor_dev_attr_in13_min.dev_attr.attr,
2370	&sensor_dev_attr_in14_min.dev_attr.attr,
2371	&sensor_dev_attr_in15_min.dev_attr.attr,
2372	&sensor_dev_attr_in16_min.dev_attr.attr,
2373	&sensor_dev_attr_in1_max.dev_attr.attr,
2374	&sensor_dev_attr_in2_max.dev_attr.attr,
2375	&sensor_dev_attr_in3_max.dev_attr.attr,
2376	&sensor_dev_attr_in4_max.dev_attr.attr,
2377	&sensor_dev_attr_in5_max.dev_attr.attr,
2378	&sensor_dev_attr_in6_max.dev_attr.attr,
2379	&sensor_dev_attr_in7_max.dev_attr.attr,
2380	&sensor_dev_attr_in8_max.dev_attr.attr,
2381	&sensor_dev_attr_in9_max.dev_attr.attr,
2382	&sensor_dev_attr_in10_max.dev_attr.attr,
2383	&sensor_dev_attr_in11_max.dev_attr.attr,
2384	&sensor_dev_attr_in12_max.dev_attr.attr,
2385	&sensor_dev_attr_in13_max.dev_attr.attr,
2386	&sensor_dev_attr_in14_max.dev_attr.attr,
2387	&sensor_dev_attr_in15_max.dev_attr.attr,
2388	&sensor_dev_attr_in16_max.dev_attr.attr,
2389	&sensor_dev_attr_temp1_input.dev_attr.attr,
2390	&sensor_dev_attr_temp2_input.dev_attr.attr,
2391	&sensor_dev_attr_temp3_input.dev_attr.attr,
2392	&sensor_dev_attr_temp1_min.dev_attr.attr,
2393	&sensor_dev_attr_temp2_min.dev_attr.attr,
2394	&sensor_dev_attr_temp3_min.dev_attr.attr,
2395	&sensor_dev_attr_temp1_max.dev_attr.attr,
2396	&sensor_dev_attr_temp2_max.dev_attr.attr,
2397	&sensor_dev_attr_temp3_max.dev_attr.attr,
2398	&sensor_dev_attr_temp1_auto_base.dev_attr.attr,
2399	&sensor_dev_attr_temp2_auto_base.dev_attr.attr,
2400	&sensor_dev_attr_temp3_auto_base.dev_attr.attr,
2401	&sensor_dev_attr_temp1_auto_boost.dev_attr.attr,
2402	&sensor_dev_attr_temp2_auto_boost.dev_attr.attr,
2403	&sensor_dev_attr_temp3_auto_boost.dev_attr.attr,
2404	&sensor_dev_attr_temp1_auto_boost_hyst.dev_attr.attr,
2405	&sensor_dev_attr_temp2_auto_boost_hyst.dev_attr.attr,
2406	&sensor_dev_attr_temp3_auto_boost_hyst.dev_attr.attr,
2407	&sensor_dev_attr_temp1_auto_offset1.dev_attr.attr,
2408	&sensor_dev_attr_temp1_auto_offset2.dev_attr.attr,
2409	&sensor_dev_attr_temp1_auto_offset3.dev_attr.attr,
2410	&sensor_dev_attr_temp1_auto_offset4.dev_attr.attr,
2411	&sensor_dev_attr_temp1_auto_offset5.dev_attr.attr,
2412	&sensor_dev_attr_temp1_auto_offset6.dev_attr.attr,
2413	&sensor_dev_attr_temp1_auto_offset7.dev_attr.attr,
2414	&sensor_dev_attr_temp1_auto_offset8.dev_attr.attr,
2415	&sensor_dev_attr_temp1_auto_offset9.dev_attr.attr,
2416	&sensor_dev_attr_temp1_auto_offset10.dev_attr.attr,
2417	&sensor_dev_attr_temp1_auto_offset11.dev_attr.attr,
2418	&sensor_dev_attr_temp1_auto_offset12.dev_attr.attr,
2419	&sensor_dev_attr_temp2_auto_offset1.dev_attr.attr,
2420	&sensor_dev_attr_temp2_auto_offset2.dev_attr.attr,
2421	&sensor_dev_attr_temp2_auto_offset3.dev_attr.attr,
2422	&sensor_dev_attr_temp2_auto_offset4.dev_attr.attr,
2423	&sensor_dev_attr_temp2_auto_offset5.dev_attr.attr,
2424	&sensor_dev_attr_temp2_auto_offset6.dev_attr.attr,
2425	&sensor_dev_attr_temp2_auto_offset7.dev_attr.attr,
2426	&sensor_dev_attr_temp2_auto_offset8.dev_attr.attr,
2427	&sensor_dev_attr_temp2_auto_offset9.dev_attr.attr,
2428	&sensor_dev_attr_temp2_auto_offset10.dev_attr.attr,
2429	&sensor_dev_attr_temp2_auto_offset11.dev_attr.attr,
2430	&sensor_dev_attr_temp2_auto_offset12.dev_attr.attr,
2431	&sensor_dev_attr_temp3_auto_offset1.dev_attr.attr,
2432	&sensor_dev_attr_temp3_auto_offset2.dev_attr.attr,
2433	&sensor_dev_attr_temp3_auto_offset3.dev_attr.attr,
2434	&sensor_dev_attr_temp3_auto_offset4.dev_attr.attr,
2435	&sensor_dev_attr_temp3_auto_offset5.dev_attr.attr,
2436	&sensor_dev_attr_temp3_auto_offset6.dev_attr.attr,
2437	&sensor_dev_attr_temp3_auto_offset7.dev_attr.attr,
2438	&sensor_dev_attr_temp3_auto_offset8.dev_attr.attr,
2439	&sensor_dev_attr_temp3_auto_offset9.dev_attr.attr,
2440	&sensor_dev_attr_temp3_auto_offset10.dev_attr.attr,
2441	&sensor_dev_attr_temp3_auto_offset11.dev_attr.attr,
2442	&sensor_dev_attr_temp3_auto_offset12.dev_attr.attr,
2443	&sensor_dev_attr_temp1_auto_pwm_min.dev_attr.attr,
2444	&sensor_dev_attr_temp2_auto_pwm_min.dev_attr.attr,
2445	&sensor_dev_attr_temp3_auto_pwm_min.dev_attr.attr,
2446	&sensor_dev_attr_temp1_auto_offset_hyst.dev_attr.attr,
2447	&sensor_dev_attr_temp2_auto_offset_hyst.dev_attr.attr,
2448	&sensor_dev_attr_temp3_auto_offset_hyst.dev_attr.attr,
2449	&sensor_dev_attr_fan1_input.dev_attr.attr,
2450	&sensor_dev_attr_fan2_input.dev_attr.attr,
2451	&sensor_dev_attr_fan3_input.dev_attr.attr,
2452	&sensor_dev_attr_fan4_input.dev_attr.attr,
2453	&sensor_dev_attr_fan1_min.dev_attr.attr,
2454	&sensor_dev_attr_fan2_min.dev_attr.attr,
2455	&sensor_dev_attr_fan3_min.dev_attr.attr,
2456	&sensor_dev_attr_fan4_min.dev_attr.attr,
2457	&sensor_dev_attr_fan1_smart_tach.dev_attr.attr,
2458	&sensor_dev_attr_fan2_smart_tach.dev_attr.attr,
2459	&sensor_dev_attr_fan3_smart_tach.dev_attr.attr,
2460	&sensor_dev_attr_fan4_smart_tach.dev_attr.attr,
2461	&sensor_dev_attr_pwm1.dev_attr.attr,
2462	&sensor_dev_attr_pwm2.dev_attr.attr,
2463	&sensor_dev_attr_pwm1_enable.dev_attr.attr,
2464	&sensor_dev_attr_pwm2_enable.dev_attr.attr,
2465	&sensor_dev_attr_pwm1_freq.dev_attr.attr,
2466	&sensor_dev_attr_pwm2_freq.dev_attr.attr,
2467	&sensor_dev_attr_pwm1_auto_channels.dev_attr.attr,
2468	&sensor_dev_attr_pwm2_auto_channels.dev_attr.attr,
2469	&sensor_dev_attr_pwm1_auto_spinup_min.dev_attr.attr,
2470	&sensor_dev_attr_pwm2_auto_spinup_min.dev_attr.attr,
2471	&sensor_dev_attr_pwm1_auto_spinup_time.dev_attr.attr,
2472	&sensor_dev_attr_pwm2_auto_spinup_time.dev_attr.attr,
2473	&dev_attr_pwm_auto_prochot_ramp.attr,
2474	&dev_attr_pwm_auto_vrdhot_ramp.attr,
2475	&sensor_dev_attr_cpu0_vid.dev_attr.attr,
2476	&sensor_dev_attr_cpu1_vid.dev_attr.attr,
2477	&sensor_dev_attr_prochot1.dev_attr.attr,
2478	&sensor_dev_attr_prochot2.dev_attr.attr,
2479	&sensor_dev_attr_prochot1_avg.dev_attr.attr,
2480	&sensor_dev_attr_prochot2_avg.dev_attr.attr,
2481	&sensor_dev_attr_prochot1_max.dev_attr.attr,
2482	&sensor_dev_attr_prochot2_max.dev_attr.attr,
2483	&sensor_dev_attr_prochot1_override.dev_attr.attr,
2484	&sensor_dev_attr_prochot2_override.dev_attr.attr,
2485	&sensor_dev_attr_prochot1_interval.dev_attr.attr,
2486	&sensor_dev_attr_prochot2_interval.dev_attr.attr,
2487	&dev_attr_prochot_override_duty_cycle.attr,
2488	&dev_attr_prochot_short.attr,
2489	&sensor_dev_attr_vrdhot1.dev_attr.attr,
2490	&sensor_dev_attr_vrdhot2.dev_attr.attr,
2491	&dev_attr_gpio.attr,
2492	&dev_attr_alarms.attr,
2493	NULL
2494};
2495
2496ATTRIBUTE_GROUPS(lm93);
 
 
2497
2498static void lm93_init_client(struct i2c_client *client)
2499{
2500	int i;
2501	u8 reg;
2502
2503	/* configure VID pin input thresholds */
2504	reg = lm93_read_byte(client, LM93_REG_GPI_VID_CTL);
2505	lm93_write_byte(client, LM93_REG_GPI_VID_CTL,
2506			reg | (vid_agtl ? 0x03 : 0x00));
2507
2508	if (init) {
2509		/* enable #ALERT pin */
2510		reg = lm93_read_byte(client, LM93_REG_CONFIG);
2511		lm93_write_byte(client, LM93_REG_CONFIG, reg | 0x08);
2512
2513		/* enable ASF mode for BMC status registers */
2514		reg = lm93_read_byte(client, LM93_REG_STATUS_CONTROL);
2515		lm93_write_byte(client, LM93_REG_STATUS_CONTROL, reg | 0x02);
2516
2517		/* set sleep state to S0 */
2518		lm93_write_byte(client, LM93_REG_SLEEP_CONTROL, 0);
2519
2520		/* unmask #VRDHOT and dynamic VCCP (if nec) error events */
2521		reg = lm93_read_byte(client, LM93_REG_MISC_ERR_MASK);
2522		reg &= ~0x03;
2523		reg &= ~(vccp_limit_type[0] ? 0x10 : 0);
2524		reg &= ~(vccp_limit_type[1] ? 0x20 : 0);
2525		lm93_write_byte(client, LM93_REG_MISC_ERR_MASK, reg);
2526	}
2527
2528	/* start monitoring */
2529	reg = lm93_read_byte(client, LM93_REG_CONFIG);
2530	lm93_write_byte(client, LM93_REG_CONFIG, reg | 0x01);
2531
2532	/* spin until ready */
2533	for (i = 0; i < 20; i++) {
2534		msleep(10);
2535		if ((lm93_read_byte(client, LM93_REG_CONFIG) & 0x80) == 0x80)
2536			return;
2537	}
2538
2539	dev_warn(&client->dev,
2540		 "timed out waiting for sensor chip to signal ready!\n");
2541}
2542
2543/* Return 0 if detection is successful, -ENODEV otherwise */
2544static int lm93_detect(struct i2c_client *client, struct i2c_board_info *info)
2545{
2546	struct i2c_adapter *adapter = client->adapter;
2547	int mfr, ver;
2548	const char *name;
2549
2550	if (!i2c_check_functionality(adapter, LM93_SMBUS_FUNC_MIN))
2551		return -ENODEV;
2552
2553	/* detection */
2554	mfr = lm93_read_byte(client, LM93_REG_MFR_ID);
2555	if (mfr != 0x01) {
2556		dev_dbg(&adapter->dev,
2557			"detect failed, bad manufacturer id 0x%02x!\n", mfr);
2558		return -ENODEV;
2559	}
2560
2561	ver = lm93_read_byte(client, LM93_REG_VER);
2562	switch (ver) {
2563	case LM93_MFR_ID:
2564	case LM93_MFR_ID_PROTOTYPE:
2565		name = "lm93";
2566		break;
2567	case LM94_MFR_ID_2:
2568	case LM94_MFR_ID:
2569	case LM94_MFR_ID_PROTOTYPE:
2570		name = "lm94";
2571		break;
2572	default:
2573		dev_dbg(&adapter->dev,
2574			"detect failed, bad version id 0x%02x!\n", ver);
2575		return -ENODEV;
2576	}
2577
2578	strlcpy(info->type, name, I2C_NAME_SIZE);
2579	dev_dbg(&adapter->dev, "loading %s at %d, 0x%02x\n",
2580		client->name, i2c_adapter_id(client->adapter),
2581		client->addr);
2582
2583	return 0;
2584}
2585
2586static int lm93_probe(struct i2c_client *client,
2587		      const struct i2c_device_id *id)
2588{
2589	struct device *dev = &client->dev;
2590	struct lm93_data *data;
2591	struct device *hwmon_dev;
2592	int func;
2593	void (*update)(struct lm93_data *, struct i2c_client *);
2594
2595	/* choose update routine based on bus capabilities */
2596	func = i2c_get_functionality(client->adapter);
2597	if (((LM93_SMBUS_FUNC_FULL & func) == LM93_SMBUS_FUNC_FULL) &&
2598			(!disable_block)) {
2599		dev_dbg(dev, "using SMBus block data transactions\n");
2600		update = lm93_update_client_full;
2601	} else if ((LM93_SMBUS_FUNC_MIN & func) == LM93_SMBUS_FUNC_MIN) {
2602		dev_dbg(dev, "disabled SMBus block data transactions\n");
 
2603		update = lm93_update_client_min;
2604	} else {
2605		dev_dbg(dev, "detect failed, smbus byte and/or word data not supported!\n");
2606		return -ENODEV;
 
 
2607	}
2608
2609	data = devm_kzalloc(dev, sizeof(struct lm93_data), GFP_KERNEL);
2610	if (!data)
2611		return -ENOMEM;
 
 
 
 
2612
2613	/* housekeeping */
2614	data->client = client;
2615	data->update = update;
2616	mutex_init(&data->update_lock);
2617
2618	/* initialize the chip */
2619	lm93_init_client(client);
2620
2621	hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
2622							   data,
2623							   lm93_groups);
2624	return PTR_ERR_OR_ZERO(hwmon_dev);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2625}
2626
2627static const struct i2c_device_id lm93_id[] = {
2628	{ "lm93", 0 },
2629	{ "lm94", 0 },
2630	{ }
2631};
2632MODULE_DEVICE_TABLE(i2c, lm93_id);
2633
2634static struct i2c_driver lm93_driver = {
2635	.class		= I2C_CLASS_HWMON,
2636	.driver = {
2637		.name	= "lm93",
2638	},
2639	.probe		= lm93_probe,
 
2640	.id_table	= lm93_id,
2641	.detect		= lm93_detect,
2642	.address_list	= normal_i2c,
2643};
2644
2645module_i2c_driver(lm93_driver);
 
 
 
 
 
 
 
 
2646
2647MODULE_AUTHOR("Mark M. Hoffman <mhoffman@lightlink.com>, "
2648		"Hans J. Koch <hjk@hansjkoch.de>");
2649MODULE_DESCRIPTION("LM93 driver");
2650MODULE_LICENSE("GPL");