diff options
author | ben chen <ben.chen2@quanta.corp-partner.google.com> | 2022-11-28 13:58:07 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-11-29 08:26:30 +0000 |
commit | 591d2bed6300093b81c653ee79470cdefabe3b8a (patch) | |
tree | 5c3ba7b699324e83b9d2562244686eee95e1cbf4 | |
parent | 82268e0885e89b6b7a46dc0864dc225108aa6861 (diff) | |
download | chrome-ec-591d2bed6300093b81c653ee79470cdefabe3b8a.tar.gz |
craask: add Fw_config structure for FAN control
Craask need to implement FW_FAN config in
bit 17 of cbi fw_config.Enable/Disable fan control
by FW_FAN flag.
BUG=b:257387315
BRANCH=none
TEST=check fan workable by FW_FAN flags setting.
Change-Id: I94876d0092f713d4c29980f76338803081276503
Signed-off-by: Ben Chen <ben.chen2@quanta.corp-partner.google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4060382
Code-Coverage: Andrew McRae <amcrae@google.com>
Reviewed-by: Andrew McRae <amcrae@google.com>
-rw-r--r-- | zephyr/program/nissa/CMakeLists.txt | 1 | ||||
-rw-r--r-- | zephyr/program/nissa/craask/cbi.dtsi | 26 | ||||
-rw-r--r-- | zephyr/program/nissa/craask/fan.dtsi | 38 | ||||
-rw-r--r-- | zephyr/program/nissa/craask/overlay.dtsi | 4 | ||||
-rw-r--r-- | zephyr/program/nissa/craask/project.overlay | 1 | ||||
-rw-r--r-- | zephyr/program/nissa/craask/src/fan.c | 37 |
6 files changed, 107 insertions, 0 deletions
diff --git a/zephyr/program/nissa/CMakeLists.txt b/zephyr/program/nissa/CMakeLists.txt index a982f89b56..c8610e488d 100644 --- a/zephyr/program/nissa/CMakeLists.txt +++ b/zephyr/program/nissa/CMakeLists.txt @@ -34,6 +34,7 @@ if(DEFINED CONFIG_BOARD_NEREID) endif() if(DEFINED CONFIG_BOARD_CRAASK) zephyr_library_sources( + "craask/src/fan.c" "craask/src/form_factor.c" "craask/src/keyboard.c" "craask/src/kb_backlight.c" diff --git a/zephyr/program/nissa/craask/cbi.dtsi b/zephyr/program/nissa/craask/cbi.dtsi index 203eace823..e329929227 100644 --- a/zephyr/program/nissa/craask/cbi.dtsi +++ b/zephyr/program/nissa/craask/cbi.dtsi @@ -52,6 +52,32 @@ value = <1>; }; }; + + /* + * FW_CONFIG field to enable fan or not. + */ + fan { + enum-name = "FW_FAN"; + start = <17>; + size = <1>; + + no-fan { + compatible = "cros-ec,cbi-fw-config-value"; + enum-name = "FW_FAN_NOT_PRESENT"; + value = <0>; + }; + fan-present { + compatible = "cros-ec,cbi-fw-config-value"; + enum-name = "FW_FAN_PRESENT"; + value = <1>; + /* + * Set as default so that unprovisioned + * configs will run the fan regardless. + */ + default; + }; + }; + /* * FW_CONFIG field to enable KB back light or not. */ diff --git a/zephyr/program/nissa/craask/fan.dtsi b/zephyr/program/nissa/craask/fan.dtsi new file mode 100644 index 0000000000..b94b0a018c --- /dev/null +++ b/zephyr/program/nissa/craask/fan.dtsi @@ -0,0 +1,38 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +/ { + fans { + compatible = "cros-ec,fans"; + fan_0 { + pwms = <&pwm5 5 PWM_KHZ(25) PWM_POLARITY_NORMAL>; + tach = <&tach2>; + rpm_min = <2500>; + rpm_start = <2500>; + rpm_max = <4100>; + enable_gpio = <&gpio_fan_enable>; + }; + }; +}; + +&pwm5_gpb7 { + drive-open-drain; +}; + +/* pwm for fan */ +&pwm5 { + status = "okay"; + pinctrl-0 = <&pwm5_gpb7>; + pinctrl-names = "default"; +}; + +/* Tachometer for fan speed measurement */ +&tach2 { + status = "okay"; + pinctrl-0 = <&ta2_1_in_gp73>; + pinctrl-names = "default"; + port = <NPCX_TACH_PORT_A>; /* port-A is selected */ + sample-clk = <NPCX_TACH_FREQ_LFCLK>; /* Use LFCLK as sampling clock */ + pulses-per-round = <2>; /* number of pulses per round of encoder */ +}; diff --git a/zephyr/program/nissa/craask/overlay.dtsi b/zephyr/program/nissa/craask/overlay.dtsi index 2607c10402..749317cbf5 100644 --- a/zephyr/program/nissa/craask/overlay.dtsi +++ b/zephyr/program/nissa/craask/overlay.dtsi @@ -120,6 +120,10 @@ gpios = <&gpiof 5 (GPIO_INPUT | GPIO_VOLTAGE_1P8)>; no-auto-init; }; + gpio_fan_enable: fan-enable { + gpios = <&gpio6 3 GPIO_OUTPUT>; + no-auto-init; + }; ec-i2c-sensor-scl { gpios = <&gpio9 0 (GPIO_INPUT | GPIO_VOLTAGE_1P8)>; }; diff --git a/zephyr/program/nissa/craask/project.overlay b/zephyr/program/nissa/craask/project.overlay index 9ca681d979..6107b6ef15 100644 --- a/zephyr/program/nissa/craask/project.overlay +++ b/zephyr/program/nissa/craask/project.overlay @@ -6,6 +6,7 @@ #include "../cbi.dtsi" #include "cbi.dtsi" +#include "fan.dtsi" #include "generated.dtsi" #include "keyboard.dtsi" #include "motionsense.dtsi" diff --git a/zephyr/program/nissa/craask/src/fan.c b/zephyr/program/nissa/craask/src/fan.c new file mode 100644 index 0000000000..c01ee3d752 --- /dev/null +++ b/zephyr/program/nissa/craask/src/fan.c @@ -0,0 +1,37 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#include "cros_cbi.h" +#include "fan.h" +#include "gpio/gpio.h" +#include "hooks.h" +#include "nissa_common.h" + +#include <zephyr/devicetree.h> +#include <zephyr/drivers/gpio.h> +#include <zephyr/logging/log.h> +LOG_MODULE_DECLARE(nissa, CONFIG_NISSA_LOG_LEVEL); + +static void fan_init(void) +{ + int ret; + uint32_t val; + /* + * Retrieve the fan config. + */ + ret = cros_cbi_get_fw_config(FW_FAN, &val); + if (ret != 0) { + LOG_ERR("Error retrieving CBI FW_CONFIG field %d", FW_FAN); + return; + } + if (val != FW_FAN_PRESENT) { + /* Disable the fan */ + fan_set_count(0); + } else { + /* Configure the fan enable GPIO */ + gpio_pin_configure_dt(GPIO_DT_FROM_NODELABEL(gpio_fan_enable), + GPIO_OUTPUT); + } +} +DECLARE_HOOK(HOOK_INIT, fan_init, HOOK_PRIO_POST_FIRST); |