From ba8a4079180b3bf73ae736bd0d76a83dd4fcda88 Mon Sep 17 00:00:00 2001 From: Caveh Jalali Date: Tue, 7 Mar 2023 19:38:30 -0800 Subject: 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 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4318349 Reviewed-by: Fabio Baltieri --- zephyr/program/rex/led.dtsi | 119 ----------------------- zephyr/program/rex/rex/led_pins.dtsi | 56 +++++++++++ zephyr/program/rex/rex/led_policy.dtsi | 168 +++++++++++++++++++++++++++++++++ zephyr/program/rex/rex/project.overlay | 5 +- 4 files changed, 228 insertions(+), 120 deletions(-) delete mode 100644 zephyr/program/rex/led.dtsi create mode 100644 zephyr/program/rex/rex/led_pins.dtsi create mode 100644 zephyr/program/rex/rex/led_policy.dtsi 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 + +/ { + 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 = ; + + /* 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" -- cgit v1.2.1