summaryrefslogtreecommitdiff
path: root/zephyr/program/geralt
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/program/geralt')
-rw-r--r--zephyr/program/geralt/geralt/battery.dtsi5
-rw-r--r--zephyr/program/geralt/geralt/project.overlay1
-rw-r--r--zephyr/program/geralt/gpio.dtsi8
-rw-r--r--zephyr/program/geralt/i2c.dtsi1
-rw-r--r--zephyr/program/geralt/interrupts.dtsi15
-rw-r--r--zephyr/program/geralt/keyboard.dtsi30
-rw-r--r--zephyr/program/geralt/power_signal.dtsi6
-rw-r--r--zephyr/program/geralt/program.conf7
-rw-r--r--zephyr/program/geralt/shi.dtsi3
-rw-r--r--zephyr/program/geralt/src/hibernate.c3
-rw-r--r--zephyr/program/geralt/src/hooks.c8
-rw-r--r--zephyr/program/geralt/src/usb_pd_policy.c2
-rw-r--r--zephyr/program/geralt/src/usbc_config.c46
-rw-r--r--zephyr/program/geralt/usbc.dtsi2
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 {