mirror of
https://github.com/home-assistant/operating-system.git
synced 2025-07-24 13:36:31 +00:00
Implement device wipe using the hardware button on Green (#3523)
* Improve LED naming in U-Boot DTS Port Stefan's patch from Linux patchset to U-Boot. * Implement device wipe using the hardware button on Green Unlike Yellow, Green doesn't have a way to easily wipe the device, e.g. if the user forgets the password - in that case the only option is to use a microSD card and reflash the system. Fortunately, Green has a hardware button wired to the PMIC chip which exposes the button state in one of the registers. Read this value in U-Boot and decide if cmdline flag for device wipe should be set - same as we do on Yellow. Also enable LED driver and command in U-Boot. In the current implementation, if the button is held for ~5 seconds when plugging in the device (this time includes DDR training, SPL, etc.), the yellow LED turns solid to indicate wipe is about the start. When the Linux kernel starts, the kernel LED driver takes over and starts blinking in heartbeat pattern. Because it takes a while to load the kernel, the LED stays solid for 2-3 seconds, which should be enough to recognize it was acknowledged. * Wait for button to be released before wiping
This commit is contained in:
parent
832b70bab1
commit
7e7612ffeb
@ -0,0 +1,52 @@
|
||||
From d3fb1ec2364b20025d71e2263514a71208cfb61e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= <sairon@sairon.cz>
|
||||
Date: Tue, 13 Aug 2024 17:51:29 +0200
|
||||
Subject: [PATCH] arch: arm64: dts: green: Improve LED representation
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Fix color and use labels/node names according to the LEDs functionality.
|
||||
|
||||
Signed-off-by: Jan Čermák <sairon@sairon.cz>
|
||||
Co-authored-by: Stefan Agner <stefan@agner.ch>
|
||||
---
|
||||
arch/arm/dts/rk3566-ha-green.dts | 11 +++++++----
|
||||
1 file changed, 7 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/dts/rk3566-ha-green.dts b/arch/arm/dts/rk3566-ha-green.dts
|
||||
index 68d836911e..c3adc59904 100644
|
||||
--- a/arch/arm/dts/rk3566-ha-green.dts
|
||||
+++ b/arch/arm/dts/rk3566-ha-green.dts
|
||||
@@ -48,16 +48,18 @@
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
- led_power: led-0 {
|
||||
+ led_power: led-power {
|
||||
+ label = "power";
|
||||
gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
|
||||
function = LED_FUNCTION_POWER;
|
||||
- color = <LED_COLOR_ID_RED>;
|
||||
+ color = <LED_COLOR_ID_WHITE>;
|
||||
default-state = "keep";
|
||||
linux,default-trigger = "default-on";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&led_power_pin>;
|
||||
};
|
||||
- led_act: led-1 {
|
||||
+ led_act: led-activity {
|
||||
+ label = "activity";
|
||||
gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>;
|
||||
function = LED_FUNCTION_ACTIVITY;
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
@@ -65,7 +67,8 @@
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&led_act_pin>;
|
||||
};
|
||||
- led_user: led-2 {
|
||||
+ led_user: led-user {
|
||||
+ label = "user";
|
||||
gpios = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>;
|
||||
function = LED_FUNCTION_HEARTBEAT;
|
||||
color = <LED_COLOR_ID_YELLOW>;
|
@ -27,6 +27,36 @@ test -n "${MACHINE_ID}" || setenv BOOT_CONDITION "systemd.condition-first-boot=t
|
||||
# HassOS bootargs
|
||||
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 rootwait systemd.machine_id=${MACHINE_ID} fsck.repair=yes ${BOOT_CONDITION}"
|
||||
|
||||
i2c dev 0
|
||||
setenv check_btn_pressed ' \
|
||||
i2c read 0x20 0xf0.1 1 ${loadaddr}; \
|
||||
setexpr PWRON_STS *${loadaddr} \\\& 0x80; \
|
||||
test ${PWRON_STS} -eq 0x0;'
|
||||
|
||||
# Check if button is held for device wipe
|
||||
setenv counter 0
|
||||
while test ${counter} -lt 2; do
|
||||
if run check_btn_pressed; then
|
||||
echo "Reset button pressed for ${counter} seconds"
|
||||
setexpr counter ${counter} + 1
|
||||
|
||||
if test ${counter} -eq 2; then
|
||||
led user on
|
||||
echo "Waiting for button to be released"
|
||||
while run check_btn_pressed; do
|
||||
sleep 0.5
|
||||
done
|
||||
echo "Proceeding with device wipe"
|
||||
setenv bootargs_hassos "${bootargs_hassos} haos.wipe=1"
|
||||
else
|
||||
sleep 1
|
||||
fi
|
||||
else
|
||||
# U-Boot has no break statement :')
|
||||
setenv counter 2
|
||||
fi
|
||||
done
|
||||
|
||||
# HassOS system A/B
|
||||
setenv bootargs_a "root=PARTUUID=8d3d53e3-6d49-4c38-8349-aff6859e82fd ro"
|
||||
setenv bootargs_b "root=PARTUUID=a3ec664e-32ce-4665-95ea-7ae90ce9aa20 ro"
|
||||
|
3
buildroot-external/board/nabucasa/green/uboot.config
Normal file
3
buildroot-external/board/nabucasa/green/uboot.config
Normal file
@ -0,0 +1,3 @@
|
||||
CONFIG_LED=y
|
||||
CONFIG_LED_GPIO=y
|
||||
CONFIG_CMD_LED=y
|
@ -143,7 +143,7 @@ BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
|
||||
BR2_TARGET_UBOOT_CUSTOM_VERSION=y
|
||||
BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2024.01"
|
||||
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="green"
|
||||
BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/bootloader/uboot.config"
|
||||
BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/bootloader/uboot.config $(BR2_EXTERNAL_HASSOS_PATH)/board/nabucasa/green/uboot.config"
|
||||
BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y
|
||||
BR2_TARGET_UBOOT_NEEDS_PYELFTOOLS=y
|
||||
BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y
|
||||
|
Loading…
x
Reference in New Issue
Block a user