diff options
Diffstat (limited to 'zephyr/program')
-rw-r--r-- | zephyr/program/skyrim/markarth/CMakeLists.txt | 2 | ||||
-rw-r--r-- | zephyr/program/skyrim/markarth/project.conf | 3 | ||||
-rw-r--r-- | zephyr/program/skyrim/markarth/project.overlay | 51 | ||||
-rw-r--r-- | zephyr/program/skyrim/markarth/src/fan.c | 62 | ||||
-rw-r--r-- | zephyr/program/skyrim/markarth/src/form_factor.c | 35 | ||||
-rw-r--r-- | zephyr/program/skyrim/markarth/src/kb_backlight.c | 34 | ||||
-rw-r--r-- | zephyr/program/skyrim/markarth/src/usb_mux_config.c | 72 |
7 files changed, 71 insertions, 188 deletions
diff --git a/zephyr/program/skyrim/markarth/CMakeLists.txt b/zephyr/program/skyrim/markarth/CMakeLists.txt index de0269c5f0..7075b650cc 100644 --- a/zephyr/program/skyrim/markarth/CMakeLists.txt +++ b/zephyr/program/skyrim/markarth/CMakeLists.txt @@ -8,8 +8,8 @@ zephyr_library_sources( "src/ppc_config.c" "src/form_factor.c" "src/keyboard.c" + "src/kb_backlight.c" ) -zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_FAN "src/fan.c") zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_KEYBOARD_CUSTOMIZATION "src/keyboard.c" "src/keyboard_customization.c" diff --git a/zephyr/program/skyrim/markarth/project.conf b/zephyr/program/skyrim/markarth/project.conf index cf6c391ffc..8c2c204f2b 100644 --- a/zephyr/program/skyrim/markarth/project.conf +++ b/zephyr/program/skyrim/markarth/project.conf @@ -21,3 +21,6 @@ CONFIG_PLATFORM_EC_USB_CHARGER=n # Keyboard CONFIG_PLATFORM_EC_KEYBOARD_CUSTOMIZATION=y + +# Sensors +CONFIG_PLATFORM_EC_DYNAMIC_MOTION_SENSOR_COUNT=y diff --git a/zephyr/program/skyrim/markarth/project.overlay b/zephyr/program/skyrim/markarth/project.overlay index 3f5aaf47c8..0678eae9a5 100644 --- a/zephyr/program/skyrim/markarth/project.overlay +++ b/zephyr/program/skyrim/markarth/project.overlay @@ -93,46 +93,24 @@ default; }; }; - io-db { - enum-name = "FW_IO_DB"; - start = <6>; - size = <2>; - - io-db-ps8811-ps8818 { - compatible = "cros-ec,cbi-fw-config-value"; - enum-name = "FW_IO_DB_PS8811_PS8818"; - value = <0>; - }; - io-db-none-anx7483 { - compatible = "cros-ec,cbi-fw-config-value"; - enum-name = "FW_IO_DB_NONE_ANX7483"; - value = <1>; - default; - }; - }; /* - * FW_CONFIG field to enable fan or not. + * FW_CONFIG field to enable KB back light or not. */ - fan { - enum-name = "FW_FAN"; - start = <10>; + kb-bl { + enum-name = "FW_KB_BL"; + start = <1>; size = <1>; - no-fan { + no-kb-bl { compatible = "cros-ec,cbi-fw-config-value"; - enum-name = "FW_FAN_NOT_PRESENT"; + enum-name = "FW_KB_BL_NOT_PRESENT"; value = <0>; }; - fan-present { + kb-bl-present { compatible = "cros-ec,cbi-fw-config-value"; - enum-name = "FW_FAN_PRESENT"; + enum-name = "FW_KB_BL_PRESENT"; value = <1>; - /* - * Set as default so that unprovisioned - * configs will run the fan regardless. - */ - default; }; }; }; @@ -146,12 +124,6 @@ 0 0 1>; }; - lid_rot_ref1: lid-rotation-ref1 { - mat33 = <0 1 0 - (-1) 0 0 - 0 0 1>; - }; - base_rot_ref: base-rotation-ref { mat33 = <0 1 0 (-1) 0 0 @@ -178,6 +150,7 @@ &i2c1_0 { /delete-node/ pi3usb9201@5f; + /delete-node/ anx7483@3e; }; &i2c4_1 { @@ -195,6 +168,12 @@ &usbc_port1 { /delete-property/ bc12; + /delete-node/ usb-mux-chain-1-anx; + /delete-node/ usb-mux-chain-1-ps; + usb-mux-chain-1-ps8818 { + compatible = "cros-ec,usb-mux-chain"; + usb-muxes = <&amd_fp6_port1 &ps8818_port1>; + }; }; &i2c6_1 { diff --git a/zephyr/program/skyrim/markarth/src/fan.c b/zephyr/program/skyrim/markarth/src/fan.c deleted file mode 100644 index 7dc667a6fc..0000000000 --- a/zephyr/program/skyrim/markarth/src/fan.c +++ /dev/null @@ -1,62 +0,0 @@ -/* 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_board_info.h" -#include "cros_cbi.h" -#include "fan.h" -#include "gpio/gpio.h" -#include "hooks.h" - -#include <zephyr/devicetree.h> -#include <zephyr/drivers/gpio.h> -#include <zephyr/logging/log.h> - -LOG_MODULE_DECLARE(markarth, CONFIG_SKYRIM_LOG_LEVEL); - -/* - * Skyrim fan support - */ -test_export_static void fan_init(void) -{ - int ret; - uint32_t val; - uint32_t board_version; - /* - * 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; - } - - ret = cbi_get_board_version(&board_version); - if (ret != EC_SUCCESS) { - LOG_ERR("Error retrieving CBI board version"); - return; - } - - if ((board_version >= 3) && (val != FW_FAN_PRESENT)) { - /* Disable the fan */ - fan_set_count(0); - } -} -DECLARE_HOOK(HOOK_INIT, fan_init, HOOK_PRIO_POST_FIRST); - -/* - * Pcore OCP support - * Note: early boards should note enable this interrupt as they are not - * correctly configured for it. - */ -__override bool board_supports_pcore_ocp(void) -{ - uint32_t board_version; - - if (cbi_get_board_version(&board_version) == EC_SUCCESS && - board_version > 3) - return true; - - return false; -} diff --git a/zephyr/program/skyrim/markarth/src/form_factor.c b/zephyr/program/skyrim/markarth/src/form_factor.c index 1399648e80..5b8b27663d 100644 --- a/zephyr/program/skyrim/markarth/src/form_factor.c +++ b/zephyr/program/skyrim/markarth/src/form_factor.c @@ -6,33 +6,34 @@ #include "accelgyro.h" #include "common.h" #include "cros_board_info.h" +#include "cros_cbi.h" +#include "gpio/gpio_int.h" #include "hooks.h" #include "motionsense_sensors.h" +#include "tablet_mode.h" #include <zephyr/devicetree.h> #include <zephyr/logging/log.h> LOG_MODULE_DECLARE(markarth, CONFIG_SKYRIM_LOG_LEVEL); -/* - * Mainboard orientation support. - */ - -#define ALT_MAT SENSOR_ROT_STD_REF_NAME(DT_NODELABEL(lid_rot_ref1)) -#define LID_ACCEL SENSOR_ID(DT_NODELABEL(lid_accel)) - -static void form_factor_init(void) +static void clamshell_init(void) { int ret; uint32_t val; - /* - * If the board version >=4 - * use ver1 rotation matrix. - */ - ret = cbi_get_board_version(&val); - if (ret == EC_SUCCESS && val >= 4) { - LOG_INF("Switching to ver1 lid"); - motion_sensors[LID_ACCEL].rot_standard_ref = &ALT_MAT; + + /* Check the form factor from CBI */ + ret = cros_cbi_get_fw_config(FW_FORM_FACTOR, &val); + if (ret != 0) { + LOG_ERR("Cannot get FW_FORM_FACTOR"); + return; + } + + if (val == FW_FF_CLAMSHELL) { + motion_sensor_count = 0; + gpio_disable_dt_interrupt( + GPIO_INT_FROM_NODELABEL(int_accel_gyro)); + gmr_tablet_switch_disable(); } } -DECLARE_HOOK(HOOK_INIT, form_factor_init, HOOK_PRIO_POST_I2C); +DECLARE_HOOK(HOOK_INIT, clamshell_init, HOOK_PRIO_POST_DEFAULT); diff --git a/zephyr/program/skyrim/markarth/src/kb_backlight.c b/zephyr/program/skyrim/markarth/src/kb_backlight.c new file mode 100644 index 0000000000..4f394bd79a --- /dev/null +++ b/zephyr/program/skyrim/markarth/src/kb_backlight.c @@ -0,0 +1,34 @@ +/* Copyright 2023 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "board_config.h" +#include "common.h" +#include "cros_board_info.h" +#include "cros_cbi.h" + +#include <zephyr/devicetree.h> +#include <zephyr/logging/log.h> + +LOG_MODULE_DECLARE(markarth, CONFIG_SKYRIM_LOG_LEVEL); + +__override uint32_t board_override_feature_flags0(uint32_t flags0) +{ + int ret; + uint32_t val; + + /* + * Remove keyboard backlight feature for devices that don't support it. + */ + ret = cros_cbi_get_fw_config(FW_KB_BL, &val); + if (ret != 0) { + LOG_ERR("Error retrieving CBI FW_CONFIG field %d", FW_KB_BL); + return flags0; + } + + if (val == FW_KB_BL_NOT_PRESENT) + return (flags0 & ~EC_FEATURE_MASK_0(EC_FEATURE_PWM_KEYB)); + else + return flags0; +} diff --git a/zephyr/program/skyrim/markarth/src/usb_mux_config.c b/zephyr/program/skyrim/markarth/src/usb_mux_config.c index 95b4524b16..b87174f35c 100644 --- a/zephyr/program/skyrim/markarth/src/usb_mux_config.c +++ b/zephyr/program/skyrim/markarth/src/usb_mux_config.c @@ -56,59 +56,6 @@ int board_c0_amd_fp6_mux_set(const struct usb_mux *me, mux_state_t mux_state) return EC_SUCCESS; } -int board_anx7483_c1_mux_set(const struct usb_mux *me, mux_state_t mux_state) -{ - bool flipped = mux_state & USB_PD_MUX_POLARITY_INVERTED; - - /* Set the SBU polarity mux */ - RETURN_ERROR(ioex_set_flip(me->usb_port, mux_state)); - - /* Remove flipped from the state for easier compraisons */ - mux_state = mux_state & ~USB_PD_MUX_POLARITY_INVERTED; - - RETURN_ERROR(anx7483_set_default_tuning(me, mux_state)); - - if (mux_state == USB_PD_MUX_USB_ENABLED) { - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_URX1, - ANX7483_EQ_SETTING_12_5DB)); - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_URX2, - ANX7483_EQ_SETTING_12_5DB)); - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_DRX1, - ANX7483_EQ_SETTING_12_5DB)); - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_DRX2, - ANX7483_EQ_SETTING_12_5DB)); - } else if (mux_state == USB_PD_MUX_DP_ENABLED) { - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_URX1, - ANX7483_EQ_SETTING_12_5DB)); - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_URX2, - ANX7483_EQ_SETTING_12_5DB)); - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_UTX1, - ANX7483_EQ_SETTING_12_5DB)); - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_UTX2, - ANX7483_EQ_SETTING_12_5DB)); - } else if (mux_state == USB_PD_MUX_DOCK && !flipped) { - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_URX1, - ANX7483_EQ_SETTING_12_5DB)); - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_URX2, - ANX7483_EQ_SETTING_12_5DB)); - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_DRX1, - ANX7483_EQ_SETTING_12_5DB)); - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_UTX2, - ANX7483_EQ_SETTING_12_5DB)); - } else if (mux_state == USB_PD_MUX_DOCK && flipped) { - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_URX1, - ANX7483_EQ_SETTING_12_5DB)); - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_URX2, - ANX7483_EQ_SETTING_12_5DB)); - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_UTX1, - ANX7483_EQ_SETTING_12_5DB)); - RETURN_ERROR(anx7483_set_eq(me, ANX7483_PIN_DRX2, - ANX7483_EQ_SETTING_12_5DB)); - } - - return EC_SUCCESS; -} - int board_c1_ps8818_mux_set(const struct usb_mux *me, mux_state_t mux_state) { CPRINTSUSB("C1: PS8818 mux using default tuning"); @@ -121,22 +68,3 @@ int board_c1_ps8818_mux_set(const struct usb_mux *me, mux_state_t mux_state) return 0; } - -static void setup_mux(void) -{ - uint32_t val; - - if (cros_cbi_get_fw_config(FW_IO_DB, &val) != 0) - CPRINTSUSB("Error finding FW_DB_IO in CBI FW_CONFIG"); - /* Val will have our dts default on error, so continue setup */ - - if (val == FW_IO_DB_PS8811_PS8818) { - CPRINTSUSB("C1: Setting PS8818 mux"); - USB_MUX_ENABLE_ALTERNATIVE(usb_mux_chain_ps8818_port1); - } else if (val == FW_IO_DB_NONE_ANX7483) { - CPRINTSUSB("C1: Setting ANX7483 mux"); - } else { - CPRINTSUSB("Unexpected DB_IO board: %d", val); - } -} -DECLARE_HOOK(HOOK_INIT, setup_mux, HOOK_PRIO_INIT_I2C); |