Loading...
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);
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 bool valid; /* true 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 = true;
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 strscpy(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{
2588 struct device *dev = &client->dev;
2589 struct lm93_data *data;
2590 struct device *hwmon_dev;
2591 int func;
2592 void (*update)(struct lm93_data *, struct i2c_client *);
2593
2594 /* choose update routine based on bus capabilities */
2595 func = i2c_get_functionality(client->adapter);
2596 if (((LM93_SMBUS_FUNC_FULL & func) == LM93_SMBUS_FUNC_FULL) &&
2597 (!disable_block)) {
2598 dev_dbg(dev, "using SMBus block data transactions\n");
2599 update = lm93_update_client_full;
2600 } else if ((LM93_SMBUS_FUNC_MIN & func) == LM93_SMBUS_FUNC_MIN) {
2601 dev_dbg(dev, "disabled SMBus block data transactions\n");
2602 update = lm93_update_client_min;
2603 } else {
2604 dev_dbg(dev, "detect failed, smbus byte and/or word data not supported!\n");
2605 return -ENODEV;
2606 }
2607
2608 data = devm_kzalloc(dev, sizeof(struct lm93_data), GFP_KERNEL);
2609 if (!data)
2610 return -ENOMEM;
2611
2612 /* housekeeping */
2613 data->client = client;
2614 data->update = update;
2615 mutex_init(&data->update_lock);
2616
2617 /* initialize the chip */
2618 lm93_init_client(client);
2619
2620 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
2621 data,
2622 lm93_groups);
2623 return PTR_ERR_OR_ZERO(hwmon_dev);
2624}
2625
2626static const struct i2c_device_id lm93_id[] = {
2627 { "lm93", 0 },
2628 { "lm94", 0 },
2629 { }
2630};
2631MODULE_DEVICE_TABLE(i2c, lm93_id);
2632
2633static struct i2c_driver lm93_driver = {
2634 .class = I2C_CLASS_HWMON,
2635 .driver = {
2636 .name = "lm93",
2637 },
2638 .probe_new = lm93_probe,
2639 .id_table = lm93_id,
2640 .detect = lm93_detect,
2641 .address_list = normal_i2c,
2642};
2643
2644module_i2c_driver(lm93_driver);
2645
2646MODULE_AUTHOR("Mark M. Hoffman <mhoffman@lightlink.com>, "
2647 "Hans J. Koch <hjk@hansjkoch.de>");
2648MODULE_DESCRIPTION("LM93 driver");
2649MODULE_LICENSE("GPL");