diff --git a/src/drivers/St7789.cpp b/src/drivers/St7789.cpp index 035d61c9..48b65acb 100644 --- a/src/drivers/St7789.cpp +++ b/src/drivers/St7789.cpp @@ -27,6 +27,7 @@ void St7789::Init() { #endif NormalModeOn(); SetVdv(); + PowerControl(); DisplayOn(); } @@ -176,6 +177,19 @@ void St7789::DisplayOn() { WriteCommand(static_cast(Commands::DisplayOn)); } +void St7789::PowerControl() { + WriteCommand(static_cast(Commands::PowerControl1)); + constexpr uint8_t args[] = { + 0xa4, // Constant + 0x00, // Lowest possible voltages + }; + WriteData(args, sizeof(args)); + + WriteCommand(static_cast(Commands::PowerControl2)); + // Lowest possible boost circuit clocks + WriteData(0xb3); +} + void St7789::SetAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { WriteCommand(static_cast(Commands::ColumnAddressSet)); uint8_t colArgs[] = { diff --git a/src/drivers/St7789.h b/src/drivers/St7789.h index e249e0b0..68e9f058 100644 --- a/src/drivers/St7789.h +++ b/src/drivers/St7789.h @@ -54,6 +54,7 @@ namespace Pinetime { void FrameRateLow(); void DisplayOn(); void DisplayOff(); + void PowerControl(); void SetAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1); void SetVdv(); @@ -81,6 +82,8 @@ namespace Pinetime { FrameRate = 0xb3, VdvSet = 0xc4, Command2Enable = 0xdf, + PowerControl1 = 0xd0, + PowerControl2 = 0xe8, }; void WriteData(uint8_t data); void WriteData(const uint8_t* data, size_t size);