Lines Matching refs:data

405 #define has_16bit_fans(data)	((data)->features & FEAT_16BIT_FANS)  argument
406 #define has_12mv_adc(data) ((data)->features & FEAT_12MV_ADC) argument
407 #define has_10_9mv_adc(data) ((data)->features & FEAT_10_9MV_ADC) argument
408 #define has_newer_autopwm(data) ((data)->features & FEAT_NEWER_AUTOPWM) argument
409 #define has_old_autopwm(data) ((data)->features & FEAT_OLD_AUTOPWM) argument
410 #define has_temp_offset(data) ((data)->features & FEAT_TEMP_OFFSET) argument
411 #define has_temp_peci(data, nr) (((data)->features & FEAT_TEMP_PECI) && \ argument
412 ((data)->peci_mask & (1 << nr)))
413 #define has_temp_old_peci(data, nr) \ argument
414 (((data)->features & FEAT_TEMP_OLD_PECI) && \
415 ((data)->old_peci_mask & (1 << nr)))
416 #define has_fan16_config(data) ((data)->features & FEAT_FAN16_CONFIG) argument
417 #define has_five_fans(data) ((data)->features & (FEAT_FIVE_FANS | \ argument
419 #define has_vid(data) ((data)->features & FEAT_VID) argument
420 #define has_in7_internal(data) ((data)->features & FEAT_IN7_INTERNAL) argument
421 #define has_six_fans(data) ((data)->features & FEAT_SIX_FANS) argument
490 static int adc_lsb(const struct it87_data *data, int nr) in adc_lsb() argument
494 if (has_12mv_adc(data)) in adc_lsb()
496 else if (has_10_9mv_adc(data)) in adc_lsb()
500 if (data->in_scaled & (1 << nr)) in adc_lsb()
505 static u8 in_to_reg(const struct it87_data *data, int nr, long val) in in_to_reg() argument
507 val = DIV_ROUND_CLOSEST(val * 10, adc_lsb(data, nr)); in in_to_reg()
511 static int in_from_reg(const struct it87_data *data, int nr, int val) in in_from_reg() argument
513 return DIV_ROUND_CLOSEST(val * adc_lsb(data, nr), 10); in in_from_reg()
541 static u8 pwm_to_reg(const struct it87_data *data, long val) in pwm_to_reg() argument
543 if (has_newer_autopwm(data)) in pwm_to_reg()
549 static int pwm_from_reg(const struct it87_data *data, u8 reg) in pwm_from_reg() argument
551 if (has_newer_autopwm(data)) in pwm_from_reg()
591 static int it87_read_value(struct it87_data *data, u8 reg);
592 static void it87_write_value(struct it87_data *data, u8 reg, u8 value);
613 struct it87_data *data = it87_update_device(dev); in show_in() local
614 return sprintf(buf, "%d\n", in_from_reg(data, nr, data->in[nr][index])); in show_in()
624 struct it87_data *data = dev_get_drvdata(dev); in set_in() local
630 mutex_lock(&data->update_lock); in set_in()
631 data->in[nr][index] = in_to_reg(data, nr, val); in set_in()
632 it87_write_value(data, in set_in()
635 data->in[nr][index]); in set_in()
636 mutex_unlock(&data->update_lock); in set_in()
698 struct it87_data *data = it87_update_device(dev); in show_temp() local
700 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[nr][index])); in show_temp()
709 struct it87_data *data = dev_get_drvdata(dev); in set_temp() local
716 mutex_lock(&data->update_lock); in set_temp()
727 regval = it87_read_value(data, IT87_REG_BEEP_ENABLE); in set_temp()
730 it87_write_value(data, IT87_REG_BEEP_ENABLE, regval); in set_temp()
732 data->valid = 0; in set_temp()
737 data->temp[nr][index] = TEMP_TO_REG(val); in set_temp()
738 it87_write_value(data, reg, data->temp[nr][index]); in set_temp()
739 mutex_unlock(&data->update_lock); in set_temp()
770 struct it87_data *data = it87_update_device(dev); in show_temp_type() local
771 u8 reg = data->sensor; /* In case value is updated while used */ in show_temp_type()
772 u8 extra = data->extra; in show_temp_type()
774 if ((has_temp_peci(data, nr) && (reg >> 6 == nr + 1)) in show_temp_type()
775 || (has_temp_old_peci(data, nr) && (extra & 0x80))) in show_temp_type()
790 struct it87_data *data = dev_get_drvdata(dev); in set_temp_type() local
797 reg = it87_read_value(data, IT87_REG_TEMP_ENABLE); in set_temp_type()
800 if (has_temp_peci(data, nr) && (reg >> 6 == nr + 1 || val == 6)) in set_temp_type()
802 extra = it87_read_value(data, IT87_REG_TEMP_EXTRA); in set_temp_type()
803 if (has_temp_old_peci(data, nr) && ((extra & 0x80) || val == 6)) in set_temp_type()
815 else if (has_temp_peci(data, nr) && val == 6) in set_temp_type()
817 else if (has_temp_old_peci(data, nr) && val == 6) in set_temp_type()
822 mutex_lock(&data->update_lock); in set_temp_type()
823 data->sensor = reg; in set_temp_type()
824 data->extra = extra; in set_temp_type()
825 it87_write_value(data, IT87_REG_TEMP_ENABLE, data->sensor); in set_temp_type()
826 if (has_temp_old_peci(data, nr)) in set_temp_type()
827 it87_write_value(data, IT87_REG_TEMP_EXTRA, data->extra); in set_temp_type()
828 data->valid = 0; /* Force cache refresh */ in set_temp_type()
829 mutex_unlock(&data->update_lock); in set_temp_type()
842 static int pwm_mode(const struct it87_data *data, int nr) in pwm_mode() argument
844 int ctrl = data->fan_main_ctrl & (1 << nr); in pwm_mode()
846 if (ctrl == 0 && data->type != it8603) /* Full speed */ in pwm_mode()
848 if (data->pwm_ctrl[nr] & 0x80) /* Automatic mode */ in pwm_mode()
861 struct it87_data *data = it87_update_device(dev); in show_fan() local
863 speed = has_16bit_fans(data) ? in show_fan()
864 FAN16_FROM_REG(data->fan[nr][index]) : in show_fan()
865 FAN_FROM_REG(data->fan[nr][index], in show_fan()
866 DIV_FROM_REG(data->fan_div[nr])); in show_fan()
876 struct it87_data *data = it87_update_device(dev); in show_fan_div() local
877 return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr])); in show_fan_div()
885 struct it87_data *data = it87_update_device(dev); in show_pwm_enable() local
886 return sprintf(buf, "%d\n", pwm_mode(data, nr)); in show_pwm_enable()
894 struct it87_data *data = it87_update_device(dev); in show_pwm() local
896 pwm_from_reg(data, data->pwm_duty[nr])); in show_pwm()
901 struct it87_data *data = it87_update_device(dev); in show_pwm_freq() local
902 int index = (data->fan_ctl >> 4) & 0x07; in show_pwm_freq()
905 freq = pwm_freq[index] / (has_newer_autopwm(data) ? 256 : 128); in show_pwm_freq()
917 struct it87_data *data = dev_get_drvdata(dev); in set_fan() local
924 mutex_lock(&data->update_lock); in set_fan()
926 if (has_16bit_fans(data)) { in set_fan()
927 data->fan[nr][index] = FAN16_TO_REG(val); in set_fan()
928 it87_write_value(data, IT87_REG_FAN_MIN[nr], in set_fan()
929 data->fan[nr][index] & 0xff); in set_fan()
930 it87_write_value(data, IT87_REG_FANX_MIN[nr], in set_fan()
931 data->fan[nr][index] >> 8); in set_fan()
933 reg = it87_read_value(data, IT87_REG_FAN_DIV); in set_fan()
936 data->fan_div[nr] = reg & 0x07; in set_fan()
939 data->fan_div[nr] = (reg >> 3) & 0x07; in set_fan()
942 data->fan_div[nr] = (reg & 0x40) ? 3 : 1; in set_fan()
945 data->fan[nr][index] = in set_fan()
946 FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr])); in set_fan()
947 it87_write_value(data, IT87_REG_FAN_MIN[nr], in set_fan()
948 data->fan[nr][index]); in set_fan()
951 mutex_unlock(&data->update_lock); in set_fan()
961 struct it87_data *data = dev_get_drvdata(dev); in set_fan_div() local
969 mutex_lock(&data->update_lock); in set_fan_div()
970 old = it87_read_value(data, IT87_REG_FAN_DIV); in set_fan_div()
973 min = FAN_FROM_REG(data->fan[nr][1], DIV_FROM_REG(data->fan_div[nr])); in set_fan_div()
978 data->fan_div[nr] = DIV_TO_REG(val); in set_fan_div()
982 data->fan_div[nr] = 1; in set_fan_div()
984 data->fan_div[nr] = 3; in set_fan_div()
987 val |= (data->fan_div[0] & 0x07); in set_fan_div()
988 val |= (data->fan_div[1] & 0x07) << 3; in set_fan_div()
989 if (data->fan_div[2] == 3) in set_fan_div()
991 it87_write_value(data, IT87_REG_FAN_DIV, val); in set_fan_div()
994 data->fan[nr][1] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr])); in set_fan_div()
995 it87_write_value(data, IT87_REG_FAN_MIN[nr], data->fan[nr][1]); in set_fan_div()
997 mutex_unlock(&data->update_lock); in set_fan_div()
1004 const struct it87_data *data = dev_get_drvdata(dev); in check_trip_points() local
1007 if (has_old_autopwm(data)) { in check_trip_points()
1009 if (data->auto_temp[nr][i] > data->auto_temp[nr][i + 1]) in check_trip_points()
1013 if (data->auto_pwm[nr][i] > data->auto_pwm[nr][i + 1]) in check_trip_points()
1032 struct it87_data *data = dev_get_drvdata(dev); in set_pwm_enable() local
1045 if (val == 0 && data->type == it8603) in set_pwm_enable()
1048 mutex_lock(&data->update_lock); in set_pwm_enable()
1053 tmp = it87_read_value(data, IT87_REG_FAN_CTL); in set_pwm_enable()
1054 it87_write_value(data, IT87_REG_FAN_CTL, tmp | (1 << nr)); in set_pwm_enable()
1056 data->fan_main_ctrl &= ~(1 << nr); in set_pwm_enable()
1057 it87_write_value(data, IT87_REG_FAN_MAIN_CTRL, in set_pwm_enable()
1058 data->fan_main_ctrl); in set_pwm_enable()
1061 data->pwm_ctrl[nr] = has_newer_autopwm(data) ? in set_pwm_enable()
1062 data->pwm_temp_map[nr] : in set_pwm_enable()
1063 data->pwm_duty[nr]; in set_pwm_enable()
1065 data->pwm_ctrl[nr] = 0x80 | data->pwm_temp_map[nr]; in set_pwm_enable()
1066 it87_write_value(data, IT87_REG_PWM(nr), data->pwm_ctrl[nr]); in set_pwm_enable()
1068 if (data->type != it8603) { in set_pwm_enable()
1070 data->fan_main_ctrl |= (1 << nr); in set_pwm_enable()
1071 it87_write_value(data, IT87_REG_FAN_MAIN_CTRL, in set_pwm_enable()
1072 data->fan_main_ctrl); in set_pwm_enable()
1076 mutex_unlock(&data->update_lock); in set_pwm_enable()
1085 struct it87_data *data = dev_get_drvdata(dev); in set_pwm() local
1091 mutex_lock(&data->update_lock); in set_pwm()
1092 if (has_newer_autopwm(data)) { in set_pwm()
1097 if (data->pwm_ctrl[nr] & 0x80) { in set_pwm()
1098 mutex_unlock(&data->update_lock); in set_pwm()
1101 data->pwm_duty[nr] = pwm_to_reg(data, val); in set_pwm()
1102 it87_write_value(data, IT87_REG_PWM_DUTY(nr), in set_pwm()
1103 data->pwm_duty[nr]); in set_pwm()
1105 data->pwm_duty[nr] = pwm_to_reg(data, val); in set_pwm()
1110 if (!(data->pwm_ctrl[nr] & 0x80)) { in set_pwm()
1111 data->pwm_ctrl[nr] = data->pwm_duty[nr]; in set_pwm()
1112 it87_write_value(data, IT87_REG_PWM(nr), in set_pwm()
1113 data->pwm_ctrl[nr]); in set_pwm()
1116 mutex_unlock(&data->update_lock); in set_pwm()
1122 struct it87_data *data = dev_get_drvdata(dev); in set_pwm_freq() local
1130 val *= has_newer_autopwm(data) ? 256 : 128; in set_pwm_freq()
1138 mutex_lock(&data->update_lock); in set_pwm_freq()
1139 data->fan_ctl = it87_read_value(data, IT87_REG_FAN_CTL) & 0x8f; in set_pwm_freq()
1140 data->fan_ctl |= i << 4; in set_pwm_freq()
1141 it87_write_value(data, IT87_REG_FAN_CTL, data->fan_ctl); in set_pwm_freq()
1142 mutex_unlock(&data->update_lock); in set_pwm_freq()
1152 struct it87_data *data = it87_update_device(dev); in show_pwm_temp_map() local
1155 if (data->pwm_temp_map[nr] < 3) in show_pwm_temp_map()
1156 map = 1 << data->pwm_temp_map[nr]; in show_pwm_temp_map()
1167 struct it87_data *data = dev_get_drvdata(dev); in set_pwm_temp_map() local
1175 if (!has_old_autopwm(data)) { in set_pwm_temp_map()
1197 mutex_lock(&data->update_lock); in set_pwm_temp_map()
1198 data->pwm_temp_map[nr] = reg; in set_pwm_temp_map()
1203 if (data->pwm_ctrl[nr] & 0x80) { in set_pwm_temp_map()
1204 data->pwm_ctrl[nr] = 0x80 | data->pwm_temp_map[nr]; in set_pwm_temp_map()
1205 it87_write_value(data, IT87_REG_PWM(nr), data->pwm_ctrl[nr]); in set_pwm_temp_map()
1207 mutex_unlock(&data->update_lock); in set_pwm_temp_map()
1214 struct it87_data *data = it87_update_device(dev); in show_auto_pwm() local
1221 pwm_from_reg(data, data->auto_pwm[nr][point])); in show_auto_pwm()
1227 struct it87_data *data = dev_get_drvdata(dev); in set_auto_pwm() local
1237 mutex_lock(&data->update_lock); in set_auto_pwm()
1238 data->auto_pwm[nr][point] = pwm_to_reg(data, val); in set_auto_pwm()
1239 it87_write_value(data, IT87_REG_AUTO_PWM(nr, point), in set_auto_pwm()
1240 data->auto_pwm[nr][point]); in set_auto_pwm()
1241 mutex_unlock(&data->update_lock); in set_auto_pwm()
1248 struct it87_data *data = it87_update_device(dev); in show_auto_temp() local
1254 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->auto_temp[nr][point])); in show_auto_temp()
1260 struct it87_data *data = dev_get_drvdata(dev); in set_auto_temp() local
1270 mutex_lock(&data->update_lock); in set_auto_temp()
1271 data->auto_temp[nr][point] = TEMP_TO_REG(val); in set_auto_temp()
1272 it87_write_value(data, IT87_REG_AUTO_TEMP(nr, point), in set_auto_temp()
1273 data->auto_temp[nr][point]); in set_auto_temp()
1274 mutex_unlock(&data->update_lock); in set_auto_temp()
1387 struct it87_data *data = it87_update_device(dev); in show_alarms() local
1388 return sprintf(buf, "%u\n", data->alarms); in show_alarms()
1396 struct it87_data *data = it87_update_device(dev); in show_alarm() local
1397 return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); in show_alarm()
1403 struct it87_data *data = dev_get_drvdata(dev); in clear_intrusion() local
1410 mutex_lock(&data->update_lock); in clear_intrusion()
1411 config = it87_read_value(data, IT87_REG_CONFIG); in clear_intrusion()
1416 it87_write_value(data, IT87_REG_CONFIG, config); in clear_intrusion()
1418 data->valid = 0; in clear_intrusion()
1420 mutex_unlock(&data->update_lock); in clear_intrusion()
1449 struct it87_data *data = it87_update_device(dev); in show_beep() local
1450 return sprintf(buf, "%u\n", (data->beeps >> bitnr) & 1); in show_beep()
1456 struct it87_data *data = dev_get_drvdata(dev); in set_beep() local
1463 mutex_lock(&data->update_lock); in set_beep()
1464 data->beeps = it87_read_value(data, IT87_REG_BEEP_ENABLE); in set_beep()
1466 data->beeps |= (1 << bitnr); in set_beep()
1468 data->beeps &= ~(1 << bitnr); in set_beep()
1469 it87_write_value(data, IT87_REG_BEEP_ENABLE, data->beeps); in set_beep()
1470 mutex_unlock(&data->update_lock); in set_beep()
1498 struct it87_data *data = dev_get_drvdata(dev); in show_vrm_reg() local
1499 return sprintf(buf, "%u\n", data->vrm); in show_vrm_reg()
1504 struct it87_data *data = dev_get_drvdata(dev); in store_vrm_reg() local
1510 data->vrm = val; in store_vrm_reg()
1519 struct it87_data *data = it87_update_device(dev); in show_vid_reg() local
1520 return sprintf(buf, "%ld\n", (long) vid_from_reg(data->vid, data->vrm)); in show_vid_reg()
1537 struct it87_data *data = dev_get_drvdata(dev); in show_label() local
1541 if (has_12mv_adc(data) || has_10_9mv_adc(data)) in show_label()
1557 struct it87_data *data = dev_get_drvdata(dev); in show_name() local
1558 return sprintf(buf, "%s\n", data->name); in show_name()
2182 struct it87_data *data = platform_get_drvdata(pdev); in it87_remove_files() local
2196 if (!(data->has_temp & (1 << i))) in it87_remove_files()
2199 if (has_temp_offset(data)) in it87_remove_files()
2207 if (!(data->has_fan & (1 << i))) in it87_remove_files()
2213 if (i < 3 && !has_16bit_fans(data)) in it87_remove_files()
2221 if (has_old_autopwm(data)) in it87_remove_files()
2232 struct it87_data *data; in it87_probe() local
2249 data = devm_kzalloc(&pdev->dev, sizeof(struct it87_data), GFP_KERNEL); in it87_probe()
2250 if (!data) in it87_probe()
2253 data->addr = res->start; in it87_probe()
2254 data->type = sio_data->type; in it87_probe()
2255 data->features = it87_devices[sio_data->type].features; in it87_probe()
2256 data->peci_mask = it87_devices[sio_data->type].peci_mask; in it87_probe()
2257 data->old_peci_mask = it87_devices[sio_data->type].old_peci_mask; in it87_probe()
2258 data->name = it87_devices[sio_data->type].name; in it87_probe()
2264 switch (data->type) { in it87_probe()
2267 data->features &= ~FEAT_OLD_AUTOPWM; in it87_probe()
2268 data->features |= FEAT_FAN16_CONFIG | FEAT_16BIT_FANS; in it87_probe()
2273 data->features &= ~FEAT_OLD_AUTOPWM; in it87_probe()
2274 data->features |= FEAT_FAN16_CONFIG | FEAT_16BIT_FANS | in it87_probe()
2283 if ((it87_read_value(data, IT87_REG_CONFIG) & 0x80) in it87_probe()
2284 || it87_read_value(data, IT87_REG_CHIPID) != 0x90) in it87_probe()
2287 platform_set_drvdata(pdev, data); in it87_probe()
2289 mutex_init(&data->update_lock); in it87_probe()
2295 if (has_12mv_adc(data)) { in it87_probe()
2297 data->in_scaled |= (1 << 3); /* in3 is AVCC */ in it87_probe()
2299 data->in_scaled |= (1 << 7); /* in7 is VSB */ in it87_probe()
2301 data->in_scaled |= (1 << 8); /* in8 is Vbat */ in it87_probe()
2303 data->in_scaled |= (1 << 9); /* in9 is AVCC */ in it87_probe()
2307 data->in_scaled |= (1 << 3); /* in3 is VCC5V */ in it87_probe()
2309 data->in_scaled |= (1 << 7); /* in7 is VCCH5V */ in it87_probe()
2312 data->has_temp = 0x07; in it87_probe()
2315 && !(it87_read_value(data, IT87_REG_TEMP_EXTRA) & 0x80)) in it87_probe()
2316 data->has_temp &= ~(1 << 2); in it87_probe()
2342 if (!(data->has_temp & (1 << i))) in it87_probe()
2347 if (has_temp_offset(data)) { in it87_probe()
2364 if (!(data->has_fan & (1 << i))) in it87_probe()
2370 if (i < 3 && !has_16bit_fans(data)) { in it87_probe()
2408 if (!has_old_autopwm(data)) in it87_probe()
2418 data->vrm = vid_which_vrm(); in it87_probe()
2420 data->vid = sio_data->vid_value; in it87_probe()
2436 data->hwmon_dev = hwmon_device_register(dev); in it87_probe()
2437 if (IS_ERR(data->hwmon_dev)) { in it87_probe()
2438 err = PTR_ERR(data->hwmon_dev); in it87_probe()
2451 struct it87_data *data = platform_get_drvdata(pdev); in it87_remove() local
2453 hwmon_device_unregister(data->hwmon_dev); in it87_remove()
2464 static int it87_read_value(struct it87_data *data, u8 reg) in it87_read_value() argument
2466 outb_p(reg, data->addr + IT87_ADDR_REG_OFFSET); in it87_read_value()
2467 return inb_p(data->addr + IT87_DATA_REG_OFFSET); in it87_read_value()
2475 static void it87_write_value(struct it87_data *data, u8 reg, u8 value) in it87_write_value() argument
2477 outb_p(reg, data->addr + IT87_ADDR_REG_OFFSET); in it87_write_value()
2478 outb_p(value, data->addr + IT87_DATA_REG_OFFSET); in it87_write_value()
2484 struct it87_data *data = dev_get_drvdata(dev); in it87_check_pwm() local
2490 int tmp = it87_read_value(data, IT87_REG_FAN_CTL); in it87_check_pwm()
2502 pwm[i] = it87_read_value(data, in it87_check_pwm()
2514 it87_write_value(data, IT87_REG_FAN_CTL, in it87_check_pwm()
2517 it87_write_value(data, in it87_check_pwm()
2542 struct it87_data *data = platform_get_drvdata(pdev); in it87_init_device() local
2560 data->pwm_temp_map[i] = i; in it87_init_device()
2561 data->pwm_duty[i] = 0x7f; /* Full speed */ in it87_init_device()
2562 data->auto_pwm[i][3] = 0x7f; /* Full speed, hard-coded */ in it87_init_device()
2573 tmp = it87_read_value(data, IT87_REG_VIN_MIN(i)); in it87_init_device()
2575 it87_write_value(data, IT87_REG_VIN_MIN(i), 0); in it87_init_device()
2578 tmp = it87_read_value(data, IT87_REG_TEMP_HIGH(i)); in it87_init_device()
2580 it87_write_value(data, IT87_REG_TEMP_HIGH(i), 127); in it87_init_device()
2591 tmp = it87_read_value(data, IT87_REG_VIN_ENABLE); in it87_init_device()
2594 it87_write_value(data, IT87_REG_VIN_ENABLE, 0xff); in it87_init_device()
2599 data->fan_main_ctrl = it87_read_value(data, IT87_REG_FAN_MAIN_CTRL); in it87_init_device()
2600 if ((data->fan_main_ctrl & mask) == 0) { in it87_init_device()
2602 data->fan_main_ctrl |= mask; in it87_init_device()
2603 it87_write_value(data, IT87_REG_FAN_MAIN_CTRL, in it87_init_device()
2604 data->fan_main_ctrl); in it87_init_device()
2606 data->has_fan = (data->fan_main_ctrl >> 4) & 0x07; in it87_init_device()
2608 tmp = it87_read_value(data, IT87_REG_FAN_16BIT); in it87_init_device()
2611 if (has_fan16_config(data)) { in it87_init_device()
2612 if (~tmp & 0x07 & data->has_fan) { in it87_init_device()
2615 it87_write_value(data, IT87_REG_FAN_16BIT, in it87_init_device()
2621 if (has_five_fans(data)) { in it87_init_device()
2623 data->has_fan |= (1 << 3); /* fan4 enabled */ in it87_init_device()
2625 data->has_fan |= (1 << 4); /* fan5 enabled */ in it87_init_device()
2626 if (has_six_fans(data) && (tmp & (1 << 2))) in it87_init_device()
2627 data->has_fan |= (1 << 5); /* fan6 enabled */ in it87_init_device()
2631 data->has_fan &= ~sio_data->skip_fan; in it87_init_device()
2634 it87_write_value(data, IT87_REG_CONFIG, in it87_init_device()
2635 (it87_read_value(data, IT87_REG_CONFIG) & 0x3e) in it87_init_device()
2639 static void it87_update_pwm_ctrl(struct it87_data *data, int nr) in it87_update_pwm_ctrl() argument
2641 data->pwm_ctrl[nr] = it87_read_value(data, IT87_REG_PWM(nr)); in it87_update_pwm_ctrl()
2642 if (has_newer_autopwm(data)) { in it87_update_pwm_ctrl()
2643 data->pwm_temp_map[nr] = data->pwm_ctrl[nr] & 0x03; in it87_update_pwm_ctrl()
2644 data->pwm_duty[nr] = it87_read_value(data, in it87_update_pwm_ctrl()
2647 if (data->pwm_ctrl[nr] & 0x80) /* Automatic mode */ in it87_update_pwm_ctrl()
2648 data->pwm_temp_map[nr] = data->pwm_ctrl[nr] & 0x03; in it87_update_pwm_ctrl()
2650 data->pwm_duty[nr] = data->pwm_ctrl[nr] & 0x7f; in it87_update_pwm_ctrl()
2653 if (has_old_autopwm(data)) { in it87_update_pwm_ctrl()
2657 data->auto_temp[nr][i] = it87_read_value(data, in it87_update_pwm_ctrl()
2660 data->auto_pwm[nr][i] = it87_read_value(data, in it87_update_pwm_ctrl()
2667 struct it87_data *data = dev_get_drvdata(dev); in it87_update_device() local
2670 mutex_lock(&data->update_lock); in it87_update_device()
2672 if (time_after(jiffies, data->last_updated + HZ + HZ / 2) in it87_update_device()
2673 || !data->valid) { in it87_update_device()
2679 it87_write_value(data, IT87_REG_CONFIG, in it87_update_device()
2680 it87_read_value(data, IT87_REG_CONFIG) | 0x40); in it87_update_device()
2683 data->in[i][0] = in it87_update_device()
2684 it87_read_value(data, IT87_REG_VIN(i)); in it87_update_device()
2685 data->in[i][1] = in it87_update_device()
2686 it87_read_value(data, IT87_REG_VIN_MIN(i)); in it87_update_device()
2687 data->in[i][2] = in it87_update_device()
2688 it87_read_value(data, IT87_REG_VIN_MAX(i)); in it87_update_device()
2691 data->in[8][0] = it87_read_value(data, IT87_REG_VIN(8)); in it87_update_device()
2692 if (data->type == it8603) in it87_update_device()
2693 data->in[9][0] = it87_read_value(data, 0x2f); in it87_update_device()
2697 if (!(data->has_fan & (1 << i))) in it87_update_device()
2700 data->fan[i][1] = in it87_update_device()
2701 it87_read_value(data, IT87_REG_FAN_MIN[i]); in it87_update_device()
2702 data->fan[i][0] = it87_read_value(data, in it87_update_device()
2705 if (has_16bit_fans(data)) { in it87_update_device()
2706 data->fan[i][0] |= it87_read_value(data, in it87_update_device()
2708 data->fan[i][1] |= it87_read_value(data, in it87_update_device()
2713 if (!(data->has_temp & (1 << i))) in it87_update_device()
2715 data->temp[i][0] = in it87_update_device()
2716 it87_read_value(data, IT87_REG_TEMP(i)); in it87_update_device()
2717 data->temp[i][1] = in it87_update_device()
2718 it87_read_value(data, IT87_REG_TEMP_LOW(i)); in it87_update_device()
2719 data->temp[i][2] = in it87_update_device()
2720 it87_read_value(data, IT87_REG_TEMP_HIGH(i)); in it87_update_device()
2721 if (has_temp_offset(data)) in it87_update_device()
2722 data->temp[i][3] = in it87_update_device()
2723 it87_read_value(data, in it87_update_device()
2728 if ((data->has_fan & 0x07) && !has_16bit_fans(data)) { in it87_update_device()
2729 i = it87_read_value(data, IT87_REG_FAN_DIV); in it87_update_device()
2730 data->fan_div[0] = i & 0x07; in it87_update_device()
2731 data->fan_div[1] = (i >> 3) & 0x07; in it87_update_device()
2732 data->fan_div[2] = (i & 0x40) ? 3 : 1; in it87_update_device()
2735 data->alarms = in it87_update_device()
2736 it87_read_value(data, IT87_REG_ALARM1) | in it87_update_device()
2737 (it87_read_value(data, IT87_REG_ALARM2) << 8) | in it87_update_device()
2738 (it87_read_value(data, IT87_REG_ALARM3) << 16); in it87_update_device()
2739 data->beeps = it87_read_value(data, IT87_REG_BEEP_ENABLE); in it87_update_device()
2741 data->fan_main_ctrl = it87_read_value(data, in it87_update_device()
2743 data->fan_ctl = it87_read_value(data, IT87_REG_FAN_CTL); in it87_update_device()
2745 it87_update_pwm_ctrl(data, i); in it87_update_device()
2747 data->sensor = it87_read_value(data, IT87_REG_TEMP_ENABLE); in it87_update_device()
2748 data->extra = it87_read_value(data, IT87_REG_TEMP_EXTRA); in it87_update_device()
2754 if (data->type == it8712 || data->type == it8716) { in it87_update_device()
2755 data->vid = it87_read_value(data, IT87_REG_VID); in it87_update_device()
2760 data->vid &= 0x3f; in it87_update_device()
2762 data->last_updated = jiffies; in it87_update_device()
2763 data->valid = 1; in it87_update_device()
2766 mutex_unlock(&data->update_lock); in it87_update_device()
2768 return data; in it87_update_device()