Lines Matching +full:fan +full:- +full:stop +full:- +full:to +full:- +full:start +full:- +full:us

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * nct6775 - Platform driver for the hardware monitoring
4 * functionality of Nuvoton NCT677x Super-I/O chips
6 * Copyright (C) 2012 Guenter Roeck <linux@roeck-us.net>
13 #include <linux/hwmon-sysfs.h>
14 #include <linux/hwmon-vid.h>
38 [nct6799] = "NCT6796D-S/NCT6799D-R",
47 MODULE_PARM_DESC(fan_debounce, "Enable debouncing for fan RPM signal");
64 * Super-I/O constants and functions
124 * access to only one SuperIO chip at 0x0290.
151 return -EIO; in nct6775_asuswmi_evaluate_method()
158 return -EOPNOTSUPP; in nct6775_asuswmi_evaluate_method()
182 nct6775_asuswmi_evaluate_method(ASUSWMI_METHODID_RSIO, sio_data->ld, in superio_wmi_inb()
189 nct6775_asuswmi_evaluate_method(ASUSWMI_METHODID_WSIO, sio_data->ld, in superio_wmi_outb()
195 sio_data->ld = ld; in superio_wmi_select()
209 int ioreg = sio_data->sioreg; in superio_outb()
217 int ioreg = sio_data->sioreg; in superio_inb()
225 int ioreg = sio_data->sioreg; in superio_select()
233 int ioreg = sio_data->sioreg; in superio_enter()
236 * Try to reserve <ioreg> and <ioreg + 1> for exclusive access. in superio_enter()
239 return -EBUSY; in superio_enter()
249 int ioreg = sio_data->sioreg; in superio_exit()
261 data->bank = bank; in nct6775_wmi_set_bank()
273 err = nct6775_asuswmi_read(data->bank, reg & 0xff, &tmp); in nct6775_wmi_reg_read()
279 err = nct6775_asuswmi_read(data->bank, (reg & 0xff) + 1, &tmp); in nct6775_wmi_reg_read()
297 res = nct6775_asuswmi_write(data->bank, reg & 0xff, value >> 8); in nct6775_wmi_reg_write()
301 res = nct6775_asuswmi_write(data->bank, (reg & 0xff) + 1, value); in nct6775_wmi_reg_write()
303 res = nct6775_asuswmi_write(data->bank, reg & 0xff, value); in nct6775_wmi_reg_write()
310 * On older chips, only registers 0x50-0x5f are banked.
313 * Cache the bank number so it only needs to be set if it changes.
319 if (data->bank != bank) { in nct6775_set_bank()
320 outb_p(NCT6775_REG_BANK, data->addr + ADDR_REG_OFFSET); in nct6775_set_bank()
321 outb_p(bank, data->addr + DATA_REG_OFFSET); in nct6775_set_bank()
322 data->bank = bank; in nct6775_set_bank()
332 outb_p(reg & 0xff, data->addr + ADDR_REG_OFFSET); in nct6775_reg_read()
333 *val = inb_p(data->addr + DATA_REG_OFFSET); in nct6775_reg_read()
336 data->addr + ADDR_REG_OFFSET); in nct6775_reg_read()
337 *val = (*val << 8) + inb_p(data->addr + DATA_REG_OFFSET); in nct6775_reg_read()
348 outb_p(reg & 0xff, data->addr + ADDR_REG_OFFSET); in nct6775_reg_write()
350 outb_p(value >> 8, data->addr + DATA_REG_OFFSET); in nct6775_reg_write()
352 data->addr + ADDR_REG_OFFSET); in nct6775_reg_write()
354 outb_p(value & 0xff, data->addr + DATA_REG_OFFSET); in nct6775_reg_write()
362 val = sio_data->sio_inb(sio_data, NCT6791_REG_HM_IO_SPACE_LOCK_ENABLE); in nct6791_enable_io_mapping()
365 sio_data->sio_outb(sio_data, NCT6791_REG_HM_IO_SPACE_LOCK_ENABLE, in nct6791_enable_io_mapping()
379 mutex_lock(&data->update_lock); in nct6775_suspend()
380 err = nct6775_read_value(data, data->REG_VBAT, &tmp); in nct6775_suspend()
383 data->vbat = tmp; in nct6775_suspend()
384 if (data->kind == nct6775) { in nct6775_suspend()
388 data->fandiv1 = tmp; in nct6775_suspend()
393 data->fandiv2 = tmp; in nct6775_suspend()
396 mutex_unlock(&data->update_lock); in nct6775_suspend()
408 mutex_lock(&data->update_lock); in nct6775_resume()
409 data->bank = 0xff; /* Force initial bank selection */ in nct6775_resume()
411 err = sio_data->sio_enter(sio_data); in nct6775_resume()
415 sio_data->sio_select(sio_data, NCT6775_LD_HWM); in nct6775_resume()
416 reg = sio_data->sio_inb(sio_data, SIO_REG_ENABLE); in nct6775_resume()
417 if (reg != data->sio_reg_enable) in nct6775_resume()
418 sio_data->sio_outb(sio_data, SIO_REG_ENABLE, data->sio_reg_enable); in nct6775_resume()
420 if (data->kind == nct6791 || data->kind == nct6792 || in nct6775_resume()
421 data->kind == nct6793 || data->kind == nct6795 || in nct6775_resume()
422 data->kind == nct6796 || data->kind == nct6797 || in nct6775_resume()
423 data->kind == nct6798 || data->kind == nct6799) in nct6775_resume()
426 sio_data->sio_exit(sio_data); in nct6775_resume()
429 for (i = 0; i < data->in_num; i++) { in nct6775_resume()
430 if (!(data->have_in & BIT(i))) in nct6775_resume()
433 err = nct6775_write_value(data, data->REG_IN_MINMAX[0][i], data->in[i][1]); in nct6775_resume()
436 err = nct6775_write_value(data, data->REG_IN_MINMAX[1][i], data->in[i][2]); in nct6775_resume()
441 for (i = 0; i < ARRAY_SIZE(data->fan_min); i++) { in nct6775_resume()
442 if (!(data->has_fan_min & BIT(i))) in nct6775_resume()
445 err = nct6775_write_value(data, data->REG_FAN_MIN[i], data->fan_min[i]); in nct6775_resume()
451 if (!(data->have_temp & BIT(i))) in nct6775_resume()
454 for (j = 1; j < ARRAY_SIZE(data->reg_temp); j++) in nct6775_resume()
455 if (data->reg_temp[j][i]) { in nct6775_resume()
456 err = nct6775_write_temp(data, data->reg_temp[j][i], in nct6775_resume()
457 data->temp[j][i]); in nct6775_resume()
464 err = nct6775_write_value(data, data->REG_VBAT, data->vbat); in nct6775_resume()
467 if (data->kind == nct6775) { in nct6775_resume()
468 err = nct6775_write_value(data, NCT6775_REG_FANDIV1, data->fandiv1); in nct6775_resume()
471 err = nct6775_write_value(data, NCT6775_REG_FANDIV2, data->fandiv2); in nct6775_resume()
475 /* Force re-reading all values */ in nct6775_resume()
476 data->valid = false; in nct6775_resume()
477 mutex_unlock(&data->update_lock); in nct6775_resume()
493 sio_data->sio_select(sio_data, NCT6775_LD_HWM); in nct6775_check_fan_inputs()
494 data->sio_reg_enable = sio_data->sio_inb(sio_data, SIO_REG_ENABLE); in nct6775_check_fan_inputs()
497 if (data->kind == nct6775) { in nct6775_check_fan_inputs()
498 int cr2c = sio_data->sio_inb(sio_data, 0x2c); in nct6775_check_fan_inputs()
504 fan4pin = !(sio_data->sio_inb(sio_data, 0x2A) & 0x80); in nct6775_check_fan_inputs()
505 } else if (data->kind == nct6776) { in nct6775_check_fan_inputs()
506 bool gpok = sio_data->sio_inb(sio_data, 0x27) & 0x80; in nct6775_check_fan_inputs()
515 * Auxiliary fan monitoring is not enabled on ASRock in nct6775_check_fan_inputs()
516 * Z77 Pro4-M if booted in UEFI Ultra-FastBoot mode. in nct6775_check_fan_inputs()
519 if (!strcmp(board_name, "Z77 Pro4-M")) { in nct6775_check_fan_inputs()
520 if ((data->sio_reg_enable & 0xe0) != 0xe0) { in nct6775_check_fan_inputs()
521 data->sio_reg_enable |= 0xe0; in nct6775_check_fan_inputs()
522 sio_data->sio_outb(sio_data, SIO_REG_ENABLE, in nct6775_check_fan_inputs()
523 data->sio_reg_enable); in nct6775_check_fan_inputs()
528 if (data->sio_reg_enable & 0x80) in nct6775_check_fan_inputs()
531 fan3pin = !(sio_data->sio_inb(sio_data, 0x24) & 0x40); in nct6775_check_fan_inputs()
533 if (data->sio_reg_enable & 0x40) in nct6775_check_fan_inputs()
536 fan4pin = sio_data->sio_inb(sio_data, 0x1C) & 0x01; in nct6775_check_fan_inputs()
538 if (data->sio_reg_enable & 0x20) in nct6775_check_fan_inputs()
541 fan5pin = sio_data->sio_inb(sio_data, 0x1C) & 0x02; in nct6775_check_fan_inputs()
545 } else if (data->kind == nct6106) { in nct6775_check_fan_inputs()
546 int cr24 = sio_data->sio_inb(sio_data, 0x24); in nct6775_check_fan_inputs()
550 } else if (data->kind == nct6116) { in nct6775_check_fan_inputs()
551 int cr1a = sio_data->sio_inb(sio_data, 0x1a); in nct6775_check_fan_inputs()
552 int cr1b = sio_data->sio_inb(sio_data, 0x1b); in nct6775_check_fan_inputs()
553 int cr24 = sio_data->sio_inb(sio_data, 0x24); in nct6775_check_fan_inputs()
554 int cr2a = sio_data->sio_inb(sio_data, 0x2a); in nct6775_check_fan_inputs()
555 int cr2b = sio_data->sio_inb(sio_data, 0x2b); in nct6775_check_fan_inputs()
556 int cr2f = sio_data->sio_inb(sio_data, 0x2f); in nct6775_check_fan_inputs()
572 int cr1a = sio_data->sio_inb(sio_data, 0x1a); in nct6775_check_fan_inputs()
573 int cr1b = sio_data->sio_inb(sio_data, 0x1b); in nct6775_check_fan_inputs()
574 int cr1c = sio_data->sio_inb(sio_data, 0x1c); in nct6775_check_fan_inputs()
575 int cr1d = sio_data->sio_inb(sio_data, 0x1d); in nct6775_check_fan_inputs()
576 int cr2a = sio_data->sio_inb(sio_data, 0x2a); in nct6775_check_fan_inputs()
577 int cr2b = sio_data->sio_inb(sio_data, 0x2b); in nct6775_check_fan_inputs()
578 int cr2d = sio_data->sio_inb(sio_data, 0x2d); in nct6775_check_fan_inputs()
579 int cr2f = sio_data->sio_inb(sio_data, 0x2f); in nct6775_check_fan_inputs()
589 cre6 = sio_data->sio_inb(sio_data, 0xe6); in nct6775_check_fan_inputs()
591 sio_data->sio_select(sio_data, NCT6775_LD_12); in nct6775_check_fan_inputs()
592 cre0 = sio_data->sio_inb(sio_data, 0xe0); in nct6775_check_fan_inputs()
593 creb = sio_data->sio_inb(sio_data, 0xeb); in nct6775_check_fan_inputs()
594 cred = sio_data->sio_inb(sio_data, 0xed); in nct6775_check_fan_inputs()
604 switch (data->kind) { in nct6775_check_fan_inputs()
724 /* fan 1 and 2 (0x03) are always present */ in nct6775_check_fan_inputs()
725 data->has_fan = 0x03 | (fan3pin << 2) | (fan4pin << 3) | in nct6775_check_fan_inputs()
727 data->has_fan_min = 0x03 | (fan3pin << 2) | (fan4min << 3) | in nct6775_check_fan_inputs()
729 data->has_pwm = 0x03 | (pwm3pin << 2) | (pwm4pin << 3) | in nct6775_check_fan_inputs()
738 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm)); in cpu0_vid_show()
753 struct nct6775_sio_data *sio_data = data->driver_data; in clear_caseopen()
754 int nr = to_sensor_dev_attr(attr)->index - INTRUSION_ALARM_BASE; in clear_caseopen()
760 return -EINVAL; in clear_caseopen()
762 mutex_lock(&data->update_lock); in clear_caseopen()
765 * Use CR registers to clear caseopen status. in clear_caseopen()
769 ret = sio_data->sio_enter(sio_data); in clear_caseopen()
775 sio_data->sio_select(sio_data, NCT6775_LD_ACPI); in clear_caseopen()
776 reg = sio_data->sio_inb(sio_data, NCT6775_REG_CR_CASEOPEN_CLR[nr]); in clear_caseopen()
778 sio_data->sio_outb(sio_data, NCT6775_REG_CR_CASEOPEN_CLR[nr], reg); in clear_caseopen()
780 sio_data->sio_outb(sio_data, NCT6775_REG_CR_CASEOPEN_CLR[nr], reg); in clear_caseopen()
781 sio_data->sio_exit(sio_data); in clear_caseopen()
783 data->valid = false; /* Force cache refresh */ in clear_caseopen()
785 mutex_unlock(&data->update_lock); in clear_caseopen()
806 if (index == 0 && !data->have_vid) in nct6775_other_is_visible()
810 if (data->ALARM_BITS[INTRUSION_ALARM_BASE + index - 1] < 0) in nct6775_other_is_visible()
815 if (data->BEEP_BITS[INTRUSION_ALARM_BASE + index - 3] < 0) in nct6775_other_is_visible()
824 * to determine if attributes should be created or not.
847 struct nct6775_sio_data *sio_data = data->driver_data; in nct6775_platform_probe_init()
849 err = sio_data->sio_enter(sio_data); in nct6775_platform_probe_init()
853 cr2a = sio_data->sio_inb(sio_data, 0x2a); in nct6775_platform_probe_init()
854 switch (data->kind) { in nct6775_platform_probe_init()
856 data->have_vid = (cr2a & 0x40); in nct6775_platform_probe_init()
859 data->have_vid = (cr2a & 0x60) == 0x40; in nct6775_platform_probe_init()
879 if (data->have_vid) { in nct6775_platform_probe_init()
880 sio_data->sio_select(sio_data, NCT6775_LD_VID); in nct6775_platform_probe_init()
881 data->vid = sio_data->sio_inb(sio_data, 0xe3); in nct6775_platform_probe_init()
882 data->vrm = vid_which_vrm(); in nct6775_platform_probe_init()
888 sio_data->sio_select(sio_data, NCT6775_LD_HWM); in nct6775_platform_probe_init()
889 tmp = sio_data->sio_inb(sio_data, in nct6775_platform_probe_init()
891 switch (data->kind) { in nct6775_platform_probe_init()
914 sio_data->sio_outb(sio_data, NCT6775_REG_CR_FAN_DEBOUNCE, in nct6775_platform_probe_init()
916 pr_info("Enabled fan debounce for chip %s\n", data->name); in nct6775_platform_probe_init()
921 sio_data->sio_exit(sio_data); in nct6775_platform_probe_init()
942 struct device *dev = &pdev->dev; in nct6775_platform_probe()
948 if (sio_data->access == access_direct) { in nct6775_platform_probe()
950 if (!devm_request_region(&pdev->dev, res->start, IOREGION_LENGTH, DRVNAME)) in nct6775_platform_probe()
951 return -EBUSY; in nct6775_platform_probe()
954 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); in nct6775_platform_probe()
956 return -ENOMEM; in nct6775_platform_probe()
958 data->kind = sio_data->kind; in nct6775_platform_probe()
959 data->sioreg = sio_data->sioreg; in nct6775_platform_probe()
961 if (sio_data->access == access_direct) { in nct6775_platform_probe()
962 data->addr = res->start; in nct6775_platform_probe()
970 data->driver_data = sio_data; in nct6775_platform_probe()
971 data->driver_init = nct6775_platform_probe_init; in nct6775_platform_probe()
973 return nct6775_probe(&pdev->dev, data, regmapcfg); in nct6775_platform_probe()
984 /* nct6775_find() looks for a '627 in the Super-I/O config space */
991 sio_data->access = access_direct; in nct6775_find()
992 sio_data->sioreg = sioaddr; in nct6775_find()
994 err = sio_data->sio_enter(sio_data); in nct6775_find()
998 val = (sio_data->sio_inb(sio_data, SIO_REG_DEVID) << 8) | in nct6775_find()
999 sio_data->sio_inb(sio_data, SIO_REG_DEVID + 1); in nct6775_find()
1005 sio_data->kind = nct6106; in nct6775_find()
1008 sio_data->kind = nct6116; in nct6775_find()
1011 sio_data->kind = nct6775; in nct6775_find()
1014 sio_data->kind = nct6776; in nct6775_find()
1017 sio_data->kind = nct6779; in nct6775_find()
1020 sio_data->kind = nct6791; in nct6775_find()
1023 sio_data->kind = nct6792; in nct6775_find()
1026 sio_data->kind = nct6793; in nct6775_find()
1029 sio_data->kind = nct6795; in nct6775_find()
1032 sio_data->kind = nct6796; in nct6775_find()
1035 sio_data->kind = nct6797; in nct6775_find()
1038 sio_data->kind = nct6798; in nct6775_find()
1041 sio_data->kind = nct6799; in nct6775_find()
1046 sio_data->sio_exit(sio_data); in nct6775_find()
1047 return -ENODEV; in nct6775_find()
1051 sio_data->sio_select(sio_data, NCT6775_LD_HWM); in nct6775_find()
1052 val = (sio_data->sio_inb(sio_data, SIO_REG_ADDR) << 8) in nct6775_find()
1053 | sio_data->sio_inb(sio_data, SIO_REG_ADDR + 1); in nct6775_find()
1056 pr_err("Refusing to enable a Super-I/O device with a base I/O port 0\n"); in nct6775_find()
1057 sio_data->sio_exit(sio_data); in nct6775_find()
1058 return -ENODEV; in nct6775_find()
1062 val = sio_data->sio_inb(sio_data, SIO_REG_ENABLE); in nct6775_find()
1064 pr_warn("Forcibly enabling Super-I/O. Sensor is probably unusable.\n"); in nct6775_find()
1065 sio_data->sio_outb(sio_data, SIO_REG_ENABLE, val | 0x01); in nct6775_find()
1068 if (sio_data->kind == nct6791 || sio_data->kind == nct6792 || in nct6775_find()
1069 sio_data->kind == nct6793 || sio_data->kind == nct6795 || in nct6775_find()
1070 sio_data->kind == nct6796 || sio_data->kind == nct6797 || in nct6775_find()
1071 sio_data->kind == nct6798 || sio_data->kind == nct6799) in nct6775_find()
1074 sio_data->sio_exit(sio_data); in nct6775_find()
1076 nct6775_sio_names[sio_data->kind], sioaddr, addr); in nct6775_find()
1082 * when Super-I/O functions move to a separate file, the Super-I/O
1090 "B360M-BASALT",
1091 "B360M-D3H",
1092 "EX-B360M-V",
1093 "EX-B360M-V3",
1094 "EX-B360M-V5",
1095 "EX-B460M-V5",
1096 "EX-H410M-V3",
1097 "PRIME A520M-A",
1098 "PRIME A520M-A II",
1099 "PRIME A520M-E",
1100 "PRIME A520M-K",
1101 "PRIME B360-PLUS",
1102 "PRIME B360M-A",
1103 "PRIME B360M-C",
1104 "PRIME B360M-D",
1105 "PRIME B360M-K",
1106 "PRIME B460-PLUS",
1107 "PRIME B460I-PLUS",
1108 "PRIME B460M-A",
1109 "PRIME B460M-A R2.0",
1110 "PRIME B460M-K",
1111 "PRIME B550-PLUS",
1112 "PRIME B550-PLUS AC-HES",
1113 "PRIME B550M-A",
1114 "PRIME B550M-A (WI-FI)",
1115 "PRIME B550M-A AC",
1116 "PRIME B550M-A WIFI II",
1117 "PRIME B550M-K",
1118 "PRIME H310-PLUS",
1119 "PRIME H310I-PLUS",
1120 "PRIME H310M-A",
1121 "PRIME H310M-C",
1122 "PRIME H310M-D",
1123 "PRIME H310M-DASH",
1124 "PRIME H310M-E",
1125 "PRIME H310M-E/BR",
1126 "PRIME H310M-F",
1127 "PRIME H310M-K",
1129 "PRIME H370-A",
1130 "PRIME H370-PLUS",
1131 "PRIME H370M-PLUS",
1132 "PRIME H410I-PLUS",
1133 "PRIME H410M-A",
1134 "PRIME H410M-D",
1135 "PRIME H410M-E",
1136 "PRIME H410M-F",
1137 "PRIME H410M-K",
1138 "PRIME H410M-K R2.0",
1139 "PRIME H410M-R",
1140 "PRIME H470-PLUS",
1141 "PRIME H470M-PLUS",
1142 "PRIME H510M-K R2.0",
1143 "PRIME Q370M-C",
1144 "PRIME X570-P",
1145 "PRIME X570-PRO",
1146 "PRIME Z390-A",
1147 "PRIME Z390-A/H10",
1148 "PRIME Z390-P",
1149 "PRIME Z390M-PLUS",
1150 "PRIME Z490-A",
1151 "PRIME Z490-P",
1152 "PRIME Z490-V",
1153 "PRIME Z490M-PLUS",
1154 "PRO B460M-C",
1155 "PRO H410M-C",
1157 "PRO Q470M-C",
1158 "Pro A520M-C",
1159 "Pro A520M-C II",
1160 "Pro B550M-C",
1161 "Pro WS X570-ACE",
1162 "ProArt B550-CREATOR",
1163 "ProArt X570-CREATOR WIFI",
1164 "ProArt Z490-CREATOR 10G",
1169 "ROG CROSSHAIR VIII HERO (WI-FI)",
1177 "ROG MAXIMUS XI HERO (WI-FI)",
1181 "ROG MAXIMUS XII HERO (WI-FI)",
1182 "ROG STRIX B360-F GAMING",
1183 "ROG STRIX B360-G GAMING",
1184 "ROG STRIX B360-H GAMING",
1185 "ROG STRIX B360-H GAMING/OPTANE",
1186 "ROG STRIX B360-I GAMING",
1187 "ROG STRIX B460-F GAMING",
1188 "ROG STRIX B460-G GAMING",
1189 "ROG STRIX B460-H GAMING",
1190 "ROG STRIX B460-I GAMING",
1191 "ROG STRIX B550-A GAMING",
1192 "ROG STRIX B550-E GAMING",
1193 "ROG STRIX B550-F GAMING",
1194 "ROG STRIX B550-F GAMING (WI-FI)",
1195 "ROG STRIX B550-F GAMING WIFI II",
1196 "ROG STRIX B550-I GAMING",
1197 "ROG STRIX B550-XE GAMING WIFI",
1198 "ROG STRIX H370-F GAMING",
1199 "ROG STRIX H370-I GAMING",
1200 "ROG STRIX H470-I GAMING",
1201 "ROG STRIX X570-E GAMING",
1202 "ROG STRIX X570-E GAMING WIFI II",
1203 "ROG STRIX X570-F GAMING",
1204 "ROG STRIX X570-I GAMING",
1205 "ROG STRIX Z390-E GAMING",
1206 "ROG STRIX Z390-F GAMING",
1207 "ROG STRIX Z390-H GAMING",
1208 "ROG STRIX Z390-I GAMING",
1209 "ROG STRIX Z490-A GAMING",
1210 "ROG STRIX Z490-E GAMING",
1211 "ROG STRIX Z490-F GAMING",
1212 "ROG STRIX Z490-G GAMING",
1213 "ROG STRIX Z490-G GAMING (WI-FI)",
1214 "ROG STRIX Z490-H GAMING",
1215 "ROG STRIX Z490-I GAMING",
1216 "TUF B360-PLUS GAMING",
1217 "TUF B360-PRO GAMING",
1218 "TUF B360-PRO GAMING (WI-FI)",
1219 "TUF B360M-E GAMING",
1220 "TUF B360M-PLUS GAMING",
1221 "TUF B360M-PLUS GAMING S",
1222 "TUF B360M-PLUS GAMING/BR",
1223 "TUF GAMING A520M-PLUS",
1224 "TUF GAMING A520M-PLUS II",
1225 "TUF GAMING A520M-PLUS WIFI",
1226 "TUF GAMING B460-PLUS",
1227 "TUF GAMING B460-PRO (WI-FI)",
1228 "TUF GAMING B460M-PLUS",
1229 "TUF GAMING B460M-PLUS (WI-FI)",
1230 "TUF GAMING B460M-PRO",
1231 "TUF GAMING B550-PLUS",
1232 "TUF GAMING B550-PLUS (WI-FI)",
1233 "TUF GAMING B550-PLUS WIFI II",
1234 "TUF GAMING B550-PRO",
1235 "TUF GAMING B550M ZAKU (WI-FI)",
1236 "TUF GAMING B550M-E",
1237 "TUF GAMING B550M-E WIFI",
1238 "TUF GAMING B550M-PLUS",
1239 "TUF GAMING B550M-PLUS (WI-FI)",
1240 "TUF GAMING B550M-PLUS WIFI II",
1241 "TUF GAMING H470-PRO",
1242 "TUF GAMING H470-PRO (WI-FI)",
1243 "TUF GAMING X570-PLUS",
1244 "TUF GAMING X570-PLUS (WI-FI)",
1245 "TUF GAMING X570-PLUS_BR",
1246 "TUF GAMING X570-PRO (WI-FI)",
1247 "TUF GAMING X570-PRO WIFI II",
1248 "TUF GAMING Z490-PLUS",
1249 "TUF GAMING Z490-PLUS (WI-FI)",
1250 "TUF H310-PLUS GAMING",
1251 "TUF H310M-PLUS GAMING",
1252 "TUF H310M-PLUS GAMING/BR",
1253 "TUF H370-PRO GAMING",
1254 "TUF H370-PRO GAMING (WI-FI)",
1255 "TUF Z390-PLUS GAMING",
1256 "TUF Z390-PLUS GAMING (WI-FI)",
1257 "TUF Z390-PRO GAMING",
1258 "TUF Z390M-PRO GAMING",
1259 "TUF Z390M-PRO GAMING (WI-FI)",
1261 "Z490-GUNDAM (WI-FI)",
1265 "B560M-P",
1266 "EX-B560M-V5",
1267 "EX-B660M-V5 D4",
1268 "EX-B660M-V5 PRO D4",
1269 "EX-B760M-V5 D4",
1270 "EX-H510M-V3",
1271 "EX-H610M-V3 D4",
1273 "PRIME A620M-A",
1274 "PRIME B560-PLUS",
1275 "PRIME B560-PLUS AC-HES",
1276 "PRIME B560M-A",
1277 "PRIME B560M-A AC",
1278 "PRIME B560M-K",
1279 "PRIME B650-PLUS",
1280 "PRIME B650M-A",
1281 "PRIME B650M-A AX",
1282 "PRIME B650M-A AX II",
1283 "PRIME B650M-A II",
1284 "PRIME B650M-A WIFI",
1285 "PRIME B650M-A WIFI II",
1286 "PRIME B660-PLUS D4",
1287 "PRIME B660M-A AC D4",
1288 "PRIME B660M-A D4",
1289 "PRIME B660M-A WIFI D4",
1290 "PRIME B760-PLUS",
1291 "PRIME B760-PLUS D4",
1292 "PRIME B760M-A",
1293 "PRIME B760M-A AX D4",
1294 "PRIME B760M-A D4",
1295 "PRIME B760M-A WIFI",
1296 "PRIME B760M-A WIFI D4",
1297 "PRIME B760M-AJ D4",
1298 "PRIME B760M-K D4",
1299 "PRIME H510M-A",
1300 "PRIME H510M-A WIFI",
1301 "PRIME H510M-D",
1302 "PRIME H510M-E",
1303 "PRIME H510M-F",
1304 "PRIME H510M-K",
1305 "PRIME H510M-R",
1307 "PRIME H570-PLUS",
1308 "PRIME H570M-PLUS",
1309 "PRIME H610I-PLUS D4",
1310 "PRIME H610M-A D4",
1311 "PRIME H610M-A WIFI D4",
1312 "PRIME H610M-D D4",
1313 "PRIME H610M-E D4",
1314 "PRIME H610M-F D4",
1315 "PRIME H610M-K D4",
1316 "PRIME H610M-R D4",
1317 "PRIME H670-PLUS D4",
1318 "PRIME H770-PLUS D4",
1319 "PRIME X670-P",
1320 "PRIME X670-P WIFI",
1321 "PRIME X670E-PRO WIFI",
1322 "PRIME Z590-A",
1323 "PRIME Z590-P",
1324 "PRIME Z590-P WIFI",
1325 "PRIME Z590-V",
1326 "PRIME Z590M-PLUS",
1327 "PRIME Z690-A",
1328 "PRIME Z690-P",
1329 "PRIME Z690-P D4",
1330 "PRIME Z690-P WIFI",
1331 "PRIME Z690-P WIFI D4",
1332 "PRIME Z690M-PLUS D4",
1333 "PRIME Z790-A WIFI",
1334 "PRIME Z790-P",
1335 "PRIME Z790-P D4",
1336 "PRIME Z790-P WIFI",
1337 "PRIME Z790-P WIFI D4",
1338 "PRIME Z790M-PLUS",
1339 "PRIME Z790M-PLUS D4",
1340 "Pro B560M-C",
1341 "Pro B560M-CT",
1342 "Pro B660M-C",
1343 "Pro B660M-C D4",
1344 "Pro B760M-C",
1345 "Pro B760M-CT",
1346 "Pro H510M-C",
1347 "Pro H510M-CT",
1348 "Pro H610M-C",
1349 "Pro H610M-C D4",
1350 "Pro H610M-CT D4",
1352 "Pro Q670M-C",
1353 "Pro WS 600M-CL",
1354 "Pro WS 665-ACE",
1355 "Pro WS W680-ACE",
1356 "Pro WS W680-ACE IPMI",
1357 "Pro WS W790-ACE",
1358 "Pro WS W790E-SAGE SE",
1359 "ProArt B650-CREATOR",
1360 "ProArt B660-CREATOR D4",
1361 "ProArt B760-CREATOR D4",
1362 "ProArt X670E-CREATOR WIFI",
1363 "ProArt Z690-CREATOR WIFI",
1364 "ProArt Z790-CREATOR WIFI",
1381 "ROG STRIX B560-A GAMING WIFI",
1382 "ROG STRIX B560-E GAMING WIFI",
1383 "ROG STRIX B560-F GAMING WIFI",
1384 "ROG STRIX B560-G GAMING WIFI",
1385 "ROG STRIX B560-I GAMING WIFI",
1386 "ROG STRIX B650-A GAMING WIFI",
1387 "ROG STRIX B650E-E GAMING WIFI",
1388 "ROG STRIX B650E-F GAMING WIFI",
1389 "ROG STRIX B650E-I GAMING WIFI",
1390 "ROG STRIX B660-A GAMING WIFI",
1391 "ROG STRIX B660-A GAMING WIFI D4",
1392 "ROG STRIX B660-F GAMING WIFI",
1393 "ROG STRIX B660-G GAMING WIFI",
1394 "ROG STRIX B660-I GAMING WIFI",
1395 "ROG STRIX B760-A GAMING WIFI",
1396 "ROG STRIX B760-A GAMING WIFI D4",
1397 "ROG STRIX B760-F GAMING WIFI",
1398 "ROG STRIX B760-G GAMING WIFI",
1399 "ROG STRIX B760-G GAMING WIFI D4",
1400 "ROG STRIX B760-I GAMING WIFI",
1401 "ROG STRIX X670E-A GAMING WIFI",
1402 "ROG STRIX X670E-E GAMING WIFI",
1403 "ROG STRIX X670E-F GAMING WIFI",
1404 "ROG STRIX X670E-I GAMING WIFI",
1405 "ROG STRIX Z590-A GAMING WIFI",
1406 "ROG STRIX Z590-A GAMING WIFI II",
1407 "ROG STRIX Z590-E GAMING WIFI",
1408 "ROG STRIX Z590-F GAMING WIFI",
1409 "ROG STRIX Z590-I GAMING WIFI",
1410 "ROG STRIX Z690-A GAMING WIFI",
1411 "ROG STRIX Z690-A GAMING WIFI D4",
1412 "ROG STRIX Z690-E GAMING WIFI",
1413 "ROG STRIX Z690-F GAMING WIFI",
1414 "ROG STRIX Z690-G GAMING WIFI",
1415 "ROG STRIX Z690-I GAMING WIFI",
1416 "ROG STRIX Z790-A GAMING WIFI",
1417 "ROG STRIX Z790-A GAMING WIFI D4",
1418 "ROG STRIX Z790-E GAMING WIFI",
1419 "ROG STRIX Z790-F GAMING WIFI",
1420 "ROG STRIX Z790-H GAMING WIFI",
1421 "ROG STRIX Z790-I GAMING WIFI",
1422 "TUF GAMING A620M-PLUS",
1423 "TUF GAMING A620M-PLUS WIFI",
1424 "TUF GAMING B560-PLUS WIFI",
1425 "TUF GAMING B560M-E",
1426 "TUF GAMING B560M-PLUS",
1427 "TUF GAMING B560M-PLUS WIFI",
1428 "TUF GAMING B650-PLUS",
1429 "TUF GAMING B650-PLUS WIFI",
1430 "TUF GAMING B650M-PLUS",
1431 "TUF GAMING B650M-PLUS WIFI",
1432 "TUF GAMING B660-PLUS WIFI D4",
1433 "TUF GAMING B660M-E D4",
1434 "TUF GAMING B660M-PLUS D4",
1435 "TUF GAMING B660M-PLUS WIFI",
1436 "TUF GAMING B660M-PLUS WIFI D4",
1437 "TUF GAMING B760-PLUS WIFI",
1438 "TUF GAMING B760-PLUS WIFI D4",
1439 "TUF GAMING B760M-BTF WIFI D4",
1440 "TUF GAMING B760M-E D4",
1441 "TUF GAMING B760M-PLUS",
1442 "TUF GAMING B760M-PLUS D4",
1443 "TUF GAMING B760M-PLUS WIFI",
1444 "TUF GAMING B760M-PLUS WIFI D4",
1445 "TUF GAMING H570-PRO",
1446 "TUF GAMING H570-PRO WIFI",
1447 "TUF GAMING H670-PRO WIFI D4",
1448 "TUF GAMING H770-PRO WIFI",
1449 "TUF GAMING X670E-PLUS",
1450 "TUF GAMING X670E-PLUS WIFI",
1451 "TUF GAMING Z590-PLUS",
1452 "TUF GAMING Z590-PLUS WIFI",
1453 "TUF GAMING Z690-PLUS",
1454 "TUF GAMING Z690-PLUS D4",
1455 "TUF GAMING Z690-PLUS WIFI",
1456 "TUF GAMING Z690-PLUS WIFI D4",
1457 "TUF GAMING Z790-PLUS D4",
1458 "TUF GAMING Z790-PLUS WIFI",
1459 "TUF GAMING Z790-PLUS WIFI D4",
1465 * Callback for acpi_bus_for_each_dev() to find the right device
1466 * by _UID and _HID and return 1 to stop iteration.
1492 pr_debug("Using Asus WMBD method of %s to access %#x chip.\n", device_uid, tmp); in nct6775_determine_access()
1532 * initialize sio_data->kind and sio_data->sioreg. in sensors_nct6775_platform_init()
1534 * when Super-I/O functions move to a separate file, the Super-I/O in sensors_nct6775_platform_init()
1535 * driver will probe 0x2e and 0x4e and auto-detect the presence of a in sensors_nct6775_platform_init()
1563 err = -ENOMEM; in sensors_nct6775_platform_init()
1575 res.start = address + IOREGION_OFFSET; in sensors_nct6775_platform_init()
1576 res.end = address + IOREGION_OFFSET + IOREGION_LENGTH - 1; in sensors_nct6775_platform_init()
1597 err = -ENODEV; in sensors_nct6775_platform_init()
1606 while (i--) in sensors_nct6775_platform_init()
1622 MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");