summaryrefslogtreecommitdiff
path: root/src/drivers/SpiMaster.cpp
diff options
context:
space:
mode:
authorJF <jf@codingfield.com>2020-01-17 22:16:45 +0100
committerJF <jf@codingfield.com>2020-01-17 22:16:45 +0100
commitc1f3a31b513e90b29f31f23ba24e5856837ea6d4 (patch)
tree8c3ef1be5a0bd4fa904311e8f1fc24de22646d62 /src/drivers/SpiMaster.cpp
parent69a14a224780a3abe13bc4fcacd2d71db54716ac (diff)
Disable SPI, I²C, touch controller and display controller in sleep mode.
Re-enable them on wake up. Remove delays that were not needed in st7889 driver. Hopefully, it'll improve the battery life!
Diffstat (limited to 'src/drivers/SpiMaster.cpp')
-rw-r--r--src/drivers/SpiMaster.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/drivers/SpiMaster.cpp b/src/drivers/SpiMaster.cpp
index 076c764d..5e49f2a7 100644
--- a/src/drivers/SpiMaster.cpp
+++ b/src/drivers/SpiMaster.cpp
@@ -4,6 +4,9 @@
using namespace Pinetime::Drivers;
bool SpiMaster::Init(const SpiMaster::SpiModule spi, const SpiMaster::Parameters &params) {
+ configSpiModule = spi;
+ configParams = params;
+
/* Configure GPIO pins used for pselsck, pselmosi, pselmiso and pselss for SPI0 */
nrf_gpio_cfg_output(params.pinSCK);
nrf_gpio_cfg_output(params.pinMOSI);
@@ -86,3 +89,17 @@ bool SpiMaster::Write(const uint8_t *data, size_t size) {
return true;
}
+
+void SpiMaster::Sleep() {
+ while(NRF_SPI0->ENABLE != 0) {
+ NRF_SPI0->ENABLE = (SPIM_ENABLE_ENABLE_Disabled << SPIM_ENABLE_ENABLE_Pos);
+ }
+ nrf_gpio_cfg_default(configParams.pinSCK);
+ nrf_gpio_cfg_default(configParams.pinMOSI);
+ nrf_gpio_cfg_default(configParams.pinMISO);
+ nrf_gpio_cfg_default(configParams.pinCSN);
+}
+
+void SpiMaster::Wakeup() {
+ Init(configSpiModule, configParams);
+}