199
213
static const u8 W83627EHF_PWM_ENABLE_SHIFT[] = { 2, 4, 1, 4 };
201
215
/* FAN Duty Cycle, be used to control */
202
static const u8 W83627EHF_REG_PWM[] = { 0x01, 0x03, 0x11, 0x61 };
203
static const u8 W83627EHF_REG_TARGET[] = { 0x05, 0x06, 0x13, 0x63 };
216
static const u16 W83627EHF_REG_PWM[] = { 0x01, 0x03, 0x11, 0x61 };
217
static const u16 W83627EHF_REG_TARGET[] = { 0x05, 0x06, 0x13, 0x63 };
204
218
static const u8 W83627EHF_REG_TOLERANCE[] = { 0x07, 0x07, 0x14, 0x62 };
206
220
/* Advanced Fan control, some values are common for all fans */
207
static const u8 W83627EHF_REG_FAN_START_OUTPUT[] = { 0x0a, 0x0b, 0x16, 0x65 };
208
static const u8 W83627EHF_REG_FAN_STOP_OUTPUT[] = { 0x08, 0x09, 0x15, 0x64 };
209
static const u8 W83627EHF_REG_FAN_STOP_TIME[] = { 0x0c, 0x0d, 0x17, 0x66 };
221
static const u16 W83627EHF_REG_FAN_START_OUTPUT[] = { 0x0a, 0x0b, 0x16, 0x65 };
222
static const u16 W83627EHF_REG_FAN_STOP_OUTPUT[] = { 0x08, 0x09, 0x15, 0x64 };
223
static const u16 W83627EHF_REG_FAN_STOP_TIME[] = { 0x0c, 0x0d, 0x17, 0x66 };
211
static const u8 W83627EHF_REG_FAN_MAX_OUTPUT_COMMON[]
225
static const u16 W83627EHF_REG_FAN_MAX_OUTPUT_COMMON[]
212
226
= { 0xff, 0x67, 0xff, 0x69 };
213
static const u8 W83627EHF_REG_FAN_STEP_OUTPUT_COMMON[]
227
static const u16 W83627EHF_REG_FAN_STEP_OUTPUT_COMMON[]
214
228
= { 0xff, 0x68, 0xff, 0x6a };
216
static const u8 W83627EHF_REG_FAN_MAX_OUTPUT_W83667_B[] = { 0x67, 0x69, 0x6b };
217
static const u8 W83627EHF_REG_FAN_STEP_OUTPUT_W83667_B[] = { 0x68, 0x6a, 0x6c };
230
static const u16 W83627EHF_REG_FAN_MAX_OUTPUT_W83667_B[] = { 0x67, 0x69, 0x6b };
231
static const u16 W83627EHF_REG_FAN_STEP_OUTPUT_W83667_B[]
232
= { 0x68, 0x6a, 0x6c };
234
static const u16 NCT6775_REG_TARGET[] = { 0x101, 0x201, 0x301 };
235
static const u16 NCT6775_REG_FAN_MODE[] = { 0x102, 0x202, 0x302 };
236
static const u16 NCT6775_REG_FAN_STOP_OUTPUT[] = { 0x105, 0x205, 0x305 };
237
static const u16 NCT6775_REG_FAN_START_OUTPUT[] = { 0x106, 0x206, 0x306 };
238
static const u16 NCT6775_REG_FAN_STOP_TIME[] = { 0x107, 0x207, 0x307 };
239
static const u16 NCT6775_REG_PWM[] = { 0x109, 0x209, 0x309 };
240
static const u16 NCT6775_REG_FAN_MAX_OUTPUT[] = { 0x10a, 0x20a, 0x30a };
241
static const u16 NCT6775_REG_FAN_STEP_OUTPUT[] = { 0x10b, 0x20b, 0x30b };
242
static const u16 NCT6775_REG_FAN[] = { 0x630, 0x632, 0x634, 0x636, 0x638 };
243
static const u16 NCT6776_REG_FAN_MIN[] = { 0x63a, 0x63c, 0x63e, 0x640, 0x642};
245
static const u16 NCT6775_REG_TEMP[]
246
= { 0x27, 0x150, 0x250, 0x73, 0x75, 0x77, 0x62b, 0x62c, 0x62d };
247
static const u16 NCT6775_REG_TEMP_CONFIG[]
248
= { 0, 0x152, 0x252, 0, 0, 0, 0x628, 0x629, 0x62A };
249
static const u16 NCT6775_REG_TEMP_HYST[]
250
= { 0x3a, 0x153, 0x253, 0, 0, 0, 0x673, 0x678, 0x67D };
251
static const u16 NCT6775_REG_TEMP_OVER[]
252
= { 0x39, 0x155, 0x255, 0, 0, 0, 0x672, 0x677, 0x67C };
253
static const u16 NCT6775_REG_TEMP_SOURCE[]
254
= { 0x621, 0x622, 0x623, 0x100, 0x200, 0x300, 0x624, 0x625, 0x626 };
256
static const char *const w83667hg_b_temp_label[] = {
267
static const char *const nct6775_temp_label[] = {
281
"PCH_CHIP_CPU_MAX_TEMP",
291
static const char *const nct6776_temp_label[] = {
306
"PCH_CHIP_CPU_MAX_TEMP",
317
#define NUM_REG_TEMP ARRAY_SIZE(NCT6775_REG_TEMP)
319
static inline int is_word_sized(u16 reg)
321
return ((((reg & 0xff00) == 0x100
322
|| (reg & 0xff00) == 0x200)
323
&& ((reg & 0x00ff) == 0x50
324
|| (reg & 0x00ff) == 0x53
325
|| (reg & 0x00ff) == 0x55))
326
|| (reg & 0xfff0) == 0x630
327
|| reg == 0x640 || reg == 0x642
328
|| ((reg & 0xfff0) == 0x650
329
&& (reg & 0x000f) >= 0x06)
330
|| reg == 0x73 || reg == 0x75 || reg == 0x77
289
427
struct device *hwmon_dev;
290
428
struct mutex lock;
292
const u8 *REG_FAN_START_OUTPUT;
293
const u8 *REG_FAN_STOP_OUTPUT;
294
const u8 *REG_FAN_MAX_OUTPUT;
295
const u8 *REG_FAN_STEP_OUTPUT;
430
u16 reg_temp[NUM_REG_TEMP];
431
u16 reg_temp_over[NUM_REG_TEMP];
432
u16 reg_temp_hyst[NUM_REG_TEMP];
433
u16 reg_temp_config[NUM_REG_TEMP];
434
u8 temp_src[NUM_REG_TEMP];
435
const char * const *temp_label;
438
const u16 *REG_TARGET;
440
const u16 *REG_FAN_MIN;
441
const u16 *REG_FAN_START_OUTPUT;
442
const u16 *REG_FAN_STOP_OUTPUT;
443
const u16 *REG_FAN_STOP_TIME;
444
const u16 *REG_FAN_MAX_OUTPUT;
445
const u16 *REG_FAN_STEP_OUTPUT;
447
unsigned int (*fan_from_reg)(u16 reg, unsigned int divreg);
448
unsigned int (*fan_from_reg_min)(u16 reg, unsigned int divreg);
297
450
struct mutex update_lock;
298
451
char valid; /* !=0 if following fields are valid */
299
452
unsigned long last_updated; /* In jiffies */
301
454
/* Register values */
455
u8 bank; /* current register bank */
302
456
u8 in_num; /* number of in inputs we have */
303
457
u8 in[10]; /* Register value */
304
458
u8 in_max[10]; /* Register value */
305
459
u8 in_min[10]; /* Register value */
309
463
u8 has_fan; /* some fan inputs can be disabled */
464
u8 has_fan_min; /* some fans don't have min register */
316
s16 temp_max_hyst[2];
469
s16 temp_max_hyst[9];
319
472
u8 pwm_mode[4]; /* 0->DC variable voltage, 1->PWM variable duty cycle */
320
473
u8 pwm_enable[4]; /* 1->manual
321
474
2->thermal cruise mode (also called SmartFan I)
322
475
3->fan speed cruise mode
323
4->variable thermal cruise (also called SmartFan III) */
476
4->variable thermal cruise (also called
478
5->enhanced variable thermal cruise (also called
480
u8 pwm_enable_orig[4]; /* original value of pwm_enable */
324
481
u8 pwm_num; /* number of pwm */
326
483
u8 target_temp[4];
689
static void w83627ehf_update_fan_div_common(struct device *dev,
690
struct w83627ehf_data *data)
692
struct w83627ehf_sio_data *sio_data = dev->platform_data;
694
if (sio_data->kind == nct6776)
695
; /* no dividers, do nothing */
696
else if (sio_data->kind == nct6775)
697
nct6775_update_fan_div(data);
699
w83627ehf_update_fan_div(data);
702
static void nct6775_update_pwm(struct w83627ehf_data *data)
705
int pwmcfg, fanmodecfg;
707
for (i = 0; i < data->pwm_num; i++) {
708
pwmcfg = w83627ehf_read_value(data,
709
W83627EHF_REG_PWM_ENABLE[i]);
710
fanmodecfg = w83627ehf_read_value(data,
711
NCT6775_REG_FAN_MODE[i]);
713
((pwmcfg >> W83627EHF_PWM_MODE_SHIFT[i]) & 1) ? 0 : 1;
714
data->pwm_enable[i] = ((fanmodecfg >> 4) & 7) + 1;
715
data->tolerance[i] = fanmodecfg & 0x0f;
716
data->pwm[i] = w83627ehf_read_value(data, data->REG_PWM[i]);
720
static void w83627ehf_update_pwm(struct w83627ehf_data *data)
723
int pwmcfg = 0, tolerance = 0; /* shut up the compiler */
725
for (i = 0; i < data->pwm_num; i++) {
726
if (!(data->has_fan & (1 << i)))
729
/* pwmcfg, tolerance mapped for i=0, i=1 to same reg */
731
pwmcfg = w83627ehf_read_value(data,
732
W83627EHF_REG_PWM_ENABLE[i]);
733
tolerance = w83627ehf_read_value(data,
734
W83627EHF_REG_TOLERANCE[i]);
737
((pwmcfg >> W83627EHF_PWM_MODE_SHIFT[i]) & 1) ? 0 : 1;
738
data->pwm_enable[i] = ((pwmcfg >> W83627EHF_PWM_ENABLE_SHIFT[i])
740
data->pwm[i] = w83627ehf_read_value(data, data->REG_PWM[i]);
742
data->tolerance[i] = (tolerance >> (i == 1 ? 4 : 0)) & 0x0f;
746
static void w83627ehf_update_pwm_common(struct device *dev,
747
struct w83627ehf_data *data)
749
struct w83627ehf_sio_data *sio_data = dev->platform_data;
751
if (sio_data->kind == nct6775 || sio_data->kind == nct6776)
752
nct6775_update_pwm(data);
754
w83627ehf_update_pwm(data);
491
757
static struct w83627ehf_data *w83627ehf_update_device(struct device *dev)
493
759
struct w83627ehf_data *data = dev_get_drvdata(dev);
494
int pwmcfg = 0, tolerance = 0; /* shut up the compiler */
760
struct w83627ehf_sio_data *sio_data = dev->platform_data;
497
764
mutex_lock(&data->update_lock);
514
781
/* Measured fan speeds and limits */
515
782
for (i = 0; i < 5; i++) {
516
785
if (!(data->has_fan & (1 << i)))
519
data->fan[i] = w83627ehf_read_value(data,
520
W83627EHF_REG_FAN[i]);
521
data->fan_min[i] = w83627ehf_read_value(data,
522
W83627EHF_REG_FAN_MIN[i]);
788
reg = w83627ehf_read_value(data, data->REG_FAN[i]);
789
data->rpm[i] = data->fan_from_reg(reg,
792
if (data->has_fan_min & (1 << i))
793
data->fan_min[i] = w83627ehf_read_value(data,
794
data->REG_FAN_MIN[i]);
524
796
/* If we failed to measure the fan speed and clock
525
797
divider can be increased, let's try that for next
527
if (data->fan[i] == 0xff
528
&& data->fan_div[i] < 0x07) {
529
dev_dbg(dev, "Increasing fan%d "
799
if (data->has_fan_div
800
&& (reg >= 0xff || (sio_data->kind == nct6775
802
&& data->fan_div[i] < 0x07) {
803
dev_dbg(dev, "Increasing fan%d "
530
804
"clock divider from %u to %u\n",
531
805
i + 1, div_from_reg(data->fan_div[i]),
532
806
div_from_reg(data->fan_div[i] + 1));
533
807
data->fan_div[i]++;
534
w83627ehf_write_fan_div(data, i);
808
w83627ehf_write_fan_div_common(dev, data, i);
535
809
/* Preserve min limit if possible */
536
if (data->fan_min[i] >= 2
810
if ((data->has_fan_min & (1 << i))
811
&& data->fan_min[i] >= 2
537
812
&& data->fan_min[i] != 255)
538
813
w83627ehf_write_value(data,
539
W83627EHF_REG_FAN_MIN[i],
814
data->REG_FAN_MIN[i],
540
815
(data->fan_min[i] /= 2));
819
w83627ehf_update_pwm_common(dev, data);
544
821
for (i = 0; i < data->pwm_num; i++) {
545
822
if (!(data->has_fan & (1 << i)))
548
/* pwmcfg, tolerance mapped for i=0, i=1 to same reg */
550
pwmcfg = w83627ehf_read_value(data,
551
W83627EHF_REG_PWM_ENABLE[i]);
552
tolerance = w83627ehf_read_value(data,
553
W83627EHF_REG_TOLERANCE[i]);
556
((pwmcfg >> W83627EHF_PWM_MODE_SHIFT[i]) & 1)
558
data->pwm_enable[i] =
559
((pwmcfg >> W83627EHF_PWM_ENABLE_SHIFT[i])
561
data->pwm[i] = w83627ehf_read_value(data,
562
W83627EHF_REG_PWM[i]);
563
data->fan_start_output[i] = w83627ehf_read_value(data,
564
W83627EHF_REG_FAN_START_OUTPUT[i]);
565
data->fan_stop_output[i] = w83627ehf_read_value(data,
566
W83627EHF_REG_FAN_STOP_OUTPUT[i]);
567
data->fan_stop_time[i] = w83627ehf_read_value(data,
568
W83627EHF_REG_FAN_STOP_TIME[i]);
825
data->fan_start_output[i] =
826
w83627ehf_read_value(data,
827
data->REG_FAN_START_OUTPUT[i]);
828
data->fan_stop_output[i] =
829
w83627ehf_read_value(data,
830
data->REG_FAN_STOP_OUTPUT[i]);
831
data->fan_stop_time[i] =
832
w83627ehf_read_value(data,
833
data->REG_FAN_STOP_TIME[i]);
570
if (data->REG_FAN_MAX_OUTPUT[i] != 0xff)
835
if (data->REG_FAN_MAX_OUTPUT &&
836
data->REG_FAN_MAX_OUTPUT[i] != 0xff)
571
837
data->fan_max_output[i] =
572
838
w83627ehf_read_value(data,
573
data->REG_FAN_MAX_OUTPUT[i]);
839
data->REG_FAN_MAX_OUTPUT[i]);
575
if (data->REG_FAN_STEP_OUTPUT[i] != 0xff)
841
if (data->REG_FAN_STEP_OUTPUT &&
842
data->REG_FAN_STEP_OUTPUT[i] != 0xff)
576
843
data->fan_step_output[i] =
577
844
w83627ehf_read_value(data,
578
data->REG_FAN_STEP_OUTPUT[i]);
845
data->REG_FAN_STEP_OUTPUT[i]);
580
847
data->target_temp[i] =
581
848
w83627ehf_read_value(data,
582
W83627EHF_REG_TARGET[i]) &
849
data->REG_TARGET[i]) &
583
850
(data->pwm_mode[i] == 1 ? 0x7f : 0xff);
584
data->tolerance[i] = (tolerance >> (i == 1 ? 4 : 0))
588
853
/* Measured temperatures and limits */
589
data->temp1 = w83627ehf_read_value(data,
590
W83627EHF_REG_TEMP1);
591
data->temp1_max = w83627ehf_read_value(data,
592
W83627EHF_REG_TEMP1_OVER);
593
data->temp1_max_hyst = w83627ehf_read_value(data,
594
W83627EHF_REG_TEMP1_HYST);
595
for (i = 0; i < 2; i++) {
854
for (i = 0; i < NUM_REG_TEMP; i++) {
855
if (!(data->have_temp & (1 << i)))
596
857
data->temp[i] = w83627ehf_read_value(data,
597
W83627EHF_REG_TEMP[i]);
598
data->temp_max[i] = w83627ehf_read_value(data,
599
W83627EHF_REG_TEMP_OVER[i]);
600
data->temp_max_hyst[i] = w83627ehf_read_value(data,
601
W83627EHF_REG_TEMP_HYST[i]);
859
if (data->reg_temp_over[i])
861
= w83627ehf_read_value(data,
862
data->reg_temp_over[i]);
863
if (data->reg_temp_hyst[i])
864
data->temp_max_hyst[i]
865
= w83627ehf_read_value(data,
866
data->reg_temp_hyst[i]);
604
869
data->alarms = w83627ehf_read_value(data,
691
962
static struct sensor_device_attribute sda_in_min[] = {
692
SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
693
SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
694
SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
695
SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
696
SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
697
SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
698
SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
699
SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
700
SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
701
SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
963
SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
964
SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
965
SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
966
SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
967
SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
968
SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
969
SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
970
SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
971
SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
972
SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
704
975
static struct sensor_device_attribute sda_in_max[] = {
705
SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
706
SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
707
SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
708
SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
709
SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
710
SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
711
SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
712
SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
713
SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
714
SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
976
SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
977
SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
978
SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
979
SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
980
SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
981
SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
982
SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
983
SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
984
SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
985
SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
717
#define show_fan_reg(reg) \
719
show_##reg(struct device *dev, struct device_attribute *attr, \
722
struct w83627ehf_data *data = w83627ehf_update_device(dev); \
723
struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
724
int nr = sensor_attr->index; \
725
return sprintf(buf, "%d\n", \
726
fan_from_reg(data->reg[nr], \
727
div_from_reg(data->fan_div[nr]))); \
730
show_fan_reg(fan_min);
989
show_fan(struct device *dev, struct device_attribute *attr, char *buf)
991
struct w83627ehf_data *data = w83627ehf_update_device(dev);
992
struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
993
int nr = sensor_attr->index;
994
return sprintf(buf, "%d\n", data->rpm[nr]);
998
show_fan_min(struct device *dev, struct device_attribute *attr, char *buf)
1000
struct w83627ehf_data *data = w83627ehf_update_device(dev);
1001
struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1002
int nr = sensor_attr->index;
1003
return sprintf(buf, "%d\n",
1004
data->fan_from_reg_min(data->fan_min[nr],
1005
data->fan_div[nr]));
733
1009
show_fan_div(struct device *dev, struct device_attribute *attr,
847
1137
SENSOR_ATTR(fan5_div, S_IRUGO, show_fan_div, NULL, 4),
850
#define show_temp1_reg(reg) \
852
show_##reg(struct device *dev, struct device_attribute *attr, \
855
struct w83627ehf_data *data = w83627ehf_update_device(dev); \
856
return sprintf(buf, "%d\n", temp1_from_reg(data->reg)); \
858
show_temp1_reg(temp1);
859
show_temp1_reg(temp1_max);
860
show_temp1_reg(temp1_max_hyst);
862
#define store_temp1_reg(REG, reg) \
864
store_temp1_##reg(struct device *dev, struct device_attribute *attr, \
865
const char *buf, size_t count) \
867
struct w83627ehf_data *data = dev_get_drvdata(dev); \
868
long val = simple_strtol(buf, NULL, 10); \
870
mutex_lock(&data->update_lock); \
871
data->temp1_##reg = temp1_to_reg(val, -128000, 127000); \
872
w83627ehf_write_value(data, W83627EHF_REG_TEMP1_##REG, \
873
data->temp1_##reg); \
874
mutex_unlock(&data->update_lock); \
877
store_temp1_reg(OVER, max);
878
store_temp1_reg(HYST, max_hyst);
880
#define show_temp_reg(reg) \
882
show_##reg(struct device *dev, struct device_attribute *attr, \
885
struct w83627ehf_data *data = w83627ehf_update_device(dev); \
886
struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
1141
show_temp_label(struct device *dev, struct device_attribute *attr, char *buf)
1143
struct w83627ehf_data *data = w83627ehf_update_device(dev);
1144
struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1145
int nr = sensor_attr->index;
1146
return sprintf(buf, "%s\n", data->temp_label[data->temp_src[nr]]);
1149
#define show_temp_reg(addr, reg) \
1151
show_##reg(struct device *dev, struct device_attribute *attr, \
1154
struct w83627ehf_data *data = w83627ehf_update_device(dev); \
1155
struct sensor_device_attribute *sensor_attr = \
1156
to_sensor_dev_attr(attr); \
887
1157
int nr = sensor_attr->index; \
888
1158
return sprintf(buf, "%d\n", \
889
LM75_TEMP_FROM_REG(data->reg[nr])); \
1159
temp_from_reg(data->addr[nr], data->reg[nr])); \
892
show_temp_reg(temp_max);
893
show_temp_reg(temp_max_hyst);
1161
show_temp_reg(reg_temp, temp);
1162
show_temp_reg(reg_temp_over, temp_max);
1163
show_temp_reg(reg_temp_hyst, temp_max_hyst);
895
#define store_temp_reg(REG, reg) \
1165
#define store_temp_reg(addr, reg) \
896
1166
static ssize_t \
897
1167
store_##reg(struct device *dev, struct device_attribute *attr, \
898
1168
const char *buf, size_t count) \
900
1170
struct w83627ehf_data *data = dev_get_drvdata(dev); \
901
struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
1171
struct sensor_device_attribute *sensor_attr = \
1172
to_sensor_dev_attr(attr); \
902
1173
int nr = sensor_attr->index; \
903
long val = simple_strtol(buf, NULL, 10); \
1176
err = strict_strtol(buf, 10, &val); \
905
1179
mutex_lock(&data->update_lock); \
906
data->reg[nr] = LM75_TEMP_TO_REG(val); \
907
w83627ehf_write_value(data, W83627EHF_REG_TEMP_##REG[nr], \
1180
data->reg[nr] = temp_to_reg(data->addr[nr], val); \
1181
w83627ehf_write_value(data, data->addr[nr], \
908
1182
data->reg[nr]); \
909
1183
mutex_unlock(&data->update_lock); \
912
store_temp_reg(OVER, temp_max);
913
store_temp_reg(HYST, temp_max_hyst);
1186
store_temp_reg(reg_temp_over, temp_max);
1187
store_temp_reg(reg_temp_hyst, temp_max_hyst);
916
1190
show_temp_type(struct device *dev, struct device_attribute *attr, char *buf)
924
1198
static struct sensor_device_attribute sda_temp_input[] = {
925
SENSOR_ATTR(temp1_input, S_IRUGO, show_temp1, NULL, 0),
926
SENSOR_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 0),
927
SENSOR_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 1),
1199
SENSOR_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0),
1200
SENSOR_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1),
1201
SENSOR_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2),
1202
SENSOR_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3),
1203
SENSOR_ATTR(temp5_input, S_IRUGO, show_temp, NULL, 4),
1204
SENSOR_ATTR(temp6_input, S_IRUGO, show_temp, NULL, 5),
1205
SENSOR_ATTR(temp7_input, S_IRUGO, show_temp, NULL, 6),
1206
SENSOR_ATTR(temp8_input, S_IRUGO, show_temp, NULL, 7),
1207
SENSOR_ATTR(temp9_input, S_IRUGO, show_temp, NULL, 8),
1210
static struct sensor_device_attribute sda_temp_label[] = {
1211
SENSOR_ATTR(temp1_label, S_IRUGO, show_temp_label, NULL, 0),
1212
SENSOR_ATTR(temp2_label, S_IRUGO, show_temp_label, NULL, 1),
1213
SENSOR_ATTR(temp3_label, S_IRUGO, show_temp_label, NULL, 2),
1214
SENSOR_ATTR(temp4_label, S_IRUGO, show_temp_label, NULL, 3),
1215
SENSOR_ATTR(temp5_label, S_IRUGO, show_temp_label, NULL, 4),
1216
SENSOR_ATTR(temp6_label, S_IRUGO, show_temp_label, NULL, 5),
1217
SENSOR_ATTR(temp7_label, S_IRUGO, show_temp_label, NULL, 6),
1218
SENSOR_ATTR(temp8_label, S_IRUGO, show_temp_label, NULL, 7),
1219
SENSOR_ATTR(temp9_label, S_IRUGO, show_temp_label, NULL, 8),
930
1222
static struct sensor_device_attribute sda_temp_max[] = {
931
SENSOR_ATTR(temp1_max, S_IRUGO | S_IWUSR, show_temp1_max,
1223
SENSOR_ATTR(temp1_max, S_IRUGO | S_IWUSR, show_temp_max,
933
1225
SENSOR_ATTR(temp2_max, S_IRUGO | S_IWUSR, show_temp_max,
935
1227
SENSOR_ATTR(temp3_max, S_IRUGO | S_IWUSR, show_temp_max,
1229
SENSOR_ATTR(temp4_max, S_IRUGO | S_IWUSR, show_temp_max,
1231
SENSOR_ATTR(temp5_max, S_IRUGO | S_IWUSR, show_temp_max,
1233
SENSOR_ATTR(temp6_max, S_IRUGO | S_IWUSR, show_temp_max,
1235
SENSOR_ATTR(temp7_max, S_IRUGO | S_IWUSR, show_temp_max,
1237
SENSOR_ATTR(temp8_max, S_IRUGO | S_IWUSR, show_temp_max,
1239
SENSOR_ATTR(temp9_max, S_IRUGO | S_IWUSR, show_temp_max,
939
1243
static struct sensor_device_attribute sda_temp_max_hyst[] = {
940
SENSOR_ATTR(temp1_max_hyst, S_IRUGO | S_IWUSR, show_temp1_max_hyst,
941
store_temp1_max_hyst, 0),
1244
SENSOR_ATTR(temp1_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1245
store_temp_max_hyst, 0),
942
1246
SENSOR_ATTR(temp2_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
943
store_temp_max_hyst, 0),
1247
store_temp_max_hyst, 1),
944
1248
SENSOR_ATTR(temp3_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
945
store_temp_max_hyst, 1),
1249
store_temp_max_hyst, 2),
1250
SENSOR_ATTR(temp4_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1251
store_temp_max_hyst, 3),
1252
SENSOR_ATTR(temp5_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1253
store_temp_max_hyst, 4),
1254
SENSOR_ATTR(temp6_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1255
store_temp_max_hyst, 5),
1256
SENSOR_ATTR(temp7_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1257
store_temp_max_hyst, 6),
1258
SENSOR_ATTR(temp8_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1259
store_temp_max_hyst, 7),
1260
SENSOR_ATTR(temp9_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
1261
store_temp_max_hyst, 8),
948
1264
static struct sensor_device_attribute sda_temp_alarm[] = {
1015
1344
const char *buf, size_t count)
1017
1346
struct w83627ehf_data *data = dev_get_drvdata(dev);
1347
struct w83627ehf_sio_data *sio_data = dev->platform_data;
1018
1348
struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1019
1349
int nr = sensor_attr->index;
1020
u32 val = simple_strtoul(buf, NULL, 10);
1023
if (!val || (val > 4))
1354
err = strict_strtoul(buf, 10, &val);
1358
if (!val || (val > 4 && val != data->pwm_enable_orig[nr]))
1360
/* SmartFan III mode is not supported on NCT6776F */
1361
if (sio_data->kind == nct6776 && val == 4)
1025
1364
mutex_lock(&data->update_lock);
1026
reg = w83627ehf_read_value(data, W83627EHF_REG_PWM_ENABLE[nr]);
1027
1365
data->pwm_enable[nr] = val;
1028
reg &= ~(0x03 << W83627EHF_PWM_ENABLE_SHIFT[nr]);
1029
reg |= (val - 1) << W83627EHF_PWM_ENABLE_SHIFT[nr];
1030
w83627ehf_write_value(data, W83627EHF_REG_PWM_ENABLE[nr], reg);
1366
if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
1367
reg = w83627ehf_read_value(data,
1368
NCT6775_REG_FAN_MODE[nr]);
1370
reg |= (val - 1) << 4;
1371
w83627ehf_write_value(data,
1372
NCT6775_REG_FAN_MODE[nr], reg);
1374
reg = w83627ehf_read_value(data, W83627EHF_REG_PWM_ENABLE[nr]);
1375
reg &= ~(0x03 << W83627EHF_PWM_ENABLE_SHIFT[nr]);
1376
reg |= (val - 1) << W83627EHF_PWM_ENABLE_SHIFT[nr];
1377
w83627ehf_write_value(data, W83627EHF_REG_PWM_ENABLE[nr], reg);
1031
1379
mutex_unlock(&data->update_lock);
1067
1423
const char *buf, size_t count)
1069
1425
struct w83627ehf_data *data = dev_get_drvdata(dev);
1426
struct w83627ehf_sio_data *sio_data = dev->platform_data;
1070
1427
struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1071
1428
int nr = sensor_attr->index;
1433
err = strict_strtol(buf, 10, &val);
1073
1437
/* Limit the temp to 0C - 15C */
1074
u8 val = temp1_to_reg(simple_strtoul(buf, NULL, 10), 0, 15000);
1438
val = SENSORS_LIMIT(DIV_ROUND_CLOSEST(val, 1000), 0, 15);
1076
1440
mutex_lock(&data->update_lock);
1077
reg = w83627ehf_read_value(data, W83627EHF_REG_TOLERANCE[nr]);
1441
if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
1442
/* Limit tolerance further for NCT6776F */
1443
if (sio_data->kind == nct6776 && val > 7)
1445
reg = w83627ehf_read_value(data, NCT6775_REG_FAN_MODE[nr]);
1446
reg = (reg & 0xf0) | val;
1447
w83627ehf_write_value(data, NCT6775_REG_FAN_MODE[nr], reg);
1449
reg = w83627ehf_read_value(data, W83627EHF_REG_TOLERANCE[nr]);
1451
reg = (reg & 0x0f) | (val << 4);
1453
reg = (reg & 0xf0) | val;
1454
w83627ehf_write_value(data, W83627EHF_REG_TOLERANCE[nr], reg);
1078
1456
data->tolerance[nr] = val;
1080
reg = (reg & 0x0f) | (val << 4);
1082
reg = (reg & 0xf0) | val;
1083
w83627ehf_write_value(data, W83627EHF_REG_TOLERANCE[nr], reg);
1084
1457
mutex_unlock(&data->update_lock);
1394
1814
/* 627EHG and 627EHF have 10 voltage inputs; 627DHG and 667HG have 9 */
1395
1815
data->in_num = (sio_data->kind == w83627ehf) ? 10 : 9;
1396
/* 667HG has 3 pwms */
1816
/* 667HG, NCT6775F, and NCT6776F have 3 pwms */
1397
1817
data->pwm_num = (sio_data->kind == w83667hg
1398
|| sio_data->kind == w83667hg_b) ? 3 : 4;
1818
|| sio_data->kind == w83667hg_b
1819
|| sio_data->kind == nct6775
1820
|| sio_data->kind == nct6776) ? 3 : 4;
1822
data->have_temp = 0x07;
1400
1823
/* Check temp3 configuration bit for 667HG */
1401
if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b) {
1402
data->temp3_disable = w83627ehf_read_value(data,
1403
W83627EHF_REG_TEMP_CONFIG[1]) & 0x01;
1404
data->in6_skip = !data->temp3_disable;
1407
data->REG_FAN_START_OUTPUT = W83627EHF_REG_FAN_START_OUTPUT;
1408
data->REG_FAN_STOP_OUTPUT = W83627EHF_REG_FAN_STOP_OUTPUT;
1409
if (sio_data->kind == w83667hg_b) {
1824
if (sio_data->kind == w83667hg) {
1827
reg = w83627ehf_read_value(data, W83627EHF_REG_TEMP_CONFIG[2]);
1829
data->have_temp &= ~(1 << 2);
1831
data->in6_skip = 1; /* either temp3 or in6 */
1834
/* Deal with temperature register setup first. */
1835
if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
1839
* Display temperature sensor output only if it monitors
1840
* a source other than one already reported. Always display
1841
* first three temperature registers, though.
1843
for (i = 0; i < NUM_REG_TEMP; i++) {
1846
data->reg_temp[i] = NCT6775_REG_TEMP[i];
1847
data->reg_temp_over[i] = NCT6775_REG_TEMP_OVER[i];
1848
data->reg_temp_hyst[i] = NCT6775_REG_TEMP_HYST[i];
1849
data->reg_temp_config[i] = NCT6775_REG_TEMP_CONFIG[i];
1851
src = w83627ehf_read_value(data,
1852
NCT6775_REG_TEMP_SOURCE[i]);
1854
if (src && !(mask & (1 << src))) {
1855
data->have_temp |= 1 << i;
1859
data->temp_src[i] = src;
1862
* Now do some register swapping if index 0..2 don't
1863
* point to SYSTIN(1), CPUIN(2), and AUXIN(3).
1864
* Idea is to have the first three attributes
1865
* report SYSTIN, CPUIN, and AUXIN if possible
1866
* without overriding the basic system configuration.
1868
if (i > 0 && data->temp_src[0] != 1
1869
&& data->temp_src[i] == 1)
1870
w82627ehf_swap_tempreg(data, 0, i);
1871
if (i > 1 && data->temp_src[1] != 2
1872
&& data->temp_src[i] == 2)
1873
w82627ehf_swap_tempreg(data, 1, i);
1874
if (i > 2 && data->temp_src[2] != 3
1875
&& data->temp_src[i] == 3)
1876
w82627ehf_swap_tempreg(data, 2, i);
1878
if (sio_data->kind == nct6776) {
1880
* On NCT6776, AUXTIN and VIN3 pins are shared.
1881
* Only way to detect it is to check if AUXTIN is used
1882
* as a temperature source, and if that source is
1885
* If that is the case, disable in6, which reports VIN3.
1886
* Otherwise disable temp3.
1888
if (data->temp_src[2] == 3) {
1891
if (data->reg_temp_config[2])
1892
reg = w83627ehf_read_value(data,
1893
data->reg_temp_config[2]);
1895
reg = 0; /* Assume AUXTIN is used */
1898
data->have_temp &= ~(1 << 2);
1902
data->temp_label = nct6776_temp_label;
1904
data->temp_label = nct6775_temp_label;
1906
} else if (sio_data->kind == w83667hg_b) {
1910
* Temperature sources are selected with bank 0, registers 0x49
1913
for (i = 0; i < ARRAY_SIZE(W83627EHF_REG_TEMP); i++) {
1914
data->reg_temp[i] = W83627EHF_REG_TEMP[i];
1915
data->reg_temp_over[i] = W83627EHF_REG_TEMP_OVER[i];
1916
data->reg_temp_hyst[i] = W83627EHF_REG_TEMP_HYST[i];
1917
data->reg_temp_config[i] = W83627EHF_REG_TEMP_CONFIG[i];
1919
reg = w83627ehf_read_value(data, 0x4a);
1920
data->temp_src[0] = reg >> 5;
1921
reg = w83627ehf_read_value(data, 0x49);
1922
data->temp_src[1] = reg & 0x07;
1923
data->temp_src[2] = (reg >> 4) & 0x07;
1926
* W83667HG-B has another temperature register at 0x7e.
1927
* The temperature source is selected with register 0x7d.
1928
* Support it if the source differs from already reported
1931
reg = w83627ehf_read_value(data, 0x7d);
1933
if (reg != data->temp_src[0] && reg != data->temp_src[1]
1934
&& reg != data->temp_src[2]) {
1935
data->temp_src[3] = reg;
1936
data->have_temp |= 1 << 3;
1940
* Chip supports either AUXTIN or VIN3. Try to find out which
1943
reg = w83627ehf_read_value(data, W83627EHF_REG_TEMP_CONFIG[2]);
1944
if (data->temp_src[2] == 2 && (reg & 0x01))
1945
data->have_temp &= ~(1 << 2);
1947
if ((data->temp_src[2] == 2 && (data->have_temp & (1 << 2)))
1948
|| (data->temp_src[3] == 2 && (data->have_temp & (1 << 3))))
1951
data->temp_label = w83667hg_b_temp_label;
1953
/* Temperature sources are fixed */
1954
for (i = 0; i < 3; i++) {
1955
data->reg_temp[i] = W83627EHF_REG_TEMP[i];
1956
data->reg_temp_over[i] = W83627EHF_REG_TEMP_OVER[i];
1957
data->reg_temp_hyst[i] = W83627EHF_REG_TEMP_HYST[i];
1958
data->reg_temp_config[i] = W83627EHF_REG_TEMP_CONFIG[i];
1962
if (sio_data->kind == nct6775) {
1963
data->has_fan_div = true;
1964
data->fan_from_reg = fan_from_reg16;
1965
data->fan_from_reg_min = fan_from_reg8;
1966
data->REG_PWM = NCT6775_REG_PWM;
1967
data->REG_TARGET = NCT6775_REG_TARGET;
1968
data->REG_FAN = NCT6775_REG_FAN;
1969
data->REG_FAN_MIN = W83627EHF_REG_FAN_MIN;
1970
data->REG_FAN_START_OUTPUT = NCT6775_REG_FAN_START_OUTPUT;
1971
data->REG_FAN_STOP_OUTPUT = NCT6775_REG_FAN_STOP_OUTPUT;
1972
data->REG_FAN_STOP_TIME = NCT6775_REG_FAN_STOP_TIME;
1973
data->REG_FAN_MAX_OUTPUT = NCT6775_REG_FAN_MAX_OUTPUT;
1974
data->REG_FAN_STEP_OUTPUT = NCT6775_REG_FAN_STEP_OUTPUT;
1975
} else if (sio_data->kind == nct6776) {
1976
data->has_fan_div = false;
1977
data->fan_from_reg = fan_from_reg13;
1978
data->fan_from_reg_min = fan_from_reg13;
1979
data->REG_PWM = NCT6775_REG_PWM;
1980
data->REG_TARGET = NCT6775_REG_TARGET;
1981
data->REG_FAN = NCT6775_REG_FAN;
1982
data->REG_FAN_MIN = NCT6776_REG_FAN_MIN;
1983
data->REG_FAN_START_OUTPUT = NCT6775_REG_FAN_START_OUTPUT;
1984
data->REG_FAN_STOP_OUTPUT = NCT6775_REG_FAN_STOP_OUTPUT;
1985
data->REG_FAN_STOP_TIME = NCT6775_REG_FAN_STOP_TIME;
1986
} else if (sio_data->kind == w83667hg_b) {
1987
data->has_fan_div = true;
1988
data->fan_from_reg = fan_from_reg8;
1989
data->fan_from_reg_min = fan_from_reg8;
1990
data->REG_PWM = W83627EHF_REG_PWM;
1991
data->REG_TARGET = W83627EHF_REG_TARGET;
1992
data->REG_FAN = W83627EHF_REG_FAN;
1993
data->REG_FAN_MIN = W83627EHF_REG_FAN_MIN;
1994
data->REG_FAN_START_OUTPUT = W83627EHF_REG_FAN_START_OUTPUT;
1995
data->REG_FAN_STOP_OUTPUT = W83627EHF_REG_FAN_STOP_OUTPUT;
1996
data->REG_FAN_STOP_TIME = W83627EHF_REG_FAN_STOP_TIME;
1410
1997
data->REG_FAN_MAX_OUTPUT =
1411
1998
W83627EHF_REG_FAN_MAX_OUTPUT_W83667_B;
1412
1999
data->REG_FAN_STEP_OUTPUT =
1413
2000
W83627EHF_REG_FAN_STEP_OUTPUT_W83667_B;
2002
data->has_fan_div = true;
2003
data->fan_from_reg = fan_from_reg8;
2004
data->fan_from_reg_min = fan_from_reg8;
2005
data->REG_PWM = W83627EHF_REG_PWM;
2006
data->REG_TARGET = W83627EHF_REG_TARGET;
2007
data->REG_FAN = W83627EHF_REG_FAN;
2008
data->REG_FAN_MIN = W83627EHF_REG_FAN_MIN;
2009
data->REG_FAN_START_OUTPUT = W83627EHF_REG_FAN_START_OUTPUT;
2010
data->REG_FAN_STOP_OUTPUT = W83627EHF_REG_FAN_STOP_OUTPUT;
2011
data->REG_FAN_STOP_TIME = W83627EHF_REG_FAN_STOP_TIME;
1415
2012
data->REG_FAN_MAX_OUTPUT =
1416
2013
W83627EHF_REG_FAN_MAX_OUTPUT_COMMON;
1417
2014
data->REG_FAN_STEP_OUTPUT =
1477
2075
/* fan4 and fan5 share some pins with the GPIO and serial flash */
1478
if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b) {
2076
if (sio_data->kind == nct6775) {
2077
/* On NCT6775, fan4 shares pins with the fdc interface */
2079
fan4pin = !(superio_inb(sio_data->sioreg, 0x2A) & 0x80);
2082
} else if (sio_data->kind == nct6776) {
2083
fan3pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x40);
2084
fan4pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x01);
2085
fan5pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x02);
2087
} else if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b) {
2089
fan4pin = superio_inb(sio_data->sioreg, 0x27) & 0x40;
1479
2090
fan5pin = superio_inb(sio_data->sioreg, 0x27) & 0x20;
1480
fan4pin = superio_inb(sio_data->sioreg, 0x27) & 0x40;
2094
fan4pin = !(superio_inb(sio_data->sioreg, 0x29) & 0x06);
1482
2095
fan5pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x02);
1483
fan4pin = !(superio_inb(sio_data->sioreg, 0x29) & 0x06);
2100
(sio_data->kind == nct6775 || sio_data->kind == nct6776)) {
2103
superio_select(sio_data->sioreg, W83627EHF_LD_HWM);
2104
tmp = superio_inb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE);
2105
if (sio_data->kind == nct6776)
2106
superio_outb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE,
2109
superio_outb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE,
2111
pr_info("Enabled fan debounce for chip %s\n", data->name);
1485
2114
superio_exit(sio_data->sioreg);
1487
2116
/* It looks like fan4 and fan5 pins can be alternatively used
1490
2119
connected fan5 as input unless they are emitting log 1, which
1491
2120
is not the default. */
1493
data->has_fan = 0x07; /* fan1, fan2 and fan3 */
1494
i = w83627ehf_read_value(data, W83627EHF_REG_FANDIV1);
1495
if ((i & (1 << 2)) && fan4pin)
1496
data->has_fan |= (1 << 3);
1497
if (!(i & (1 << 1)) && fan5pin)
1498
data->has_fan |= (1 << 4);
2122
data->has_fan = data->has_fan_min = 0x03; /* fan1 and fan2 */
2124
data->has_fan |= (fan3pin << 2);
2125
data->has_fan_min |= (fan3pin << 2);
2128
* NCT6775F and NCT6776F don't have the W83627EHF_REG_FANDIV1 register
2130
if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
2131
data->has_fan |= (fan4pin << 3) | (fan5pin << 4);
2132
data->has_fan_min |= (fan4min << 3) | (fan5pin << 4);
2134
i = w83627ehf_read_value(data, W83627EHF_REG_FANDIV1);
2135
if ((i & (1 << 2)) && fan4pin) {
2136
data->has_fan |= (1 << 3);
2137
data->has_fan_min |= (1 << 3);
2139
if (!(i & (1 << 1)) && fan5pin) {
2140
data->has_fan |= (1 << 4);
2141
data->has_fan_min |= (1 << 4);
1500
2145
/* Read fan clock dividers immediately */
1501
w83627ehf_update_fan_div(data);
2146
w83627ehf_update_fan_div_common(dev, data);
2148
/* Read pwm data to save original values */
2149
w83627ehf_update_pwm_common(dev, data);
2150
for (i = 0; i < data->pwm_num; i++)
2151
data->pwm_enable_orig[i] = data->pwm_enable[i];
2153
/* Read pwm data to save original values */
2154
w83627ehf_update_pwm_common(dev, data);
2155
for (i = 0; i < data->pwm_num; i++)
2156
data->pwm_enable_orig[i] = data->pwm_enable[i];
1503
2158
/* Register sysfs hooks */
1504
for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++)
1505
if ((err = device_create_file(dev,
1506
&sda_sf3_arrays[i].dev_attr)))
2159
for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++) {
2160
err = device_create_file(dev, &sda_sf3_arrays[i].dev_attr);
1507
2162
goto exit_remove;
1509
2165
for (i = 0; i < ARRAY_SIZE(sda_sf3_max_step_arrays); i++) {
1510
2166
struct sensor_device_attribute *attr =
1511
2167
&sda_sf3_max_step_arrays[i];
1512
if (data->REG_FAN_STEP_OUTPUT[attr->index] != 0xff) {
2168
if (data->REG_FAN_STEP_OUTPUT &&
2169
data->REG_FAN_STEP_OUTPUT[attr->index] != 0xff) {
1513
2170
err = device_create_file(dev, &attr->dev_attr);
1515
2172
goto exit_remove;