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