From 2eea4a541cb26c30211d1ed014a113db1a482814 Mon Sep 17 00:00:00 2001 From: Denis Brockus Date: Tue, 6 Aug 2019 14:38:20 -0600 Subject: Trembyle: add fan support BUG=b:138600244 BRANCH=none TEST=make buildall -j Change-Id: Ibaf217e9fccf76dff6b70ae529e089367db89221 Signed-off-by: Denis Brockus Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1742039 Reviewed-by: Keith Short --- baseboard/zork/baseboard.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++ baseboard/zork/baseboard.h | 17 ++++++++++++ board/trembyle/gpio.inc | 2 ++ 3 files changed, 84 insertions(+) diff --git a/baseboard/zork/baseboard.c b/baseboard/zork/baseboard.c index 213a323c6e..8d966369ea 100644 --- a/baseboard/zork/baseboard.c +++ b/baseboard/zork/baseboard.c @@ -25,6 +25,8 @@ #include "driver/temp_sensor/sb_tsi.h" #include "ec_commands.h" #include "extpower.h" +#include "fan.h" +#include "fan_chip.h" #include "gpio.h" #include "hooks.h" #include "ioexpander.h" @@ -169,9 +171,44 @@ const struct pwm_t pwm_channels[] = { .flags = PWM_CONFIG_DSLEEP, .freq = 100, }, + [PWM_CH_FAN] = { + .channel = 2, + .flags = PWM_CONFIG_OPEN_DRAIN, + .freq = 25000, + }, }; BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); +/* Physical fans. These are logically separate from pwm_channels. */ +const struct fan_conf fan_conf_0 = { + .flags = FAN_USE_RPM_MODE, + .ch = MFT_CH_0, /* Use MFT id to control fan */ + .pgood_gpio = -1, + .enable_gpio = -1, +}; +const struct fan_rpm fan_rpm_0 = { + .rpm_min = 3100, + .rpm_start = 3100, + .rpm_max = 6900, +}; +struct fan_t fans[] = { + [FAN_CH_0] = { + .conf = &fan_conf_0, + .rpm = &fan_rpm_0, + }, +}; +BUILD_ASSERT(ARRAY_SIZE(fans) == FAN_CH_COUNT); + +/* MFT channels. These are logically separate from pwm_channels. */ +const struct mft_t mft_channels[] = { + [MFT_CH_0] = { + .module = NPCX_MFT_MODULE_1, + .clk_src = TCKC_LFCLK, + .pwm_id = PWM_CH_FAN, + }, +}; +BUILD_ASSERT(ARRAY_SIZE(mft_channels) == MFT_CH_COUNT); + struct ppc_config_t ppc_chips[CONFIG_USB_PD_PORT_COUNT] = { [USBC_PORT_C0] = { .i2c_port = I2C_PORT_TCPC0, @@ -538,6 +575,27 @@ const struct temp_sensor_t temp_sensors[] = { }; BUILD_ASSERT(ARRAY_SIZE(temp_sensors) == TEMP_SENSOR_COUNT); +const static struct ec_thermal_config thermal_a = { + .temp_host = { + [EC_TEMP_THRESH_HIGH] = C_TO_K(75), + [EC_TEMP_THRESH_HALT] = C_TO_K(80), + }, + .temp_host_release = { + [EC_TEMP_THRESH_HIGH] = C_TO_K(65), + }, + .temp_fan_off = C_TO_K(25), + .temp_fan_max = C_TO_K(50), +}; + +struct ec_thermal_config thermal_params[TEMP_SENSOR_COUNT]; + +static void setup_fans(void) +{ + thermal_params[TEMP_SENSOR_CHARGER] = thermal_a; + thermal_params[TEMP_SENSOR_SOC] = thermal_a; + thermal_params[TEMP_SENSOR_CPU] = thermal_a; +} + #ifdef HAS_TASK_MOTIONSENSE /* Motion sensors */ @@ -715,3 +773,10 @@ void board_overcurrent_event(int port, int is_overcurrented) break; } } + +static void baseboard_init(void) +{ + /* Initialize Fans */ + setup_fans(); +} +DECLARE_HOOK(HOOK_INIT, baseboard_init, HOOK_PRIO_DEFAULT); diff --git a/baseboard/zork/baseboard.h b/baseboard/zork/baseboard.h index 635899f605..e02b5a4945 100644 --- a/baseboard/zork/baseboard.h +++ b/baseboard/zork/baseboard.h @@ -89,6 +89,10 @@ #define CONFIG_POWER_BUTTON #define CONFIG_POWER_BUTTON_X86 +#define CONFIG_FANS FAN_CH_COUNT +#undef CONFIG_FAN_INIT_SPEED +#define CONFIG_FAN_INIT_SPEED 50 + #define CONFIG_LED_COMMON #define CONFIG_CMD_LEDTEST #define CONFIG_LED_ONOFF_STATES @@ -223,9 +227,22 @@ enum temp_sensor_id { enum pwm_channel { PWM_CH_KBLIGHT = 0, + PWM_CH_FAN, PWM_CH_COUNT }; +enum fan_channel { + FAN_CH_0 = 0, + /* Number of FAN channels */ + FAN_CH_COUNT, +}; + +enum mft_channel { + MFT_CH_0 = 0, + /* Number of MFT channels */ + MFT_CH_COUNT, +}; + enum usbc_port { USBC_PORT_C0 = 0, USBC_PORT_C1, diff --git a/board/trembyle/gpio.inc b/board/trembyle/gpio.inc index 661613c67b..a66e334de1 100644 --- a/board/trembyle/gpio.inc +++ b/board/trembyle/gpio.inc @@ -98,7 +98,9 @@ ALTERNATE(PIN_MASK(B, BIT(2) | BIT(3)), 0, MODULE_I2C, 0) /* I2C7 */ ALTERNATE(PIN_MASK(4, BIT(2) | BIT(3)), 0, MODULE_ADC, 0) /* ADC2, ADC3 Temp Sensors */ ALTERNATE(PIN_MASK(C, BIT(3)), 0, MODULE_PWM, 0) /* PWM0 LED */ +ALTERNATE(PIN_MASK(C, BIT(4)), 0, MODULE_PWM, 0) /* PWM2 - EC_FAN_PWM */ ALTERNATE(PIN_MASK(8, BIT(0)), 0, MODULE_PWM, 0) /* PWM3 KB Backlight */ +ALTERNATE(PIN_MASK(4, BIT(0)), 0, MODULE_PWM, 0) /* TA1 - EC_FAN_SPEED */ ALTERNATE(PIN_MASK(3, 0x03), 0, MODULE_KEYBOARD_SCAN, GPIO_INPUT) /* KSI_00-01 */ ALTERNATE(PIN_MASK(2, 0xFC), 0, MODULE_KEYBOARD_SCAN, GPIO_INPUT) /* KSI_02-07 */ -- cgit v1.2.1