Lines Matching +full:3 +full:- +full:point

1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Copyright (C) 2007-2011 Hans de Goede <hdegoede@redhat.com> *
16 #include <linux/hwmon-sysfs.h>
26 #define SIO_UNLOCK_KEY 0x87 /* Key to enable Super-I/O */
27 #define SIO_LOCK_KEY 0xAA /* Key to disable Super-I/O */
94 #define F71882FG_REG_POINT_PWM(pwm, point) (0xAA + (point) + (16 * (pwm))) argument
95 #define F71882FG_REG_POINT_TEMP(pwm, point) (0xA6 + (point) + (16 * (pwm))) argument
185 [f71808e] = 3,
187 [f71858fg] = 3,
188 [f71862fg] = 3,
189 [f71868a] = 3,
190 [f71869] = 3,
191 [f71869a] = 3,
193 [f71889fg] = 3,
194 [f71889ed] = 3,
195 [f71889a] = 3,
196 [f8000] = 3, /* +1 fan which is monitor only */
197 [f81768d] = 3,
199 [f81866a] = 3,
223 [f71858fg] = 3,
224 [f71862fg] = 3,
225 [f71868a] = 3,
226 [f71869] = 3,
227 [f71869a] = 3,
228 [f71882fg] = 3,
229 [f71889fg] = 3,
230 [f71889ed] = 3,
231 [f71889a] = 3,
232 [f8000] = 3,
233 [f81768d] = 3,
235 [f81866a] = 3,
267 * Note: all models have max 3 temperature channels, but on some
268 * they are addressed as 0-2 and on others as 1-3, so for coding
292 outb(reg, data->addr + ADDR_REG_OFFSET); in f71882fg_read8()
293 val = inb(data->addr + DATA_REG_OFFSET); in f71882fg_read8()
320 outb(reg, data->addr + ADDR_REG_OFFSET); in f71882fg_write8()
321 outb(val, data->addr + DATA_REG_OFFSET); in f71882fg_write8()
332 if (data->type == f71858fg) in f71882fg_read_temp()
341 int nr_fans = f71882fg_nr_fans[data->type]; in f71882fg_update_device()
342 int nr_temps = f71882fg_nr_temps[data->type]; in f71882fg_update_device()
343 int nr, reg, point; in f71882fg_update_device() local
345 mutex_lock(&data->update_lock); in f71882fg_update_device()
348 if (time_after(jiffies, data->last_limits + 60 * HZ) || in f71882fg_update_device()
349 !data->valid) { in f71882fg_update_device()
350 if (f71882fg_has_in1_alarm[data->type]) { in f71882fg_update_device()
351 if (data->type == f81866a) { in f71882fg_update_device()
352 data->in1_max = in f71882fg_update_device()
355 data->in_beep = in f71882fg_update_device()
359 data->in1_max = in f71882fg_update_device()
362 data->in_beep = in f71882fg_update_device()
369 for (nr = data->temp_start; nr < nr_temps + data->temp_start; in f71882fg_update_device()
371 data->temp_ovt[nr] = f71882fg_read8(data, in f71882fg_update_device()
373 data->temp_high[nr] = f71882fg_read8(data, in f71882fg_update_device()
377 if (data->type != f8000) { in f71882fg_update_device()
378 data->temp_hyst[0] = f71882fg_read8(data, in f71882fg_update_device()
380 data->temp_hyst[1] = f71882fg_read8(data, in f71882fg_update_device()
384 if ((data->type != f71858fg) && (data->type != f8000)) { in f71882fg_update_device()
386 data->temp_type[1] = (reg & 0x02) ? 2 : 4; in f71882fg_update_device()
387 data->temp_type[2] = (reg & 0x04) ? 2 : 4; in f71882fg_update_device()
388 data->temp_type[3] = (reg & 0x08) ? 2 : 4; in f71882fg_update_device()
391 if (f71882fg_fan_has_beep[data->type]) in f71882fg_update_device()
392 data->fan_beep = f71882fg_read8(data, in f71882fg_update_device()
395 if (f71882fg_temp_has_beep[data->type]) in f71882fg_update_device()
396 data->temp_beep = f71882fg_read8(data, in f71882fg_update_device()
399 data->pwm_enable = f71882fg_read8(data, in f71882fg_update_device()
401 data->pwm_auto_point_hyst[0] = in f71882fg_update_device()
403 data->pwm_auto_point_hyst[1] = in f71882fg_update_device()
407 data->pwm_auto_point_mapping[nr] = in f71882fg_update_device()
411 switch (data->type) { in f71882fg_update_device()
413 for (point = 0; point < 5; point++) { in f71882fg_update_device()
414 data->pwm_auto_point_pwm[nr][point] = in f71882fg_update_device()
417 (nr, point)); in f71882fg_update_device()
419 for (point = 0; point < 4; point++) { in f71882fg_update_device()
420 data->pwm_auto_point_temp[nr][point] = in f71882fg_update_device()
423 (nr, point)); in f71882fg_update_device()
428 data->pwm_auto_point_pwm[nr][0] = in f71882fg_update_device()
433 data->pwm_auto_point_pwm[nr][1] = in f71882fg_update_device()
437 data->pwm_auto_point_pwm[nr][4] = in f71882fg_update_device()
441 data->pwm_auto_point_temp[nr][0] = in f71882fg_update_device()
445 data->pwm_auto_point_temp[nr][3] = in f71882fg_update_device()
448 (nr, 3)); in f71882fg_update_device()
452 data->last_limits = jiffies; in f71882fg_update_device()
456 if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { in f71882fg_update_device()
457 data->temp_status = f71882fg_read8(data, in f71882fg_update_device()
459 data->temp_diode_open = f71882fg_read8(data, in f71882fg_update_device()
461 for (nr = data->temp_start; nr < nr_temps + data->temp_start; in f71882fg_update_device()
463 data->temp[nr] = f71882fg_read_temp(data, nr); in f71882fg_update_device()
465 data->fan_status = f71882fg_read8(data, in f71882fg_update_device()
468 data->fan[nr] = f71882fg_read16(data, in f71882fg_update_device()
470 data->fan_target[nr] = in f71882fg_update_device()
472 data->fan_full_speed[nr] = in f71882fg_update_device()
475 data->pwm[nr] = in f71882fg_update_device()
479 if (data->type == f71808a) { in f71882fg_update_device()
480 data->fan[2] = f71882fg_read16(data, in f71882fg_update_device()
482 data->pwm[2] = f71882fg_read8(data, in f71882fg_update_device()
485 if (data->type == f8000) in f71882fg_update_device()
486 data->fan[3] = f71882fg_read16(data, in f71882fg_update_device()
487 F71882FG_REG_FAN(3)); in f71882fg_update_device()
489 if (f71882fg_has_in1_alarm[data->type]) { in f71882fg_update_device()
490 if (data->type == f81866a) in f71882fg_update_device()
491 data->in_status = f71882fg_read8(data, in f71882fg_update_device()
495 data->in_status = f71882fg_read8(data, in f71882fg_update_device()
500 if (f71882fg_has_in[data->type][nr]) in f71882fg_update_device()
501 data->in[nr] = f71882fg_read8(data, in f71882fg_update_device()
504 data->last_updated = jiffies; in f71882fg_update_device()
505 data->valid = true; in f71882fg_update_device()
508 mutex_unlock(&data->update_lock); in f71882fg_update_device()
517 return sprintf(buf, "%s\n", f71882fg_names[data->type]); in name_show()
526 int nr = to_sensor_dev_attr_2(devattr)->index; in show_temp()
529 if (data->type == f71858fg) { in show_temp()
530 /* TEMP_TABLE_SEL 1 or 3 ? */ in show_temp()
531 if (data->temp_config & 1) { in show_temp()
532 sign = data->temp[nr] & 0x0001; in show_temp()
533 temp = (data->temp[nr] >> 5) & 0x7ff; in show_temp()
535 sign = data->temp[nr] & 0x8000; in show_temp()
536 temp = (data->temp[nr] >> 5) & 0x3ff; in show_temp()
540 temp -= 128000; in show_temp()
542 temp = ((s8)data->temp[nr]) * 1000; in show_temp()
552 int nr = to_sensor_dev_attr_2(devattr)->index; in show_temp_max()
554 return sprintf(buf, "%d\n", data->temp_high[nr] * 1000); in show_temp_max()
561 int err, nr = to_sensor_dev_attr_2(devattr)->index; in store_temp_max()
571 mutex_lock(&data->update_lock); in store_temp_max()
573 data->temp_high[nr] = val; in store_temp_max()
574 mutex_unlock(&data->update_lock); in store_temp_max()
583 int nr = to_sensor_dev_attr_2(devattr)->index; in show_temp_max_hyst()
586 mutex_lock(&data->update_lock); in show_temp_max_hyst()
588 temp_max_hyst = data->temp_hyst[nr / 2] >> 4; in show_temp_max_hyst()
590 temp_max_hyst = data->temp_hyst[nr / 2] & 0x0f; in show_temp_max_hyst()
591 temp_max_hyst = (data->temp_high[nr] - temp_max_hyst) * 1000; in show_temp_max_hyst()
592 mutex_unlock(&data->update_lock); in show_temp_max_hyst()
601 int err, nr = to_sensor_dev_attr_2(devattr)->index; in store_temp_max_hyst()
612 mutex_lock(&data->update_lock); in store_temp_max_hyst()
615 data->temp_high[nr] = f71882fg_read8(data, F71882FG_REG_TEMP_HIGH(nr)); in store_temp_max_hyst()
616 val = clamp_val(val, data->temp_high[nr] - 15, data->temp_high[nr]); in store_temp_max_hyst()
617 val = data->temp_high[nr] - val; in store_temp_max_hyst()
626 data->temp_hyst[nr / 2] = reg; in store_temp_max_hyst()
628 mutex_unlock(&data->update_lock); in store_temp_max_hyst()
636 int nr = to_sensor_dev_attr_2(devattr)->index; in show_temp_alarm()
638 if (data->temp_status & (1 << nr)) in show_temp_alarm()
648 int nr = to_sensor_dev_attr_2(devattr)->index; in show_temp_crit()
650 return sprintf(buf, "%d\n", data->temp_ovt[nr] * 1000); in show_temp_crit()
657 int err, nr = to_sensor_dev_attr_2(devattr)->index; in store_temp_crit()
667 mutex_lock(&data->update_lock); in store_temp_crit()
669 data->temp_ovt[nr] = val; in store_temp_crit()
670 mutex_unlock(&data->update_lock); in store_temp_crit()
679 int nr = to_sensor_dev_attr_2(devattr)->index; in show_temp_crit_hyst()
682 mutex_lock(&data->update_lock); in show_temp_crit_hyst()
684 temp_crit_hyst = data->temp_hyst[nr / 2] >> 4; in show_temp_crit_hyst()
686 temp_crit_hyst = data->temp_hyst[nr / 2] & 0x0f; in show_temp_crit_hyst()
687 temp_crit_hyst = (data->temp_ovt[nr] - temp_crit_hyst) * 1000; in show_temp_crit_hyst()
688 mutex_unlock(&data->update_lock); in show_temp_crit_hyst()
697 int nr = to_sensor_dev_attr_2(devattr)->index; in show_temp_fault()
699 if (data->temp_diode_open & (1 << nr)) in show_temp_fault()
752 int nr = to_sensor_dev_attr_2(devattr)->index; in show_temp_type()
754 return sprintf(buf, "%d\n", data->temp_type[nr]); in show_temp_type()
758 static struct sensor_device_attribute_2 fxxxx_temp_attr[3][9] = { {
767 * presence of temp#_alarm files. The same goes for temp2/3 _alarm.
793 SENSOR_ATTR_2(temp3_input, S_IRUGO, show_temp, NULL, 0, 3),
795 store_temp_max, 0, 3),
797 store_temp_max_hyst, 0, 3),
799 SENSOR_ATTR_2(temp3_alarm, S_IRUGO, show_temp_alarm, NULL, 0, 3),
801 store_temp_crit, 0, 3),
803 0, 3),
805 SENSOR_ATTR_2(temp3_type, S_IRUGO, show_temp_type, NULL, 0, 3),
806 SENSOR_ATTR_2(temp3_fault, S_IRUGO, show_temp_fault, NULL, 0, 3),
813 int nr = to_sensor_dev_attr_2(devattr)->index; in show_temp_beep()
815 if (data->temp_beep & (1 << nr)) in show_temp_beep()
825 int err, nr = to_sensor_dev_attr_2(devattr)->index; in store_temp_beep()
832 mutex_lock(&data->update_lock); in store_temp_beep()
833 data->temp_beep = f71882fg_read8(data, F71882FG_REG_TEMP_BEEP); in store_temp_beep()
835 data->temp_beep |= 1 << nr; in store_temp_beep()
837 data->temp_beep &= ~(1 << nr); in store_temp_beep()
839 f71882fg_write8(data, F71882FG_REG_TEMP_BEEP, data->temp_beep); in store_temp_beep()
840 mutex_unlock(&data->update_lock); in store_temp_beep()
846 static struct sensor_device_attribute_2 fxxxx_temp_beep_attr[3][2] = { {
858 store_temp_beep, 0, 3),
863 static struct sensor_device_attribute_2 f81866_temp_beep_attr[3][2] = { {
914 int nr = to_sensor_dev_attr_2(devattr)->index; in show_in()
916 return sprintf(buf, "%d\n", data->in[nr] * 8); in show_in()
924 SENSOR_ATTR_2(in3_input, S_IRUGO, show_in, NULL, 0, 3),
939 return sprintf(buf, "%d\n", data->in1_max * 8); in show_in_max()
956 mutex_lock(&data->update_lock); in store_in_max()
957 if (data->type == f81866a) in store_in_max()
961 data->in1_max = val; in store_in_max()
962 mutex_unlock(&data->update_lock); in store_in_max()
971 int nr = to_sensor_dev_attr_2(devattr)->index; in show_in_beep()
973 if (data->in_beep & (1 << nr)) in show_in_beep()
983 int err, nr = to_sensor_dev_attr_2(devattr)->index; in store_in_beep()
990 mutex_lock(&data->update_lock); in store_in_beep()
991 if (data->type == f81866a) in store_in_beep()
992 data->in_beep = f71882fg_read8(data, F81866_REG_IN_BEEP); in store_in_beep()
994 data->in_beep = f71882fg_read8(data, F71882FG_REG_IN_BEEP); in store_in_beep()
997 data->in_beep |= 1 << nr; in store_in_beep()
999 data->in_beep &= ~(1 << nr); in store_in_beep()
1001 if (data->type == f81866a) in store_in_beep()
1002 f71882fg_write8(data, F81866_REG_IN_BEEP, data->in_beep); in store_in_beep()
1004 f71882fg_write8(data, F71882FG_REG_IN_BEEP, data->in_beep); in store_in_beep()
1005 mutex_unlock(&data->update_lock); in store_in_beep()
1014 int nr = to_sensor_dev_attr_2(devattr)->index; in show_in_alarm()
1016 if (data->in_status & (1 << nr)) in show_in_alarm()
1035 int nr = to_sensor_dev_attr_2(devattr)->index; in show_fan()
1036 int speed = fan_from_reg(data->fan[nr]); in show_fan()
1048 int nr = to_sensor_dev_attr_2(devattr)->index; in show_fan_full_speed()
1049 int speed = fan_from_reg(data->fan_full_speed[nr]); in show_fan_full_speed()
1058 int err, nr = to_sensor_dev_attr_2(devattr)->index; in store_fan_full_speed()
1068 mutex_lock(&data->update_lock); in store_fan_full_speed()
1070 data->fan_full_speed[nr] = val; in store_fan_full_speed()
1071 mutex_unlock(&data->update_lock); in store_fan_full_speed()
1080 int nr = to_sensor_dev_attr_2(devattr)->index; in show_fan_alarm()
1082 if (data->fan_status & (1 << nr)) in show_fan_alarm()
1092 int val, nr = to_sensor_dev_attr_2(devattr)->index; in show_pwm()
1093 mutex_lock(&data->update_lock); in show_pwm()
1094 if (data->pwm_enable & (1 << (2 * nr))) in show_pwm()
1096 val = data->pwm[nr]; in show_pwm()
1099 if (fan_from_reg(data->fan_full_speed[nr])) in show_pwm()
1100 val = 255 * fan_from_reg(data->fan_target[nr]) in show_pwm()
1101 / fan_from_reg(data->fan_full_speed[nr]); in show_pwm()
1105 mutex_unlock(&data->update_lock); in show_pwm()
1114 int err, nr = to_sensor_dev_attr_2(devattr)->index; in store_pwm()
1123 mutex_lock(&data->update_lock); in store_pwm()
1124 data->pwm_enable = f71882fg_read8(data, F71882FG_REG_PWM_ENABLE); in store_pwm()
1125 if ((data->type == f8000 && ((data->pwm_enable >> 2 * nr) & 3) != 2) || in store_pwm()
1126 (data->type != f8000 && !((data->pwm_enable >> 2 * nr) & 2))) { in store_pwm()
1127 count = -EROFS; in store_pwm()
1130 if (data->pwm_enable & (1 << (2 * nr))) { in store_pwm()
1133 data->pwm[nr] = val; in store_pwm()
1141 data->fan_target[nr] = target; in store_pwm()
1142 data->fan_full_speed[nr] = full_speed; in store_pwm()
1145 mutex_unlock(&data->update_lock); in store_pwm()
1155 int nr = to_sensor_dev_attr_2(devattr)->index; in show_pwm_enable()
1157 switch ((data->pwm_enable >> 2 * nr) & 3) { in show_pwm_enable()
1165 case 3: in show_pwm_enable()
1166 if (data->type == f8000) in show_pwm_enable()
1167 result = 3; /* Thermostat mode */ in show_pwm_enable()
1180 int err, nr = to_sensor_dev_attr_2(devattr)->index; in store_pwm_enable()
1187 /* Special case for F8000 pwm channel 3 which only does auto mode */ in store_pwm_enable()
1188 if (data->type == f8000 && nr == 2 && val != 2) in store_pwm_enable()
1189 return -EINVAL; in store_pwm_enable()
1191 mutex_lock(&data->update_lock); in store_pwm_enable()
1192 data->pwm_enable = f71882fg_read8(data, F71882FG_REG_PWM_ENABLE); in store_pwm_enable()
1194 if (data->type == f8000 && ((data->pwm_enable >> 2 * nr) & 1)) { in store_pwm_enable()
1197 data->pwm_enable &= ~(2 << (2 * nr)); in store_pwm_enable()
1199 case 3: in store_pwm_enable()
1200 data->pwm_enable |= 2 << (2 * nr); in store_pwm_enable()
1203 count = -EINVAL; in store_pwm_enable()
1210 if (data->type == f71858fg && in store_pwm_enable()
1211 ((data->pwm_enable >> (2 * nr)) & 1)) { in store_pwm_enable()
1212 count = -EINVAL; in store_pwm_enable()
1215 data->pwm_enable |= 2 << (2 * nr); in store_pwm_enable()
1218 data->pwm_enable &= ~(2 << (2 * nr)); in store_pwm_enable()
1221 count = -EINVAL; in store_pwm_enable()
1225 f71882fg_write8(data, F71882FG_REG_PWM_ENABLE, data->pwm_enable); in store_pwm_enable()
1227 mutex_unlock(&data->update_lock); in store_pwm_enable()
1237 int nr = to_sensor_dev_attr_2(devattr)->index; in show_pwm_interpolate()
1239 result = (data->pwm_auto_point_mapping[nr] >> 4) & 1; in show_pwm_interpolate()
1249 int err, nr = to_sensor_dev_attr_2(devattr)->index; in store_pwm_interpolate()
1256 mutex_lock(&data->update_lock); in store_pwm_interpolate()
1257 data->pwm_auto_point_mapping[nr] = in store_pwm_interpolate()
1260 val = data->pwm_auto_point_mapping[nr] | (1 << 4); in store_pwm_interpolate()
1262 val = data->pwm_auto_point_mapping[nr] & (~(1 << 4)); in store_pwm_interpolate()
1264 data->pwm_auto_point_mapping[nr] = val; in store_pwm_interpolate()
1265 mutex_unlock(&data->update_lock); in store_pwm_interpolate()
1305 SENSOR_ATTR_2(fan4_input, S_IRUGO, show_fan, NULL, 0, 3),
1308 store_fan_full_speed, 0, 3),
1309 SENSOR_ATTR_2(fan4_alarm, S_IRUGO, show_fan_alarm, NULL, 0, 3),
1310 SENSOR_ATTR_2(pwm4, S_IRUGO|S_IWUSR, show_pwm, store_pwm, 0, 3),
1312 store_pwm_enable, 0, 3),
1314 show_pwm_interpolate, store_pwm_interpolate, 0, 3),
1321 int val, nr = to_sensor_dev_attr_2(devattr)->index; in show_simple_pwm()
1323 val = data->pwm[nr]; in show_simple_pwm()
1332 int err, nr = to_sensor_dev_attr_2(devattr)->index; in store_simple_pwm()
1341 mutex_lock(&data->update_lock); in store_simple_pwm()
1343 data->pwm[nr] = val; in store_simple_pwm()
1344 mutex_unlock(&data->update_lock); in store_simple_pwm()
1361 int nr = to_sensor_dev_attr_2(devattr)->index; in show_fan_beep()
1363 if (data->fan_beep & (1 << nr)) in show_fan_beep()
1373 int err, nr = to_sensor_dev_attr_2(devattr)->index; in store_fan_beep()
1380 mutex_lock(&data->update_lock); in store_fan_beep()
1381 data->fan_beep = f71882fg_read8(data, F71882FG_REG_FAN_BEEP); in store_fan_beep()
1383 data->fan_beep |= 1 << nr; in store_fan_beep()
1385 data->fan_beep &= ~(1 << nr); in store_fan_beep()
1387 f71882fg_write8(data, F71882FG_REG_FAN_BEEP, data->fan_beep); in store_fan_beep()
1388 mutex_unlock(&data->update_lock); in store_fan_beep()
1402 store_fan_beep, 0, 3),
1411 int nr = to_sensor_dev_attr_2(devattr)->index; in show_pwm_auto_point_channel()
1413 result = 1 << ((data->pwm_auto_point_mapping[nr] & 3) - in show_pwm_auto_point_channel()
1414 data->temp_start); in show_pwm_auto_point_channel()
1424 int err, nr = to_sensor_dev_attr_2(devattr)->index; in store_pwm_auto_point_channel()
1442 return -EINVAL; in store_pwm_auto_point_channel()
1444 val += data->temp_start; in store_pwm_auto_point_channel()
1445 mutex_lock(&data->update_lock); in store_pwm_auto_point_channel()
1446 data->pwm_auto_point_mapping[nr] = in store_pwm_auto_point_channel()
1448 val = (data->pwm_auto_point_mapping[nr] & 0xfc) | val; in store_pwm_auto_point_channel()
1450 data->pwm_auto_point_mapping[nr] = val; in store_pwm_auto_point_channel()
1451 mutex_unlock(&data->update_lock); in store_pwm_auto_point_channel()
1462 int pwm = to_sensor_dev_attr_2(devattr)->index; in show_pwm_auto_point_pwm()
1463 int point = to_sensor_dev_attr_2(devattr)->nr; in show_pwm_auto_point_pwm() local
1465 mutex_lock(&data->update_lock); in show_pwm_auto_point_pwm()
1466 if (data->pwm_enable & (1 << (2 * pwm))) { in show_pwm_auto_point_pwm()
1468 result = data->pwm_auto_point_pwm[pwm][point]; in show_pwm_auto_point_pwm()
1471 result = 32 * 255 / (32 + data->pwm_auto_point_pwm[pwm][point]); in show_pwm_auto_point_pwm()
1473 mutex_unlock(&data->update_lock); in show_pwm_auto_point_pwm()
1483 int err, pwm = to_sensor_dev_attr_2(devattr)->index; in store_pwm_auto_point_pwm()
1484 int point = to_sensor_dev_attr_2(devattr)->nr; in store_pwm_auto_point_pwm() local
1493 mutex_lock(&data->update_lock); in store_pwm_auto_point_pwm()
1494 data->pwm_enable = f71882fg_read8(data, F71882FG_REG_PWM_ENABLE); in store_pwm_auto_point_pwm()
1495 if (data->pwm_enable & (1 << (2 * pwm))) { in store_pwm_auto_point_pwm()
1502 val = (255 - val) * 32 / val; in store_pwm_auto_point_pwm()
1504 f71882fg_write8(data, F71882FG_REG_POINT_PWM(pwm, point), val); in store_pwm_auto_point_pwm()
1505 data->pwm_auto_point_pwm[pwm][point] = val; in store_pwm_auto_point_pwm()
1506 mutex_unlock(&data->update_lock); in store_pwm_auto_point_pwm()
1517 int pwm = to_sensor_dev_attr_2(devattr)->index; in show_pwm_auto_point_temp()
1518 int point = to_sensor_dev_attr_2(devattr)->nr; in show_pwm_auto_point_temp() local
1520 result = data->pwm_auto_point_temp[pwm][point]; in show_pwm_auto_point_temp()
1529 int err, pwm = to_sensor_dev_attr_2(devattr)->index; in store_pwm_auto_point_temp()
1530 int point = to_sensor_dev_attr_2(devattr)->nr; in store_pwm_auto_point_temp() local
1539 if (data->auto_point_temp_signed) in store_pwm_auto_point_temp()
1540 val = clamp_val(val, -128, 127); in store_pwm_auto_point_temp()
1544 mutex_lock(&data->update_lock); in store_pwm_auto_point_temp()
1545 f71882fg_write8(data, F71882FG_REG_POINT_TEMP(pwm, point), val); in store_pwm_auto_point_temp()
1546 data->pwm_auto_point_temp[pwm][point] = val; in store_pwm_auto_point_temp()
1547 mutex_unlock(&data->update_lock); in store_pwm_auto_point_temp()
1558 int nr = to_sensor_dev_attr_2(devattr)->index; in show_pwm_auto_point_temp_hyst()
1559 int point = to_sensor_dev_attr_2(devattr)->nr; in show_pwm_auto_point_temp_hyst() local
1561 mutex_lock(&data->update_lock); in show_pwm_auto_point_temp_hyst()
1563 result = data->pwm_auto_point_hyst[nr / 2] >> 4; in show_pwm_auto_point_temp_hyst()
1565 result = data->pwm_auto_point_hyst[nr / 2] & 0x0f; in show_pwm_auto_point_temp_hyst()
1566 result = 1000 * (data->pwm_auto_point_temp[nr][point] - result); in show_pwm_auto_point_temp_hyst()
1567 mutex_unlock(&data->update_lock); in show_pwm_auto_point_temp_hyst()
1577 int err, nr = to_sensor_dev_attr_2(devattr)->index; in store_pwm_auto_point_temp_hyst()
1578 int point = to_sensor_dev_attr_2(devattr)->nr; in store_pwm_auto_point_temp_hyst() local
1588 mutex_lock(&data->update_lock); in store_pwm_auto_point_temp_hyst()
1589 data->pwm_auto_point_temp[nr][point] = in store_pwm_auto_point_temp_hyst()
1590 f71882fg_read8(data, F71882FG_REG_POINT_TEMP(nr, point)); in store_pwm_auto_point_temp_hyst()
1591 val = clamp_val(val, data->pwm_auto_point_temp[nr][point] - 15, in store_pwm_auto_point_temp_hyst()
1592 data->pwm_auto_point_temp[nr][point]); in store_pwm_auto_point_temp_hyst()
1593 val = data->pwm_auto_point_temp[nr][point] - val; in store_pwm_auto_point_temp_hyst()
1602 data->pwm_auto_point_hyst[nr / 2] = reg; in store_pwm_auto_point_temp_hyst()
1603 mutex_unlock(&data->update_lock); in store_pwm_auto_point_temp_hyst()
1612 static struct sensor_device_attribute_2 f71862fg_auto_pwm_attr[3][7] = { {
1627 3, 0),
1633 show_pwm_auto_point_temp_hyst, NULL, 3, 0),
1649 3, 1),
1655 show_pwm_auto_point_temp_hyst, NULL, 3, 1),
1671 3, 2),
1677 show_pwm_auto_point_temp_hyst, NULL, 3, 2),
1685 static struct sensor_device_attribute_2 f71869_auto_pwm_attr[3][8] = { {
1703 3, 0),
1709 show_pwm_auto_point_temp_hyst, NULL, 3, 0),
1728 3, 1),
1734 show_pwm_auto_point_temp_hyst, NULL, 3, 1),
1753 3, 2),
1759 show_pwm_auto_point_temp_hyst, NULL, 3, 2),
1778 3, 0),
1793 3, 0),
1803 show_pwm_auto_point_temp_hyst, NULL, 3, 0),
1819 3, 1),
1834 3, 1),
1844 show_pwm_auto_point_temp_hyst, NULL, 3, 1),
1860 3, 2),
1875 3, 2),
1885 show_pwm_auto_point_temp_hyst, NULL, 3, 2),
1889 store_pwm_auto_point_channel, 0, 3),
1892 0, 3),
1895 1, 3),
1898 2, 3),
1901 3, 3),
1904 4, 3),
1907 0, 3),
1910 1, 3),
1913 2, 3),
1916 3, 3),
1920 0, 3),
1922 show_pwm_auto_point_temp_hyst, NULL, 1, 3),
1924 show_pwm_auto_point_temp_hyst, NULL, 2, 3),
1926 show_pwm_auto_point_temp_hyst, NULL, 3, 3),
1931 SENSOR_ATTR_2(fan4_input, S_IRUGO, show_fan, NULL, 0, 3),
1939 static struct sensor_device_attribute_2 f8000_auto_pwm_attr[3][14] = { {
1954 3, 2),
1969 3, 2),
1979 show_pwm_auto_point_temp_hyst, NULL, 3, 2),
1995 3, 0),
2010 3, 0),
2020 show_pwm_auto_point_temp_hyst, NULL, 3, 0),
2036 3, 1),
2051 3, 1),
2061 show_pwm_auto_point_temp_hyst, NULL, 3, 1),
2084 return -EBUSY; in superio_enter()
2112 err = device_create_file(&pdev->dev, &attr[i].dev_attr); in f71882fg_create_sysfs_files()
2125 device_remove_file(&pdev->dev, &attr[i].dev_attr); in f71882fg_remove_sysfs_files()
2136 switch (data->type) { in f71882fg_create_fan_sysfs_files()
2138 if (((data->pwm_enable >> (idx * 2)) & 3) == 3) in f71882fg_create_fan_sysfs_files()
2142 if (((data->pwm_enable >> (idx * 2)) & 1) != 1) in f71882fg_create_fan_sysfs_files()
2147 err = data->pwm_enable & 0x20; in f71882fg_create_fan_sysfs_files()
2153 dev_err(&pdev->dev, in f71882fg_create_fan_sysfs_files()
2156 (data->pwm_enable >> (idx * 2)) & 3, idx + 1); in f71882fg_create_fan_sysfs_files()
2165 if (f71882fg_fan_has_beep[data->type]) { in f71882fg_create_fan_sysfs_files()
2173 dev_info(&pdev->dev, "Fan: %d is in %s mode\n", idx + 1, in f71882fg_create_fan_sysfs_files()
2174 (data->pwm_enable & (1 << (2 * idx))) ? "duty-cycle" : "RPM"); in f71882fg_create_fan_sysfs_files()
2177 switch (data->type) { in f71882fg_create_fan_sysfs_files()
2185 data->pwm_auto_point_mapping[idx] = in f71882fg_create_fan_sysfs_files()
2187 if ((data->pwm_auto_point_mapping[idx] & 0x80) || in f71882fg_create_fan_sysfs_files()
2188 (data->pwm_auto_point_mapping[idx] & 3) == 0) { in f71882fg_create_fan_sysfs_files()
2189 dev_warn(&pdev->dev, in f71882fg_create_fan_sysfs_files()
2200 switch (data->type) { in f71882fg_create_fan_sysfs_files()
2229 int nr_fans = f71882fg_nr_fans[data->type]; in f71882fg_remove()
2230 int nr_temps = f71882fg_nr_temps[data->type]; in f71882fg_remove()
2234 if (data->hwmon_dev) in f71882fg_remove()
2235 hwmon_device_unregister(data->hwmon_dev); in f71882fg_remove()
2237 device_remove_file(&pdev->dev, &dev_attr_name); in f71882fg_remove()
2240 switch (data->type) { in f71882fg_remove()
2242 if (data->temp_config & 0x10) in f71882fg_remove()
2266 if (f71882fg_temp_has_beep[data->type]) { in f71882fg_remove()
2267 if (data->type == f81866a) in f71882fg_remove()
2280 if (f71882fg_has_in[data->type][i]) { in f71882fg_remove()
2281 device_remove_file(&pdev->dev, in f71882fg_remove()
2285 if (f71882fg_has_in1_alarm[data->type]) { in f71882fg_remove()
2296 if (f71882fg_fan_has_beep[data->type]) { in f71882fg_remove()
2301 switch (data->type) { in f71882fg_remove()
2342 struct f71882fg_sio_data *sio_data = dev_get_platdata(&pdev->dev); in f71882fg_probe()
2343 int nr_fans = f71882fg_nr_fans[sio_data->type]; in f71882fg_probe()
2344 int nr_temps = f71882fg_nr_temps[sio_data->type]; in f71882fg_probe()
2349 data = devm_kzalloc(&pdev->dev, sizeof(struct f71882fg_data), in f71882fg_probe()
2352 return -ENOMEM; in f71882fg_probe()
2354 data->addr = platform_get_resource(pdev, IORESOURCE_IO, 0)->start; in f71882fg_probe()
2355 data->type = sio_data->type; in f71882fg_probe()
2356 data->temp_start = in f71882fg_probe()
2357 (data->type == f71858fg || data->type == f8000 || in f71882fg_probe()
2358 data->type == f81866a) ? 0 : 1; in f71882fg_probe()
2359 mutex_init(&data->update_lock); in f71882fg_probe()
2364 dev_warn(&pdev->dev, "Hardware monitor is powered down\n"); in f71882fg_probe()
2365 return -ENODEV; in f71882fg_probe()
2368 dev_warn(&pdev->dev, "Hardware monitoring not activated\n"); in f71882fg_probe()
2369 return -ENODEV; in f71882fg_probe()
2373 err = device_create_file(&pdev->dev, &dev_attr_name); in f71882fg_probe()
2378 switch (data->type) { in f71882fg_probe()
2380 data->temp_config = in f71882fg_probe()
2382 if (data->temp_config & 0x10) in f71882fg_probe()
2413 if (f71882fg_temp_has_beep[data->type]) { in f71882fg_probe()
2414 if (data->type == f81866a) { in f71882fg_probe()
2431 if (f71882fg_has_in[data->type][i]) { in f71882fg_probe()
2432 err = device_create_file(&pdev->dev, in f71882fg_probe()
2438 if (f71882fg_has_in1_alarm[data->type]) { in f71882fg_probe()
2448 switch (data->type) { in f71882fg_probe()
2453 /* These always have signed auto point temps */ in f71882fg_probe()
2454 data->auto_point_temp_signed = 1; in f71882fg_probe()
2461 data->auto_point_temp_signed = 1; in f71882fg_probe()
2462 /* Ensure banked pwm registers point to right bank */ in f71882fg_probe()
2470 data->pwm_enable = in f71882fg_probe()
2480 switch (data->type) { in f71882fg_probe()
2498 data->hwmon_dev = hwmon_device_register(&pdev->dev); in f71882fg_probe()
2499 if (IS_ERR(data->hwmon_dev)) { in f71882fg_probe()
2500 err = PTR_ERR(data->hwmon_dev); in f71882fg_probe()
2501 data->hwmon_dev = NULL; in f71882fg_probe()
2523 err = -ENODEV; in f71882fg_find()
2530 sio_data->type = f71808e; in f71882fg_find()
2533 sio_data->type = f71808a; in f71882fg_find()
2537 sio_data->type = f71858fg; in f71882fg_find()
2540 sio_data->type = f71862fg; in f71882fg_find()
2543 sio_data->type = f71868a; in f71882fg_find()
2546 sio_data->type = f71869; in f71882fg_find()
2549 sio_data->type = f71869a; in f71882fg_find()
2552 sio_data->type = f71882fg; in f71882fg_find()
2555 sio_data->type = f71889fg; in f71882fg_find()
2558 sio_data->type = f71889ed; in f71882fg_find()
2561 sio_data->type = f71889a; in f71882fg_find()
2564 sio_data->type = f8000; in f71882fg_find()
2567 sio_data->type = f81768d; in f71882fg_find()
2570 sio_data->type = f81865f; in f71882fg_find()
2574 sio_data->type = f81866a; in f71882fg_find()
2579 err = -ENODEV; in f71882fg_find()
2583 if (sio_data->type == f71858fg) in f71882fg_find()
2590 err = -ENODEV; in f71882fg_find()
2597 err = -ENODEV; in f71882fg_find()
2600 address &= ~(REGION_LENGTH - 1); /* Ignore 3 LSB */ in f71882fg_find()
2604 f71882fg_names[sio_data->type], (unsigned int)address, in f71882fg_find()
2616 .end = address + REGION_LENGTH - 1, in f71882fg_device_add()
2623 return -ENOMEM; in f71882fg_device_add()
2625 res.name = f71882fg_pdev->name; in f71882fg_device_add()