Subrata Banik has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/86225?usp=email )
Change subject: vc/google/chromeos: Add low battery indicator screen ......................................................................
vc/google/chromeos: Add low battery indicator screen
This commit adds support for displaying a low battery indicator screen in the firmware. This screen is displayed when the system detects a critically low battery condition. The screen displays a logo and can be configured with a custom path. An option to display an early low battery indicator in text mode is also included. This early indicator can defer the firmware update.
The implementation relies on FSP-S UPD parameters for rendering low battery logo over display.
This feature is controlled by the CHROMEOS_LOW_BATTERY_INDICATOR_SCREEN Kconfig option.
BUG=b:339673254 TEST=Able to capture the eventlog for low battery boot event.
Change-Id: I711c53455639b449fe85903139bbc06cdab08d09 Signed-off-by: Subrata Banik subratabanik@google.com --- M src/vendorcode/google/chromeos/Kconfig M src/vendorcode/google/chromeos/Makefile.mk M src/vendorcode/google/chromeos/splash.c 3 files changed, 47 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/25/86225/1
diff --git a/src/vendorcode/google/chromeos/Kconfig b/src/vendorcode/google/chromeos/Kconfig index 60f48fe..fe9f309 100644 --- a/src/vendorcode/google/chromeos/Kconfig +++ b/src/vendorcode/google/chromeos/Kconfig @@ -102,6 +102,36 @@ depends on CHROMEOS_FW_SPLASH_SCREEN default "3rdparty/blobs/mainboard/$(MAINBOARDDIR)/logo.bmp"
+config CHROMEOS_LOW_BATTERY_INDICATOR_SCREEN + bool "Display Low Battery Indicator in firmware" + default n + select BMP_LOGO + select HAVE_CUSTOM_BMP_LOGO + help + If enabled, this option displays a low battery indicator screen + in the firmware. This screen can be used to warn the user + that the battery is low and that they should plug in the + device. + + This option requires that the system have a display and that + the BMP_LOGO and HAVE_CUSTOM_BMP_LOGO options are also enabled. + +config CHROMEOS_LOW_BATTERY_INDICATOR_SCREEN_EARLY + bool "Display Early Low Battery Indicator in firmware" + depends on CHROMEOS_LOW_BATTERY_INDICATOR_SCREEN + help + If enabled, this option displays a low battery indicator early + in text mode in the firmware and defer the firmware update. + This screen can be used to warn the user that the battery is low + and that they should plug in the device. + + Don't select if not sure. + +config CHROMEOS_LOW_BATTERY_INDICATOR_LOGO_PATH + string "Path to ChromeOS low battery logo file" + depends on CHROMEOS_LOW_BATTERY_INDICATOR_SCREEN + default "3rdparty/blobs/mainboard/$(MAINBOARDDIR)/logo.bmp" + config CHROMEOS_ENABLE_ESOL def_bool FSP_UGOP_EARLY_SIGN_OF_LIFE || MAINBOARD_HAS_EARLY_LIBGFXINIT help diff --git a/src/vendorcode/google/chromeos/Makefile.mk b/src/vendorcode/google/chromeos/Makefile.mk index 44d4d2b..3147102 100644 --- a/src/vendorcode/google/chromeos/Makefile.mk +++ b/src/vendorcode/google/chromeos/Makefile.mk @@ -39,3 +39,8 @@ cb_plus_logo.bmp-file := $(call strip_quotes,$(CONFIG_CHROMEBOOK_PLUS_LOGO_PATH)) cb_plus_logo.bmp-type := raw cb_plus_logo.bmp-compression := $(BMP_LOGO_COMPRESS_FLAG) + +cbfs-files-$(CONFIG_CHROMEOS_LOW_BATTERY_INDICATOR_SCREEN) += low_battery_logo.bmp +low_battery_logo.bmp-file := $(call strip_quotes,$(CONFIG_CHROMEOS_LOW_BATTERY_INDICATOR_LOGO_PATH)) +low_battery_logo.bmp-type := raw +low_battery_logo.bmp-compression := $(BMP_LOGO_COMPRESS_FLAG) diff --git a/src/vendorcode/google/chromeos/splash.c b/src/vendorcode/google/chromeos/splash.c index f63f526..0c7cba7 100644 --- a/src/vendorcode/google/chromeos/splash.c +++ b/src/vendorcode/google/chromeos/splash.c @@ -1,10 +1,22 @@ /* SPDX-License-Identifier: GPL-2.0-only */
#include <bootsplash.h> +#include <ec/google/chromeec/ec.h> #include <vendorcode/google/chromeos/chromeos.h>
+static bool chromeos_render_low_battery_logo(void) +{ + if (!CONFIG(CHROMEOS_LOW_BATTERY_INDICATOR_SCREEN) || !CONFIG(EC_GOOGLE_CHROMEEC)) + return false; + + return google_chromeec_is_below_critical_threshold(); +} + const char *bmp_logo_filename(void) { + if (chromeos_render_low_battery_logo()) + return "low_battery_logo.bmp"; + if (chromeos_device_branded_plus_hard()) return "cb_plus_logo.bmp"; else if (chromeos_device_branded_plus_soft())