diff options
Diffstat (limited to 'zephyr/program/geralt')
-rw-r--r-- | zephyr/program/geralt/geralt/battery.dtsi | 5 | ||||
-rw-r--r-- | zephyr/program/geralt/geralt/project.overlay | 1 | ||||
-rw-r--r-- | zephyr/program/geralt/gpio.dtsi | 8 | ||||
-rw-r--r-- | zephyr/program/geralt/i2c.dtsi | 1 | ||||
-rw-r--r-- | zephyr/program/geralt/interrupts.dtsi | 15 | ||||
-rw-r--r-- | zephyr/program/geralt/keyboard.dtsi | 30 | ||||
-rw-r--r-- | zephyr/program/geralt/power_signal.dtsi | 6 | ||||
-rw-r--r-- | zephyr/program/geralt/program.conf | 7 | ||||
-rw-r--r-- | zephyr/program/geralt/shi.dtsi | 3 | ||||
-rw-r--r-- | zephyr/program/geralt/src/hibernate.c | 3 | ||||
-rw-r--r-- | zephyr/program/geralt/src/hooks.c | 8 | ||||
-rw-r--r-- | zephyr/program/geralt/src/usb_pd_policy.c | 2 | ||||
-rw-r--r-- | zephyr/program/geralt/src/usbc_config.c | 46 | ||||
-rw-r--r-- | zephyr/program/geralt/usbc.dtsi | 2 |
14 files changed, 117 insertions, 20 deletions
diff --git a/zephyr/program/geralt/geralt/battery.dtsi b/zephyr/program/geralt/geralt/battery.dtsi index fc1e5268e1..7c194ca918 100644 --- a/zephyr/program/geralt/geralt/battery.dtsi +++ b/zephyr/program/geralt/geralt/battery.dtsi @@ -4,10 +4,9 @@ */ / { - /* TODO: update this after we got the real battery */ batteries { - default_battery: dynapack_c140254 { - compatible = "dynapack,c140254", "battery-smart"; + default_battery: smp_l21m4pg0 { + compatible = "smp,l21m4pg0", "battery-smart"; }; }; }; diff --git a/zephyr/program/geralt/geralt/project.overlay b/zephyr/program/geralt/geralt/project.overlay index b54d181c38..76ed8c0a6a 100644 --- a/zephyr/program/geralt/geralt/project.overlay +++ b/zephyr/program/geralt/geralt/project.overlay @@ -9,6 +9,7 @@ #include "../gpio.dtsi" #include "../i2c.dtsi" #include "../interrupts.dtsi" +#include "../keyboard.dtsi" #include "../mkbp.dtsi" #include "../motionsense.dtsi" #include "../power_signal.dtsi" diff --git a/zephyr/program/geralt/gpio.dtsi b/zephyr/program/geralt/gpio.dtsi index 2f9b7b9f35..4374b444c5 100644 --- a/zephyr/program/geralt/gpio.dtsi +++ b/zephyr/program/geralt/gpio.dtsi @@ -129,7 +129,11 @@ gpios = <&gpiog 0 GPIO_OUTPUT_HIGH>; }; en_pp4200_s5: en-pp4200-s5 { - gpios = <&gpiob 7 GPIO_OUTPUT_HIGH>; + gpios = <&gpiob 7 GPIO_OUTPUT_LOW>; + }; + pg_pp4200_s5_od: pg-pp4200-s5-od { + gpios = <&gpioc 5 GPIO_INPUT>; + enum-name = "GPIO_PG_PP4200_S5_OD"; }; sys_rst_odl: sys-rst-odl { gpios = <&gpiog 1 GPIO_ODR_LOW>; @@ -182,8 +186,6 @@ unused-gpios = /* pg_pp5000_z1_od */ <&gpiod 2 GPIO_INPUT>, - /* pg_pp4200_s5_od */ - <&gpioc 5 GPIO_INPUT>, /* charge_en */ <&gpioe 1 GPIO_INPUT>, /* unnamed nc pins */ diff --git a/zephyr/program/geralt/i2c.dtsi b/zephyr/program/geralt/i2c.dtsi index cc2e6f6bdf..cf36d68ef9 100644 --- a/zephyr/program/geralt/i2c.dtsi +++ b/zephyr/program/geralt/i2c.dtsi @@ -64,7 +64,6 @@ compatible = "richtek,rt9490"; status = "okay"; reg = <0x53>; - irq = <&int_usb_c1_bc12_charger>; }; }; diff --git a/zephyr/program/geralt/interrupts.dtsi b/zephyr/program/geralt/interrupts.dtsi index 99c3cb7e56..dd48aa8977 100644 --- a/zephyr/program/geralt/interrupts.dtsi +++ b/zephyr/program/geralt/interrupts.dtsi @@ -51,11 +51,6 @@ flags = <GPIO_INT_EDGE_BOTH>; handler = "extpower_interrupt"; }; - int_usb_c1_bc12_charger: usb-c1-bc12-charger { - irq-pin = <&usb_c1_bc12_charger_int_odl>; - flags = <GPIO_INT_EDGE_FALLING>; - handler = "rt9490_bc12_dt_interrupt"; - }; int_lid_open: lid-open { irq-pin = <&lid_open>; flags = <GPIO_INT_EDGE_BOTH>; @@ -66,6 +61,11 @@ flags = <GPIO_INT_EDGE_BOTH>; handler = "power_button_interrupt"; }; + int_pg_pp4200_s5: pg-pp4200-s5 { + irq-pin = <&pg_pp4200_s5_od>; + flags = <GPIO_INT_EDGE_BOTH>; + handler = "power_signal_interrupt"; + }; int_warm_rst: warm-rst { irq-pin = <&ap_ec_warm_rst_req>; flags = <GPIO_INT_EDGE_RISING>; @@ -96,5 +96,10 @@ flags = <GPIO_INT_EDGE_FALLING>; handler = "ccd_interrupt"; }; + int_ap_xhci_init_done: ap-xhci-init-done { + irq-pin = <&ap_xhci_init_done>; + flags = <GPIO_INT_EDGE_BOTH>; + handler = "xhci_interrupt"; + }; }; }; diff --git a/zephyr/program/geralt/keyboard.dtsi b/zephyr/program/geralt/keyboard.dtsi new file mode 100644 index 0000000000..9541c4aa81 --- /dev/null +++ b/zephyr/program/geralt/keyboard.dtsi @@ -0,0 +1,30 @@ +/* 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. + */ + +&cros_kb_raw { + status = "okay"; + /* No KSO2 (it's inverted and implemented by GPIO) */ + pinctrl-0 = <&ksi0_default + &ksi1_default + &ksi2_default + &ksi3_default + &ksi4_default + &ksi5_default + &ksi6_default + &ksi7_default + &kso0_default + &kso1_default + &kso3_default + &kso4_default + &kso5_default + &kso6_default + &kso7_default + &kso8_default + &kso9_default + &kso10_default + &kso11_default + &kso12_default>; + pinctrl-names = "default"; +}; diff --git a/zephyr/program/geralt/power_signal.dtsi b/zephyr/program/geralt/power_signal.dtsi index 268b068a21..38ec8a19a2 100644 --- a/zephyr/program/geralt/power_signal.dtsi +++ b/zephyr/program/geralt/power_signal.dtsi @@ -5,7 +5,7 @@ / { power_signal_list: power-signal-list { - compatible = "mediatek,mt8186-power-signal-list"; + compatible = "mediatek,mt8188-power-signal-list"; ap_in_rst { power-enum-name = "AP_IN_RST"; @@ -23,5 +23,9 @@ power-enum-name = "AP_WARM_RST_REQ"; power-gpio-pin = <&ap_ec_warm_rst_req>; }; + pg_pp4200_s5 { + power-enum-name = "PG_PP4200_S5"; + power-gpio-pin = <&pg_pp4200_s5_od>; + }; }; }; diff --git a/zephyr/program/geralt/program.conf b/zephyr/program/geralt/program.conf index 501afdee7c..3394f85b82 100644 --- a/zephyr/program/geralt/program.conf +++ b/zephyr/program/geralt/program.conf @@ -20,7 +20,7 @@ CONFIG_SHIMMED_TASKS=y # AP SoC configuration CONFIG_AP=y -CONFIG_AP_ARM_MTK_MT8186=y +CONFIG_AP_ARM_MTK_MT8188=y # Shell features CONFIG_KERNEL_SHELL=y @@ -87,6 +87,8 @@ CONFIG_PLATFORM_EC_BATTERY_SMART=y CONFIG_PLATFORM_EC_BATT_FULL_CHIPSET_OFF_INPUT_LIMIT_MV=9000 CONFIG_PLATFORM_EC_I2C_PASSTHRU_RESTRICTED=y CONFIG_PLATFORM_EC_I2C_VIRTUAL_BATTERY=y +CONFIG_PLATFORM_EC_I2C_NACK_RETRY_COUNT=5 +CONFIG_PLATFORM_EC_SMBUS_PEC=y # Charger CONFIG_PLATFORM_EC_CHARGE_MANAGER=y @@ -125,7 +127,6 @@ CONFIG_PLATFORM_EC_HOST_COMMAND_STATUS=y CONFIG_PWM=y # Sensors -CONFIG_PLATFORM_EC_MOTIONSENSE=y CONFIG_PLATFORM_EC_ACCEL_FIFO=y CONFIG_PLATFORM_EC_GMR_TABLET_MODE=y CONFIG_PLATFORM_EC_SENSOR_TIGHT_TIMESTAMPS=y @@ -144,7 +145,7 @@ CONFIG_TASK_MOTIONSENSE_STACK_SIZE=1024 CONFIG_TASK_PD_STACK_SIZE=1280 # USB-C -CONFIG_PLATFORM_EC_BC12_SINGLE_DRIVER=n +CONFIG_PLATFORM_EC_USB_CHARGER=n CONFIG_PLATFORM_EC_USBC_PPC_SYV682C=y CONFIG_PLATFORM_EC_USB_MUX_TUSB546=y CONFIG_PLATFORM_EC_USB_PD_DISCHARGE_PPC=y diff --git a/zephyr/program/geralt/shi.dtsi b/zephyr/program/geralt/shi.dtsi index 12c0c6ca5b..cf531f7418 100644 --- a/zephyr/program/geralt/shi.dtsi +++ b/zephyr/program/geralt/shi.dtsi @@ -5,9 +5,10 @@ #include <ite/it8xxx2-pinctrl-map.dtsi> -&shi { +&shi0 { status = "okay"; pinctrl-0 = <&shi_mosi_gpm0_default &shi_miso_gpm1_default &shi_clk_gpm4_default &shi_cs_gpm5_default>; pinctrl-names = "default"; + cs-gpios = <&gpiom 5 0>; /* unused but needed by dt binding */ }; diff --git a/zephyr/program/geralt/src/hibernate.c b/zephyr/program/geralt/src/hibernate.c index c83d37cc91..fb70248338 100644 --- a/zephyr/program/geralt/src/hibernate.c +++ b/zephyr/program/geralt/src/hibernate.c @@ -9,5 +9,8 @@ /* Geralt board specific hibernate implementation */ __override void board_hibernate_late(void) { + gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(en_pp5000_z1_l), 1); + /* It takes around 30ms to release the PP5000 capacitance. */ + udelay(30 * MSEC); gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(en_ulp), 1); } diff --git a/zephyr/program/geralt/src/hooks.c b/zephyr/program/geralt/src/hooks.c index 628ecdd0f8..bc21babe66 100644 --- a/zephyr/program/geralt/src/hooks.c +++ b/zephyr/program/geralt/src/hooks.c @@ -3,6 +3,7 @@ * found in the LICENSE file. */ +#include "gpio/gpio_int.h" #include "gpio_signal.h" #include "hooks.h" @@ -31,6 +32,13 @@ static void board_i2c3_ctrl(bool enable) } } +static void geralt_common_init(void) +{ + gpio_enable_dt_interrupt( + GPIO_INT_FROM_NODELABEL(int_ap_xhci_init_done)); +} +DECLARE_HOOK(HOOK_INIT, geralt_common_init, HOOK_PRIO_PRE_DEFAULT); + static void board_enable_i2c3(void) { board_i2c3_ctrl(1); diff --git a/zephyr/program/geralt/src/usb_pd_policy.c b/zephyr/program/geralt/src/usb_pd_policy.c index c445fc0e22..72558b50d6 100644 --- a/zephyr/program/geralt/src/usb_pd_policy.c +++ b/zephyr/program/geralt/src/usb_pd_policy.c @@ -18,7 +18,7 @@ int pd_check_vconn_swap(int port) int pd_snk_is_vbus_provided(int port) { - static atomic_t vbus_prev[CONFIG_USB_PD_PORT_MAX_COUNT]; + __maybe_unused static atomic_t vbus_prev[CONFIG_USB_PD_PORT_MAX_COUNT]; int vbus; /* diff --git a/zephyr/program/geralt/src/usbc_config.c b/zephyr/program/geralt/src/usbc_config.c index 7c49f58237..21a6f88d0b 100644 --- a/zephyr/program/geralt/src/usbc_config.c +++ b/zephyr/program/geralt/src/usbc_config.c @@ -9,10 +9,16 @@ #include "charge_state_v2.h" #include "console.h" #include "driver/tcpm/it83xx_pd.h" +#include "gpio.h" +#include "gpio_signal.h" +#include "usb_charge.h" #include "usb_pd.h" +#include "usb_tc_sm.h" #include "usbc_ppc.h" #include "zephyr_adc.h" +#include <zephyr/drivers/gpio.h> + #include <ap_power/ap_power.h> #define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ##args) @@ -129,3 +135,43 @@ enum adc_channel board_get_vbus_adc(int port) return ADC_VBUS_C0; } #endif /* CONFIG_USB_PD_VBUS_MEASURE_ADC_EACH_PORT */ + +/* USB-A */ +void xhci_interrupt(enum gpio_signal signal) +{ + enum usb_charge_mode mode = + gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(ap_xhci_init_done)) ? + USB_CHARGE_MODE_ENABLED : + USB_CHARGE_MODE_DISABLED; + + const int xhci_stat = gpio_get_level(signal); + + for (int i = 0; i < USB_PORT_COUNT; i++) { + usb_charge_set_mode(i, mode, USB_ALLOW_SUSPEND_CHARGE); + } + + for (int i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++) { + /* + * Enable DRP toggle after XHCI inited. This is used to follow + * USB 3.2 spec 10.3.1.1. + */ + if (xhci_stat) { + pd_set_dual_role(i, PD_DRP_TOGGLE_ON); + } else if (tc_is_attached_src(i)) { + /* + * This is a AP reset S0->S0 transition. + * We should set the role back to sink. + */ + pd_set_dual_role(i, PD_DRP_FORCE_SINK); + } + } +} + +__override enum pd_dual_role_states pd_get_drp_state_in_s0(void) +{ + if (gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(ap_xhci_init_done))) { + return PD_DRP_TOGGLE_ON; + } else { + return PD_DRP_FORCE_SINK; + } +} diff --git a/zephyr/program/geralt/usbc.dtsi b/zephyr/program/geralt/usbc.dtsi index 88e29a6b27..fd26638873 100644 --- a/zephyr/program/geralt/usbc.dtsi +++ b/zephyr/program/geralt/usbc.dtsi @@ -11,7 +11,6 @@ port0@0 { compatible = "named-usbc-port"; reg = <0>; - bc12 = <&bc12_ppc_port0>; ppc = <&bc12_ppc_port0>; tcpc = <&usbpd0>; chg = <&charger_bc12_port1>; @@ -29,7 +28,6 @@ port1@1 { compatible = "named-usbc-port"; reg = <1>; - bc12 = <&charger_bc12_port1>; ppc = <&ppc_port1>; tcpc = <&usbpd1>; usb-mux-chain-1 { |