From 4d0dcd5ff87fcd86eb2966a123e85b03284a03db Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Mon, 15 Dec 2025 22:24:58 +1100 Subject: [PATCH] [EInkDisplay] Fix incorrect power off sequence when calling deepSleep() (#6) --- libs/display/EInkDisplay/src/EInkDisplay.cpp | 21 +++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/libs/display/EInkDisplay/src/EInkDisplay.cpp b/libs/display/EInkDisplay/src/EInkDisplay.cpp index ea7d108..a99c35a 100644 --- a/libs/display/EInkDisplay/src/EInkDisplay.cpp +++ b/libs/display/EInkDisplay/src/EInkDisplay.cpp @@ -521,7 +521,26 @@ void EInkDisplay::setCustomLUT(bool enabled, const unsigned char* lutData) { } void EInkDisplay::deepSleep() { - // Enter deep sleep mode + Serial.printf("[%lu] Preparing display for deep sleep...\n", millis()); + + // First, power down the display properly + // This shuts down the analog power rails and clock + if (isScreenOn) { + sendCommand(CMD_DISPLAY_UPDATE_CTRL1); + sendData(CTRL1_BYPASS_RED); // Normal mode + + sendCommand(CMD_DISPLAY_UPDATE_CTRL2); + sendData(0x03); // Set ANALOG_OFF_PHASE (bit 1) and CLOCK_OFF (bit 0) + + sendCommand(CMD_MASTER_ACTIVATION); + + // Wait for the power-down sequence to complete + waitWhileBusy(" display power-down"); + + isScreenOn = false; + } + + // Now enter deep sleep mode Serial.printf("[%lu] Entering deep sleep mode...\n", millis()); sendCommand(CMD_DEEP_SLEEP); sendData(0x01); // Enter deep sleep