summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaveh Jalali <caveh@chromium.org>2023-03-07 19:38:30 -0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-03-09 21:18:35 +0000
commitba8a4079180b3bf73ae736bd0d76a83dd4fcda88 (patch)
treed3541a9f9d26fb7e1cdf53fe6d0f6d99a12384aa
parent7223817c5eac990f2002096f84fa6d899ebeda97 (diff)
downloadchrome-ec-ba8a4079180b3bf73ae736bd0d76a83dd4fcda88.tar.gz
rex: Define basic charge port LED behavor
This defines the behavior of the LEDs associated with charging ports. The rex reference has a white and amber LED pair associated with each USB-C charging port. ODMs often customize the LED behavior within chrome OS guidelines for their variant(s), so these LED behaviors are set up for rex, the variant. - charging port: solid amber - charging port (battery full): solid white - discharging, battery normal: all off - discharging, low battery: blink all amber slowly - idle: blink amber/white slowly - forced-idle: blink amber/white quickly - battery error: blink all amber quickly BRANCH=none BUG=b:261377425 TEST=ectool can query "left" and "right" LEDs - charging port lights up amber or white - no LEDs are on when not charging - verified slow blinking on both ports when battery low Change-Id: I487fdd3d0404c7439061ddfb665313e48e18d0c6 Signed-off-by: Caveh Jalali <caveh@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4318349 Reviewed-by: Fabio Baltieri <fabiobaltieri@google.com>
-rw-r--r--zephyr/program/rex/led.dtsi119
-rw-r--r--zephyr/program/rex/rex/led_pins.dtsi56
-rw-r--r--zephyr/program/rex/rex/led_policy.dtsi168
-rw-r--r--zephyr/program/rex/rex/project.overlay5
4 files changed, 228 insertions, 120 deletions
diff --git a/zephyr/program/rex/led.dtsi b/zephyr/program/rex/led.dtsi
deleted file mode 100644
index e2bd164629..0000000000
--- a/zephyr/program/rex/led.dtsi
+++ /dev/null
@@ -1,119 +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.
- */
-
-/ {
- gpio-led-pins {
- compatible = "cros-ec,gpio-led-pins";
-
- color_off: color-off {
- led-color = "LED_OFF";
- led-id = "EC_LED_ID_BATTERY_LED";
- led-pins = <&gpio_led_1_l &gpio_led_2_l>;
- led-values = <1 1>;
- };
-
- color_white: color-white {
- led-color = "LED_WHITE";
- led-id = "EC_LED_ID_BATTERY_LED";
- br-color = "EC_LED_COLOR_WHITE";
- led-pins = <&gpio_led_1_l &gpio_led_2_l>;
- led-values = <1 0>;
- };
-
- color_amber: color-amber {
- led-color = "LED_AMBER";
- led-id = "EC_LED_ID_BATTERY_LED";
- br-color = "EC_LED_COLOR_AMBER";
- led-pins = <&gpio_led_1_l &gpio_led_2_l>;
- led-values = <0 1>;
- };
- };
-
- led-colors {
- compatible = "cros-ec,led-policy";
-
- power-state-charge {
- charge-state = "PWR_STATE_CHARGE";
-
- color-0 {
- led-color = <&color_amber>;
- };
- };
-
- power-state-discharge-s0 {
- charge-state = "PWR_STATE_DISCHARGE";
- chipset-state = "POWER_S0";
-
- color-0 {
- led-color = <&color_off>;
- };
- };
-
- power-state-discharge-s3 {
- charge-state = "PWR_STATE_DISCHARGE";
- chipset-state = "POWER_S3";
-
- color-0 {
- led-color = <&color_white>;
- period-ms = <1000>;
- };
- color-1 {
- led-color = <&color_off>;
- period-ms = <3000>;
- };
- };
-
- power-state-discharge-s5 {
- charge-state = "PWR_STATE_DISCHARGE";
- chipset-state = "POWER_S5";
-
- color-0 {
- led-color = <&color_off>;
- };
- };
-
- power-state-error {
- charge-state = "PWR_STATE_ERROR";
-
- color-0 {
- led-color = <&color_white>;
- period-ms = <1000>;
- };
- color-1 {
- led-color = <&color_off>;
- period-ms = <1000>;
- };
- };
-
- power-state-near-full {
- charge-state = "PWR_STATE_CHARGE_NEAR_FULL";
-
- color-0 {
- led-color = <&color_white>;
- };
- };
-
- power-state-forced-idle {
- charge-state = "PWR_STATE_FORCED_IDLE";
-
- color-0 {
- led-color = <&color_white>;
- period-ms = <2000>;
- };
- color-1 {
- led-color = <&color_amber>;
- period-ms = <2000>;
- };
- };
-
- power-state-idle-default {
- charge-state = "PWR_STATE_IDLE";
-
- color-0 {
- led-color = <&color_white>;
- };
- };
- };
-};
diff --git a/zephyr/program/rex/rex/led_pins.dtsi b/zephyr/program/rex/rex/led_pins.dtsi
new file mode 100644
index 0000000000..e1d08ab9d2
--- /dev/null
+++ b/zephyr/program/rex/rex/led_pins.dtsi
@@ -0,0 +1,56 @@
+/* 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.
+ */
+
+/ {
+ gpio-led-pins {
+ compatible = "cros-ec,gpio-led-pins";
+
+ color_off_left: color-off-left {
+ led-color = "LED_OFF";
+ led-id = "EC_LED_ID_LEFT_LED";
+ led-pins = <&gpio_led_1_l &gpio_led_2_l>;
+ led-values = <1 1>;
+ };
+
+ color_off_right: color-off-right {
+ led-color = "LED_OFF";
+ led-id = "EC_LED_ID_RIGHT_LED";
+ led-pins = <&gpio_led_3_l &gpio_led_4_l>;
+ led-values = <1 1>;
+ };
+
+ color_amber_left: color-amber-left {
+ led-color = "LED_AMBER";
+ led-id = "EC_LED_ID_LEFT_LED";
+ br-color = "EC_LED_COLOR_AMBER";
+ led-pins = <&gpio_led_1_l &gpio_led_2_l>;
+ led-values = <0 1>;
+ };
+
+ color_amber_right: color-amber-right {
+ led-color = "LED_AMBER";
+ led-id = "EC_LED_ID_RIGHT_LED";
+ br-color = "EC_LED_COLOR_AMBER";
+ led-pins = <&gpio_led_3_l &gpio_led_4_l>;
+ led-values = <0 1>;
+ };
+
+ color_white_left: color-white-left {
+ led-color = "LED_WHITE";
+ led-id = "EC_LED_ID_LEFT_LED";
+ br-color = "EC_LED_COLOR_WHITE";
+ led-pins = <&gpio_led_1_l &gpio_led_2_l>;
+ led-values = <1 0>;
+ };
+
+ color_white_right: color-white-right {
+ led-color = "LED_WHITE";
+ led-id = "EC_LED_ID_RIGHT_LED";
+ br-color = "EC_LED_COLOR_WHITE";
+ led-pins = <&gpio_led_3_l &gpio_led_4_l>;
+ led-values = <1 0>;
+ };
+ };
+};
diff --git a/zephyr/program/rex/rex/led_policy.dtsi b/zephyr/program/rex/rex/led_policy.dtsi
new file mode 100644
index 0000000000..ad6e63130d
--- /dev/null
+++ b/zephyr/program/rex/rex/led_policy.dtsi
@@ -0,0 +1,168 @@
+#include <dt-bindings/battery.h>
+
+/ {
+ led-colors {
+ compatible = "cros-ec,led-policy";
+
+ power-state-near-full-left {
+ charge-state = "PWR_STATE_CHARGE_NEAR_FULL";
+ charge-port = <0>; /* Left port */
+
+ /* Turn off the right LED */
+ color-0 {
+ led-color = <&color_off_right>;
+ };
+ /* Left LED to White */
+ color-1 {
+ led-color = <&color_white_left>;
+ };
+ };
+
+ power-state-near-full-right {
+ charge-state = "PWR_STATE_CHARGE_NEAR_FULL";
+ charge-port = <1>; /* Right port */
+
+ /* Turn off the left LED */
+ color-0 {
+ led-color = <&color_off_left>;
+ };
+ /* Right LED to White */
+ color-1 {
+ led-color = <&color_white_right>;
+ };
+ };
+
+ power-state-charge-left {
+ charge-state = "PWR_STATE_CHARGE";
+ charge-port = <0>; /* Left port */
+
+ /* Left LED to Amber */
+ color-0 {
+ led-color = <&color_amber_left>;
+ };
+ /* Turn off the right LED */
+ color-1 {
+ led-color = <&color_off_right>;
+ };
+ };
+
+ power-state-charge-right {
+ charge-state = "PWR_STATE_CHARGE";
+ charge-port = <1>; /* Right port */
+
+ /* Turn off the left LED */
+ color-0 {
+ led-color = <&color_off_left>;
+ };
+ /* Right LED to Amber */
+ color-1 {
+ led-color = <&color_amber_right>;
+ };
+ };
+
+ power-state-discharge {
+ charge-state = "PWR_STATE_DISCHARGE";
+ /* Battery percent range (> Low, <= Full) */
+ batt-lvl = <(BATTERY_LEVEL_LOW + 1) BATTERY_LEVEL_FULL>;
+
+ /* Turn off both LEDs LED */
+ color-0 {
+ led-color = <&color_off_left>;
+ };
+ color-1 {
+ led-color = <&color_off_right>;
+ };
+ };
+
+ power-state-discharge-low {
+ charge-state = "PWR_STATE_DISCHARGE";
+ /* Battery percent range (>= Empty, <= Low) */
+ batt-lvl = <BATTERY_LEVEL_EMPTY BATTERY_LEVEL_LOW>;
+
+ /* Blink both LEDs amber at 0.5 Hz */
+ color-0 {
+ led-color = <&color_amber_left>;
+ period-ms = <1000>;
+ };
+ color-1 {
+ led-color = <&color_amber_right>;
+ period-ms = <1000>;
+ };
+ color-2 {
+ led-color = <&color_off_left>;
+ period-ms = <1000>;
+ };
+ color-3 {
+ led-color = <&color_off_right>;
+ period-ms = <1000>;
+ };
+ };
+
+ power-state-idle {
+ charge-state = "PWR_STATE_IDLE";
+
+ /* Blink both LEDs amber at 0.5 Hz */
+ color-0 {
+ led-color = <&color_amber_left>;
+ period-ms = <1000>;
+ };
+ color-1 {
+ led-color = <&color_amber_right>;
+ period-ms = <1000>;
+ };
+ color-2 {
+ led-color = <&color_white_left>;
+ period-ms = <1000>;
+ };
+ color-3 {
+ led-color = <&color_white_right>;
+ period-ms = <1000>;
+ };
+ };
+
+ power-state-forced-idle {
+ charge-state = "PWR_STATE_FORCED_IDLE";
+
+ /* Blink both LEDs amber at 2 Hz */
+ color-0 {
+ led-color = <&color_amber_left>;
+ period-ms = <250>;
+ };
+ color-1 {
+ led-color = <&color_amber_right>;
+ period-ms = <250>;
+ };
+ color-2 {
+ led-color = <&color_white_left>;
+ period-ms = <250>;
+ };
+ color-3 {
+ led-color = <&color_white_right>;
+ period-ms = <250>;
+ };
+ };
+
+ power-state-error {
+ charge-state = "PWR_STATE_ERROR";
+
+ /* Blink both LEDs amber at 2 Hz */
+ color-0 {
+ led-color = <&color_amber_left>;
+ period-ms = <250>;
+ };
+ color-1 {
+ led-color = <&color_amber_right>;
+ period-ms = <250>;
+ };
+ color-2 {
+ led-color = <&color_off_left>;
+ period-ms = <250>;
+ };
+ color-3 {
+ led-color = <&color_off_right>;
+ period-ms = <250>;
+ };
+ };
+
+ };
+};
diff --git a/zephyr/program/rex/rex/project.overlay b/zephyr/program/rex/rex/project.overlay
index b8d5f5ac94..44d2763548 100644
--- a/zephyr/program/rex/rex/project.overlay
+++ b/zephyr/program/rex/rex/project.overlay
@@ -10,9 +10,12 @@
#include "../generated.dtsi"
#include "../interrupts.dtsi"
#include "../keyboard.dtsi"
-#include "../led.dtsi"
#include "../motionsense.dtsi"
#include "../power_signals.dtsi"
#include "../rex.dtsi"
#include "../temp_sensors.dtsi"
#include "../usbc.dtsi"
+
+/* Rex project DTS includes */
+#include "led_pins.dtsi"
+#include "led_policy.dtsi"