summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Brockus <dbrockus@chromium.org>2019-08-06 14:38:20 -0600
committerCommit Bot <commit-bot@chromium.org>2019-08-08 14:58:37 +0000
commit2eea4a541cb26c30211d1ed014a113db1a482814 (patch)
treef90b8a27a15e48c5e8a417f84439203f77767444
parent3e6c5b4673228f2c009c5dd9283f9232ef4f9449 (diff)
downloadchrome-ec-2eea4a541cb26c30211d1ed014a113db1a482814.tar.gz
Trembyle: add fan support
BUG=b:138600244 BRANCH=none TEST=make buildall -j Change-Id: Ibaf217e9fccf76dff6b70ae529e089367db89221 Signed-off-by: Denis Brockus <dbrockus@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1742039 Reviewed-by: Keith Short <keithshort@chromium.org>
-rw-r--r--baseboard/zork/baseboard.c65
-rw-r--r--baseboard/zork/baseboard.h17
-rw-r--r--board/trembyle/gpio.inc2
3 files changed, 84 insertions, 0 deletions
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 */