Lines Matching full:data

54 /* used to set data->name = w83627ehf_device_names[data->sio_kind] */
83 #define SIO_REG_VID_DATA 0xF1 /* VID data */
302 * Data structures and manipulation thereof
394 static inline void w83627ehf_set_bank(struct w83627ehf_data *data, u16 reg) in w83627ehf_set_bank() argument
397 if (data->bank != bank) { in w83627ehf_set_bank()
398 outb_p(W83627EHF_REG_BANK, data->addr + ADDR_REG_OFFSET); in w83627ehf_set_bank()
399 outb_p(bank, data->addr + DATA_REG_OFFSET); in w83627ehf_set_bank()
400 data->bank = bank; in w83627ehf_set_bank()
404 static u16 w83627ehf_read_value(struct w83627ehf_data *data, u16 reg) in w83627ehf_read_value() argument
408 mutex_lock(&data->lock); in w83627ehf_read_value()
410 w83627ehf_set_bank(data, reg); in w83627ehf_read_value()
411 outb_p(reg & 0xff, data->addr + ADDR_REG_OFFSET); in w83627ehf_read_value()
412 res = inb_p(data->addr + DATA_REG_OFFSET); in w83627ehf_read_value()
415 data->addr + ADDR_REG_OFFSET); in w83627ehf_read_value()
416 res = (res << 8) + inb_p(data->addr + DATA_REG_OFFSET); in w83627ehf_read_value()
419 mutex_unlock(&data->lock); in w83627ehf_read_value()
423 static int w83627ehf_write_value(struct w83627ehf_data *data, u16 reg, in w83627ehf_write_value() argument
428 mutex_lock(&data->lock); in w83627ehf_write_value()
430 w83627ehf_set_bank(data, reg); in w83627ehf_write_value()
431 outb_p(reg & 0xff, data->addr + ADDR_REG_OFFSET); in w83627ehf_write_value()
433 outb_p(value >> 8, data->addr + DATA_REG_OFFSET); in w83627ehf_write_value()
435 data->addr + ADDR_REG_OFFSET); in w83627ehf_write_value()
437 outb_p(value & 0xff, data->addr + DATA_REG_OFFSET); in w83627ehf_write_value()
439 mutex_unlock(&data->lock); in w83627ehf_write_value()
444 static u16 w83627ehf_read_temp(struct w83627ehf_data *data, u16 reg) in w83627ehf_read_temp() argument
448 res = w83627ehf_read_value(data, reg); in w83627ehf_read_temp()
455 static int w83627ehf_write_temp(struct w83627ehf_data *data, u16 reg, in w83627ehf_write_temp() argument
460 return w83627ehf_write_value(data, reg, value); in w83627ehf_write_temp()
463 /* This function assumes that the caller holds data->update_lock */
464 static void w83627ehf_write_fan_div(struct w83627ehf_data *data, int nr) in w83627ehf_write_fan_div() argument
470 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV1) & 0xcf) in w83627ehf_write_fan_div()
471 | ((data->fan_div[0] & 0x03) << 4); in w83627ehf_write_fan_div()
473 reg |= (data->has_fan & (1 << 4)) ? 1 : 0; in w83627ehf_write_fan_div()
474 w83627ehf_write_value(data, W83627EHF_REG_FANDIV1, reg); in w83627ehf_write_fan_div()
475 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0xdf) in w83627ehf_write_fan_div()
476 | ((data->fan_div[0] & 0x04) << 3); in w83627ehf_write_fan_div()
477 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg); in w83627ehf_write_fan_div()
480 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV1) & 0x3f) in w83627ehf_write_fan_div()
481 | ((data->fan_div[1] & 0x03) << 6); in w83627ehf_write_fan_div()
483 reg |= (data->has_fan & (1 << 4)) ? 1 : 0; in w83627ehf_write_fan_div()
484 w83627ehf_write_value(data, W83627EHF_REG_FANDIV1, reg); in w83627ehf_write_fan_div()
485 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0xbf) in w83627ehf_write_fan_div()
486 | ((data->fan_div[1] & 0x04) << 4); in w83627ehf_write_fan_div()
487 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg); in w83627ehf_write_fan_div()
490 reg = (w83627ehf_read_value(data, W83627EHF_REG_FANDIV2) & 0x3f) in w83627ehf_write_fan_div()
491 | ((data->fan_div[2] & 0x03) << 6); in w83627ehf_write_fan_div()
492 w83627ehf_write_value(data, W83627EHF_REG_FANDIV2, reg); in w83627ehf_write_fan_div()
493 reg = (w83627ehf_read_value(data, W83627EHF_REG_VBAT) & 0x7f) in w83627ehf_write_fan_div()
494 | ((data->fan_div[2] & 0x04) << 5); in w83627ehf_write_fan_div()
495 w83627ehf_write_value(data, W83627EHF_REG_VBAT, reg); in w83627ehf_write_fan_div()
498 reg = (w83627ehf_read_value(data, W83627EHF_REG_DIODE) & 0xfc) in w83627ehf_write_fan_div()
499 | (data->fan_div[3] & 0x03); in w83627ehf_write_fan_div()
500 w83627ehf_write_value(data, W83627EHF_REG_DIODE, reg); in w83627ehf_write_fan_div()
501 reg = (w83627ehf_read_value(data, W83627EHF_REG_SMI_OVT) & 0x7f) in w83627ehf_write_fan_div()
502 | ((data->fan_div[3] & 0x04) << 5); in w83627ehf_write_fan_div()
503 w83627ehf_write_value(data, W83627EHF_REG_SMI_OVT, reg); in w83627ehf_write_fan_div()
506 reg = (w83627ehf_read_value(data, W83627EHF_REG_DIODE) & 0x73) in w83627ehf_write_fan_div()
507 | ((data->fan_div[4] & 0x03) << 2) in w83627ehf_write_fan_div()
508 | ((data->fan_div[4] & 0x04) << 5); in w83627ehf_write_fan_div()
509 w83627ehf_write_value(data, W83627EHF_REG_DIODE, reg); in w83627ehf_write_fan_div()
514 static void w83627ehf_update_fan_div(struct w83627ehf_data *data) in w83627ehf_update_fan_div() argument
518 i = w83627ehf_read_value(data, W83627EHF_REG_FANDIV1); in w83627ehf_update_fan_div()
519 data->fan_div[0] = (i >> 4) & 0x03; in w83627ehf_update_fan_div()
520 data->fan_div[1] = (i >> 6) & 0x03; in w83627ehf_update_fan_div()
521 i = w83627ehf_read_value(data, W83627EHF_REG_FANDIV2); in w83627ehf_update_fan_div()
522 data->fan_div[2] = (i >> 6) & 0x03; in w83627ehf_update_fan_div()
523 i = w83627ehf_read_value(data, W83627EHF_REG_VBAT); in w83627ehf_update_fan_div()
524 data->fan_div[0] |= (i >> 3) & 0x04; in w83627ehf_update_fan_div()
525 data->fan_div[1] |= (i >> 4) & 0x04; in w83627ehf_update_fan_div()
526 data->fan_div[2] |= (i >> 5) & 0x04; in w83627ehf_update_fan_div()
527 if (data->has_fan & ((1 << 3) | (1 << 4))) { in w83627ehf_update_fan_div()
528 i = w83627ehf_read_value(data, W83627EHF_REG_DIODE); in w83627ehf_update_fan_div()
529 data->fan_div[3] = i & 0x03; in w83627ehf_update_fan_div()
530 data->fan_div[4] = ((i >> 2) & 0x03) in w83627ehf_update_fan_div()
533 if (data->has_fan & (1 << 3)) { in w83627ehf_update_fan_div()
534 i = w83627ehf_read_value(data, W83627EHF_REG_SMI_OVT); in w83627ehf_update_fan_div()
535 data->fan_div[3] |= (i >> 5) & 0x04; in w83627ehf_update_fan_div()
539 static void w83627ehf_update_pwm(struct w83627ehf_data *data) in w83627ehf_update_pwm() argument
544 for (i = 0; i < data->pwm_num; i++) { in w83627ehf_update_pwm()
545 if (!(data->has_fan & (1 << i))) in w83627ehf_update_pwm()
550 pwmcfg = w83627ehf_read_value(data, in w83627ehf_update_pwm()
552 tolerance = w83627ehf_read_value(data, in w83627ehf_update_pwm()
555 data->pwm_mode[i] = in w83627ehf_update_pwm()
557 data->pwm_enable[i] = ((pwmcfg >> W83627EHF_PWM_ENABLE_SHIFT[i]) in w83627ehf_update_pwm()
559 data->pwm[i] = w83627ehf_read_value(data, W83627EHF_REG_PWM[i]); in w83627ehf_update_pwm()
561 data->tolerance[i] = (tolerance >> (i == 1 ? 4 : 0)) & 0x0f; in w83627ehf_update_pwm()
567 struct w83627ehf_data *data = dev_get_drvdata(dev); in w83627ehf_update_device() local
570 mutex_lock(&data->update_lock); in w83627ehf_update_device()
572 if (time_after(jiffies, data->last_updated + HZ + HZ/2) in w83627ehf_update_device()
573 || !data->valid) { in w83627ehf_update_device()
575 w83627ehf_update_fan_div(data); in w83627ehf_update_device()
578 for (i = 0; i < data->in_num; i++) { in w83627ehf_update_device()
579 if ((i == 6) && data->in6_skip) in w83627ehf_update_device()
582 data->in[i] = w83627ehf_read_value(data, in w83627ehf_update_device()
584 data->in_min[i] = w83627ehf_read_value(data, in w83627ehf_update_device()
586 data->in_max[i] = w83627ehf_read_value(data, in w83627ehf_update_device()
594 if (!(data->has_fan & (1 << i))) in w83627ehf_update_device()
597 reg = w83627ehf_read_value(data, W83627EHF_REG_FAN[i]); in w83627ehf_update_device()
598 data->rpm[i] = fan_from_reg8(reg, data->fan_div[i]); in w83627ehf_update_device()
600 if (data->has_fan_min & (1 << i)) in w83627ehf_update_device()
601 data->fan_min[i] = w83627ehf_read_value(data, in w83627ehf_update_device()
609 if (reg >= 0xff && data->fan_div[i] < 0x07) { in w83627ehf_update_device()
612 i + 1, div_from_reg(data->fan_div[i]), in w83627ehf_update_device()
613 div_from_reg(data->fan_div[i] + 1)); in w83627ehf_update_device()
614 data->fan_div[i]++; in w83627ehf_update_device()
615 w83627ehf_write_fan_div(data, i); in w83627ehf_update_device()
617 if ((data->has_fan_min & (1 << i)) in w83627ehf_update_device()
618 && data->fan_min[i] >= 2 in w83627ehf_update_device()
619 && data->fan_min[i] != 255) in w83627ehf_update_device()
620 w83627ehf_write_value(data, in w83627ehf_update_device()
622 (data->fan_min[i] /= 2)); in w83627ehf_update_device()
626 w83627ehf_update_pwm(data); in w83627ehf_update_device()
628 for (i = 0; i < data->pwm_num; i++) { in w83627ehf_update_device()
629 if (!(data->has_fan & (1 << i))) in w83627ehf_update_device()
632 data->fan_start_output[i] = in w83627ehf_update_device()
633 w83627ehf_read_value(data, in w83627ehf_update_device()
635 data->fan_stop_output[i] = in w83627ehf_update_device()
636 w83627ehf_read_value(data, in w83627ehf_update_device()
638 data->fan_stop_time[i] = in w83627ehf_update_device()
639 w83627ehf_read_value(data, in w83627ehf_update_device()
642 if (data->REG_FAN_MAX_OUTPUT && in w83627ehf_update_device()
643 data->REG_FAN_MAX_OUTPUT[i] != 0xff) in w83627ehf_update_device()
644 data->fan_max_output[i] = in w83627ehf_update_device()
645 w83627ehf_read_value(data, in w83627ehf_update_device()
646 data->REG_FAN_MAX_OUTPUT[i]); in w83627ehf_update_device()
648 if (data->REG_FAN_STEP_OUTPUT && in w83627ehf_update_device()
649 data->REG_FAN_STEP_OUTPUT[i] != 0xff) in w83627ehf_update_device()
650 data->fan_step_output[i] = in w83627ehf_update_device()
651 w83627ehf_read_value(data, in w83627ehf_update_device()
652 data->REG_FAN_STEP_OUTPUT[i]); in w83627ehf_update_device()
654 data->target_temp[i] = in w83627ehf_update_device()
655 w83627ehf_read_value(data, in w83627ehf_update_device()
657 (data->pwm_mode[i] == 1 ? 0x7f : 0xff); in w83627ehf_update_device()
662 if (!(data->have_temp & (1 << i))) in w83627ehf_update_device()
664 data->temp[i] = w83627ehf_read_temp(data, in w83627ehf_update_device()
665 data->reg_temp[i]); in w83627ehf_update_device()
666 if (data->reg_temp_over[i]) in w83627ehf_update_device()
667 data->temp_max[i] in w83627ehf_update_device()
668 = w83627ehf_read_temp(data, in w83627ehf_update_device()
669 data->reg_temp_over[i]); in w83627ehf_update_device()
670 if (data->reg_temp_hyst[i]) in w83627ehf_update_device()
671 data->temp_max_hyst[i] in w83627ehf_update_device()
672 = w83627ehf_read_temp(data, in w83627ehf_update_device()
673 data->reg_temp_hyst[i]); in w83627ehf_update_device()
676 if (data->have_temp_offset & (1 << i)) in w83627ehf_update_device()
677 data->temp_offset[i] in w83627ehf_update_device()
678 = w83627ehf_read_value(data, in w83627ehf_update_device()
682 data->alarms = w83627ehf_read_value(data, in w83627ehf_update_device()
684 (w83627ehf_read_value(data, in w83627ehf_update_device()
686 (w83627ehf_read_value(data, in w83627ehf_update_device()
689 data->caseopen = w83627ehf_read_value(data, in w83627ehf_update_device()
692 data->last_updated = jiffies; in w83627ehf_update_device()
693 data->valid = 1; in w83627ehf_update_device()
696 mutex_unlock(&data->update_lock); in w83627ehf_update_device()
697 return data; in w83627ehf_update_device()
702 store_in_##reg(struct device *dev, struct w83627ehf_data *data, int channel, \
707 mutex_lock(&data->update_lock); \
708 data->in_##reg[channel] = in_to_reg(val, channel, data->scale_in); \
709 w83627ehf_write_value(data, W83627EHF_REG_IN_##REG(channel), \
710 data->in_##reg[channel]); \
711 mutex_unlock(&data->update_lock); \
719 store_fan_min(struct device *dev, struct w83627ehf_data *data, int channel, in store_in_reg()
728 mutex_lock(&data->update_lock); in store_in_reg()
731 data->fan_min[channel] = 255; in store_in_reg()
732 new_div = data->fan_div[channel]; /* No change */ in store_in_reg()
740 data->fan_min[channel] = 254; in store_in_reg()
750 data->fan_min[channel] = 1; in store_in_reg()
766 data->fan_min[channel] = reg; in store_in_reg()
773 if (new_div != data->fan_div[channel]) { in store_in_reg()
775 channel + 1, div_from_reg(data->fan_div[channel]), in store_in_reg()
777 data->fan_div[channel] = new_div; in store_in_reg()
778 w83627ehf_write_fan_div(data, channel); in store_in_reg()
780 data->last_updated = jiffies; in store_in_reg()
783 w83627ehf_write_value(data, W83627EHF_REG_FAN_MIN[channel], in store_in_reg()
784 data->fan_min[channel]); in store_in_reg()
785 mutex_unlock(&data->update_lock); in store_in_reg()
792 store_##reg(struct device *dev, struct w83627ehf_data *data, int channel, \
795 mutex_lock(&data->update_lock); \
796 data->reg[channel] = LM75_TEMP_TO_REG(val); \
797 w83627ehf_write_temp(data, data->addr[channel], data->reg[channel]); \
798 mutex_unlock(&data->update_lock); \
805 store_temp_offset(struct device *dev, struct w83627ehf_data *data, int channel, in store_temp_offset() argument
810 mutex_lock(&data->update_lock); in store_temp_offset()
811 data->temp_offset[channel] = val; in store_temp_offset()
812 w83627ehf_write_value(data, W83627EHF_REG_TEMP_OFFSET[channel], val); in store_temp_offset()
813 mutex_unlock(&data->update_lock); in store_temp_offset()
818 store_pwm_mode(struct device *dev, struct w83627ehf_data *data, int channel, in store_pwm_mode() argument
826 mutex_lock(&data->update_lock); in store_pwm_mode()
827 reg = w83627ehf_read_value(data, W83627EHF_REG_PWM_ENABLE[channel]); in store_pwm_mode()
828 data->pwm_mode[channel] = val; in store_pwm_mode()
832 w83627ehf_write_value(data, W83627EHF_REG_PWM_ENABLE[channel], reg); in store_pwm_mode()
833 mutex_unlock(&data->update_lock); in store_pwm_mode()
838 store_pwm(struct device *dev, struct w83627ehf_data *data, int channel, in store_pwm() argument
843 mutex_lock(&data->update_lock); in store_pwm()
844 data->pwm[channel] = val; in store_pwm()
845 w83627ehf_write_value(data, W83627EHF_REG_PWM[channel], val); in store_pwm()
846 mutex_unlock(&data->update_lock); in store_pwm()
851 store_pwm_enable(struct device *dev, struct w83627ehf_data *data, int channel, in store_pwm_enable() argument
857 (val > 4 && val != data->pwm_enable_orig[channel])) in store_pwm_enable()
860 mutex_lock(&data->update_lock); in store_pwm_enable()
861 data->pwm_enable[channel] = val; in store_pwm_enable()
862 reg = w83627ehf_read_value(data, in store_pwm_enable()
866 w83627ehf_write_value(data, W83627EHF_REG_PWM_ENABLE[channel], in store_pwm_enable()
868 mutex_unlock(&data->update_lock); in store_pwm_enable()
876 struct w83627ehf_data *data = w83627ehf_update_device(dev->parent); \
880 return sprintf(buf, "%d\n", data->reg[nr] * 1000); \
890 struct w83627ehf_data *data = dev_get_drvdata(dev); in show_tol_temp() local
902 mutex_lock(&data->update_lock); in show_tol_temp()
903 data->target_temp[nr] = val; in show_tol_temp()
904 w83627ehf_write_value(data, W83627EHF_REG_TARGET[nr], val); in show_tol_temp()
905 mutex_unlock(&data->update_lock); in show_tol_temp()
913 struct w83627ehf_data *data = dev_get_drvdata(dev); in store_tolerance() local
927 mutex_lock(&data->update_lock); in store_tolerance()
928 reg = w83627ehf_read_value(data, W83627EHF_REG_TOLERANCE[nr]); in store_tolerance()
933 w83627ehf_write_value(data, W83627EHF_REG_TOLERANCE[nr], reg); in store_tolerance()
934 data->tolerance[nr] = val; in store_tolerance()
935 mutex_unlock(&data->update_lock); in store_tolerance()
963 struct w83627ehf_data *data = w83627ehf_update_device(dev->parent); \
967 return sprintf(buf, "%d\n", data->reg[nr]); \
973 struct w83627ehf_data *data = dev_get_drvdata(dev); \
983 mutex_lock(&data->update_lock); \
984 data->reg[nr] = val; \
985 w83627ehf_write_value(data, REG[nr], val); \
986 mutex_unlock(&data->update_lock); \
992 fan_functions(fan_max_output, data->REG_FAN_MAX_OUTPUT)
993 fan_functions(fan_step_output, data->REG_FAN_STEP_OUTPUT)
999 struct w83627ehf_data *data = w83627ehf_update_device(dev->parent); \
1004 step_time_from_reg(data->reg[nr], \
1005 data->pwm_mode[nr])); \
1012 struct w83627ehf_data *data = dev_get_drvdata(dev); \
1021 val = step_time_to_reg(val, data->pwm_mode[nr]); \
1022 mutex_lock(&data->update_lock); \
1023 data->reg[nr] = val; \
1024 w83627ehf_write_value(data, REG[nr], val); \
1025 mutex_unlock(&data->update_lock); \
1083 struct w83627ehf_data *data = dev_get_drvdata(dev); in cpu0_vid_show() local
1084 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm)); in cpu0_vid_show()
1091 clear_caseopen(struct device *dev, struct w83627ehf_data *data, int channel, in clear_caseopen() argument
1100 mutex_lock(&data->update_lock); in clear_caseopen()
1101 reg = w83627ehf_read_value(data, W83627EHF_REG_CASEOPEN_CLR); in clear_caseopen()
1102 w83627ehf_write_value(data, W83627EHF_REG_CASEOPEN_CLR, reg | mask); in clear_caseopen()
1103 w83627ehf_write_value(data, W83627EHF_REG_CASEOPEN_CLR, reg & ~mask); in clear_caseopen()
1104 data->valid = 0; /* Force cache refresh */ in clear_caseopen()
1105 mutex_unlock(&data->update_lock); in clear_caseopen()
1114 struct w83627ehf_data *data = dev_get_drvdata(dev); in w83627ehf_attrs_visible() local
1121 if (devattr->show == cpu0_vid_show && data->have_vid) in w83627ehf_attrs_visible()
1135 data->REG_FAN_STEP_OUTPUT && in w83627ehf_attrs_visible()
1136 data->REG_FAN_STEP_OUTPUT[sda->index] != 0xff) in w83627ehf_attrs_visible()
1141 (data->has_fan & (1 << 2)) && data->pwm_num >= 3 && in w83627ehf_attrs_visible()
1148 (data->has_fan & (1 << 3)) && data->pwm_num >= 4 && in w83627ehf_attrs_visible()
1158 (data->has_fan & (1 << sda->index)) && in w83627ehf_attrs_visible()
1159 sda->index < data->pwm_num) in w83627ehf_attrs_visible()
1219 static inline void w83627ehf_init_device(struct w83627ehf_data *data, in w83627ehf_init_device() argument
1226 tmp = w83627ehf_read_value(data, W83627EHF_REG_CONFIG); in w83627ehf_init_device()
1228 w83627ehf_write_value(data, W83627EHF_REG_CONFIG, in w83627ehf_init_device()
1233 if (!(data->have_temp & (1 << i))) in w83627ehf_init_device()
1235 if (!data->reg_temp_config[i]) in w83627ehf_init_device()
1237 tmp = w83627ehf_read_value(data, in w83627ehf_init_device()
1238 data->reg_temp_config[i]); in w83627ehf_init_device()
1240 w83627ehf_write_value(data, in w83627ehf_init_device()
1241 data->reg_temp_config[i], in w83627ehf_init_device()
1246 tmp = w83627ehf_read_value(data, W83627EHF_REG_VBAT); in w83627ehf_init_device()
1248 w83627ehf_write_value(data, W83627EHF_REG_VBAT, tmp | 0x01); in w83627ehf_init_device()
1253 diode = w83627ehf_read_value(data, W83627EHF_REG_DIODE); in w83627ehf_init_device()
1264 if (data->temp_label) in w83627ehf_init_device()
1265 label = data->temp_label[data->temp_src[i]]; in w83627ehf_init_device()
1269 data->temp_type[i] = 6; in w83627ehf_init_device()
1271 data->temp_type[i] = 5; in w83627ehf_init_device()
1273 data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 3; in w83627ehf_init_device()
1275 data->temp_type[i] = 4; /* thermistor */ in w83627ehf_init_device()
1280 w83627ehf_set_temp_reg_ehf(struct w83627ehf_data *data, int n_temp) in w83627ehf_set_temp_reg_ehf() argument
1285 data->reg_temp[i] = W83627EHF_REG_TEMP[i]; in w83627ehf_set_temp_reg_ehf()
1286 data->reg_temp_over[i] = W83627EHF_REG_TEMP_OVER[i]; in w83627ehf_set_temp_reg_ehf()
1287 data->reg_temp_hyst[i] = W83627EHF_REG_TEMP_HYST[i]; in w83627ehf_set_temp_reg_ehf()
1288 data->reg_temp_config[i] = W83627EHF_REG_TEMP_CONFIG[i]; in w83627ehf_set_temp_reg_ehf()
1294 struct w83627ehf_data *data) in w83627ehf_check_fan_inputs() argument
1300 data->has_fan = 0x03; /* fan1 and fan2 */ in w83627ehf_check_fan_inputs()
1301 data->has_fan_min = 0x03; in w83627ehf_check_fan_inputs()
1316 data->has_fan = data->has_fan_min = 0x03; /* fan1 and fan2 */ in w83627ehf_check_fan_inputs()
1317 data->has_fan |= (fan3pin << 2); in w83627ehf_check_fan_inputs()
1318 data->has_fan_min |= (fan3pin << 2); in w83627ehf_check_fan_inputs()
1327 regval = w83627ehf_read_value(data, W83627EHF_REG_FANDIV1); in w83627ehf_check_fan_inputs()
1329 data->has_fan |= (1 << 3); in w83627ehf_check_fan_inputs()
1330 data->has_fan_min |= (1 << 3); in w83627ehf_check_fan_inputs()
1333 data->has_fan |= (1 << 4); in w83627ehf_check_fan_inputs()
1334 data->has_fan_min |= (1 << 4); in w83627ehf_check_fan_inputs()
1342 const struct w83627ehf_data *data = drvdata; in w83627ehf_is_visible() local
1347 if (!(data->have_temp & (1 << channel))) in w83627ehf_is_visible()
1352 if (data->temp_label) in w83627ehf_is_visible()
1356 if (channel == 2 && data->temp3_val_only) in w83627ehf_is_visible()
1359 if (data->reg_temp_over[channel]) in w83627ehf_is_visible()
1365 if (data->reg_temp_hyst[channel]) in w83627ehf_is_visible()
1375 if (data->have_temp_offset & (1 << channel)) in w83627ehf_is_visible()
1384 if (!(data->has_fan & (1 << channel))) in w83627ehf_is_visible()
1392 if (data->has_fan_min & (1 << channel)) in w83627ehf_is_visible()
1401 if (channel >= data->in_num) in w83627ehf_is_visible()
1403 if (channel == 6 && data->in6_skip) in w83627ehf_is_visible()
1413 if (!(data->has_fan & (1 << channel)) || in w83627ehf_is_visible()
1414 channel >= data->pwm_num) in w83627ehf_is_visible()
1432 w83627ehf_do_read_temp(struct w83627ehf_data *data, u32 attr, in w83627ehf_do_read_temp() argument
1437 *val = LM75_TEMP_FROM_REG(data->temp[channel]); in w83627ehf_do_read_temp()
1440 *val = LM75_TEMP_FROM_REG(data->temp_max[channel]); in w83627ehf_do_read_temp()
1443 *val = LM75_TEMP_FROM_REG(data->temp_max_hyst[channel]); in w83627ehf_do_read_temp()
1446 *val = data->temp_offset[channel] * 1000; in w83627ehf_do_read_temp()
1449 *val = (int)data->temp_type[channel]; in w83627ehf_do_read_temp()
1454 *val = (data->alarms >> bit[channel]) & 1; in w83627ehf_do_read_temp()
1467 w83627ehf_do_read_in(struct w83627ehf_data *data, u32 attr, in w83627ehf_do_read_in() argument
1472 *val = in_from_reg(data->in[channel], channel, data->scale_in); in w83627ehf_do_read_in()
1475 *val = in_from_reg(data->in_min[channel], channel, in w83627ehf_do_read_in()
1476 data->scale_in); in w83627ehf_do_read_in()
1479 *val = in_from_reg(data->in_max[channel], channel, in w83627ehf_do_read_in()
1480 data->scale_in); in w83627ehf_do_read_in()
1485 *val = (data->alarms >> bit[channel]) & 1; in w83627ehf_do_read_in()
1496 w83627ehf_do_read_fan(struct w83627ehf_data *data, u32 attr, in w83627ehf_do_read_fan() argument
1501 *val = data->rpm[channel]; in w83627ehf_do_read_fan()
1504 *val = fan_from_reg8(data->fan_min[channel], in w83627ehf_do_read_fan()
1505 data->fan_div[channel]); in w83627ehf_do_read_fan()
1508 *val = div_from_reg(data->fan_div[channel]); in w83627ehf_do_read_fan()
1513 *val = (data->alarms >> bit[channel]) & 1; in w83627ehf_do_read_fan()
1524 w83627ehf_do_read_pwm(struct w83627ehf_data *data, u32 attr, in w83627ehf_do_read_pwm() argument
1529 *val = data->pwm[channel]; in w83627ehf_do_read_pwm()
1532 *val = data->pwm_enable[channel]; in w83627ehf_do_read_pwm()
1535 *val = data->pwm_enable[channel]; in w83627ehf_do_read_pwm()
1544 w83627ehf_do_read_intrusion(struct w83627ehf_data *data, u32 attr, in w83627ehf_do_read_intrusion() argument
1550 *val = !!(data->caseopen & 0x10); in w83627ehf_do_read_intrusion()
1558 struct w83627ehf_data *data = w83627ehf_update_device(dev->parent); in w83627ehf_read() local
1562 return w83627ehf_do_read_fan(data, attr, channel, val); in w83627ehf_read()
1565 return w83627ehf_do_read_in(data, attr, channel, val); in w83627ehf_read()
1568 return w83627ehf_do_read_pwm(data, attr, channel, val); in w83627ehf_read()
1571 return w83627ehf_do_read_temp(data, attr, channel, val); in w83627ehf_read()
1574 return w83627ehf_do_read_intrusion(data, attr, channel, val); in w83627ehf_read()
1587 struct w83627ehf_data *data = dev_get_drvdata(dev); in w83627ehf_read_string() local
1592 *str = data->temp_label[data->temp_src[channel]]; in w83627ehf_read_string()
1608 struct w83627ehf_data *data = dev_get_drvdata(dev); in w83627ehf_write() local
1611 return store_in_min(dev, data, channel, val); in w83627ehf_write()
1613 return store_in_max(dev, data, channel, val); in w83627ehf_write()
1616 return store_fan_min(dev, data, channel, val); in w83627ehf_write()
1619 return store_temp_max(dev, data, channel, val); in w83627ehf_write()
1621 return store_temp_max_hyst(dev, data, channel, val); in w83627ehf_write()
1623 return store_temp_offset(dev, data, channel, val); in w83627ehf_write()
1626 return store_pwm_mode(dev, data, channel, val); in w83627ehf_write()
1628 return store_pwm_enable(dev, data, channel, val); in w83627ehf_write()
1630 return store_pwm(dev, data, channel, val); in w83627ehf_write()
1633 return clear_caseopen(dev, data, channel, val); in w83627ehf_write()
1701 struct w83627ehf_data *data; in w83627ehf_probe() local
1716 data = devm_kzalloc(&pdev->dev, sizeof(struct w83627ehf_data), in w83627ehf_probe()
1718 if (!data) { in w83627ehf_probe()
1723 data->addr = res->start; in w83627ehf_probe()
1724 mutex_init(&data->lock); in w83627ehf_probe()
1725 mutex_init(&data->update_lock); in w83627ehf_probe()
1726 data->name = w83627ehf_device_names[sio_data->kind]; in w83627ehf_probe()
1727 data->bank = 0xff; /* Force initial bank selection */ in w83627ehf_probe()
1728 platform_set_drvdata(pdev, data); in w83627ehf_probe()
1731 data->in_num = (sio_data->kind == w83627ehf) ? 10 : 9; in w83627ehf_probe()
1735 data->pwm_num = 4; in w83627ehf_probe()
1739 data->pwm_num = 3; in w83627ehf_probe()
1742 data->pwm_num = 2; in w83627ehf_probe()
1747 data->have_temp = 0x07; in w83627ehf_probe()
1753 w83627ehf_set_temp_reg_ehf(data, 4); in w83627ehf_probe()
1759 reg = w83627ehf_read_value(data, 0x4a); in w83627ehf_probe()
1760 data->temp_src[0] = reg >> 5; in w83627ehf_probe()
1761 reg = w83627ehf_read_value(data, 0x49); in w83627ehf_probe()
1762 data->temp_src[1] = reg & 0x07; in w83627ehf_probe()
1763 data->temp_src[2] = (reg >> 4) & 0x07; in w83627ehf_probe()
1771 reg = w83627ehf_read_value(data, 0x7d); in w83627ehf_probe()
1773 if (reg != data->temp_src[0] && reg != data->temp_src[1] in w83627ehf_probe()
1774 && reg != data->temp_src[2]) { in w83627ehf_probe()
1775 data->temp_src[3] = reg; in w83627ehf_probe()
1776 data->have_temp |= 1 << 3; in w83627ehf_probe()
1783 reg = w83627ehf_read_value(data, W83627EHF_REG_TEMP_CONFIG[2]); in w83627ehf_probe()
1784 if (data->temp_src[2] == 2 && (reg & 0x01)) in w83627ehf_probe()
1785 data->have_temp &= ~(1 << 2); in w83627ehf_probe()
1787 if ((data->temp_src[2] == 2 && (data->have_temp & (1 << 2))) in w83627ehf_probe()
1788 || (data->temp_src[3] == 2 && (data->have_temp & (1 << 3)))) in w83627ehf_probe()
1789 data->in6_skip = 1; in w83627ehf_probe()
1791 data->temp_label = w83667hg_b_temp_label; in w83627ehf_probe()
1792 data->have_temp_offset = data->have_temp & 0x07; in w83627ehf_probe()
1794 if (data->temp_src[i] > 2) in w83627ehf_probe()
1795 data->have_temp_offset &= ~(1 << i); in w83627ehf_probe()
1800 w83627ehf_set_temp_reg_ehf(data, 3); in w83627ehf_probe()
1806 data->temp_src[0] = 0; /* SYSTIN */ in w83627ehf_probe()
1807 reg = w83627ehf_read_value(data, 0x49) & 0x07; in w83627ehf_probe()
1810 data->temp_src[1] = 1; in w83627ehf_probe()
1812 data->temp_src[1] = reg + 2; in w83627ehf_probe()
1814 data->have_temp &= ~(1 << 1); in w83627ehf_probe()
1815 reg = w83627ehf_read_value(data, 0x4a); in w83627ehf_probe()
1816 data->temp_src[2] = reg >> 5; in w83627ehf_probe()
1822 if (data->temp_src[2] == 2 || data->temp_src[2] == 3 || in w83627ehf_probe()
1823 data->temp_src[2] == data->temp_src[0] || in w83627ehf_probe()
1824 ((data->have_temp & (1 << 1)) && in w83627ehf_probe()
1825 data->temp_src[2] == data->temp_src[1])) in w83627ehf_probe()
1826 data->have_temp &= ~(1 << 2); in w83627ehf_probe()
1828 data->temp3_val_only = 1; /* No limit regs */ in w83627ehf_probe()
1830 data->in6_skip = 1; /* No VIN3 */ in w83627ehf_probe()
1832 data->temp_label = w83667hg_b_temp_label; in w83627ehf_probe()
1833 data->have_temp_offset = data->have_temp & 0x03; in w83627ehf_probe()
1835 if (data->temp_src[i] > 1) in w83627ehf_probe()
1836 data->have_temp_offset &= ~(1 << i); in w83627ehf_probe()
1839 w83627ehf_set_temp_reg_ehf(data, 3); in w83627ehf_probe()
1850 reg = w83627ehf_read_value(data, in w83627ehf_probe()
1853 data->have_temp &= ~(1 << 2); in w83627ehf_probe()
1855 data->in6_skip = 1; in w83627ehf_probe()
1857 data->have_temp_offset = data->have_temp & 0x07; in w83627ehf_probe()
1861 data->REG_FAN_MAX_OUTPUT = in w83627ehf_probe()
1863 data->REG_FAN_STEP_OUTPUT = in w83627ehf_probe()
1866 data->REG_FAN_MAX_OUTPUT = in w83627ehf_probe()
1868 data->REG_FAN_STEP_OUTPUT = in w83627ehf_probe()
1874 data->scale_in = scale_in_w83627uhg; in w83627ehf_probe()
1876 data->scale_in = scale_in_common; in w83627ehf_probe()
1879 w83627ehf_init_device(data, sio_data->kind); in w83627ehf_probe()
1881 data->vrm = vid_which_vrm(); in w83627ehf_probe()
1895 data->vid = superio_inb(sio_data->sioreg, 0xe3); in w83627ehf_probe()
1896 data->have_vid = true; in w83627ehf_probe()
1910 if ((en_vrm10 & 0x08) && data->vrm == 90) { in w83627ehf_probe()
1917 && data->vrm == 100) { in w83627ehf_probe()
1926 data->vid = superio_inb(sio_data->sioreg, in w83627ehf_probe()
1929 data->vid &= 0x3f; in w83627ehf_probe()
1930 data->have_vid = true; in w83627ehf_probe()
1937 w83627ehf_check_fan_inputs(sio_data, data); in w83627ehf_probe()
1942 w83627ehf_update_fan_div(data); in w83627ehf_probe()
1944 /* Read pwm data to save original values */ in w83627ehf_probe()
1945 w83627ehf_update_pwm(data); in w83627ehf_probe()
1946 for (i = 0; i < data->pwm_num; i++) in w83627ehf_probe()
1947 data->pwm_enable_orig[i] = data->pwm_enable[i]; in w83627ehf_probe()
1950 data->name, in w83627ehf_probe()
1951 data, in w83627ehf_probe()
1969 struct w83627ehf_data *data = platform_get_drvdata(pdev); in w83627ehf_remove() local
1971 release_region(data->addr, IOREGION_LENGTH); in w83627ehf_remove()
1979 struct w83627ehf_data *data = w83627ehf_update_device(dev); in w83627ehf_suspend() local
1981 mutex_lock(&data->update_lock); in w83627ehf_suspend()
1982 data->vbat = w83627ehf_read_value(data, W83627EHF_REG_VBAT); in w83627ehf_suspend()
1983 mutex_unlock(&data->update_lock); in w83627ehf_suspend()
1990 struct w83627ehf_data *data = dev_get_drvdata(dev); in w83627ehf_resume() local
1993 mutex_lock(&data->update_lock); in w83627ehf_resume()
1994 data->bank = 0xff; /* Force initial bank selection */ in w83627ehf_resume()
1997 for (i = 0; i < data->in_num; i++) { in w83627ehf_resume()
1998 if ((i == 6) && data->in6_skip) in w83627ehf_resume()
2001 w83627ehf_write_value(data, W83627EHF_REG_IN_MIN(i), in w83627ehf_resume()
2002 data->in_min[i]); in w83627ehf_resume()
2003 w83627ehf_write_value(data, W83627EHF_REG_IN_MAX(i), in w83627ehf_resume()
2004 data->in_max[i]); in w83627ehf_resume()
2008 if (!(data->has_fan_min & (1 << i))) in w83627ehf_resume()
2011 w83627ehf_write_value(data, W83627EHF_REG_FAN_MIN[i], in w83627ehf_resume()
2012 data->fan_min[i]); in w83627ehf_resume()
2016 if (!(data->have_temp & (1 << i))) in w83627ehf_resume()
2019 if (data->reg_temp_over[i]) in w83627ehf_resume()
2020 w83627ehf_write_temp(data, data->reg_temp_over[i], in w83627ehf_resume()
2021 data->temp_max[i]); in w83627ehf_resume()
2022 if (data->reg_temp_hyst[i]) in w83627ehf_resume()
2023 w83627ehf_write_temp(data, data->reg_temp_hyst[i], in w83627ehf_resume()
2024 data->temp_max_hyst[i]); in w83627ehf_resume()
2027 if (data->have_temp_offset & (1 << i)) in w83627ehf_resume()
2028 w83627ehf_write_value(data, in w83627ehf_resume()
2030 data->temp_offset[i]); in w83627ehf_resume()
2034 w83627ehf_write_value(data, W83627EHF_REG_VBAT, data->vbat); in w83627ehf_resume()
2037 data->valid = 0; in w83627ehf_resume()
2038 mutex_unlock(&data->update_lock); in w83627ehf_resume()
2190 pr_err("Platform data allocation failed\n"); in sensors_w83627ehf_init()