| /* SPDX-License-Identifier: GPL-2.0-only */ |
| |
| #include <bootstate.h> |
| #include <superio/fintek/common/fan_control.h> |
| #include <amdblocks/lpc.h> |
| #include <device/pci_ops.h> |
| #include <soc/pci_devs.h> |
| |
| #define CPU_FAN 1 |
| #define SYSTEM_FAN 2 |
| |
| /* Boundaries in celsius, sections in percent */ |
| static u8 cpu_boudaries[FINTEK_BOUNDARIES_SIZE] = { |
| 80, |
| 65, |
| 50, |
| 35 |
| }; |
| |
| static u8 system_boudaries[FINTEK_BOUNDARIES_SIZE] = { |
| 70, |
| 55, |
| 40, |
| 25 |
| }; |
| |
| static u8 cpu_section[FINTEK_SECTIONS_SIZE] = { |
| 100, |
| 85, |
| 70, |
| 55, |
| 40 |
| }; |
| |
| static u8 system_section[FINTEK_SECTIONS_SIZE] = { |
| 100, |
| 85, |
| 70, |
| 55, |
| 40 |
| }; |
| |
| struct fintek_fan cpu_fan = { |
| CPU_FAN, |
| IGNORE_SENSOR, |
| TEMP_SENSOR_DEFAULT, |
| FAN_TEMP_TSI, |
| FAN_TYPE_PWM_PUSH_PULL, |
| FAN_MODE_DEFAULT, |
| FAN_PWM_FREQ_23500, |
| FAN_UP_RATE_10HZ, |
| FAN_DOWN_RATE_10HZ, |
| FAN_FOLLOW_INTERPOLATION, |
| cpu_boudaries, |
| cpu_section |
| }; |
| |
| struct fintek_fan system_fan = { |
| SYSTEM_FAN, |
| EXTERNAL_SENSOR2, |
| TEMP_SENSOR_BJT, |
| FAN_TEMP_EXTERNAL_2, |
| FAN_TYPE_DAC_POWER, |
| FAN_MODE_DEFAULT, |
| FAN_PWM_FREQ_23500, |
| FAN_UP_RATE_10HZ, |
| FAN_DOWN_RATE_10HZ, |
| FAN_FOLLOW_INTERPOLATION, |
| system_boudaries, |
| system_section |
| }; |
| |
| static void init_fan_control(void *unused) |
| { |
| u32 temp; |
| /* Open a LPC IO access to 0x0220-0x0227 */ |
| temp = pci_read_config32(SOC_LPC_DEV, LPC_IO_PORT_DECODE_ENABLE); |
| temp |= DECODE_ENABLE_SERIAL_PORT2; |
| pci_write_config32(SOC_LPC_DEV, LPC_IO_PORT_DECODE_ENABLE, temp); |
| |
| set_fan(&cpu_fan); |
| set_fan(&system_fan); |
| } |
| |
| BOOT_STATE_INIT_ENTRY(BS_POST_DEVICE, BS_ON_ENTRY, init_fan_control, NULL); |